ETH Price: $3,030.86 (-2.09%)

Token

Optimistic Apes (OA)
 

Overview

Max Total Supply

2,300 OA

Holders

1,380

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Balance
10 OA
0xf1b98463d6574c998f03e6edf6d7b4e5f917f915
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
OptimisticApes

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 optimistic.etherscan.io on 2022-03-05
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (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.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.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);

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contract-1c39db8a90.sol


pragma solidity ^0.8.2;









contract OptimisticApes is ERC721, ERC721URIStorage, Pausable, Ownable {
    using Counters for Counters.Counter;
    using SafeMath for uint256;

    uint256 public circulatingSupply;

    Counters.Counter private _tokenIdCounter;

    //Mint Price
    uint256 public mintRate = 0.01 ether;
    //Max supply
    uint public MAX_SUPPLY = 2300;
    //max per mint
    uint public MAX_PER_MINT = 10;

    string public strBaseURI = "https://optimisticapes.com/tokens/";

    constructor() ERC721("Optimistic Apes", "OA") {}

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

    function setBaseURI(string memory newBaseURI) public onlyOwner{
        strBaseURI = newBaseURI;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function safeMint(address to, uint256 _mintAmount, string memory uri) public payable{
        require(!paused(), "Minting paused. Check discord for the reason why.");
        require(_mintAmount > 0, "Must mint at least 1 token.");
        require(_mintAmount <= MAX_PER_MINT, "You can only mint 10 at a time.");
        require(_tokenIdCounter.current().add(_mintAmount) <= MAX_SUPPLY, "Mint exceeds max supply.");
        require(msg.value >= mintRate.mul(_mintAmount), "Did not provide enough ETH.");
         for (uint256 i = 1; i <= _mintAmount; i++) {
            circulatingSupply++;
            _tokenIdCounter.increment();
            uint256 tokenId = _tokenIdCounter.current();
            _safeMint(to, tokenId);
            _setTokenURI(tokenId, uri);
        }
        
    }

    //function to airdrop NFT's to people
    function airDrop(address to,string memory uri ) public onlyOwner{
        circulatingSupply++;
        _tokenIdCounter.increment();
        uint256 tokenId = _tokenIdCounter.current();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory){
        string memory uri = super.tokenURI(tokenId);
        return string(abi.encodePacked(uri, ".json"));
    }

    //function to withdraw money
    function withdraw() public onlyOwner{
        payable(owner()).transfer(address(this).balance);
    }

    function totalSupply() public view returns(uint256){
        return circulatingSupply;
    }

}

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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"airDrop","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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"safeMint","outputs":[],"stateMutability":"payable","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":[],"name":"strBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052662386f26fc10000600a556108fc600b55600a600c556040518060600160405280602281526020016200434c60229139600d90805190602001906200004b92919062000209565b503480156200005957600080fd5b506040518060400160405280600f81526020017f4f7074696d6973746963204170657300000000000000000000000000000000008152506040518060400160405280600281526020017f4f410000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000de92919062000209565b508060019080519060200190620000f792919062000209565b5050506000600760006101000a81548160ff02191690831515021790555062000135620001296200013b60201b60201c565b6200014360201b60201c565b6200031e565b600033905090565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021790620002b9565b90600052602060002090601f0160209004810192826200023b576000855562000287565b82601f106200025657805160ff191683800117855562000287565b8280016001018555821562000287579182015b828111156200028657825182559160200191906001019062000269565b5b5090506200029691906200029a565b5090565b5b80821115620002b55760008160009055506001016200029b565b5090565b60006002820490506001821680620002d257607f821691505b60208210811415620002e957620002e8620002ef565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61401e806200032e6000396000f3fe6080604052600436106101c25760003560e01c80636352211e116100f7578063a22cb46511610095578063ca0dcf1611610064578063ca0dcf16146105f6578063cd279c7c14610621578063e985e9c51461063d578063f2fde38b1461067a576101c2565b8063a22cb4651461053c578063ad87386814610565578063b88d4fde14610590578063c87b56dd146105b9576101c2565b80638456cb59116100d15780638456cb59146104a45780638da5cb5b146104bb5780639358928b146104e657806395d89b4114610511576101c2565b80636352211e1461041357806370a0823114610450578063715018a61461048d576101c2565b80632cd07c50116101645780633f4ba83a1161013e5780633f4ba83a1461037f57806342842e0e1461039657806355f804b3146103bf5780635c975abb146103e8576101c2565b80632cd07c501461031457806332cb6b0c1461033d5780633ccfd60b14610368576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309d42b301461029557806318160ddd146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612b53565b6106a3565b6040516101fb919061312e565b60405180910390f35b34801561021057600080fd5b50610219610785565b6040516102269190613149565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612bf6565b610817565b60405161026391906130c7565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612aa4565b61089c565b005b3480156102a157600080fd5b506102aa6109b4565b6040516102b7919061348b565b60405180910390f35b3480156102cc57600080fd5b506102d56109ba565b6040516102e2919061348b565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612932565b6109c4565b005b34801561032057600080fd5b5061033b60048036038101906103369190612a48565b610a24565b005b34801561034957600080fd5b50610352610ae9565b60405161035f919061348b565b60405180910390f35b34801561037457600080fd5b5061037d610aef565b005b34801561038b57600080fd5b50610394610bbb565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612932565b610c41565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612bad565b610c61565b005b3480156103f457600080fd5b506103fd610cf7565b60405161040a919061312e565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190612bf6565b610d0e565b60405161044791906130c7565b60405180910390f35b34801561045c57600080fd5b50610477600480360381019061047291906128c5565b610dc0565b604051610484919061348b565b60405180910390f35b34801561049957600080fd5b506104a2610e78565b005b3480156104b057600080fd5b506104b9610f00565b005b3480156104c757600080fd5b506104d0610f86565b6040516104dd91906130c7565b60405180910390f35b3480156104f257600080fd5b506104fb610fb0565b604051610508919061348b565b60405180910390f35b34801561051d57600080fd5b50610526610fb6565b6040516105339190613149565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190612a08565b611048565b005b34801561057157600080fd5b5061057a61105e565b6040516105879190613149565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190612985565b6110ec565b005b3480156105c557600080fd5b506105e060048036038101906105db9190612bf6565b61114e565b6040516105ed9190613149565b60405180910390f35b34801561060257600080fd5b5061060b611185565b604051610618919061348b565b60405180910390f35b61063b60048036038101906106369190612ae4565b61118b565b005b34801561064957600080fd5b50610664600480360381019061065f91906128f2565b61137e565b604051610671919061312e565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c91906128c5565b611412565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077e575061077d8261150a565b5b9050919050565b6060600080546107949061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546107c09061373b565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050505050905090565b600061082282611574565b610861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610858906133eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a782610d0e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f9061344b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109376115e0565b73ffffffffffffffffffffffffffffffffffffffff1614806109665750610965816109606115e0565b61137e565b5b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c906132eb565b60405180910390fd5b6109af83836115e8565b505050565b600c5481565b6000600854905090565b6109d56109cf6115e0565b826116a1565b610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b9061346b565b60405180910390fd5b610a1f83838361177f565b505050565b610a2c6115e0565b73ffffffffffffffffffffffffffffffffffffffff16610a4a610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a979061340b565b60405180910390fd5b60086000815480929190610ab39061379e565b9190505550610ac260096119e6565b6000610ace60096119fc565b9050610ada8382611a0a565b610ae48183611a28565b505050565b600b5481565b610af76115e0565b73ffffffffffffffffffffffffffffffffffffffff16610b15610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061340b565b60405180910390fd5b610b73610f86565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bb8573d6000803e3d6000fd5b50565b610bc36115e0565b73ffffffffffffffffffffffffffffffffffffffff16610be1610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e9061340b565b60405180910390fd5b610c3f611a9c565b565b610c5c838383604051806020016040528060008152506110ec565b505050565b610c696115e0565b73ffffffffffffffffffffffffffffffffffffffff16610c87610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061340b565b60405180910390fd5b80600d9080519060200190610cf39291906126d9565b5050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061334b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e289061332b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e806115e0565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061340b565b60405180910390fd5b610efe6000611b3e565b565b610f086115e0565b73ffffffffffffffffffffffffffffffffffffffff16610f26610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f739061340b565b60405180910390fd5b610f84611c04565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b606060018054610fc59061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff19061373b565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b5050505050905090565b61105a6110536115e0565b8383611ca7565b5050565b600d805461106b9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546110979061373b565b80156110e45780601f106110b9576101008083540402835291602001916110e4565b820191906000526020600020905b8154815290600101906020018083116110c757829003601f168201915b505050505081565b6110fd6110f76115e0565b836116a1565b61113c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111339061346b565b60405180910390fd5b61114884848484611e14565b50505050565b6060600061115b83611e70565b90508060405160200161116e91906130a5565b604051602081830303815290604052915050919050565b600a5481565b611193610cf7565b156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca9061316b565b60405180910390fd5b60008211611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d9061324b565b60405180910390fd5b600c5482111561125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906133ab565b60405180910390fd5b600b5461127a8361126c60096119fc565b611fc290919063ffffffff16565b11156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061330b565b60405180910390fd5b6112d082600a54611fd890919063ffffffff16565b341015611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906131cb565b60405180910390fd5b6000600190505b82811161137857600860008154809291906113339061379e565b919050555061134260096119e6565b600061134e60096119fc565b905061135a8582611a0a565b6113648184611a28565b5080806113709061379e565b915050611319565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61141a6115e0565b73ffffffffffffffffffffffffffffffffffffffff16611438610f86565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114859061340b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906131eb565b60405180910390fd5b61150781611b3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661165b83610d0e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116ac82611574565b6116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906132ab565b60405180910390fd5b60006116f683610d0e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061176557508373ffffffffffffffffffffffffffffffffffffffff1661174d84610817565b73ffffffffffffffffffffffffffffffffffffffff16145b806117765750611775818561137e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179f82610d0e565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec9061320b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061326b565b60405180910390fd5b611870838383611fee565b61187b6000826115e8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cb9190613651565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119229190613570565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e1838383612046565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611a2482826040518060200160405280600081525061204b565b5050565b611a3182611574565b611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061336b565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611a979291906126d9565b505050565b611aa4610cf7565b611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada9061318b565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b276115e0565b604051611b3491906130c7565b60405180910390a1565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c0c610cf7565b15611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906132cb565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c906115e0565b604051611c9d91906130c7565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d9061328b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e07919061312e565b60405180910390a3505050565b611e1f84848461177f565b611e2b848484846120a6565b611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e61906131ab565b60405180910390fd5b50505050565b6060611e7b82611574565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb1906133cb565b60405180910390fd5b6000600660008481526020019081526020016000208054611eda9061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f069061373b565b8015611f535780601f10611f2857610100808354040283529160200191611f53565b820191906000526020600020905b815481529060010190602001808311611f3657829003601f168201915b505050505090506000611f6461223d565b9050600081511415611f7a578192505050611fbd565b600082511115611faf578082604051602001611f97929190613081565b60405160208183030381529060405292505050611fbd565b611fb8846122cf565b925050505b919050565b60008183611fd09190613570565b905092915050565b60008183611fe691906135f7565b905092915050565b611ff6610cf7565b15612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906132cb565b60405180910390fd5b612041838383612376565b505050565b505050565b612055838361237b565b61206260008484846120a6565b6120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906131ab565b60405180910390fd5b505050565b60006120c78473ffffffffffffffffffffffffffffffffffffffff16612555565b15612230578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f06115e0565b8786866040518563ffffffff1660e01b815260040161211294939291906130e2565b602060405180830381600087803b15801561212c57600080fd5b505af192505050801561215d57506040513d601f19601f8201168201806040525081019061215a9190612b80565b60015b6121e0573d806000811461218d576040519150601f19603f3d011682016040523d82523d6000602084013e612192565b606091505b506000815114156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906131ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612235565b600190505b949350505050565b6060600d805461224c9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546122789061373b565b80156122c55780601f1061229a576101008083540402835291602001916122c5565b820191906000526020600020905b8154815290600101906020018083116122a857829003601f168201915b5050505050905090565b60606122da82611574565b612319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123109061342b565b60405180910390fd5b600061232361223d565b90506000815111612343576040518060200160405280600081525061236e565b8061234d84612578565b60405160200161235e929190613081565b6040516020818303038152906040525b915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e29061338b565b60405180910390fd5b6123f481611574565b15612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b9061322b565b60405180910390fd5b61244060008383611fee565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124909190613570565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461255160008383612046565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156125c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126d4565b600082905060005b600082146125f25780806125db9061379e565b915050600a826125eb91906135c6565b91506125c8565b60008167ffffffffffffffff81111561260e5761260d6138d4565b5b6040519080825280601f01601f1916602001820160405280156126405781602001600182028036833780820191505090505b5090505b600085146126cd576001826126599190613651565b9150600a8561266891906137e7565b60306126749190613570565b60f81b81838151811061268a576126896138a5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126c691906135c6565b9450612644565b8093505050505b919050565b8280546126e59061373b565b90600052602060002090601f016020900481019282612707576000855561274e565b82601f1061272057805160ff191683800117855561274e565b8280016001018555821561274e579182015b8281111561274d578251825591602001919060010190612732565b5b50905061275b919061275f565b5090565b5b80821115612778576000816000905550600101612760565b5090565b600061278f61278a846134cb565b6134a6565b9050828152602081018484840111156127ab576127aa613908565b5b6127b68482856136f9565b509392505050565b60006127d16127cc846134fc565b6134a6565b9050828152602081018484840111156127ed576127ec613908565b5b6127f88482856136f9565b509392505050565b60008135905061280f81613f8c565b92915050565b60008135905061282481613fa3565b92915050565b60008135905061283981613fba565b92915050565b60008151905061284e81613fba565b92915050565b600082601f83011261286957612868613903565b5b813561287984826020860161277c565b91505092915050565b600082601f83011261289757612896613903565b5b81356128a78482602086016127be565b91505092915050565b6000813590506128bf81613fd1565b92915050565b6000602082840312156128db576128da613912565b5b60006128e984828501612800565b91505092915050565b6000806040838503121561290957612908613912565b5b600061291785828601612800565b925050602061292885828601612800565b9150509250929050565b60008060006060848603121561294b5761294a613912565b5b600061295986828701612800565b935050602061296a86828701612800565b925050604061297b868287016128b0565b9150509250925092565b6000806000806080858703121561299f5761299e613912565b5b60006129ad87828801612800565b94505060206129be87828801612800565b93505060406129cf878288016128b0565b925050606085013567ffffffffffffffff8111156129f0576129ef61390d565b5b6129fc87828801612854565b91505092959194509250565b60008060408385031215612a1f57612a1e613912565b5b6000612a2d85828601612800565b9250506020612a3e85828601612815565b9150509250929050565b60008060408385031215612a5f57612a5e613912565b5b6000612a6d85828601612800565b925050602083013567ffffffffffffffff811115612a8e57612a8d61390d565b5b612a9a85828601612882565b9150509250929050565b60008060408385031215612abb57612aba613912565b5b6000612ac985828601612800565b9250506020612ada858286016128b0565b9150509250929050565b600080600060608486031215612afd57612afc613912565b5b6000612b0b86828701612800565b9350506020612b1c868287016128b0565b925050604084013567ffffffffffffffff811115612b3d57612b3c61390d565b5b612b4986828701612882565b9150509250925092565b600060208284031215612b6957612b68613912565b5b6000612b778482850161282a565b91505092915050565b600060208284031215612b9657612b95613912565b5b6000612ba48482850161283f565b91505092915050565b600060208284031215612bc357612bc2613912565b5b600082013567ffffffffffffffff811115612be157612be061390d565b5b612bed84828501612882565b91505092915050565b600060208284031215612c0c57612c0b613912565b5b6000612c1a848285016128b0565b91505092915050565b612c2c81613685565b82525050565b612c3b81613697565b82525050565b6000612c4c8261352d565b612c568185613543565b9350612c66818560208601613708565b612c6f81613917565b840191505092915050565b6000612c8582613538565b612c8f8185613554565b9350612c9f818560208601613708565b612ca881613917565b840191505092915050565b6000612cbe82613538565b612cc88185613565565b9350612cd8818560208601613708565b80840191505092915050565b6000612cf1603183613554565b9150612cfc82613928565b604082019050919050565b6000612d14601483613554565b9150612d1f82613977565b602082019050919050565b6000612d37603283613554565b9150612d42826139a0565b604082019050919050565b6000612d5a601b83613554565b9150612d65826139ef565b602082019050919050565b6000612d7d602683613554565b9150612d8882613a18565b604082019050919050565b6000612da0602583613554565b9150612dab82613a67565b604082019050919050565b6000612dc3601c83613554565b9150612dce82613ab6565b602082019050919050565b6000612de6601b83613554565b9150612df182613adf565b602082019050919050565b6000612e09602483613554565b9150612e1482613b08565b604082019050919050565b6000612e2c601983613554565b9150612e3782613b57565b602082019050919050565b6000612e4f602c83613554565b9150612e5a82613b80565b604082019050919050565b6000612e72601083613554565b9150612e7d82613bcf565b602082019050919050565b6000612e95603883613554565b9150612ea082613bf8565b604082019050919050565b6000612eb8601883613554565b9150612ec382613c47565b602082019050919050565b6000612edb602a83613554565b9150612ee682613c70565b604082019050919050565b6000612efe602983613554565b9150612f0982613cbf565b604082019050919050565b6000612f21602e83613554565b9150612f2c82613d0e565b604082019050919050565b6000612f44602083613554565b9150612f4f82613d5d565b602082019050919050565b6000612f67601f83613554565b9150612f7282613d86565b602082019050919050565b6000612f8a603183613554565b9150612f9582613daf565b604082019050919050565b6000612fad602c83613554565b9150612fb882613dfe565b604082019050919050565b6000612fd0600583613565565b9150612fdb82613e4d565b600582019050919050565b6000612ff3602083613554565b9150612ffe82613e76565b602082019050919050565b6000613016602f83613554565b915061302182613e9f565b604082019050919050565b6000613039602183613554565b915061304482613eee565b604082019050919050565b600061305c603183613554565b915061306782613f3d565b604082019050919050565b61307b816136ef565b82525050565b600061308d8285612cb3565b91506130998284612cb3565b91508190509392505050565b60006130b18284612cb3565b91506130bc82612fc3565b915081905092915050565b60006020820190506130dc6000830184612c23565b92915050565b60006080820190506130f76000830187612c23565b6131046020830186612c23565b6131116040830185613072565b81810360608301526131238184612c41565b905095945050505050565b60006020820190506131436000830184612c32565b92915050565b600060208201905081810360008301526131638184612c7a565b905092915050565b6000602082019050818103600083015261318481612ce4565b9050919050565b600060208201905081810360008301526131a481612d07565b9050919050565b600060208201905081810360008301526131c481612d2a565b9050919050565b600060208201905081810360008301526131e481612d4d565b9050919050565b6000602082019050818103600083015261320481612d70565b9050919050565b6000602082019050818103600083015261322481612d93565b9050919050565b6000602082019050818103600083015261324481612db6565b9050919050565b6000602082019050818103600083015261326481612dd9565b9050919050565b6000602082019050818103600083015261328481612dfc565b9050919050565b600060208201905081810360008301526132a481612e1f565b9050919050565b600060208201905081810360008301526132c481612e42565b9050919050565b600060208201905081810360008301526132e481612e65565b9050919050565b6000602082019050818103600083015261330481612e88565b9050919050565b6000602082019050818103600083015261332481612eab565b9050919050565b6000602082019050818103600083015261334481612ece565b9050919050565b6000602082019050818103600083015261336481612ef1565b9050919050565b6000602082019050818103600083015261338481612f14565b9050919050565b600060208201905081810360008301526133a481612f37565b9050919050565b600060208201905081810360008301526133c481612f5a565b9050919050565b600060208201905081810360008301526133e481612f7d565b9050919050565b6000602082019050818103600083015261340481612fa0565b9050919050565b6000602082019050818103600083015261342481612fe6565b9050919050565b6000602082019050818103600083015261344481613009565b9050919050565b600060208201905081810360008301526134648161302c565b9050919050565b600060208201905081810360008301526134848161304f565b9050919050565b60006020820190506134a06000830184613072565b92915050565b60006134b06134c1565b90506134bc828261376d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134e6576134e56138d4565b5b6134ef82613917565b9050602081019050919050565b600067ffffffffffffffff821115613517576135166138d4565b5b61352082613917565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061357b826136ef565b9150613586836136ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135bb576135ba613818565b5b828201905092915050565b60006135d1826136ef565b91506135dc836136ef565b9250826135ec576135eb613847565b5b828204905092915050565b6000613602826136ef565b915061360d836136ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364657613645613818565b5b828202905092915050565b600061365c826136ef565b9150613667836136ef565b92508282101561367a57613679613818565b5b828203905092915050565b6000613690826136cf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372657808201518184015260208101905061370b565b83811115613735576000848401525b50505050565b6000600282049050600182168061375357607f821691505b6020821081141561376757613766613876565b5b50919050565b61377682613917565b810181811067ffffffffffffffff82111715613795576137946138d4565b5b80604052505050565b60006137a9826136ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137dc576137db613818565b5b600182019050919050565b60006137f2826136ef565b91506137fd836136ef565b92508261380d5761380c613847565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e74696e67207061757365642e20436865636b20646973636f726420666f60008201527f722074686520726561736f6e207768792e000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f446964206e6f742070726f7669646520656e6f756768204554482e0000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e2e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d696e742065786365656473206d617820737570706c792e0000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206d696e7420313020617420612074696d652e00600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613f9581613685565b8114613fa057600080fd5b50565b613fac81613697565b8114613fb757600080fd5b50565b613fc3816136a3565b8114613fce57600080fd5b50565b613fda816136ef565b8114613fe557600080fd5b5056fea26469706673582212201908185cbf428c096361919bb0cb2220b5ac8378ce7066680893234bf877f60364736f6c6343000807003368747470733a2f2f6f7074696d6973746963617065732e636f6d2f746f6b656e732f

Deployed Bytecode

0x6080604052600436106101c25760003560e01c80636352211e116100f7578063a22cb46511610095578063ca0dcf1611610064578063ca0dcf16146105f6578063cd279c7c14610621578063e985e9c51461063d578063f2fde38b1461067a576101c2565b8063a22cb4651461053c578063ad87386814610565578063b88d4fde14610590578063c87b56dd146105b9576101c2565b80638456cb59116100d15780638456cb59146104a45780638da5cb5b146104bb5780639358928b146104e657806395d89b4114610511576101c2565b80636352211e1461041357806370a0823114610450578063715018a61461048d576101c2565b80632cd07c50116101645780633f4ba83a1161013e5780633f4ba83a1461037f57806342842e0e1461039657806355f804b3146103bf5780635c975abb146103e8576101c2565b80632cd07c501461031457806332cb6b0c1461033d5780633ccfd60b14610368576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806309d42b301461029557806318160ddd146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612b53565b6106a3565b6040516101fb919061312e565b60405180910390f35b34801561021057600080fd5b50610219610785565b6040516102269190613149565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612bf6565b610817565b60405161026391906130c7565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612aa4565b61089c565b005b3480156102a157600080fd5b506102aa6109b4565b6040516102b7919061348b565b60405180910390f35b3480156102cc57600080fd5b506102d56109ba565b6040516102e2919061348b565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612932565b6109c4565b005b34801561032057600080fd5b5061033b60048036038101906103369190612a48565b610a24565b005b34801561034957600080fd5b50610352610ae9565b60405161035f919061348b565b60405180910390f35b34801561037457600080fd5b5061037d610aef565b005b34801561038b57600080fd5b50610394610bbb565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612932565b610c41565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612bad565b610c61565b005b3480156103f457600080fd5b506103fd610cf7565b60405161040a919061312e565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190612bf6565b610d0e565b60405161044791906130c7565b60405180910390f35b34801561045c57600080fd5b50610477600480360381019061047291906128c5565b610dc0565b604051610484919061348b565b60405180910390f35b34801561049957600080fd5b506104a2610e78565b005b3480156104b057600080fd5b506104b9610f00565b005b3480156104c757600080fd5b506104d0610f86565b6040516104dd91906130c7565b60405180910390f35b3480156104f257600080fd5b506104fb610fb0565b604051610508919061348b565b60405180910390f35b34801561051d57600080fd5b50610526610fb6565b6040516105339190613149565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e9190612a08565b611048565b005b34801561057157600080fd5b5061057a61105e565b6040516105879190613149565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190612985565b6110ec565b005b3480156105c557600080fd5b506105e060048036038101906105db9190612bf6565b61114e565b6040516105ed9190613149565b60405180910390f35b34801561060257600080fd5b5061060b611185565b604051610618919061348b565b60405180910390f35b61063b60048036038101906106369190612ae4565b61118b565b005b34801561064957600080fd5b50610664600480360381019061065f91906128f2565b61137e565b604051610671919061312e565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c91906128c5565b611412565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061077e575061077d8261150a565b5b9050919050565b6060600080546107949061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546107c09061373b565b801561080d5780601f106107e25761010080835404028352916020019161080d565b820191906000526020600020905b8154815290600101906020018083116107f057829003601f168201915b5050505050905090565b600061082282611574565b610861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610858906133eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a782610d0e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f9061344b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109376115e0565b73ffffffffffffffffffffffffffffffffffffffff1614806109665750610965816109606115e0565b61137e565b5b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c906132eb565b60405180910390fd5b6109af83836115e8565b505050565b600c5481565b6000600854905090565b6109d56109cf6115e0565b826116a1565b610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b9061346b565b60405180910390fd5b610a1f83838361177f565b505050565b610a2c6115e0565b73ffffffffffffffffffffffffffffffffffffffff16610a4a610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a979061340b565b60405180910390fd5b60086000815480929190610ab39061379e565b9190505550610ac260096119e6565b6000610ace60096119fc565b9050610ada8382611a0a565b610ae48183611a28565b505050565b600b5481565b610af76115e0565b73ffffffffffffffffffffffffffffffffffffffff16610b15610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061340b565b60405180910390fd5b610b73610f86565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bb8573d6000803e3d6000fd5b50565b610bc36115e0565b73ffffffffffffffffffffffffffffffffffffffff16610be1610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e9061340b565b60405180910390fd5b610c3f611a9c565b565b610c5c838383604051806020016040528060008152506110ec565b505050565b610c696115e0565b73ffffffffffffffffffffffffffffffffffffffff16610c87610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd49061340b565b60405180910390fd5b80600d9080519060200190610cf39291906126d9565b5050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061334b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e289061332b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e806115e0565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061340b565b60405180910390fd5b610efe6000611b3e565b565b610f086115e0565b73ffffffffffffffffffffffffffffffffffffffff16610f26610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f739061340b565b60405180910390fd5b610f84611c04565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b606060018054610fc59061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff19061373b565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b5050505050905090565b61105a6110536115e0565b8383611ca7565b5050565b600d805461106b9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546110979061373b565b80156110e45780601f106110b9576101008083540402835291602001916110e4565b820191906000526020600020905b8154815290600101906020018083116110c757829003601f168201915b505050505081565b6110fd6110f76115e0565b836116a1565b61113c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111339061346b565b60405180910390fd5b61114884848484611e14565b50505050565b6060600061115b83611e70565b90508060405160200161116e91906130a5565b604051602081830303815290604052915050919050565b600a5481565b611193610cf7565b156111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca9061316b565b60405180910390fd5b60008211611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d9061324b565b60405180910390fd5b600c5482111561125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906133ab565b60405180910390fd5b600b5461127a8361126c60096119fc565b611fc290919063ffffffff16565b11156112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061330b565b60405180910390fd5b6112d082600a54611fd890919063ffffffff16565b341015611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906131cb565b60405180910390fd5b6000600190505b82811161137857600860008154809291906113339061379e565b919050555061134260096119e6565b600061134e60096119fc565b905061135a8582611a0a565b6113648184611a28565b5080806113709061379e565b915050611319565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61141a6115e0565b73ffffffffffffffffffffffffffffffffffffffff16611438610f86565b73ffffffffffffffffffffffffffffffffffffffff161461148e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114859061340b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906131eb565b60405180910390fd5b61150781611b3e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661165b83610d0e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006116ac82611574565b6116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906132ab565b60405180910390fd5b60006116f683610d0e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061176557508373ffffffffffffffffffffffffffffffffffffffff1661174d84610817565b73ffffffffffffffffffffffffffffffffffffffff16145b806117765750611775818561137e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661179f82610d0e565b73ffffffffffffffffffffffffffffffffffffffff16146117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec9061320b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c9061326b565b60405180910390fd5b611870838383611fee565b61187b6000826115e8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cb9190613651565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119229190613570565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46119e1838383612046565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b611a2482826040518060200160405280600081525061204b565b5050565b611a3182611574565b611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061336b565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611a979291906126d9565b505050565b611aa4610cf7565b611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada9061318b565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b276115e0565b604051611b3491906130c7565b60405180910390a1565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c0c610cf7565b15611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906132cb565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c906115e0565b604051611c9d91906130c7565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d9061328b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e07919061312e565b60405180910390a3505050565b611e1f84848461177f565b611e2b848484846120a6565b611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e61906131ab565b60405180910390fd5b50505050565b6060611e7b82611574565b611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb1906133cb565b60405180910390fd5b6000600660008481526020019081526020016000208054611eda9061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f069061373b565b8015611f535780601f10611f2857610100808354040283529160200191611f53565b820191906000526020600020905b815481529060010190602001808311611f3657829003601f168201915b505050505090506000611f6461223d565b9050600081511415611f7a578192505050611fbd565b600082511115611faf578082604051602001611f97929190613081565b60405160208183030381529060405292505050611fbd565b611fb8846122cf565b925050505b919050565b60008183611fd09190613570565b905092915050565b60008183611fe691906135f7565b905092915050565b611ff6610cf7565b15612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906132cb565b60405180910390fd5b612041838383612376565b505050565b505050565b612055838361237b565b61206260008484846120a6565b6120a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612098906131ab565b60405180910390fd5b505050565b60006120c78473ffffffffffffffffffffffffffffffffffffffff16612555565b15612230578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f06115e0565b8786866040518563ffffffff1660e01b815260040161211294939291906130e2565b602060405180830381600087803b15801561212c57600080fd5b505af192505050801561215d57506040513d601f19601f8201168201806040525081019061215a9190612b80565b60015b6121e0573d806000811461218d576040519150601f19603f3d011682016040523d82523d6000602084013e612192565b606091505b506000815114156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf906131ab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612235565b600190505b949350505050565b6060600d805461224c9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546122789061373b565b80156122c55780601f1061229a576101008083540402835291602001916122c5565b820191906000526020600020905b8154815290600101906020018083116122a857829003601f168201915b5050505050905090565b60606122da82611574565b612319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123109061342b565b60405180910390fd5b600061232361223d565b90506000815111612343576040518060200160405280600081525061236e565b8061234d84612578565b60405160200161235e929190613081565b6040516020818303038152906040525b915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e29061338b565b60405180910390fd5b6123f481611574565b15612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b9061322b565b60405180910390fd5b61244060008383611fee565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124909190613570565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461255160008383612046565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156125c0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126d4565b600082905060005b600082146125f25780806125db9061379e565b915050600a826125eb91906135c6565b91506125c8565b60008167ffffffffffffffff81111561260e5761260d6138d4565b5b6040519080825280601f01601f1916602001820160405280156126405781602001600182028036833780820191505090505b5090505b600085146126cd576001826126599190613651565b9150600a8561266891906137e7565b60306126749190613570565b60f81b81838151811061268a576126896138a5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126c691906135c6565b9450612644565b8093505050505b919050565b8280546126e59061373b565b90600052602060002090601f016020900481019282612707576000855561274e565b82601f1061272057805160ff191683800117855561274e565b8280016001018555821561274e579182015b8281111561274d578251825591602001919060010190612732565b5b50905061275b919061275f565b5090565b5b80821115612778576000816000905550600101612760565b5090565b600061278f61278a846134cb565b6134a6565b9050828152602081018484840111156127ab576127aa613908565b5b6127b68482856136f9565b509392505050565b60006127d16127cc846134fc565b6134a6565b9050828152602081018484840111156127ed576127ec613908565b5b6127f88482856136f9565b509392505050565b60008135905061280f81613f8c565b92915050565b60008135905061282481613fa3565b92915050565b60008135905061283981613fba565b92915050565b60008151905061284e81613fba565b92915050565b600082601f83011261286957612868613903565b5b813561287984826020860161277c565b91505092915050565b600082601f83011261289757612896613903565b5b81356128a78482602086016127be565b91505092915050565b6000813590506128bf81613fd1565b92915050565b6000602082840312156128db576128da613912565b5b60006128e984828501612800565b91505092915050565b6000806040838503121561290957612908613912565b5b600061291785828601612800565b925050602061292885828601612800565b9150509250929050565b60008060006060848603121561294b5761294a613912565b5b600061295986828701612800565b935050602061296a86828701612800565b925050604061297b868287016128b0565b9150509250925092565b6000806000806080858703121561299f5761299e613912565b5b60006129ad87828801612800565b94505060206129be87828801612800565b93505060406129cf878288016128b0565b925050606085013567ffffffffffffffff8111156129f0576129ef61390d565b5b6129fc87828801612854565b91505092959194509250565b60008060408385031215612a1f57612a1e613912565b5b6000612a2d85828601612800565b9250506020612a3e85828601612815565b9150509250929050565b60008060408385031215612a5f57612a5e613912565b5b6000612a6d85828601612800565b925050602083013567ffffffffffffffff811115612a8e57612a8d61390d565b5b612a9a85828601612882565b9150509250929050565b60008060408385031215612abb57612aba613912565b5b6000612ac985828601612800565b9250506020612ada858286016128b0565b9150509250929050565b600080600060608486031215612afd57612afc613912565b5b6000612b0b86828701612800565b9350506020612b1c868287016128b0565b925050604084013567ffffffffffffffff811115612b3d57612b3c61390d565b5b612b4986828701612882565b9150509250925092565b600060208284031215612b6957612b68613912565b5b6000612b778482850161282a565b91505092915050565b600060208284031215612b9657612b95613912565b5b6000612ba48482850161283f565b91505092915050565b600060208284031215612bc357612bc2613912565b5b600082013567ffffffffffffffff811115612be157612be061390d565b5b612bed84828501612882565b91505092915050565b600060208284031215612c0c57612c0b613912565b5b6000612c1a848285016128b0565b91505092915050565b612c2c81613685565b82525050565b612c3b81613697565b82525050565b6000612c4c8261352d565b612c568185613543565b9350612c66818560208601613708565b612c6f81613917565b840191505092915050565b6000612c8582613538565b612c8f8185613554565b9350612c9f818560208601613708565b612ca881613917565b840191505092915050565b6000612cbe82613538565b612cc88185613565565b9350612cd8818560208601613708565b80840191505092915050565b6000612cf1603183613554565b9150612cfc82613928565b604082019050919050565b6000612d14601483613554565b9150612d1f82613977565b602082019050919050565b6000612d37603283613554565b9150612d42826139a0565b604082019050919050565b6000612d5a601b83613554565b9150612d65826139ef565b602082019050919050565b6000612d7d602683613554565b9150612d8882613a18565b604082019050919050565b6000612da0602583613554565b9150612dab82613a67565b604082019050919050565b6000612dc3601c83613554565b9150612dce82613ab6565b602082019050919050565b6000612de6601b83613554565b9150612df182613adf565b602082019050919050565b6000612e09602483613554565b9150612e1482613b08565b604082019050919050565b6000612e2c601983613554565b9150612e3782613b57565b602082019050919050565b6000612e4f602c83613554565b9150612e5a82613b80565b604082019050919050565b6000612e72601083613554565b9150612e7d82613bcf565b602082019050919050565b6000612e95603883613554565b9150612ea082613bf8565b604082019050919050565b6000612eb8601883613554565b9150612ec382613c47565b602082019050919050565b6000612edb602a83613554565b9150612ee682613c70565b604082019050919050565b6000612efe602983613554565b9150612f0982613cbf565b604082019050919050565b6000612f21602e83613554565b9150612f2c82613d0e565b604082019050919050565b6000612f44602083613554565b9150612f4f82613d5d565b602082019050919050565b6000612f67601f83613554565b9150612f7282613d86565b602082019050919050565b6000612f8a603183613554565b9150612f9582613daf565b604082019050919050565b6000612fad602c83613554565b9150612fb882613dfe565b604082019050919050565b6000612fd0600583613565565b9150612fdb82613e4d565b600582019050919050565b6000612ff3602083613554565b9150612ffe82613e76565b602082019050919050565b6000613016602f83613554565b915061302182613e9f565b604082019050919050565b6000613039602183613554565b915061304482613eee565b604082019050919050565b600061305c603183613554565b915061306782613f3d565b604082019050919050565b61307b816136ef565b82525050565b600061308d8285612cb3565b91506130998284612cb3565b91508190509392505050565b60006130b18284612cb3565b91506130bc82612fc3565b915081905092915050565b60006020820190506130dc6000830184612c23565b92915050565b60006080820190506130f76000830187612c23565b6131046020830186612c23565b6131116040830185613072565b81810360608301526131238184612c41565b905095945050505050565b60006020820190506131436000830184612c32565b92915050565b600060208201905081810360008301526131638184612c7a565b905092915050565b6000602082019050818103600083015261318481612ce4565b9050919050565b600060208201905081810360008301526131a481612d07565b9050919050565b600060208201905081810360008301526131c481612d2a565b9050919050565b600060208201905081810360008301526131e481612d4d565b9050919050565b6000602082019050818103600083015261320481612d70565b9050919050565b6000602082019050818103600083015261322481612d93565b9050919050565b6000602082019050818103600083015261324481612db6565b9050919050565b6000602082019050818103600083015261326481612dd9565b9050919050565b6000602082019050818103600083015261328481612dfc565b9050919050565b600060208201905081810360008301526132a481612e1f565b9050919050565b600060208201905081810360008301526132c481612e42565b9050919050565b600060208201905081810360008301526132e481612e65565b9050919050565b6000602082019050818103600083015261330481612e88565b9050919050565b6000602082019050818103600083015261332481612eab565b9050919050565b6000602082019050818103600083015261334481612ece565b9050919050565b6000602082019050818103600083015261336481612ef1565b9050919050565b6000602082019050818103600083015261338481612f14565b9050919050565b600060208201905081810360008301526133a481612f37565b9050919050565b600060208201905081810360008301526133c481612f5a565b9050919050565b600060208201905081810360008301526133e481612f7d565b9050919050565b6000602082019050818103600083015261340481612fa0565b9050919050565b6000602082019050818103600083015261342481612fe6565b9050919050565b6000602082019050818103600083015261344481613009565b9050919050565b600060208201905081810360008301526134648161302c565b9050919050565b600060208201905081810360008301526134848161304f565b9050919050565b60006020820190506134a06000830184613072565b92915050565b60006134b06134c1565b90506134bc828261376d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134e6576134e56138d4565b5b6134ef82613917565b9050602081019050919050565b600067ffffffffffffffff821115613517576135166138d4565b5b61352082613917565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061357b826136ef565b9150613586836136ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135bb576135ba613818565b5b828201905092915050565b60006135d1826136ef565b91506135dc836136ef565b9250826135ec576135eb613847565b5b828204905092915050565b6000613602826136ef565b915061360d836136ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364657613645613818565b5b828202905092915050565b600061365c826136ef565b9150613667836136ef565b92508282101561367a57613679613818565b5b828203905092915050565b6000613690826136cf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372657808201518184015260208101905061370b565b83811115613735576000848401525b50505050565b6000600282049050600182168061375357607f821691505b6020821081141561376757613766613876565b5b50919050565b61377682613917565b810181811067ffffffffffffffff82111715613795576137946138d4565b5b80604052505050565b60006137a9826136ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137dc576137db613818565b5b600182019050919050565b60006137f2826136ef565b91506137fd836136ef565b92508261380d5761380c613847565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e74696e67207061757365642e20436865636b20646973636f726420666f60008201527f722074686520726561736f6e207768792e000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f446964206e6f742070726f7669646520656e6f756768204554482e0000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d757374206d696e74206174206c65617374203120746f6b656e2e0000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d696e742065786365656473206d617820737570706c792e0000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206d696e7420313020617420612074696d652e00600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613f9581613685565b8114613fa057600080fd5b50565b613fac81613697565b8114613fb757600080fd5b50565b613fc3816136a3565b8114613fce57600080fd5b50565b613fda816136ef565b8114613fe557600080fd5b5056fea26469706673582212201908185cbf428c096361919bb0cb2220b5ac8378ce7066680893234bf877f60364736f6c63430008070033

Deployed Bytecode Sourcemap

50119:2914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34919:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35864:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37423:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36946:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50499:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52934:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38173:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51884:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50443:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52823:103;;;;;;;;;;;;;:::i;:::-;;50957:65;;;;;;;;;;;;;:::i;:::-;;38583:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50776:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15171:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35558:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35288:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13222:103;;;;;;;;;;;;;:::i;:::-;;50888:61;;;;;;;;;;;;;:::i;:::-;;12571:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50274:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36033:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37716:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50537:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38839:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52558:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50382:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51030:803;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37942:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13480:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34919:305;35021:4;35073:25;35058:40;;;:11;:40;;;;:105;;;;35130:33;35115:48;;;:11;:48;;;;35058:105;:158;;;;35180:36;35204:11;35180:23;:36::i;:::-;35058:158;35038:178;;34919:305;;;:::o;35864:100::-;35918:13;35951:5;35944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35864:100;:::o;37423:221::-;37499:7;37527:16;37535:7;37527;:16::i;:::-;37519:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37612:15;:24;37628:7;37612:24;;;;;;;;;;;;;;;;;;;;;37605:31;;37423:221;;;:::o;36946:411::-;37027:13;37043:23;37058:7;37043:14;:23::i;:::-;37027:39;;37091:5;37085:11;;:2;:11;;;;37077:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37185:5;37169:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37194:37;37211:5;37218:12;:10;:12::i;:::-;37194:16;:37::i;:::-;37169:62;37147:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;37328:21;37337:2;37341:7;37328:8;:21::i;:::-;37016:341;36946:411;;:::o;50499:29::-;;;;:::o;52934:94::-;52977:7;53003:17;;52996:24;;52934:94;:::o;38173:339::-;38368:41;38387:12;:10;:12::i;:::-;38401:7;38368:18;:41::i;:::-;38360:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;38476:28;38486:4;38492:2;38496:7;38476:9;:28::i;:::-;38173:339;;;:::o;51884:264::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51959:17:::1;;:19;;;;;;;;;:::i;:::-;;;;;;51989:27;:15;:25;:27::i;:::-;52027:15;52045:25;:15;:23;:25::i;:::-;52027:43;;52081:22;52091:2;52095:7;52081:9;:22::i;:::-;52114:26;52127:7;52136:3;52114:12;:26::i;:::-;51948:200;51884:264:::0;;:::o;50443:29::-;;;;:::o;52823:103::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52878:7:::1;:5;:7::i;:::-;52870:25;;:48;52896:21;52870:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52823:103::o:0;50957:65::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51004:10:::1;:8;:10::i;:::-;50957:65::o:0;38583:185::-;38721:39;38738:4;38744:2;38748:7;38721:39;;;;;;;;;;;;:16;:39::i;:::-;38583:185;;;:::o;50776:104::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50862:10:::1;50849;:23;;;;;;;;;;;;:::i;:::-;;50776:104:::0;:::o;15171:86::-;15218:4;15242:7;;;;;;;;;;;15235:14;;15171:86;:::o;35558:239::-;35630:7;35650:13;35666:7;:16;35674:7;35666:16;;;;;;;;;;;;;;;;;;;;;35650:32;;35718:1;35701:19;;:5;:19;;;;35693:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35784:5;35777:12;;;35558:239;;;:::o;35288:208::-;35360:7;35405:1;35388:19;;:5;:19;;;;35380:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;35472:9;:16;35482:5;35472:16;;;;;;;;;;;;;;;;35465:23;;35288:208;;;:::o;13222:103::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13287:30:::1;13314:1;13287:18;:30::i;:::-;13222:103::o:0;50888:61::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50933:8:::1;:6;:8::i;:::-;50888:61::o:0;12571:87::-;12617:7;12644:6;;;;;;;;;;;12637:13;;12571:87;:::o;50274:32::-;;;;:::o;36033:104::-;36089:13;36122:7;36115:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36033:104;:::o;37716:155::-;37811:52;37830:12;:10;:12::i;:::-;37844:8;37854;37811:18;:52::i;:::-;37716:155;;:::o;50537:63::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38839:328::-;39014:41;39033:12;:10;:12::i;:::-;39047:7;39014:18;:41::i;:::-;39006:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;39120:39;39134:4;39140:2;39144:7;39153:5;39120:13;:39::i;:::-;38839:328;;;;:::o;52558:223::-;52649:13;52674:17;52694:23;52709:7;52694:14;:23::i;:::-;52674:43;;52759:3;52742:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;52728:45;;;52558:223;;;:::o;50382:36::-;;;;:::o;51030:803::-;51134:8;:6;:8::i;:::-;51133:9;51125:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51229:1;51215:11;:15;51207:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51296:12;;51281:11;:27;;51273:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;51409:10;;51363:42;51393:11;51363:25;:15;:23;:25::i;:::-;:29;;:42;;;;:::i;:::-;:56;;51355:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;51480:25;51493:11;51480:8;;:12;;:25;;;;:::i;:::-;51467:9;:38;;51459:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51554:9;51566:1;51554:13;;51549:267;51574:11;51569:1;:16;51549:267;;51607:17;;:19;;;;;;;;;:::i;:::-;;;;;;51641:27;:15;:25;:27::i;:::-;51683:15;51701:25;:15;:23;:25::i;:::-;51683:43;;51741:22;51751:2;51755:7;51741:9;:22::i;:::-;51778:26;51791:7;51800:3;51778:12;:26::i;:::-;51592:224;51587:3;;;;;:::i;:::-;;;;51549:267;;;;51030:803;;;:::o;37942:164::-;38039:4;38063:18;:25;38082:5;38063:25;;;;;;;;;;;;;;;:35;38089:8;38063:35;;;;;;;;;;;;;;;;;;;;;;;;;38056:42;;37942:164;;;;:::o;13480:201::-;12802:12;:10;:12::i;:::-;12791:23;;:7;:5;:7::i;:::-;:23;;;12783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13589:1:::1;13569:22;;:8;:22;;;;13561:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13645:28;13664:8;13645:18;:28::i;:::-;13480:201:::0;:::o;27673:157::-;27758:4;27797:25;27782:40;;;:11;:40;;;;27775:47;;27673:157;;;:::o;40677:127::-;40742:4;40794:1;40766:30;;:7;:16;40774:7;40766:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40759:37;;40677:127;;;:::o;11295:98::-;11348:7;11375:10;11368:17;;11295:98;:::o;44823:174::-;44925:2;44898:15;:24;44914:7;44898:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44981:7;44977:2;44943:46;;44952:23;44967:7;44952:14;:23::i;:::-;44943:46;;;;;;;;;;;;44823:174;;:::o;40971:348::-;41064:4;41089:16;41097:7;41089;:16::i;:::-;41081:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41165:13;41181:23;41196:7;41181:14;:23::i;:::-;41165:39;;41234:5;41223:16;;:7;:16;;;:51;;;;41267:7;41243:31;;:20;41255:7;41243:11;:20::i;:::-;:31;;;41223:51;:87;;;;41278:32;41295:5;41302:7;41278:16;:32::i;:::-;41223:87;41215:96;;;40971:348;;;;:::o;44080:625::-;44239:4;44212:31;;:23;44227:7;44212:14;:23::i;:::-;:31;;;44204:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44318:1;44304:16;;:2;:16;;;;44296:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44374:39;44395:4;44401:2;44405:7;44374:20;:39::i;:::-;44478:29;44495:1;44499:7;44478:8;:29::i;:::-;44539:1;44520:9;:15;44530:4;44520:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44568:1;44551:9;:13;44561:2;44551:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44599:2;44580:7;:16;44588:7;44580:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44638:7;44634:2;44619:27;;44628:4;44619:27;;;;;;;;;;;;44659:38;44679:4;44685:2;44689:7;44659:19;:38::i;:::-;44080:625;;;:::o;8021:127::-;8128:1;8110:7;:14;;;:19;;;;;;;;;;;8021:127;:::o;7899:114::-;7964:7;7991;:14;;;7984:21;;7899:114;;;:::o;41661:110::-;41737:26;41747:2;41751:7;41737:26;;;;;;;;;;;;:9;:26::i;:::-;41661:110;;:::o;49379:217::-;49479:16;49487:7;49479;:16::i;:::-;49471:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49579:9;49557:10;:19;49568:7;49557:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;49379:217;;:::o;16230:120::-;15774:8;:6;:8::i;:::-;15766:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16299:5:::1;16289:7;;:15;;;;;;;;;;;;;;;;;;16320:22;16329:12;:10;:12::i;:::-;16320:22;;;;;;:::i;:::-;;;;;;;;16230:120::o:0;13841:191::-;13915:16;13934:6;;;;;;;;;;;13915:25;;13960:8;13951:6;;:17;;;;;;;;;;;;;;;;;;14015:8;13984:40;;14005:8;13984:40;;;;;;;;;;;;13904:128;13841:191;:::o;15971:118::-;15497:8;:6;:8::i;:::-;15496:9;15488:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16041:4:::1;16031:7;;:14;;;;;;;;;;;;;;;;;;16061:20;16068:12;:10;:12::i;:::-;16061:20;;;;;;:::i;:::-;;;;;;;;15971:118::o:0;45139:315::-;45294:8;45285:17;;:5;:17;;;;45277:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45381:8;45343:18;:25;45362:5;45343:25;;;;;;;;;;;;;;;:35;45369:8;45343:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45427:8;45405:41;;45420:5;45405:41;;;45437:8;45405:41;;;;;;:::i;:::-;;;;;;;;45139:315;;;:::o;40049:::-;40206:28;40216:4;40222:2;40226:7;40206:9;:28::i;:::-;40253:48;40276:4;40282:2;40286:7;40295:5;40253:22;:48::i;:::-;40245:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;40049:315;;;;:::o;48544:679::-;48617:13;48651:16;48659:7;48651;:16::i;:::-;48643:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;48734:23;48760:10;:19;48771:7;48760:19;;;;;;;;;;;48734:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48790:18;48811:10;:8;:10::i;:::-;48790:31;;48919:1;48903:4;48897:18;:23;48893:72;;;48944:9;48937:16;;;;;;48893:72;49095:1;49075:9;49069:23;:27;49065:108;;;49144:4;49150:9;49127:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49113:48;;;;;;49065:108;49192:23;49207:7;49192:14;:23::i;:::-;49185:30;;;;48544:679;;;;:::o;2862:98::-;2920:7;2951:1;2947;:5;;;;:::i;:::-;2940:12;;2862:98;;;;:::o;3600:::-;3658:7;3689:1;3685;:5;;;;:::i;:::-;3678:12;;3600:98;;;;:::o;52156:201::-;15497:8;:6;:8::i;:::-;15496:9;15488:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;52304:45:::1;52331:4;52337:2;52341:7;52304:26;:45::i;:::-;52156:201:::0;;;:::o;47901:125::-;;;;:::o;41998:321::-;42128:18;42134:2;42138:7;42128:5;:18::i;:::-;42179:54;42210:1;42214:2;42218:7;42227:5;42179:22;:54::i;:::-;42157:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;41998:321;;;:::o;46019:799::-;46174:4;46195:15;:2;:13;;;:15::i;:::-;46191:620;;;46247:2;46231:36;;;46268:12;:10;:12::i;:::-;46282:4;46288:7;46297:5;46231:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46227:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46490:1;46473:6;:13;:18;46469:272;;;46516:60;;;;;;;;;;:::i;:::-;;;;;;;;46469:272;46691:6;46685:13;46676:6;46672:2;46668:15;46661:38;46227:529;46364:41;;;46354:51;;;:6;:51;;;;46347:58;;;;;46191:620;46795:4;46788:11;;46019:799;;;;;;;:::o;50665:103::-;50717:13;50750:10;50743:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50665:103;:::o;36208:334::-;36281:13;36315:16;36323:7;36315;:16::i;:::-;36307:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36396:21;36420:10;:8;:10::i;:::-;36396:34;;36472:1;36454:7;36448:21;:25;:86;;;;;;;;;;;;;;;;;36500:7;36509:18;:7;:16;:18::i;:::-;36483:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36448:86;36441:93;;;36208:334;;;:::o;47390:126::-;;;;:::o;42655:439::-;42749:1;42735:16;;:2;:16;;;;42727:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42808:16;42816:7;42808;:16::i;:::-;42807:17;42799:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42870:45;42899:1;42903:2;42907:7;42870:20;:45::i;:::-;42945:1;42928:9;:13;42938:2;42928:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42976:2;42957:7;:16;42965:7;42957:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;43021:7;43017:2;42996:33;;43013:1;42996:33;;;;;;;;;;;;43042:44;43070:1;43074:2;43078:7;43042:19;:44::i;:::-;42655:439;;:::o;17590:326::-;17650:4;17907:1;17885:7;:19;;;:23;17878:30;;17590:326;;;:::o;8857:723::-;8913:13;9143:1;9134:5;:10;9130:53;;;9161:10;;;;;;;;;;;;;;;;;;;;;9130:53;9193:12;9208:5;9193:20;;9224:14;9249:78;9264:1;9256:4;:9;9249:78;;9282:8;;;;;:::i;:::-;;;;9313:2;9305:10;;;;;:::i;:::-;;;9249:78;;;9337:19;9369:6;9359:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9337:39;;9387:154;9403:1;9394:5;:10;9387:154;;9431:1;9421:11;;;;;:::i;:::-;;;9498:2;9490:5;:10;;;;:::i;:::-;9477:2;:24;;;;:::i;:::-;9464:39;;9447:6;9454;9447:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9527:2;9518:11;;;;;:::i;:::-;;;9387:154;;;9565:6;9551:21;;;;;8857:723;;;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:654::-;5218:6;5226;5275:2;5263:9;5254:7;5250:23;5246:32;5243:119;;;5281:79;;:::i;:::-;5243:119;5401:1;5426:53;5471:7;5462:6;5451:9;5447:22;5426:53;:::i;:::-;5416:63;;5372:117;5556:2;5545:9;5541:18;5528:32;5587:18;5579:6;5576:30;5573:117;;;5609:79;;:::i;:::-;5573:117;5714:63;5769:7;5760:6;5749:9;5745:22;5714:63;:::i;:::-;5704:73;;5499:288;5140:654;;;;;:::o;5800:474::-;5868:6;5876;5925:2;5913:9;5904:7;5900:23;5896:32;5893:119;;;5931:79;;:::i;:::-;5893:119;6051:1;6076:53;6121:7;6112:6;6101:9;6097:22;6076:53;:::i;:::-;6066:63;;6022:117;6178:2;6204:53;6249:7;6240:6;6229:9;6225:22;6204:53;:::i;:::-;6194:63;;6149:118;5800:474;;;;;:::o;6280:799::-;6367:6;6375;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:53;6756:7;6747:6;6736:9;6732:22;6711:53;:::i;:::-;6701:63;;6656:118;6841:2;6830:9;6826:18;6813:32;6872:18;6864:6;6861:30;6858:117;;;6894:79;;:::i;:::-;6858:117;6999:63;7054:7;7045:6;7034:9;7030:22;6999:63;:::i;:::-;6989:73;;6784:288;6280:799;;;;;:::o;7085:327::-;7143:6;7192:2;7180:9;7171:7;7167:23;7163:32;7160:119;;;7198:79;;:::i;:::-;7160:119;7318:1;7343:52;7387:7;7378:6;7367:9;7363:22;7343:52;:::i;:::-;7333:62;;7289:116;7085:327;;;;:::o;7418:349::-;7487:6;7536:2;7524:9;7515:7;7511:23;7507:32;7504:119;;;7542:79;;:::i;:::-;7504:119;7662:1;7687:63;7742:7;7733:6;7722:9;7718:22;7687:63;:::i;:::-;7677:73;;7633:127;7418:349;;;;:::o;7773:509::-;7842:6;7891:2;7879:9;7870:7;7866:23;7862:32;7859:119;;;7897:79;;:::i;:::-;7859:119;8045:1;8034:9;8030:17;8017:31;8075:18;8067:6;8064:30;8061:117;;;8097:79;;:::i;:::-;8061:117;8202:63;8257:7;8248:6;8237:9;8233:22;8202:63;:::i;:::-;8192:73;;7988:287;7773:509;;;;:::o;8288:329::-;8347:6;8396:2;8384:9;8375:7;8371:23;8367:32;8364:119;;;8402:79;;:::i;:::-;8364:119;8522:1;8547:53;8592:7;8583:6;8572:9;8568:22;8547:53;:::i;:::-;8537:63;;8493:117;8288:329;;;;:::o;8623:118::-;8710:24;8728:5;8710:24;:::i;:::-;8705:3;8698:37;8623:118;;:::o;8747:109::-;8828:21;8843:5;8828:21;:::i;:::-;8823:3;8816:34;8747:109;;:::o;8862:360::-;8948:3;8976:38;9008:5;8976:38;:::i;:::-;9030:70;9093:6;9088:3;9030:70;:::i;:::-;9023:77;;9109:52;9154:6;9149:3;9142:4;9135:5;9131:16;9109:52;:::i;:::-;9186:29;9208:6;9186:29;:::i;:::-;9181:3;9177:39;9170:46;;8952:270;8862:360;;;;:::o;9228:364::-;9316:3;9344:39;9377:5;9344:39;:::i;:::-;9399:71;9463:6;9458:3;9399:71;:::i;:::-;9392:78;;9479:52;9524:6;9519:3;9512:4;9505:5;9501:16;9479:52;:::i;:::-;9556:29;9578:6;9556:29;:::i;:::-;9551:3;9547:39;9540:46;;9320:272;9228:364;;;;:::o;9598:377::-;9704:3;9732:39;9765:5;9732:39;:::i;:::-;9787:89;9869:6;9864:3;9787:89;:::i;:::-;9780:96;;9885:52;9930:6;9925:3;9918:4;9911:5;9907:16;9885:52;:::i;:::-;9962:6;9957:3;9953:16;9946:23;;9708:267;9598:377;;;;:::o;9981:366::-;10123:3;10144:67;10208:2;10203:3;10144:67;:::i;:::-;10137:74;;10220:93;10309:3;10220:93;:::i;:::-;10338:2;10333:3;10329:12;10322:19;;9981:366;;;:::o;10353:::-;10495:3;10516:67;10580:2;10575:3;10516:67;:::i;:::-;10509:74;;10592:93;10681:3;10592:93;:::i;:::-;10710:2;10705:3;10701:12;10694:19;;10353:366;;;:::o;10725:::-;10867:3;10888:67;10952:2;10947:3;10888:67;:::i;:::-;10881:74;;10964:93;11053:3;10964:93;:::i;:::-;11082:2;11077:3;11073:12;11066:19;;10725:366;;;:::o;11097:::-;11239:3;11260:67;11324:2;11319:3;11260:67;:::i;:::-;11253:74;;11336:93;11425:3;11336:93;:::i;:::-;11454:2;11449:3;11445:12;11438:19;;11097:366;;;:::o;11469:::-;11611:3;11632:67;11696:2;11691:3;11632:67;:::i;:::-;11625:74;;11708:93;11797:3;11708:93;:::i;:::-;11826:2;11821:3;11817:12;11810:19;;11469:366;;;:::o;11841:::-;11983:3;12004:67;12068:2;12063:3;12004:67;:::i;:::-;11997:74;;12080:93;12169:3;12080:93;:::i;:::-;12198:2;12193:3;12189:12;12182:19;;11841:366;;;:::o;12213:::-;12355:3;12376:67;12440:2;12435:3;12376:67;:::i;:::-;12369:74;;12452:93;12541:3;12452:93;:::i;:::-;12570:2;12565:3;12561:12;12554:19;;12213:366;;;:::o;12585:::-;12727:3;12748:67;12812:2;12807:3;12748:67;:::i;:::-;12741:74;;12824:93;12913:3;12824:93;:::i;:::-;12942:2;12937:3;12933:12;12926:19;;12585:366;;;:::o;12957:::-;13099:3;13120:67;13184:2;13179:3;13120:67;:::i;:::-;13113:74;;13196:93;13285:3;13196:93;:::i;:::-;13314:2;13309:3;13305:12;13298:19;;12957:366;;;:::o;13329:::-;13471:3;13492:67;13556:2;13551:3;13492:67;:::i;:::-;13485:74;;13568:93;13657:3;13568:93;:::i;:::-;13686:2;13681:3;13677:12;13670:19;;13329:366;;;:::o;13701:::-;13843:3;13864:67;13928:2;13923:3;13864:67;:::i;:::-;13857:74;;13940:93;14029:3;13940:93;:::i;:::-;14058:2;14053:3;14049:12;14042:19;;13701:366;;;:::o;14073:::-;14215:3;14236:67;14300:2;14295:3;14236:67;:::i;:::-;14229:74;;14312:93;14401:3;14312:93;:::i;:::-;14430:2;14425:3;14421:12;14414:19;;14073:366;;;:::o;14445:::-;14587:3;14608:67;14672:2;14667:3;14608:67;:::i;:::-;14601:74;;14684:93;14773:3;14684:93;:::i;:::-;14802:2;14797:3;14793:12;14786:19;;14445:366;;;:::o;14817:::-;14959:3;14980:67;15044:2;15039:3;14980:67;:::i;:::-;14973:74;;15056:93;15145:3;15056:93;:::i;:::-;15174:2;15169:3;15165:12;15158:19;;14817:366;;;:::o;15189:::-;15331:3;15352:67;15416:2;15411:3;15352:67;:::i;:::-;15345:74;;15428:93;15517:3;15428:93;:::i;:::-;15546:2;15541:3;15537:12;15530:19;;15189:366;;;:::o;15561:::-;15703:3;15724:67;15788:2;15783:3;15724:67;:::i;:::-;15717:74;;15800:93;15889:3;15800:93;:::i;:::-;15918:2;15913:3;15909:12;15902:19;;15561:366;;;:::o;15933:::-;16075:3;16096:67;16160:2;16155:3;16096:67;:::i;:::-;16089:74;;16172:93;16261:3;16172:93;:::i;:::-;16290:2;16285:3;16281:12;16274:19;;15933:366;;;:::o;16305:::-;16447:3;16468:67;16532:2;16527:3;16468:67;:::i;:::-;16461:74;;16544:93;16633:3;16544:93;:::i;:::-;16662:2;16657:3;16653:12;16646:19;;16305:366;;;:::o;16677:::-;16819:3;16840:67;16904:2;16899:3;16840:67;:::i;:::-;16833:74;;16916:93;17005:3;16916:93;:::i;:::-;17034:2;17029:3;17025:12;17018:19;;16677:366;;;:::o;17049:::-;17191:3;17212:67;17276:2;17271:3;17212:67;:::i;:::-;17205:74;;17288:93;17377:3;17288:93;:::i;:::-;17406:2;17401:3;17397:12;17390:19;;17049:366;;;:::o;17421:::-;17563:3;17584:67;17648:2;17643:3;17584:67;:::i;:::-;17577:74;;17660:93;17749:3;17660:93;:::i;:::-;17778:2;17773:3;17769:12;17762:19;;17421:366;;;:::o;17793:400::-;17953:3;17974:84;18056:1;18051:3;17974:84;:::i;:::-;17967:91;;18067:93;18156:3;18067:93;:::i;:::-;18185:1;18180:3;18176:11;18169:18;;17793:400;;;:::o;18199:366::-;18341:3;18362:67;18426:2;18421:3;18362:67;:::i;:::-;18355:74;;18438:93;18527:3;18438:93;:::i;:::-;18556:2;18551:3;18547:12;18540:19;;18199:366;;;:::o;18571:::-;18713:3;18734:67;18798:2;18793:3;18734:67;:::i;:::-;18727:74;;18810:93;18899:3;18810:93;:::i;:::-;18928:2;18923:3;18919:12;18912:19;;18571:366;;;:::o;18943:::-;19085:3;19106:67;19170:2;19165:3;19106:67;:::i;:::-;19099:74;;19182:93;19271:3;19182:93;:::i;:::-;19300:2;19295:3;19291:12;19284:19;;18943:366;;;:::o;19315:::-;19457:3;19478:67;19542:2;19537:3;19478:67;:::i;:::-;19471:74;;19554:93;19643:3;19554:93;:::i;:::-;19672:2;19667:3;19663:12;19656:19;;19315:366;;;:::o;19687:118::-;19774:24;19792:5;19774:24;:::i;:::-;19769:3;19762:37;19687:118;;:::o;19811:435::-;19991:3;20013:95;20104:3;20095:6;20013:95;:::i;:::-;20006:102;;20125:95;20216:3;20207:6;20125:95;:::i;:::-;20118:102;;20237:3;20230:10;;19811:435;;;;;:::o;20252:541::-;20485:3;20507:95;20598:3;20589:6;20507:95;:::i;:::-;20500:102;;20619:148;20763:3;20619:148;:::i;:::-;20612:155;;20784:3;20777:10;;20252:541;;;;:::o;20799:222::-;20892:4;20930:2;20919:9;20915:18;20907:26;;20943:71;21011:1;21000:9;20996:17;20987:6;20943:71;:::i;:::-;20799:222;;;;:::o;21027:640::-;21222:4;21260:3;21249:9;21245:19;21237:27;;21274:71;21342:1;21331:9;21327:17;21318:6;21274:71;:::i;:::-;21355:72;21423:2;21412:9;21408:18;21399:6;21355:72;:::i;:::-;21437;21505:2;21494:9;21490:18;21481:6;21437:72;:::i;:::-;21556:9;21550:4;21546:20;21541:2;21530:9;21526:18;21519:48;21584:76;21655:4;21646:6;21584:76;:::i;:::-;21576:84;;21027:640;;;;;;;:::o;21673:210::-;21760:4;21798:2;21787:9;21783:18;21775:26;;21811:65;21873:1;21862:9;21858:17;21849:6;21811:65;:::i;:::-;21673:210;;;;:::o;21889:313::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:78;22190:4;22181:6;22117:78;:::i;:::-;22109:86;;21889:313;;;;:::o;22208:419::-;22374:4;22412:2;22401:9;22397:18;22389:26;;22461:9;22455:4;22451:20;22447:1;22436:9;22432:17;22425:47;22489:131;22615:4;22489:131;:::i;:::-;22481:139;;22208:419;;;:::o;22633:::-;22799:4;22837:2;22826:9;22822:18;22814:26;;22886:9;22880:4;22876:20;22872:1;22861:9;22857:17;22850:47;22914:131;23040:4;22914:131;:::i;:::-;22906:139;;22633:419;;;:::o;23058:::-;23224:4;23262:2;23251:9;23247:18;23239:26;;23311:9;23305:4;23301:20;23297:1;23286:9;23282:17;23275:47;23339:131;23465:4;23339:131;:::i;:::-;23331:139;;23058:419;;;:::o;23483:::-;23649:4;23687:2;23676:9;23672:18;23664:26;;23736:9;23730:4;23726:20;23722:1;23711:9;23707:17;23700:47;23764:131;23890:4;23764:131;:::i;:::-;23756:139;;23483:419;;;:::o;23908:::-;24074:4;24112:2;24101:9;24097:18;24089:26;;24161:9;24155:4;24151:20;24147:1;24136:9;24132:17;24125:47;24189:131;24315:4;24189:131;:::i;:::-;24181:139;;23908:419;;;:::o;24333:::-;24499:4;24537:2;24526:9;24522:18;24514:26;;24586:9;24580:4;24576:20;24572:1;24561:9;24557:17;24550:47;24614:131;24740:4;24614:131;:::i;:::-;24606:139;;24333:419;;;:::o;24758:::-;24924:4;24962:2;24951:9;24947:18;24939:26;;25011:9;25005:4;25001:20;24997:1;24986:9;24982:17;24975:47;25039:131;25165:4;25039:131;:::i;:::-;25031:139;;24758:419;;;:::o;25183:::-;25349:4;25387:2;25376:9;25372:18;25364:26;;25436:9;25430:4;25426:20;25422:1;25411:9;25407:17;25400:47;25464:131;25590:4;25464:131;:::i;:::-;25456:139;;25183:419;;;:::o;25608:::-;25774:4;25812:2;25801:9;25797:18;25789:26;;25861:9;25855:4;25851:20;25847:1;25836:9;25832:17;25825:47;25889:131;26015:4;25889:131;:::i;:::-;25881:139;;25608:419;;;:::o;26033:::-;26199:4;26237:2;26226:9;26222:18;26214:26;;26286:9;26280:4;26276:20;26272:1;26261:9;26257:17;26250:47;26314:131;26440:4;26314:131;:::i;:::-;26306:139;;26033:419;;;:::o;26458:::-;26624:4;26662:2;26651:9;26647:18;26639:26;;26711:9;26705:4;26701:20;26697:1;26686:9;26682:17;26675:47;26739:131;26865:4;26739:131;:::i;:::-;26731:139;;26458:419;;;:::o;26883:::-;27049:4;27087:2;27076:9;27072:18;27064:26;;27136:9;27130:4;27126:20;27122:1;27111:9;27107:17;27100:47;27164:131;27290:4;27164:131;:::i;:::-;27156:139;;26883:419;;;:::o;27308:::-;27474:4;27512:2;27501:9;27497:18;27489:26;;27561:9;27555:4;27551:20;27547:1;27536:9;27532:17;27525:47;27589:131;27715:4;27589:131;:::i;:::-;27581:139;;27308:419;;;:::o;27733:::-;27899:4;27937:2;27926:9;27922:18;27914:26;;27986:9;27980:4;27976:20;27972:1;27961:9;27957:17;27950:47;28014:131;28140:4;28014:131;:::i;:::-;28006:139;;27733:419;;;:::o;28158:::-;28324:4;28362:2;28351:9;28347:18;28339:26;;28411:9;28405:4;28401:20;28397:1;28386:9;28382:17;28375:47;28439:131;28565:4;28439:131;:::i;:::-;28431:139;;28158:419;;;:::o;28583:::-;28749:4;28787:2;28776:9;28772:18;28764:26;;28836:9;28830:4;28826:20;28822:1;28811:9;28807:17;28800:47;28864:131;28990:4;28864:131;:::i;:::-;28856:139;;28583:419;;;:::o;29008:::-;29174:4;29212:2;29201:9;29197:18;29189:26;;29261:9;29255:4;29251:20;29247:1;29236:9;29232:17;29225:47;29289:131;29415:4;29289:131;:::i;:::-;29281:139;;29008:419;;;:::o;29433:::-;29599:4;29637:2;29626:9;29622:18;29614:26;;29686:9;29680:4;29676:20;29672:1;29661:9;29657:17;29650:47;29714:131;29840:4;29714:131;:::i;:::-;29706:139;;29433:419;;;:::o;29858:::-;30024:4;30062:2;30051:9;30047:18;30039:26;;30111:9;30105:4;30101:20;30097:1;30086:9;30082:17;30075:47;30139:131;30265:4;30139:131;:::i;:::-;30131:139;;29858:419;;;:::o;30283:::-;30449:4;30487:2;30476:9;30472:18;30464:26;;30536:9;30530:4;30526:20;30522:1;30511:9;30507:17;30500:47;30564:131;30690:4;30564:131;:::i;:::-;30556:139;;30283:419;;;:::o;30708:::-;30874:4;30912:2;30901:9;30897:18;30889:26;;30961:9;30955:4;30951:20;30947:1;30936:9;30932:17;30925:47;30989:131;31115:4;30989:131;:::i;:::-;30981:139;;30708:419;;;:::o;31133:::-;31299:4;31337:2;31326:9;31322:18;31314:26;;31386:9;31380:4;31376:20;31372:1;31361:9;31357:17;31350:47;31414:131;31540:4;31414:131;:::i;:::-;31406:139;;31133:419;;;:::o;31558:::-;31724:4;31762:2;31751:9;31747:18;31739:26;;31811:9;31805:4;31801:20;31797:1;31786:9;31782:17;31775:47;31839:131;31965:4;31839:131;:::i;:::-;31831:139;;31558:419;;;:::o;31983:::-;32149:4;32187:2;32176:9;32172:18;32164:26;;32236:9;32230:4;32226:20;32222:1;32211:9;32207:17;32200:47;32264:131;32390:4;32264:131;:::i;:::-;32256:139;;31983:419;;;:::o;32408:::-;32574:4;32612:2;32601:9;32597:18;32589:26;;32661:9;32655:4;32651:20;32647:1;32636:9;32632:17;32625:47;32689:131;32815:4;32689:131;:::i;:::-;32681:139;;32408:419;;;:::o;32833:222::-;32926:4;32964:2;32953:9;32949:18;32941:26;;32977:71;33045:1;33034:9;33030:17;33021:6;32977:71;:::i;:::-;32833:222;;;;:::o;33061:129::-;33095:6;33122:20;;:::i;:::-;33112:30;;33151:33;33179:4;33171:6;33151:33;:::i;:::-;33061:129;;;:::o;33196:75::-;33229:6;33262:2;33256:9;33246:19;;33196:75;:::o;33277:307::-;33338:4;33428:18;33420:6;33417:30;33414:56;;;33450:18;;:::i;:::-;33414:56;33488:29;33510:6;33488:29;:::i;:::-;33480:37;;33572:4;33566;33562:15;33554:23;;33277:307;;;:::o;33590:308::-;33652:4;33742:18;33734:6;33731:30;33728:56;;;33764:18;;:::i;:::-;33728:56;33802:29;33824:6;33802:29;:::i;:::-;33794:37;;33886:4;33880;33876:15;33868:23;;33590:308;;;:::o;33904:98::-;33955:6;33989:5;33983:12;33973:22;;33904:98;;;:::o;34008:99::-;34060:6;34094:5;34088:12;34078:22;;34008:99;;;:::o;34113:168::-;34196:11;34230:6;34225:3;34218:19;34270:4;34265:3;34261:14;34246:29;;34113:168;;;;:::o;34287:169::-;34371:11;34405:6;34400:3;34393:19;34445:4;34440:3;34436:14;34421:29;;34287:169;;;;:::o;34462:148::-;34564:11;34601:3;34586:18;;34462:148;;;;:::o;34616:305::-;34656:3;34675:20;34693:1;34675:20;:::i;:::-;34670:25;;34709:20;34727:1;34709:20;:::i;:::-;34704:25;;34863:1;34795:66;34791:74;34788:1;34785:81;34782:107;;;34869:18;;:::i;:::-;34782:107;34913:1;34910;34906:9;34899:16;;34616:305;;;;:::o;34927:185::-;34967:1;34984:20;35002:1;34984:20;:::i;:::-;34979:25;;35018:20;35036:1;35018:20;:::i;:::-;35013:25;;35057:1;35047:35;;35062:18;;:::i;:::-;35047:35;35104:1;35101;35097:9;35092:14;;34927:185;;;;:::o;35118:348::-;35158:7;35181:20;35199:1;35181:20;:::i;:::-;35176:25;;35215:20;35233:1;35215:20;:::i;:::-;35210:25;;35403:1;35335:66;35331:74;35328:1;35325:81;35320:1;35313:9;35306:17;35302:105;35299:131;;;35410:18;;:::i;:::-;35299:131;35458:1;35455;35451:9;35440:20;;35118:348;;;;:::o;35472:191::-;35512:4;35532:20;35550:1;35532:20;:::i;:::-;35527:25;;35566:20;35584:1;35566:20;:::i;:::-;35561:25;;35605:1;35602;35599:8;35596:34;;;35610:18;;:::i;:::-;35596:34;35655:1;35652;35648:9;35640:17;;35472:191;;;;:::o;35669:96::-;35706:7;35735:24;35753:5;35735:24;:::i;:::-;35724:35;;35669:96;;;:::o;35771:90::-;35805:7;35848:5;35841:13;35834:21;35823:32;;35771:90;;;:::o;35867:149::-;35903:7;35943:66;35936:5;35932:78;35921:89;;35867:149;;;:::o;36022:126::-;36059:7;36099:42;36092:5;36088:54;36077:65;;36022:126;;;:::o;36154:77::-;36191:7;36220:5;36209:16;;36154:77;;;:::o;36237:154::-;36321:6;36316:3;36311;36298:30;36383:1;36374:6;36369:3;36365:16;36358:27;36237:154;;;:::o;36397:307::-;36465:1;36475:113;36489:6;36486:1;36483:13;36475:113;;;36574:1;36569:3;36565:11;36559:18;36555:1;36550:3;36546:11;36539:39;36511:2;36508:1;36504:10;36499:15;;36475:113;;;36606:6;36603:1;36600:13;36597:101;;;36686:1;36677:6;36672:3;36668:16;36661:27;36597:101;36446:258;36397:307;;;:::o;36710:320::-;36754:6;36791:1;36785:4;36781:12;36771:22;;36838:1;36832:4;36828:12;36859:18;36849:81;;36915:4;36907:6;36903:17;36893:27;;36849:81;36977:2;36969:6;36966:14;36946:18;36943:38;36940:84;;;36996:18;;:::i;:::-;36940:84;36761:269;36710:320;;;:::o;37036:281::-;37119:27;37141:4;37119:27;:::i;:::-;37111:6;37107:40;37249:6;37237:10;37234:22;37213:18;37201:10;37198:34;37195:62;37192:88;;;37260:18;;:::i;:::-;37192:88;37300:10;37296:2;37289:22;37079:238;37036:281;;:::o;37323:233::-;37362:3;37385:24;37403:5;37385:24;:::i;:::-;37376:33;;37431:66;37424:5;37421:77;37418:103;;;37501:18;;:::i;:::-;37418:103;37548:1;37541:5;37537:13;37530:20;;37323:233;;;:::o;37562:176::-;37594:1;37611:20;37629:1;37611:20;:::i;:::-;37606:25;;37645:20;37663:1;37645:20;:::i;:::-;37640:25;;37684:1;37674:35;;37689:18;;:::i;:::-;37674:35;37730:1;37727;37723:9;37718:14;;37562:176;;;;:::o;37744:180::-;37792:77;37789:1;37782:88;37889:4;37886:1;37879:15;37913:4;37910:1;37903:15;37930:180;37978:77;37975:1;37968:88;38075:4;38072:1;38065:15;38099:4;38096:1;38089:15;38116:180;38164:77;38161:1;38154:88;38261:4;38258:1;38251:15;38285:4;38282:1;38275:15;38302:180;38350:77;38347:1;38340:88;38447:4;38444:1;38437:15;38471:4;38468:1;38461:15;38488:180;38536:77;38533:1;38526:88;38633:4;38630:1;38623:15;38657:4;38654:1;38647:15;38674:117;38783:1;38780;38773:12;38797:117;38906:1;38903;38896:12;38920:117;39029:1;39026;39019:12;39043:117;39152:1;39149;39142:12;39166:102;39207:6;39258:2;39254:7;39249:2;39242:5;39238:14;39234:28;39224:38;;39166:102;;;:::o;39274:236::-;39414:34;39410:1;39402:6;39398:14;39391:58;39483:19;39478:2;39470:6;39466:15;39459:44;39274:236;:::o;39516:170::-;39656:22;39652:1;39644:6;39640:14;39633:46;39516:170;:::o;39692:237::-;39832:34;39828:1;39820:6;39816:14;39809:58;39901:20;39896:2;39888:6;39884:15;39877:45;39692:237;:::o;39935:177::-;40075:29;40071:1;40063:6;40059:14;40052:53;39935:177;:::o;40118:225::-;40258:34;40254:1;40246:6;40242:14;40235:58;40327:8;40322:2;40314:6;40310:15;40303:33;40118:225;:::o;40349:224::-;40489:34;40485:1;40477:6;40473:14;40466:58;40558:7;40553:2;40545:6;40541:15;40534:32;40349:224;:::o;40579:178::-;40719:30;40715:1;40707:6;40703:14;40696:54;40579:178;:::o;40763:177::-;40903:29;40899:1;40891:6;40887:14;40880:53;40763:177;:::o;40946:223::-;41086:34;41082:1;41074:6;41070:14;41063:58;41155:6;41150:2;41142:6;41138:15;41131:31;40946:223;:::o;41175:175::-;41315:27;41311:1;41303:6;41299:14;41292:51;41175:175;:::o;41356:231::-;41496:34;41492:1;41484:6;41480:14;41473:58;41565:14;41560:2;41552:6;41548:15;41541:39;41356:231;:::o;41593:166::-;41733:18;41729:1;41721:6;41717:14;41710:42;41593:166;:::o;41765:243::-;41905:34;41901:1;41893:6;41889:14;41882:58;41974:26;41969:2;41961:6;41957:15;41950:51;41765:243;:::o;42014:174::-;42154:26;42150:1;42142:6;42138:14;42131:50;42014:174;:::o;42194:229::-;42334:34;42330:1;42322:6;42318:14;42311:58;42403:12;42398:2;42390:6;42386:15;42379:37;42194:229;:::o;42429:228::-;42569:34;42565:1;42557:6;42553:14;42546:58;42638:11;42633:2;42625:6;42621:15;42614:36;42429:228;:::o;42663:233::-;42803:34;42799:1;42791:6;42787:14;42780:58;42872:16;42867:2;42859:6;42855:15;42848:41;42663:233;:::o;42902:182::-;43042:34;43038:1;43030:6;43026:14;43019:58;42902:182;:::o;43090:181::-;43230:33;43226:1;43218:6;43214:14;43207:57;43090:181;:::o;43277:236::-;43417:34;43413:1;43405:6;43401:14;43394:58;43486:19;43481:2;43473:6;43469:15;43462:44;43277:236;:::o;43519:231::-;43659:34;43655:1;43647:6;43643:14;43636:58;43728:14;43723:2;43715:6;43711:15;43704:39;43519:231;:::o;43756:155::-;43896:7;43892:1;43884:6;43880:14;43873:31;43756:155;:::o;43917:182::-;44057:34;44053:1;44045:6;44041:14;44034:58;43917:182;:::o;44105:234::-;44245:34;44241:1;44233:6;44229:14;44222:58;44314:17;44309:2;44301:6;44297:15;44290:42;44105:234;:::o;44345:220::-;44485:34;44481:1;44473:6;44469:14;44462:58;44554:3;44549:2;44541:6;44537:15;44530:28;44345:220;:::o;44571:236::-;44711:34;44707:1;44699:6;44695:14;44688:58;44780:19;44775:2;44767:6;44763:15;44756:44;44571:236;:::o;44813:122::-;44886:24;44904:5;44886:24;:::i;:::-;44879:5;44876:35;44866:63;;44925:1;44922;44915:12;44866:63;44813:122;:::o;44941:116::-;45011:21;45026:5;45011:21;:::i;:::-;45004:5;45001:32;44991:60;;45047:1;45044;45037:12;44991:60;44941:116;:::o;45063:120::-;45135:23;45152:5;45135:23;:::i;:::-;45128:5;45125:34;45115:62;;45173:1;45170;45163:12;45115:62;45063:120;:::o;45189:122::-;45262:24;45280:5;45262:24;:::i;:::-;45255:5;45252:35;45242:63;;45301:1;45298;45291:12;45242:63;45189:122;:::o

Swarm Source

ipfs://1908185cbf428c096361919bb0cb2220b5ac8378ce7066680893234bf877f603
[ 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.