ETH Price: $2,735.15 (+1.02%)

Token

NFTNotifyOG (NFTN)
 

Overview

Max Total Supply

71 NFTN

Holders

71

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 NFTN
0x23e106830c711955686a27930c711bae8299d9c4
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:
NFTNotify

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-30
*/

// File: @openzeppelin/contracts/utils/Counters.sol
// SPDX-License-Identifier: MIT LICENSE
// OpenZeppelin Contracts v4.4.0 (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.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: nftnotify.sol

pragma solidity ^0.8.2;

contract NFTNotify is ERC721, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    string _baseUri;
    string _contractUri;
    
    uint public constant MAX_SUPPLY = 200;
    uint public maxPerWallet = 1;
    bool public flipState = false;

    struct Whitelist {
        address addr;
        uint minted;
    }

    mapping(address => Whitelist) public whitelist;

    constructor() ERC721("NFTNotifyOG", "NFTN") {
        _contractUri = "https://gateway.pinata.cloud/ipfs/QmeBr44c2aeDhKsVtLxyYX1PfX7kXuPJuKSSYaPtQqEBK8";
    }

    function _baseURI() internal view override returns (string memory) {
        return _baseUri;
    }
    
    function mint() external {
        require(flipState, "Sale not live");
        require(totalSupply() + 1 <= MAX_SUPPLY, "No remaining stock left");
        require(isWhitelisted(msg.sender), "Is not whitelisted");
        require(whitelist[msg.sender].minted < 1, "Can only mint 1 token");
        whitelist[msg.sender].minted++;
        safeMint(msg.sender);
    }

    function safeMint(address to) internal {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
    }
    
    function totalSupply() public view returns (uint) {
        return _tokenIdCounter.current();
    }
    
    function contractURI() public view returns (string memory) {
        return _contractUri;
    }
    
    function setBaseURI(string memory newBaseURI) external onlyOwner {
        _baseUri = newBaseURI;
    }
    
    function setContractURI(string memory newContractURI) external onlyOwner {
        _contractUri = newContractURI;
    }
    
    function toggleSales() external onlyOwner {
        flipState = !flipState;
    }

  function addWhitelist(address[] calldata _addresses) external onlyOwner {
        for (uint i=0; i<_addresses.length; i++) {
            whitelist[_addresses[i]].addr = _addresses[i]; // loop to add each array entry into whitelist
            whitelist[_addresses[i]].minted = 0; //mint of 1 token allowed per whitelist 
        }
    }

    function isWhitelisted(address addr) public view returns (bool isWhiteListed) {
        return whitelist[addr].addr == addr;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhiteListed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","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":"toggleSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"minted","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600a556000600b60006101000a81548160ff0219169083151502179055503480156200003157600080fd5b506040518060400160405280600b81526020017f4e46544e6f746966794f470000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e46544e000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b6929190620001f8565b508060019080519060200190620000cf929190620001f8565b505050620000f2620000e66200012a60201b60201c565b6200013260201b60201c565b60405180608001604052806050815260200162003ce2605091396009908051906020019062000123929190620001f8565b506200030d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020690620002a8565b90600052602060002090601f0160209004810192826200022a576000855562000276565b82601f106200024557805160ff191683800117855562000276565b8280016001018555821562000276579182015b828111156200027557825182559160200191906001019062000258565b5b50905062000285919062000289565b5090565b5b80821115620002a45760008160009055506001016200028a565b5090565b60006002820490506001821680620002c157607f821691505b60208210811415620002d857620002d7620002de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6139c5806200031d6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063a22cb465116100a2578063e8a3d48511610071578063e8a3d485146104e3578063e985e9c514610501578063edac985b14610531578063f2fde38b1461054d576101cf565b8063a22cb46514610471578063b88d4fde1461048d578063c87b56dd146104a9578063dbd30ae0146104d9576101cf565b80638e920351116100de5780638e920351146103e8578063938e3d7b1461040657806395d89b41146104225780639b19251a14610440576101cf565b8063715018a6146103b6578063853828b6146103c05780638da5cb5b146103ca576101cf565b806332cb6b0c11610171578063453c23101161014b578063453c23101461031c57806355f804b31461033a5780636352211e1461035657806370a0823114610386576101cf565b806332cb6b0c146102b25780633af32abf146102d057806342842e0e14610300576101cf565b8063095ea7b3116101ad578063095ea7b3146102525780631249c58b1461026e57806318160ddd1461027857806323b872dd14610296576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e9919061281d565b610569565b6040516101fb9190612d2d565b60405180910390f35b61020c61064b565b6040516102199190612d48565b60405180910390f35b61023c600480360381019061023791906128c0565b6106dd565b6040516102499190612c9d565b60405180910390f35b61026c60048036038101906102679190612790565b610762565b005b61027661087a565b005b610280610a50565b60405161028d9190612fea565b60405180910390f35b6102b060048036038101906102ab919061267a565b610a61565b005b6102ba610ac1565b6040516102c79190612fea565b60405180910390f35b6102ea60048036038101906102e5919061260d565b610ac6565b6040516102f79190612d2d565b60405180910390f35b61031a6004803603810190610315919061267a565b610b60565b005b610324610b80565b6040516103319190612fea565b60405180910390f35b610354600480360381019061034f9190612877565b610b86565b005b610370600480360381019061036b91906128c0565b610c1c565b60405161037d9190612c9d565b60405180910390f35b6103a0600480360381019061039b919061260d565b610cce565b6040516103ad9190612fea565b60405180910390f35b6103be610d86565b005b6103c8610e0e565b005b6103d2610eca565b6040516103df9190612c9d565b60405180910390f35b6103f0610ef4565b6040516103fd9190612d2d565b60405180910390f35b610420600480360381019061041b9190612877565b610f07565b005b61042a610f9d565b6040516104379190612d48565b60405180910390f35b61045a6004803603810190610455919061260d565b61102f565b604051610468929190612d04565b60405180910390f35b61048b60048036038101906104869190612750565b611073565b005b6104a760048036038101906104a291906126cd565b611089565b005b6104c360048036038101906104be91906128c0565b6110eb565b6040516104d09190612d48565b60405180910390f35b6104e1611192565b005b6104eb61123a565b6040516104f89190612d48565b60405180910390f35b61051b6004803603810190610516919061263a565b6112cc565b6040516105289190612d2d565b60405180910390f35b61054b600480360381019061054691906127d0565b611360565b005b6105676004803603810190610562919061260d565b611540565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610644575061064382611638565b5b9050919050565b60606000805461065a90613240565b80601f016020809104026020016040519081016040528092919081815260200182805461068690613240565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b60006106e8826116a2565b610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e90612eea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076d82610c1c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d590612f6a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107fd61170e565b73ffffffffffffffffffffffffffffffffffffffff16148061082c575061082b8161082661170e565b6112cc565b5b61086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086290612e4a565b60405180910390fd5b6108758383611716565b505050565b600b60009054906101000a900460ff166108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612eaa565b60405180910390fd5b60c860016108d5610a50565b6108df91906130cf565b1115610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612daa565b60405180910390fd5b61092933610ac6565b610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f90612faa565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612fca565b60405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000815480929190610a40906132a3565b9190505550610a4e336117cf565b565b6000610a5c60076117f5565b905090565b610a72610a6c61170e565b82611803565b610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890612f8a565b60405180910390fd5b610abc8383836118e1565b505050565b60c881565b60008173ffffffffffffffffffffffffffffffffffffffff16600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b610b7b83838360405180602001604052806000815250611089565b505050565b600a5481565b610b8e61170e565b73ffffffffffffffffffffffffffffffffffffffff16610bac610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990612f0a565b60405180910390fd5b8060089080519060200190610c189291906123cb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612e8a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612e6a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8e61170e565b73ffffffffffffffffffffffffffffffffffffffff16610dac610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990612f0a565b60405180910390fd5b610e0c6000611b3d565b565b610e1661170e565b73ffffffffffffffffffffffffffffffffffffffff16610e34610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612f0a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610ec857600080fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900460ff1681565b610f0f61170e565b73ffffffffffffffffffffffffffffffffffffffff16610f2d610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90612f0a565b60405180910390fd5b8060099080519060200190610f999291906123cb565b5050565b606060018054610fac90613240565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613240565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b5050505050905090565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b61108561107e61170e565b8383611c03565b5050565b61109a61109461170e565b83611803565b6110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612f8a565b60405180910390fd5b6110e584848484611d70565b50505050565b60606110f6826116a2565b611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612f4a565b60405180910390fd5b600061113f611dcc565b9050600081511161115f576040518060200160405280600081525061118a565b8061116984611e5e565b60405160200161117a929190612c79565b6040516020818303038152906040525b915050919050565b61119a61170e565b73ffffffffffffffffffffffffffffffffffffffff166111b8610eca565b73ffffffffffffffffffffffffffffffffffffffff161461120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590612f0a565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b60606009805461124990613240565b80601f016020809104026020016040519081016040528092919081815260200182805461127590613240565b80156112c25780601f10611297576101008083540402835291602001916112c2565b820191906000526020600020905b8154815290600101906020018083116112a557829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61136861170e565b73ffffffffffffffffffffffffffffffffffffffff16611386610eca565b73ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612f0a565b60405180910390fd5b60005b8282905081101561153b578282828181106113fd576113fc6133aa565b5b9050602002016020810190611412919061260d565b600c6000858585818110611429576114286133aa565b5b905060200201602081019061143e919061260d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008585858181106114d2576114d16133aa565b5b90506020020160208101906114e7919061260d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611533906132a3565b9150506113df565b505050565b61154861170e565b73ffffffffffffffffffffffffffffffffffffffff16611566610eca565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390612d8a565b60405180910390fd5b61163581611b3d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661178983610c1c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117db60076117f5565b90506117e76007611fbf565b6117f18282611fd5565b5050565b600081600001549050919050565b600061180e826116a2565b61184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490612e2a565b60405180910390fd5b600061185883610c1c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118c757508373ffffffffffffffffffffffffffffffffffffffff166118af846106dd565b73ffffffffffffffffffffffffffffffffffffffff16145b806118d857506118d781856112cc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661190182610c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612dea565b60405180910390fd5b6119d2838383611ff3565b6119dd600082611716565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2d9190613156565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8491906130cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6990612e0a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d639190612d2d565b60405180910390a3505050565b611d7b8484846118e1565b611d8784848484611ff8565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90612d6a565b60405180910390fd5b50505050565b606060088054611ddb90613240565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0790613240565b8015611e545780601f10611e2957610100808354040283529160200191611e54565b820191906000526020600020905b815481529060010190602001808311611e3757829003601f168201915b5050505050905090565b60606000821415611ea6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fba565b600082905060005b60008214611ed8578080611ec1906132a3565b915050600a82611ed19190613125565b9150611eae565b60008167ffffffffffffffff811115611ef457611ef36133d9565b5b6040519080825280601f01601f191660200182016040528015611f265781602001600182028036833780820191505090505b5090505b60008514611fb357600182611f3f9190613156565b9150600a85611f4e91906132ec565b6030611f5a91906130cf565b60f81b818381518110611f7057611f6f6133aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fac9190613125565b9450611f2a565b8093505050505b919050565b6001816000016000828254019250508190555050565b611fef82826040518060200160405280600081525061218f565b5050565b505050565b60006120198473ffffffffffffffffffffffffffffffffffffffff166121ea565b15612182578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261204261170e565b8786866040518563ffffffff1660e01b81526004016120649493929190612cb8565b602060405180830381600087803b15801561207e57600080fd5b505af19250505080156120af57506040513d601f19601f820116820180604052508101906120ac919061284a565b60015b612132573d80600081146120df576040519150601f19603f3d011682016040523d82523d6000602084013e6120e4565b606091505b5060008151141561212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190612d6a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612187565b600190505b949350505050565b61219983836121fd565b6121a66000848484611ff8565b6121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90612d6a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490612eca565b60405180910390fd5b612276816116a2565b156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90612dca565b60405180910390fd5b6122c260008383611ff3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231291906130cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546123d790613240565b90600052602060002090601f0160209004810192826123f95760008555612440565b82601f1061241257805160ff1916838001178555612440565b82800160010185558215612440579182015b8281111561243f578251825591602001919060010190612424565b5b50905061244d9190612451565b5090565b5b8082111561246a576000816000905550600101612452565b5090565b600061248161247c8461302a565b613005565b90508281526020810184848401111561249d5761249c613417565b5b6124a88482856131fe565b509392505050565b60006124c36124be8461305b565b613005565b9050828152602081018484840111156124df576124de613417565b5b6124ea8482856131fe565b509392505050565b60008135905061250181613933565b92915050565b60008083601f84011261251d5761251c61340d565b5b8235905067ffffffffffffffff81111561253a57612539613408565b5b60208301915083602082028301111561255657612555613412565b5b9250929050565b60008135905061256c8161394a565b92915050565b60008135905061258181613961565b92915050565b60008151905061259681613961565b92915050565b600082601f8301126125b1576125b061340d565b5b81356125c184826020860161246e565b91505092915050565b600082601f8301126125df576125de61340d565b5b81356125ef8482602086016124b0565b91505092915050565b60008135905061260781613978565b92915050565b60006020828403121561262357612622613421565b5b6000612631848285016124f2565b91505092915050565b6000806040838503121561265157612650613421565b5b600061265f858286016124f2565b9250506020612670858286016124f2565b9150509250929050565b60008060006060848603121561269357612692613421565b5b60006126a1868287016124f2565b93505060206126b2868287016124f2565b92505060406126c3868287016125f8565b9150509250925092565b600080600080608085870312156126e7576126e6613421565b5b60006126f5878288016124f2565b9450506020612706878288016124f2565b9350506040612717878288016125f8565b925050606085013567ffffffffffffffff8111156127385761273761341c565b5b6127448782880161259c565b91505092959194509250565b6000806040838503121561276757612766613421565b5b6000612775858286016124f2565b92505060206127868582860161255d565b9150509250929050565b600080604083850312156127a7576127a6613421565b5b60006127b5858286016124f2565b92505060206127c6858286016125f8565b9150509250929050565b600080602083850312156127e7576127e6613421565b5b600083013567ffffffffffffffff8111156128055761280461341c565b5b61281185828601612507565b92509250509250929050565b60006020828403121561283357612832613421565b5b600061284184828501612572565b91505092915050565b6000602082840312156128605761285f613421565b5b600061286e84828501612587565b91505092915050565b60006020828403121561288d5761288c613421565b5b600082013567ffffffffffffffff8111156128ab576128aa61341c565b5b6128b7848285016125ca565b91505092915050565b6000602082840312156128d6576128d5613421565b5b60006128e4848285016125f8565b91505092915050565b6128f68161318a565b82525050565b6129058161319c565b82525050565b60006129168261308c565b61292081856130a2565b935061293081856020860161320d565b61293981613426565b840191505092915050565b600061294f82613097565b61295981856130b3565b935061296981856020860161320d565b61297281613426565b840191505092915050565b600061298882613097565b61299281856130c4565b93506129a281856020860161320d565b80840191505092915050565b60006129bb6032836130b3565b91506129c682613437565b604082019050919050565b60006129de6026836130b3565b91506129e982613486565b604082019050919050565b6000612a016017836130b3565b9150612a0c826134d5565b602082019050919050565b6000612a24601c836130b3565b9150612a2f826134fe565b602082019050919050565b6000612a476024836130b3565b9150612a5282613527565b604082019050919050565b6000612a6a6019836130b3565b9150612a7582613576565b602082019050919050565b6000612a8d602c836130b3565b9150612a988261359f565b604082019050919050565b6000612ab06038836130b3565b9150612abb826135ee565b604082019050919050565b6000612ad3602a836130b3565b9150612ade8261363d565b604082019050919050565b6000612af66029836130b3565b9150612b018261368c565b604082019050919050565b6000612b19600d836130b3565b9150612b24826136db565b602082019050919050565b6000612b3c6020836130b3565b9150612b4782613704565b602082019050919050565b6000612b5f602c836130b3565b9150612b6a8261372d565b604082019050919050565b6000612b826020836130b3565b9150612b8d8261377c565b602082019050919050565b6000612ba56029836130b3565b9150612bb0826137a5565b604082019050919050565b6000612bc8602f836130b3565b9150612bd3826137f4565b604082019050919050565b6000612beb6021836130b3565b9150612bf682613843565b604082019050919050565b6000612c0e6031836130b3565b9150612c1982613892565b604082019050919050565b6000612c316012836130b3565b9150612c3c826138e1565b602082019050919050565b6000612c546015836130b3565b9150612c5f8261390a565b602082019050919050565b612c73816131f4565b82525050565b6000612c85828561297d565b9150612c91828461297d565b91508190509392505050565b6000602082019050612cb260008301846128ed565b92915050565b6000608082019050612ccd60008301876128ed565b612cda60208301866128ed565b612ce76040830185612c6a565b8181036060830152612cf9818461290b565b905095945050505050565b6000604082019050612d1960008301856128ed565b612d266020830184612c6a565b9392505050565b6000602082019050612d4260008301846128fc565b92915050565b60006020820190508181036000830152612d628184612944565b905092915050565b60006020820190508181036000830152612d83816129ae565b9050919050565b60006020820190508181036000830152612da3816129d1565b9050919050565b60006020820190508181036000830152612dc3816129f4565b9050919050565b60006020820190508181036000830152612de381612a17565b9050919050565b60006020820190508181036000830152612e0381612a3a565b9050919050565b60006020820190508181036000830152612e2381612a5d565b9050919050565b60006020820190508181036000830152612e4381612a80565b9050919050565b60006020820190508181036000830152612e6381612aa3565b9050919050565b60006020820190508181036000830152612e8381612ac6565b9050919050565b60006020820190508181036000830152612ea381612ae9565b9050919050565b60006020820190508181036000830152612ec381612b0c565b9050919050565b60006020820190508181036000830152612ee381612b2f565b9050919050565b60006020820190508181036000830152612f0381612b52565b9050919050565b60006020820190508181036000830152612f2381612b75565b9050919050565b60006020820190508181036000830152612f4381612b98565b9050919050565b60006020820190508181036000830152612f6381612bbb565b9050919050565b60006020820190508181036000830152612f8381612bde565b9050919050565b60006020820190508181036000830152612fa381612c01565b9050919050565b60006020820190508181036000830152612fc381612c24565b9050919050565b60006020820190508181036000830152612fe381612c47565b9050919050565b6000602082019050612fff6000830184612c6a565b92915050565b600061300f613020565b905061301b8282613272565b919050565b6000604051905090565b600067ffffffffffffffff821115613045576130446133d9565b5b61304e82613426565b9050602081019050919050565b600067ffffffffffffffff821115613076576130756133d9565b5b61307f82613426565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130da826131f4565b91506130e5836131f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561311a5761311961331d565b5b828201905092915050565b6000613130826131f4565b915061313b836131f4565b92508261314b5761314a61334c565b5b828204905092915050565b6000613161826131f4565b915061316c836131f4565b92508282101561317f5761317e61331d565b5b828203905092915050565b6000613195826131d4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561322b578082015181840152602081019050613210565b8381111561323a576000848401525b50505050565b6000600282049050600182168061325857607f821691505b6020821081141561326c5761326b61337b565b5b50919050565b61327b82613426565b810181811067ffffffffffffffff8211171561329a576132996133d9565b5b80604052505050565b60006132ae826131f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132e1576132e061331d565b5b600182019050919050565b60006132f7826131f4565b9150613302836131f4565b9250826133125761331161334c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f2072656d61696e696e672073746f636b206c656674000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e0000000000000000000000600082015250565b61393c8161318a565b811461394757600080fd5b50565b6139538161319c565b811461395e57600080fd5b50565b61396a816131a8565b811461397557600080fd5b50565b613981816131f4565b811461398c57600080fd5b5056fea2646970667358221220152061dc9b0968be8041efc44118d1c3d5b65cb239e9fffb2aff26c3a199455364736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d65427234346332616544684b7356744c7879595831506658376b5875504a754b535359615074517145424b38

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063a22cb465116100a2578063e8a3d48511610071578063e8a3d485146104e3578063e985e9c514610501578063edac985b14610531578063f2fde38b1461054d576101cf565b8063a22cb46514610471578063b88d4fde1461048d578063c87b56dd146104a9578063dbd30ae0146104d9576101cf565b80638e920351116100de5780638e920351146103e8578063938e3d7b1461040657806395d89b41146104225780639b19251a14610440576101cf565b8063715018a6146103b6578063853828b6146103c05780638da5cb5b146103ca576101cf565b806332cb6b0c11610171578063453c23101161014b578063453c23101461031c57806355f804b31461033a5780636352211e1461035657806370a0823114610386576101cf565b806332cb6b0c146102b25780633af32abf146102d057806342842e0e14610300576101cf565b8063095ea7b3116101ad578063095ea7b3146102525780631249c58b1461026e57806318160ddd1461027857806323b872dd14610296576101cf565b806301ffc9a7146101d457806306fdde0314610204578063081812fc14610222575b600080fd5b6101ee60048036038101906101e9919061281d565b610569565b6040516101fb9190612d2d565b60405180910390f35b61020c61064b565b6040516102199190612d48565b60405180910390f35b61023c600480360381019061023791906128c0565b6106dd565b6040516102499190612c9d565b60405180910390f35b61026c60048036038101906102679190612790565b610762565b005b61027661087a565b005b610280610a50565b60405161028d9190612fea565b60405180910390f35b6102b060048036038101906102ab919061267a565b610a61565b005b6102ba610ac1565b6040516102c79190612fea565b60405180910390f35b6102ea60048036038101906102e5919061260d565b610ac6565b6040516102f79190612d2d565b60405180910390f35b61031a6004803603810190610315919061267a565b610b60565b005b610324610b80565b6040516103319190612fea565b60405180910390f35b610354600480360381019061034f9190612877565b610b86565b005b610370600480360381019061036b91906128c0565b610c1c565b60405161037d9190612c9d565b60405180910390f35b6103a0600480360381019061039b919061260d565b610cce565b6040516103ad9190612fea565b60405180910390f35b6103be610d86565b005b6103c8610e0e565b005b6103d2610eca565b6040516103df9190612c9d565b60405180910390f35b6103f0610ef4565b6040516103fd9190612d2d565b60405180910390f35b610420600480360381019061041b9190612877565b610f07565b005b61042a610f9d565b6040516104379190612d48565b60405180910390f35b61045a6004803603810190610455919061260d565b61102f565b604051610468929190612d04565b60405180910390f35b61048b60048036038101906104869190612750565b611073565b005b6104a760048036038101906104a291906126cd565b611089565b005b6104c360048036038101906104be91906128c0565b6110eb565b6040516104d09190612d48565b60405180910390f35b6104e1611192565b005b6104eb61123a565b6040516104f89190612d48565b60405180910390f35b61051b6004803603810190610516919061263a565b6112cc565b6040516105289190612d2d565b60405180910390f35b61054b600480360381019061054691906127d0565b611360565b005b6105676004803603810190610562919061260d565b611540565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610644575061064382611638565b5b9050919050565b60606000805461065a90613240565b80601f016020809104026020016040519081016040528092919081815260200182805461068690613240565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b5050505050905090565b60006106e8826116a2565b610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e90612eea565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061076d82610c1c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d590612f6a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107fd61170e565b73ffffffffffffffffffffffffffffffffffffffff16148061082c575061082b8161082661170e565b6112cc565b5b61086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086290612e4a565b60405180910390fd5b6108758383611716565b505050565b600b60009054906101000a900460ff166108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612eaa565b60405180910390fd5b60c860016108d5610a50565b6108df91906130cf565b1115610920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091790612daa565b60405180910390fd5b61092933610ac6565b610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f90612faa565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612fca565b60405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000815480929190610a40906132a3565b9190505550610a4e336117cf565b565b6000610a5c60076117f5565b905090565b610a72610a6c61170e565b82611803565b610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa890612f8a565b60405180910390fd5b610abc8383836118e1565b505050565b60c881565b60008173ffffffffffffffffffffffffffffffffffffffff16600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b610b7b83838360405180602001604052806000815250611089565b505050565b600a5481565b610b8e61170e565b73ffffffffffffffffffffffffffffffffffffffff16610bac610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990612f0a565b60405180910390fd5b8060089080519060200190610c189291906123cb565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612e8a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612e6a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d8e61170e565b73ffffffffffffffffffffffffffffffffffffffff16610dac610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990612f0a565b60405180910390fd5b610e0c6000611b3d565b565b610e1661170e565b73ffffffffffffffffffffffffffffffffffffffff16610e34610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190612f0a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610ec857600080fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900460ff1681565b610f0f61170e565b73ffffffffffffffffffffffffffffffffffffffff16610f2d610eca565b73ffffffffffffffffffffffffffffffffffffffff1614610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90612f0a565b60405180910390fd5b8060099080519060200190610f999291906123cb565b5050565b606060018054610fac90613240565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613240565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b5050505050905090565b600c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b61108561107e61170e565b8383611c03565b5050565b61109a61109461170e565b83611803565b6110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090612f8a565b60405180910390fd5b6110e584848484611d70565b50505050565b60606110f6826116a2565b611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612f4a565b60405180910390fd5b600061113f611dcc565b9050600081511161115f576040518060200160405280600081525061118a565b8061116984611e5e565b60405160200161117a929190612c79565b6040516020818303038152906040525b915050919050565b61119a61170e565b73ffffffffffffffffffffffffffffffffffffffff166111b8610eca565b73ffffffffffffffffffffffffffffffffffffffff161461120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120590612f0a565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b60606009805461124990613240565b80601f016020809104026020016040519081016040528092919081815260200182805461127590613240565b80156112c25780601f10611297576101008083540402835291602001916112c2565b820191906000526020600020905b8154815290600101906020018083116112a557829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61136861170e565b73ffffffffffffffffffffffffffffffffffffffff16611386610eca565b73ffffffffffffffffffffffffffffffffffffffff16146113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612f0a565b60405180910390fd5b60005b8282905081101561153b578282828181106113fd576113fc6133aa565b5b9050602002016020810190611412919061260d565b600c6000858585818110611429576114286133aa565b5b905060200201602081019061143e919061260d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60008585858181106114d2576114d16133aa565b5b90506020020160208101906114e7919061260d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611533906132a3565b9150506113df565b505050565b61154861170e565b73ffffffffffffffffffffffffffffffffffffffff16611566610eca565b73ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390612d8a565b60405180910390fd5b61163581611b3d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661178983610c1c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117db60076117f5565b90506117e76007611fbf565b6117f18282611fd5565b5050565b600081600001549050919050565b600061180e826116a2565b61184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490612e2a565b60405180910390fd5b600061185883610c1c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118c757508373ffffffffffffffffffffffffffffffffffffffff166118af846106dd565b73ffffffffffffffffffffffffffffffffffffffff16145b806118d857506118d781856112cc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661190182610c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90612f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612dea565b60405180910390fd5b6119d2838383611ff3565b6119dd600082611716565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2d9190613156565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8491906130cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6990612e0a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d639190612d2d565b60405180910390a3505050565b611d7b8484846118e1565b611d8784848484611ff8565b611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90612d6a565b60405180910390fd5b50505050565b606060088054611ddb90613240565b80601f0160208091040260200160405190810160405280929190818152602001828054611e0790613240565b8015611e545780601f10611e2957610100808354040283529160200191611e54565b820191906000526020600020905b815481529060010190602001808311611e3757829003601f168201915b5050505050905090565b60606000821415611ea6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fba565b600082905060005b60008214611ed8578080611ec1906132a3565b915050600a82611ed19190613125565b9150611eae565b60008167ffffffffffffffff811115611ef457611ef36133d9565b5b6040519080825280601f01601f191660200182016040528015611f265781602001600182028036833780820191505090505b5090505b60008514611fb357600182611f3f9190613156565b9150600a85611f4e91906132ec565b6030611f5a91906130cf565b60f81b818381518110611f7057611f6f6133aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fac9190613125565b9450611f2a565b8093505050505b919050565b6001816000016000828254019250508190555050565b611fef82826040518060200160405280600081525061218f565b5050565b505050565b60006120198473ffffffffffffffffffffffffffffffffffffffff166121ea565b15612182578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261204261170e565b8786866040518563ffffffff1660e01b81526004016120649493929190612cb8565b602060405180830381600087803b15801561207e57600080fd5b505af19250505080156120af57506040513d601f19601f820116820180604052508101906120ac919061284a565b60015b612132573d80600081146120df576040519150601f19603f3d011682016040523d82523d6000602084013e6120e4565b606091505b5060008151141561212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190612d6a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612187565b600190505b949350505050565b61219983836121fd565b6121a66000848484611ff8565b6121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90612d6a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490612eca565b60405180910390fd5b612276816116a2565b156122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90612dca565b60405180910390fd5b6122c260008383611ff3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461231291906130cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546123d790613240565b90600052602060002090601f0160209004810192826123f95760008555612440565b82601f1061241257805160ff1916838001178555612440565b82800160010185558215612440579182015b8281111561243f578251825591602001919060010190612424565b5b50905061244d9190612451565b5090565b5b8082111561246a576000816000905550600101612452565b5090565b600061248161247c8461302a565b613005565b90508281526020810184848401111561249d5761249c613417565b5b6124a88482856131fe565b509392505050565b60006124c36124be8461305b565b613005565b9050828152602081018484840111156124df576124de613417565b5b6124ea8482856131fe565b509392505050565b60008135905061250181613933565b92915050565b60008083601f84011261251d5761251c61340d565b5b8235905067ffffffffffffffff81111561253a57612539613408565b5b60208301915083602082028301111561255657612555613412565b5b9250929050565b60008135905061256c8161394a565b92915050565b60008135905061258181613961565b92915050565b60008151905061259681613961565b92915050565b600082601f8301126125b1576125b061340d565b5b81356125c184826020860161246e565b91505092915050565b600082601f8301126125df576125de61340d565b5b81356125ef8482602086016124b0565b91505092915050565b60008135905061260781613978565b92915050565b60006020828403121561262357612622613421565b5b6000612631848285016124f2565b91505092915050565b6000806040838503121561265157612650613421565b5b600061265f858286016124f2565b9250506020612670858286016124f2565b9150509250929050565b60008060006060848603121561269357612692613421565b5b60006126a1868287016124f2565b93505060206126b2868287016124f2565b92505060406126c3868287016125f8565b9150509250925092565b600080600080608085870312156126e7576126e6613421565b5b60006126f5878288016124f2565b9450506020612706878288016124f2565b9350506040612717878288016125f8565b925050606085013567ffffffffffffffff8111156127385761273761341c565b5b6127448782880161259c565b91505092959194509250565b6000806040838503121561276757612766613421565b5b6000612775858286016124f2565b92505060206127868582860161255d565b9150509250929050565b600080604083850312156127a7576127a6613421565b5b60006127b5858286016124f2565b92505060206127c6858286016125f8565b9150509250929050565b600080602083850312156127e7576127e6613421565b5b600083013567ffffffffffffffff8111156128055761280461341c565b5b61281185828601612507565b92509250509250929050565b60006020828403121561283357612832613421565b5b600061284184828501612572565b91505092915050565b6000602082840312156128605761285f613421565b5b600061286e84828501612587565b91505092915050565b60006020828403121561288d5761288c613421565b5b600082013567ffffffffffffffff8111156128ab576128aa61341c565b5b6128b7848285016125ca565b91505092915050565b6000602082840312156128d6576128d5613421565b5b60006128e4848285016125f8565b91505092915050565b6128f68161318a565b82525050565b6129058161319c565b82525050565b60006129168261308c565b61292081856130a2565b935061293081856020860161320d565b61293981613426565b840191505092915050565b600061294f82613097565b61295981856130b3565b935061296981856020860161320d565b61297281613426565b840191505092915050565b600061298882613097565b61299281856130c4565b93506129a281856020860161320d565b80840191505092915050565b60006129bb6032836130b3565b91506129c682613437565b604082019050919050565b60006129de6026836130b3565b91506129e982613486565b604082019050919050565b6000612a016017836130b3565b9150612a0c826134d5565b602082019050919050565b6000612a24601c836130b3565b9150612a2f826134fe565b602082019050919050565b6000612a476024836130b3565b9150612a5282613527565b604082019050919050565b6000612a6a6019836130b3565b9150612a7582613576565b602082019050919050565b6000612a8d602c836130b3565b9150612a988261359f565b604082019050919050565b6000612ab06038836130b3565b9150612abb826135ee565b604082019050919050565b6000612ad3602a836130b3565b9150612ade8261363d565b604082019050919050565b6000612af66029836130b3565b9150612b018261368c565b604082019050919050565b6000612b19600d836130b3565b9150612b24826136db565b602082019050919050565b6000612b3c6020836130b3565b9150612b4782613704565b602082019050919050565b6000612b5f602c836130b3565b9150612b6a8261372d565b604082019050919050565b6000612b826020836130b3565b9150612b8d8261377c565b602082019050919050565b6000612ba56029836130b3565b9150612bb0826137a5565b604082019050919050565b6000612bc8602f836130b3565b9150612bd3826137f4565b604082019050919050565b6000612beb6021836130b3565b9150612bf682613843565b604082019050919050565b6000612c0e6031836130b3565b9150612c1982613892565b604082019050919050565b6000612c316012836130b3565b9150612c3c826138e1565b602082019050919050565b6000612c546015836130b3565b9150612c5f8261390a565b602082019050919050565b612c73816131f4565b82525050565b6000612c85828561297d565b9150612c91828461297d565b91508190509392505050565b6000602082019050612cb260008301846128ed565b92915050565b6000608082019050612ccd60008301876128ed565b612cda60208301866128ed565b612ce76040830185612c6a565b8181036060830152612cf9818461290b565b905095945050505050565b6000604082019050612d1960008301856128ed565b612d266020830184612c6a565b9392505050565b6000602082019050612d4260008301846128fc565b92915050565b60006020820190508181036000830152612d628184612944565b905092915050565b60006020820190508181036000830152612d83816129ae565b9050919050565b60006020820190508181036000830152612da3816129d1565b9050919050565b60006020820190508181036000830152612dc3816129f4565b9050919050565b60006020820190508181036000830152612de381612a17565b9050919050565b60006020820190508181036000830152612e0381612a3a565b9050919050565b60006020820190508181036000830152612e2381612a5d565b9050919050565b60006020820190508181036000830152612e4381612a80565b9050919050565b60006020820190508181036000830152612e6381612aa3565b9050919050565b60006020820190508181036000830152612e8381612ac6565b9050919050565b60006020820190508181036000830152612ea381612ae9565b9050919050565b60006020820190508181036000830152612ec381612b0c565b9050919050565b60006020820190508181036000830152612ee381612b2f565b9050919050565b60006020820190508181036000830152612f0381612b52565b9050919050565b60006020820190508181036000830152612f2381612b75565b9050919050565b60006020820190508181036000830152612f4381612b98565b9050919050565b60006020820190508181036000830152612f6381612bbb565b9050919050565b60006020820190508181036000830152612f8381612bde565b9050919050565b60006020820190508181036000830152612fa381612c01565b9050919050565b60006020820190508181036000830152612fc381612c24565b9050919050565b60006020820190508181036000830152612fe381612c47565b9050919050565b6000602082019050612fff6000830184612c6a565b92915050565b600061300f613020565b905061301b8282613272565b919050565b6000604051905090565b600067ffffffffffffffff821115613045576130446133d9565b5b61304e82613426565b9050602081019050919050565b600067ffffffffffffffff821115613076576130756133d9565b5b61307f82613426565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130da826131f4565b91506130e5836131f4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561311a5761311961331d565b5b828201905092915050565b6000613130826131f4565b915061313b836131f4565b92508261314b5761314a61334c565b5b828204905092915050565b6000613161826131f4565b915061316c836131f4565b92508282101561317f5761317e61331d565b5b828203905092915050565b6000613195826131d4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561322b578082015181840152602081019050613210565b8381111561323a576000848401525b50505050565b6000600282049050600182168061325857607f821691505b6020821081141561326c5761326b61337b565b5b50919050565b61327b82613426565b810181811067ffffffffffffffff8211171561329a576132996133d9565b5b80604052505050565b60006132ae826131f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132e1576132e061331d565b5b600182019050919050565b60006132f7826131f4565b9150613302836131f4565b9250826133125761331161334c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f2072656d61696e696e672073746f636b206c656674000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206c69766500000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f43616e206f6e6c79206d696e74203120746f6b656e0000000000000000000000600082015250565b61393c8161318a565b811461394757600080fd5b50565b6139538161319c565b811461395e57600080fd5b50565b61396a816131a8565b811461397557600080fd5b50565b613981816131f4565b811461398c57600080fd5b5056fea2646970667358221220152061dc9b0968be8041efc44118d1c3d5b65cb239e9fffb2aff26c3a199455364736f6c63430008070033

Deployed Bytecode Sourcemap

37737:2456:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25244:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26189:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27748:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27271:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38458:373;;;:::i;:::-;;39023:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28498:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37927:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39933:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28908:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37971:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39245:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25883:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25613:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6232:103;;;:::i;:::-;;40073:117;;;:::i;:::-;;5581:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38006:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39362:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26358:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38122:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28041:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29164:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26533:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39495:83;;;:::i;:::-;;39136:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28267:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39584:341;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6490:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25244:305;25346:4;25398:25;25383:40;;;:11;:40;;;;:105;;;;25455:33;25440:48;;;:11;:48;;;;25383:105;:158;;;;25505:36;25529:11;25505:23;:36::i;:::-;25383:158;25363:178;;25244:305;;;:::o;26189:100::-;26243:13;26276:5;26269:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189:100;:::o;27748:221::-;27824:7;27852:16;27860:7;27852;:16::i;:::-;27844:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27937:15;:24;27953:7;27937:24;;;;;;;;;;;;;;;;;;;;;27930:31;;27748:221;;;:::o;27271:411::-;27352:13;27368:23;27383:7;27368:14;:23::i;:::-;27352:39;;27416:5;27410:11;;:2;:11;;;;27402:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:5;27494:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27519:37;27536:5;27543:12;:10;:12::i;:::-;27519:16;:37::i;:::-;27494:62;27472:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27653:21;27662:2;27666:7;27653:8;:21::i;:::-;27341:341;27271:411;;:::o;38458:373::-;38502:9;;;;;;;;;;;38494:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;37961:3;38564:1;38548:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;38540:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38626:25;38640:10;38626:13;:25::i;:::-;38618:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38724:1;38693:9;:21;38703:10;38693:21;;;;;;;;;;;;;;;:28;;;:32;38685:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38762:9;:21;38772:10;38762:21;;;;;;;;;;;;;;;:28;;;:30;;;;;;;;;:::i;:::-;;;;;;38803:20;38812:10;38803:8;:20::i;:::-;38458:373::o;39023:101::-;39067:4;39091:25;:15;:23;:25::i;:::-;39084:32;;39023:101;:::o;28498:339::-;28693:41;28712:12;:10;:12::i;:::-;28726:7;28693:18;:41::i;:::-;28685:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28801:28;28811:4;28817:2;28821:7;28801:9;:28::i;:::-;28498:339;;;:::o;37927:37::-;37961:3;37927:37;:::o;39933:132::-;39991:18;40053:4;40029:28;;:9;:15;40039:4;40029:15;;;;;;;;;;;;;;;:20;;;;;;;;;;;;:28;;;40022:35;;39933:132;;;:::o;28908:185::-;29046:39;29063:4;29069:2;29073:7;29046:39;;;;;;;;;;;;:16;:39::i;:::-;28908:185;;;:::o;37971:28::-;;;;:::o;39245:105::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39332:10:::1;39321:8;:21;;;;;;;;;;;;:::i;:::-;;39245:105:::0;:::o;25883:239::-;25955:7;25975:13;25991:7;:16;25999:7;25991:16;;;;;;;;;;;;;;;;;;;;;25975:32;;26043:1;26026:19;;:5;:19;;;;26018:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26109:5;26102:12;;;25883:239;;;:::o;25613:208::-;25685:7;25730:1;25713:19;;:5;:19;;;;25705:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25797:9;:16;25807:5;25797:16;;;;;;;;;;;;;;;;25790:23;;25613:208;;;:::o;6232:103::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6297:30:::1;6324:1;6297:18;:30::i;:::-;6232:103::o:0;40073:117::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40142:10:::1;40134:24;;:47;40159:21;40134:47;;;;;;;;;;;;;;;;;;;;;;;40126:56;;;::::0;::::1;;40073:117::o:0;5581:87::-;5627:7;5654:6;;;;;;;;;;;5647:13;;5581:87;:::o;38006:29::-;;;;;;;;;;;;;:::o;39362:121::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39461:14:::1;39446:12;:29;;;;;;;;;;;;:::i;:::-;;39362:121:::0;:::o;26358:104::-;26414:13;26447:7;26440:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26358:104;:::o;38122:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28041:155::-;28136:52;28155:12;:10;:12::i;:::-;28169:8;28179;28136:18;:52::i;:::-;28041:155;;:::o;29164:328::-;29339:41;29358:12;:10;:12::i;:::-;29372:7;29339:18;:41::i;:::-;29331:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29445:39;29459:4;29465:2;29469:7;29478:5;29445:13;:39::i;:::-;29164:328;;;;:::o;26533:334::-;26606:13;26640:16;26648:7;26640;:16::i;:::-;26632:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26721:21;26745:10;:8;:10::i;:::-;26721:34;;26797:1;26779:7;26773:21;:25;:86;;;;;;;;;;;;;;;;;26825:7;26834:18;:7;:16;:18::i;:::-;26808:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26773:86;26766:93;;;26533:334;;;:::o;39495:83::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39561:9:::1;;;;;;;;;;;39560:10;39548:9;;:22;;;;;;;;;;;;;;;;;;39495:83::o:0;39136:97::-;39180:13;39213:12;39206:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39136:97;:::o;28267:164::-;28364:4;28388:18;:25;28407:5;28388:25;;;;;;;;;;;;;;;:35;28414:8;28388:35;;;;;;;;;;;;;;;;;;;;;;;;;28381:42;;28267:164;;;;:::o;39584:341::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39672:6:::1;39667:251;39684:10;;:17;;39682:1;:19;39667:251;;;39755:10;;39766:1;39755:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39723:9;:24;39733:10;;39744:1;39733:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39723:24;;;;;;;;;;;;;;;:29;;;:45;;;;;;;;;;;;;;;;;;39864:1;39830:9;:24;39840:10;;39851:1;39840:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39830:24;;;;;;;;;;;;;;;:31;;:35;;;;39703:3;;;;;:::i;:::-;;;;39667:251;;;;39584:341:::0;;:::o;6490:201::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:1:::1;6579:22;;:8;:22;;;;6571:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6655:28;6674:8;6655:18;:28::i;:::-;6490:201:::0;:::o;18013:157::-;18098:4;18137:25;18122:40;;;:11;:40;;;;18115:47;;18013:157;;;:::o;31002:127::-;31067:4;31119:1;31091:30;;:7;:16;31099:7;31091:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31084:37;;31002:127;;;:::o;4305:98::-;4358:7;4385:10;4378:17;;4305:98;:::o;34984:174::-;35086:2;35059:15;:24;35075:7;35059:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35142:7;35138:2;35104:46;;35113:23;35128:7;35113:14;:23::i;:::-;35104:46;;;;;;;;;;;;34984:174;;:::o;38839:172::-;38889:15;38907:25;:15;:23;:25::i;:::-;38889:43;;38943:27;:15;:25;:27::i;:::-;38981:22;38991:2;38995:7;38981:9;:22::i;:::-;38878:133;38839:172;:::o;909:114::-;974:7;1001;:14;;;994:21;;909:114;;;:::o;31296:348::-;31389:4;31414:16;31422:7;31414;:16::i;:::-;31406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31490:13;31506:23;31521:7;31506:14;:23::i;:::-;31490:39;;31559:5;31548:16;;:7;:16;;;:51;;;;31592:7;31568:31;;:20;31580:7;31568:11;:20::i;:::-;:31;;;31548:51;:87;;;;31603:32;31620:5;31627:7;31603:16;:32::i;:::-;31548:87;31540:96;;;31296:348;;;;:::o;34288:578::-;34447:4;34420:31;;:23;34435:7;34420:14;:23::i;:::-;:31;;;34412:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34530:1;34516:16;;:2;:16;;;;34508:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:39;34607:4;34613:2;34617:7;34586:20;:39::i;:::-;34690:29;34707:1;34711:7;34690:8;:29::i;:::-;34751:1;34732:9;:15;34742:4;34732:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34780:1;34763:9;:13;34773:2;34763:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34811:2;34792:7;:16;34800:7;34792:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34850:7;34846:2;34831:27;;34840:4;34831:27;;;;;;;;;;;;34288:578;;;:::o;6851:191::-;6925:16;6944:6;;;;;;;;;;;6925:25;;6970:8;6961:6;;:17;;;;;;;;;;;;;;;;;;7025:8;6994:40;;7015:8;6994:40;;;;;;;;;;;;6914:128;6851:191;:::o;35300:315::-;35455:8;35446:17;;:5;:17;;;;35438:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35542:8;35504:18;:25;35523:5;35504:25;;;;;;;;;;;;;;;:35;35530:8;35504:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35588:8;35566:41;;35581:5;35566:41;;;35598:8;35566:41;;;;;;:::i;:::-;;;;;;;;35300:315;;;:::o;30374:::-;30531:28;30541:4;30547:2;30551:7;30531:9;:28::i;:::-;30578:48;30601:4;30607:2;30611:7;30620:5;30578:22;:48::i;:::-;30570:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30374:315;;;;:::o;38345:101::-;38397:13;38430:8;38423:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38345:101;:::o;1867:723::-;1923:13;2153:1;2144:5;:10;2140:53;;;2171:10;;;;;;;;;;;;;;;;;;;;;2140:53;2203:12;2218:5;2203:20;;2234:14;2259:78;2274:1;2266:4;:9;2259:78;;2292:8;;;;;:::i;:::-;;;;2323:2;2315:10;;;;;:::i;:::-;;;2259:78;;;2347:19;2379:6;2369:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2347:39;;2397:154;2413:1;2404:5;:10;2397:154;;2441:1;2431:11;;;;;:::i;:::-;;;2508:2;2500:5;:10;;;;:::i;:::-;2487:2;:24;;;;:::i;:::-;2474:39;;2457:6;2464;2457:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2537:2;2528:11;;;;;:::i;:::-;;;2397:154;;;2575:6;2561:21;;;;;1867:723;;;;:::o;1031:127::-;1138:1;1120:7;:14;;;:19;;;;;;;;;;;1031:127;:::o;31986:110::-;32062:26;32072:2;32076:7;32062:26;;;;;;;;;;;;:9;:26::i;:::-;31986:110;;:::o;37551:126::-;;;;:::o;36180:799::-;36335:4;36356:15;:2;:13;;;:15::i;:::-;36352:620;;;36408:2;36392:36;;;36429:12;:10;:12::i;:::-;36443:4;36449:7;36458:5;36392:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36388:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36651:1;36634:6;:13;:18;36630:272;;;36677:60;;;;;;;;;;:::i;:::-;;;;;;;;36630:272;36852:6;36846:13;36837:6;36833:2;36829:15;36822:38;36388:529;36525:41;;;36515:51;;;:6;:51;;;;36508:58;;;;;36352:620;36956:4;36949:11;;36180:799;;;;;;;:::o;32323:321::-;32453:18;32459:2;32463:7;32453:5;:18::i;:::-;32504:54;32535:1;32539:2;32543:7;32552:5;32504:22;:54::i;:::-;32482:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32323:321;;;:::o;7869:387::-;7929:4;8137:12;8204:7;8192:20;8184:28;;8247:1;8240:4;:8;8233:15;;;7869:387;;;:::o;32980:382::-;33074:1;33060:16;;:2;:16;;;;33052:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33133:16;33141:7;33133;:16::i;:::-;33132:17;33124:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33195:45;33224:1;33228:2;33232:7;33195:20;:45::i;:::-;33270:1;33253:9;:13;33263:2;33253:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33301:2;33282:7;:16;33290:7;33282:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33346:7;33342:2;33321:33;;33338:1;33321:33;;;;;;;;;;;;32980:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9672:366::-;9814:3;9835:67;9899:2;9894:3;9835:67;:::i;:::-;9828:74;;9911:93;10000:3;9911:93;:::i;:::-;10029:2;10024:3;10020:12;10013:19;;9672:366;;;:::o;10044:::-;10186:3;10207:67;10271:2;10266:3;10207:67;:::i;:::-;10200:74;;10283:93;10372:3;10283:93;:::i;:::-;10401:2;10396:3;10392:12;10385:19;;10044:366;;;:::o;10416:::-;10558:3;10579:67;10643:2;10638:3;10579:67;:::i;:::-;10572:74;;10655:93;10744:3;10655:93;:::i;:::-;10773:2;10768:3;10764:12;10757:19;;10416:366;;;:::o;10788:::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:::-;15766:3;15787:67;15851:2;15846:3;15787:67;:::i;:::-;15780:74;;15863:93;15952:3;15863:93;:::i;:::-;15981:2;15976:3;15972:12;15965:19;;15624:366;;;:::o;15996:::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:::-;16510:3;16531:67;16595:2;16590:3;16531:67;:::i;:::-;16524:74;;16607:93;16696:3;16607:93;:::i;:::-;16725:2;16720:3;16716:12;16709:19;;16368:366;;;:::o;16740:::-;16882:3;16903:67;16967:2;16962:3;16903:67;:::i;:::-;16896:74;;16979:93;17068:3;16979:93;:::i;:::-;17097:2;17092:3;17088:12;17081:19;;16740:366;;;:::o;17112:118::-;17199:24;17217:5;17199:24;:::i;:::-;17194:3;17187:37;17112:118;;:::o;17236:435::-;17416:3;17438:95;17529:3;17520:6;17438:95;:::i;:::-;17431:102;;17550:95;17641:3;17632:6;17550:95;:::i;:::-;17543:102;;17662:3;17655:10;;17236:435;;;;;:::o;17677:222::-;17770:4;17808:2;17797:9;17793:18;17785:26;;17821:71;17889:1;17878:9;17874:17;17865:6;17821:71;:::i;:::-;17677:222;;;;:::o;17905:640::-;18100:4;18138:3;18127:9;18123:19;18115:27;;18152:71;18220:1;18209:9;18205:17;18196:6;18152:71;:::i;:::-;18233:72;18301:2;18290:9;18286:18;18277:6;18233:72;:::i;:::-;18315;18383:2;18372:9;18368:18;18359:6;18315:72;:::i;:::-;18434:9;18428:4;18424:20;18419:2;18408:9;18404:18;18397:48;18462:76;18533:4;18524:6;18462:76;:::i;:::-;18454:84;;17905:640;;;;;;;:::o;18551:332::-;18672:4;18710:2;18699:9;18695:18;18687:26;;18723:71;18791:1;18780:9;18776:17;18767:6;18723:71;:::i;:::-;18804:72;18872:2;18861:9;18857:18;18848:6;18804:72;:::i;:::-;18551:332;;;;;:::o;18889:210::-;18976:4;19014:2;19003:9;18999:18;18991:26;;19027:65;19089:1;19078:9;19074:17;19065:6;19027:65;:::i;:::-;18889:210;;;;:::o;19105:313::-;19218:4;19256:2;19245:9;19241:18;19233:26;;19305:9;19299:4;19295:20;19291:1;19280:9;19276:17;19269:47;19333:78;19406:4;19397:6;19333:78;:::i;:::-;19325:86;;19105:313;;;;:::o;19424:419::-;19590:4;19628:2;19617:9;19613:18;19605:26;;19677:9;19671:4;19667:20;19663:1;19652:9;19648:17;19641:47;19705:131;19831:4;19705:131;:::i;:::-;19697:139;;19424:419;;;:::o;19849:::-;20015:4;20053:2;20042:9;20038:18;20030:26;;20102:9;20096:4;20092:20;20088:1;20077:9;20073:17;20066:47;20130:131;20256:4;20130:131;:::i;:::-;20122:139;;19849:419;;;:::o;20274:::-;20440:4;20478:2;20467:9;20463:18;20455:26;;20527:9;20521:4;20517:20;20513:1;20502:9;20498:17;20491:47;20555:131;20681:4;20555:131;:::i;:::-;20547:139;;20274:419;;;:::o;20699:::-;20865:4;20903:2;20892:9;20888:18;20880:26;;20952:9;20946:4;20942:20;20938:1;20927:9;20923:17;20916:47;20980:131;21106:4;20980:131;:::i;:::-;20972:139;;20699:419;;;:::o;21124:::-;21290:4;21328:2;21317:9;21313:18;21305:26;;21377:9;21371:4;21367:20;21363:1;21352:9;21348:17;21341:47;21405:131;21531:4;21405:131;:::i;:::-;21397:139;;21124:419;;;:::o;21549:::-;21715:4;21753:2;21742:9;21738:18;21730:26;;21802:9;21796:4;21792:20;21788:1;21777:9;21773:17;21766:47;21830:131;21956:4;21830:131;:::i;:::-;21822:139;;21549:419;;;:::o;21974:::-;22140:4;22178:2;22167:9;22163:18;22155:26;;22227:9;22221:4;22217:20;22213:1;22202:9;22198:17;22191:47;22255:131;22381:4;22255:131;:::i;:::-;22247:139;;21974:419;;;:::o;22399:::-;22565:4;22603:2;22592:9;22588:18;22580:26;;22652:9;22646:4;22642:20;22638:1;22627:9;22623:17;22616:47;22680:131;22806:4;22680:131;:::i;:::-;22672:139;;22399:419;;;:::o;22824:::-;22990:4;23028:2;23017:9;23013:18;23005:26;;23077:9;23071:4;23067:20;23063:1;23052:9;23048:17;23041:47;23105:131;23231:4;23105:131;:::i;:::-;23097:139;;22824:419;;;:::o;23249:::-;23415:4;23453:2;23442:9;23438:18;23430:26;;23502:9;23496:4;23492:20;23488:1;23477:9;23473:17;23466:47;23530:131;23656:4;23530:131;:::i;:::-;23522:139;;23249:419;;;:::o;23674:::-;23840:4;23878:2;23867:9;23863:18;23855:26;;23927:9;23921:4;23917:20;23913:1;23902:9;23898:17;23891:47;23955:131;24081:4;23955:131;:::i;:::-;23947:139;;23674:419;;;:::o;24099:::-;24265:4;24303:2;24292:9;24288:18;24280:26;;24352:9;24346:4;24342:20;24338:1;24327:9;24323:17;24316:47;24380:131;24506:4;24380:131;:::i;:::-;24372:139;;24099:419;;;:::o;24524:::-;24690:4;24728:2;24717:9;24713:18;24705:26;;24777:9;24771:4;24767:20;24763:1;24752:9;24748:17;24741:47;24805:131;24931:4;24805:131;:::i;:::-;24797:139;;24524:419;;;:::o;24949:::-;25115:4;25153:2;25142:9;25138:18;25130:26;;25202:9;25196:4;25192:20;25188:1;25177:9;25173:17;25166:47;25230:131;25356:4;25230:131;:::i;:::-;25222:139;;24949:419;;;:::o;25374:::-;25540:4;25578:2;25567:9;25563:18;25555:26;;25627:9;25621:4;25617:20;25613:1;25602:9;25598:17;25591:47;25655:131;25781:4;25655:131;:::i;:::-;25647:139;;25374:419;;;:::o;25799:::-;25965:4;26003:2;25992:9;25988:18;25980:26;;26052:9;26046:4;26042:20;26038:1;26027:9;26023:17;26016:47;26080:131;26206:4;26080:131;:::i;:::-;26072:139;;25799:419;;;:::o;26224:::-;26390:4;26428:2;26417:9;26413:18;26405:26;;26477:9;26471:4;26467:20;26463:1;26452:9;26448:17;26441:47;26505:131;26631:4;26505:131;:::i;:::-;26497:139;;26224:419;;;:::o;26649:::-;26815:4;26853:2;26842:9;26838:18;26830:26;;26902:9;26896:4;26892:20;26888:1;26877:9;26873:17;26866:47;26930:131;27056:4;26930:131;:::i;:::-;26922:139;;26649:419;;;:::o;27074:::-;27240:4;27278:2;27267:9;27263:18;27255:26;;27327:9;27321:4;27317:20;27313:1;27302:9;27298:17;27291:47;27355:131;27481:4;27355:131;:::i;:::-;27347:139;;27074:419;;;:::o;27499:::-;27665:4;27703:2;27692:9;27688:18;27680:26;;27752:9;27746:4;27742:20;27738:1;27727:9;27723:17;27716:47;27780:131;27906:4;27780:131;:::i;:::-;27772:139;;27499:419;;;:::o;27924:222::-;28017:4;28055:2;28044:9;28040:18;28032:26;;28068:71;28136:1;28125:9;28121:17;28112:6;28068:71;:::i;:::-;27924:222;;;;:::o;28152:129::-;28186:6;28213:20;;:::i;:::-;28203:30;;28242:33;28270:4;28262:6;28242:33;:::i;:::-;28152:129;;;:::o;28287:75::-;28320:6;28353:2;28347:9;28337:19;;28287:75;:::o;28368:307::-;28429:4;28519:18;28511:6;28508:30;28505:56;;;28541:18;;:::i;:::-;28505:56;28579:29;28601:6;28579:29;:::i;:::-;28571:37;;28663:4;28657;28653:15;28645:23;;28368:307;;;:::o;28681:308::-;28743:4;28833:18;28825:6;28822:30;28819:56;;;28855:18;;:::i;:::-;28819:56;28893:29;28915:6;28893:29;:::i;:::-;28885:37;;28977:4;28971;28967:15;28959:23;;28681:308;;;:::o;28995:98::-;29046:6;29080:5;29074:12;29064:22;;28995:98;;;:::o;29099:99::-;29151:6;29185:5;29179:12;29169:22;;29099:99;;;:::o;29204:168::-;29287:11;29321:6;29316:3;29309:19;29361:4;29356:3;29352:14;29337:29;;29204:168;;;;:::o;29378:169::-;29462:11;29496:6;29491:3;29484:19;29536:4;29531:3;29527:14;29512:29;;29378:169;;;;:::o;29553:148::-;29655:11;29692:3;29677:18;;29553:148;;;;:::o;29707:305::-;29747:3;29766:20;29784:1;29766:20;:::i;:::-;29761:25;;29800:20;29818:1;29800:20;:::i;:::-;29795:25;;29954:1;29886:66;29882:74;29879:1;29876:81;29873:107;;;29960:18;;:::i;:::-;29873:107;30004:1;30001;29997:9;29990:16;;29707:305;;;;:::o;30018:185::-;30058:1;30075:20;30093:1;30075:20;:::i;:::-;30070:25;;30109:20;30127:1;30109:20;:::i;:::-;30104:25;;30148:1;30138:35;;30153:18;;:::i;:::-;30138:35;30195:1;30192;30188:9;30183:14;;30018:185;;;;:::o;30209:191::-;30249:4;30269:20;30287:1;30269:20;:::i;:::-;30264:25;;30303:20;30321:1;30303:20;:::i;:::-;30298:25;;30342:1;30339;30336:8;30333:34;;;30347:18;;:::i;:::-;30333:34;30392:1;30389;30385:9;30377:17;;30209:191;;;;:::o;30406:96::-;30443:7;30472:24;30490:5;30472:24;:::i;:::-;30461:35;;30406:96;;;:::o;30508:90::-;30542:7;30585:5;30578:13;30571:21;30560:32;;30508:90;;;:::o;30604:149::-;30640:7;30680:66;30673:5;30669:78;30658:89;;30604:149;;;:::o;30759:126::-;30796:7;30836:42;30829:5;30825:54;30814:65;;30759:126;;;:::o;30891:77::-;30928:7;30957:5;30946:16;;30891:77;;;:::o;30974:154::-;31058:6;31053:3;31048;31035:30;31120:1;31111:6;31106:3;31102:16;31095:27;30974:154;;;:::o;31134:307::-;31202:1;31212:113;31226:6;31223:1;31220:13;31212:113;;;31311:1;31306:3;31302:11;31296:18;31292:1;31287:3;31283:11;31276:39;31248:2;31245:1;31241:10;31236:15;;31212:113;;;31343:6;31340:1;31337:13;31334:101;;;31423:1;31414:6;31409:3;31405:16;31398:27;31334:101;31183:258;31134:307;;;:::o;31447:320::-;31491:6;31528:1;31522:4;31518:12;31508:22;;31575:1;31569:4;31565:12;31596:18;31586:81;;31652:4;31644:6;31640:17;31630:27;;31586:81;31714:2;31706:6;31703:14;31683:18;31680:38;31677:84;;;31733:18;;:::i;:::-;31677:84;31498:269;31447:320;;;:::o;31773:281::-;31856:27;31878:4;31856:27;:::i;:::-;31848:6;31844:40;31986:6;31974:10;31971:22;31950:18;31938:10;31935:34;31932:62;31929:88;;;31997:18;;:::i;:::-;31929:88;32037:10;32033:2;32026:22;31816:238;31773:281;;:::o;32060:233::-;32099:3;32122:24;32140:5;32122:24;:::i;:::-;32113:33;;32168:66;32161:5;32158:77;32155:103;;;32238:18;;:::i;:::-;32155:103;32285:1;32278:5;32274:13;32267:20;;32060:233;;;:::o;32299:176::-;32331:1;32348:20;32366:1;32348:20;:::i;:::-;32343:25;;32382:20;32400:1;32382:20;:::i;:::-;32377:25;;32421:1;32411:35;;32426:18;;:::i;:::-;32411:35;32467:1;32464;32460:9;32455:14;;32299:176;;;;:::o;32481:180::-;32529:77;32526:1;32519:88;32626:4;32623:1;32616:15;32650:4;32647:1;32640:15;32667:180;32715:77;32712:1;32705:88;32812:4;32809:1;32802:15;32836:4;32833:1;32826:15;32853:180;32901:77;32898:1;32891:88;32998:4;32995:1;32988:15;33022:4;33019:1;33012:15;33039:180;33087:77;33084:1;33077:88;33184:4;33181:1;33174:15;33208:4;33205:1;33198:15;33225:180;33273:77;33270:1;33263:88;33370:4;33367:1;33360:15;33394:4;33391:1;33384:15;33411:117;33520:1;33517;33510:12;33534:117;33643:1;33640;33633:12;33657:117;33766:1;33763;33756:12;33780:117;33889:1;33886;33879:12;33903:117;34012:1;34009;34002:12;34026:117;34135:1;34132;34125:12;34149:102;34190:6;34241:2;34237:7;34232:2;34225:5;34221:14;34217:28;34207:38;;34149:102;;;:::o;34257:237::-;34397:34;34393:1;34385:6;34381:14;34374:58;34466:20;34461:2;34453:6;34449:15;34442:45;34257:237;:::o;34500:225::-;34640:34;34636:1;34628:6;34624:14;34617:58;34709:8;34704:2;34696:6;34692:15;34685:33;34500:225;:::o;34731:173::-;34871:25;34867:1;34859:6;34855:14;34848:49;34731:173;:::o;34910:178::-;35050:30;35046:1;35038:6;35034:14;35027:54;34910:178;:::o;35094:223::-;35234:34;35230:1;35222:6;35218:14;35211:58;35303:6;35298:2;35290:6;35286:15;35279:31;35094:223;:::o;35323:175::-;35463:27;35459:1;35451:6;35447:14;35440:51;35323:175;:::o;35504:231::-;35644:34;35640:1;35632:6;35628:14;35621:58;35713:14;35708:2;35700:6;35696:15;35689:39;35504:231;:::o;35741:243::-;35881:34;35877:1;35869:6;35865:14;35858:58;35950:26;35945:2;35937:6;35933:15;35926:51;35741:243;:::o;35990:229::-;36130:34;36126:1;36118:6;36114:14;36107:58;36199:12;36194:2;36186:6;36182:15;36175:37;35990:229;:::o;36225:228::-;36365:34;36361:1;36353:6;36349:14;36342:58;36434:11;36429:2;36421:6;36417:15;36410:36;36225:228;:::o;36459:163::-;36599:15;36595:1;36587:6;36583:14;36576:39;36459:163;:::o;36628:182::-;36768:34;36764:1;36756:6;36752:14;36745:58;36628:182;:::o;36816:231::-;36956:34;36952:1;36944:6;36940:14;36933:58;37025:14;37020:2;37012:6;37008:15;37001:39;36816:231;:::o;37053:182::-;37193:34;37189:1;37181:6;37177:14;37170:58;37053:182;:::o;37241:228::-;37381:34;37377:1;37369:6;37365:14;37358:58;37450:11;37445:2;37437:6;37433:15;37426:36;37241:228;:::o;37475:234::-;37615:34;37611:1;37603:6;37599:14;37592:58;37684:17;37679:2;37671:6;37667:15;37660:42;37475:234;:::o;37715:220::-;37855:34;37851:1;37843:6;37839:14;37832:58;37924:3;37919:2;37911:6;37907:15;37900:28;37715:220;:::o;37941:236::-;38081:34;38077:1;38069:6;38065:14;38058:58;38150:19;38145:2;38137:6;38133:15;38126:44;37941:236;:::o;38183:168::-;38323:20;38319:1;38311:6;38307:14;38300:44;38183:168;:::o;38357:171::-;38497:23;38493:1;38485:6;38481:14;38474:47;38357:171;:::o;38534:122::-;38607:24;38625:5;38607:24;:::i;:::-;38600:5;38597:35;38587:63;;38646:1;38643;38636:12;38587:63;38534:122;:::o;38662:116::-;38732:21;38747:5;38732:21;:::i;:::-;38725:5;38722:32;38712:60;;38768:1;38765;38758:12;38712:60;38662:116;:::o;38784:120::-;38856:23;38873:5;38856:23;:::i;:::-;38849:5;38846:34;38836:62;;38894:1;38891;38884:12;38836:62;38784:120;:::o;38910:122::-;38983:24;39001:5;38983:24;:::i;:::-;38976:5;38973:35;38963:63;;39022:1;39019;39012:12;38963:63;38910:122;:::o

Swarm Source

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