ETH Price: $3,472.05 (+1.55%)
Gas: 11 Gwei

Token

Prime Mates Board Club (PMBC)
 

Overview

Max Total Supply

1,619 PMBC

Holders

428

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 PMBC
0x2d07cd174a5041bac0735cc55e49124fe86c4bf7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Prime Mates Board Club is a community & utility-driven project focused on delivering exclusive and exceptional value to members. Developing a unique and diverse experience that promotes active social engagement, artist and creative networking platforms white spreading awareness for mental health.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PrimeMatesBoardClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 16000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
$$$$$$$\  $$\      $$\ $$$$$$$\   $$$$$$\  
$$  __$$\ $$$\    $$$ |$$  __$$\ $$  __$$\ 
$$ |  $$ |$$$$\  $$$$ |$$ |  $$ |$$ /  \__|
$$$$$$$  |$$\$$\$$ $$ |$$$$$$$\ |$$ |      
$$  ____/ $$ \$$$  $$ |$$  __$$\ $$ |      
$$ |      $$ |\$  /$$ |$$ |  $$ |$$ |  $$\ 
$$ |      $$ | \_/ $$ |$$$$$$$  |\$$$$$$  |
\__|      \__|     \__|\_______/  \______/ 
*/

// SPDX-License-Identifier: MIT

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts 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: contracts/PrimeMatesBoardClub.sol

// Amended by Dane


pragma solidity >=0.7.0 <0.9.0;


contract PrimeMatesBoardClub is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix="ipfs://QmTwgtUDiKfv2WTu478VPQmcTy24YpfgktPSjWJM1AJYo7/";
  string public uriSuffix = ".json";
  
  uint256 public cost = 0.05 ether;
  uint256 public maxSupply = 2222;
  uint256 public maxMintAmountPerTx = 5;

  bool public paused = false;
  uint private whiteListStarted;

  mapping(address => bool) private whiteListed;


  constructor() ERC721("Prime Mates Board Club", "PMBC") {
    whiteListStarted=block.timestamp;
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    if (whiteListStarted+ 8 days >= block.timestamp){
         require(isWhitelisted(msg.sender) && _mintAmount==1, "You are not eligible!");
         whiteListed[msg.sender]=false;
    }else{
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
    }
        _mintLoop(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

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

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw() public onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

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

  function airdropForExistingHolders(address[] memory _holders) public onlyOwner {
         for (uint256 i = 0; i < _holders.length; i++) {
                supply.increment();
                _safeMint(_holders[i], supply.current());
                whiteListed[_holders[i]]=true;
    }
  }

  function isWhitelisted(address _user) public view returns (bool) {
        return whiteListed[_user];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"}],"name":"airdropForExistingHolders","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":"cost","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052603660808181529062002feb60a039805162000029916008916020909101906200017b565b5060408051808201909152600580825264173539b7b760d91b602090920191825262000058916009916200017b565b5066b1a2bc2ec50000600a556108ae600b556005600c55600d805460ff191690553480156200008657600080fd5b50604080518082018252601681527f5072696d65204d6174657320426f61726420436c756200000000000000000000602080830191825283518085019094526004845263504d424360e01b908401528151919291620000e8916000916200017b565b508051620000fe9060019060208401906200017b565b5050506200011b620001156200012560201b60201c565b62000129565b42600e556200025e565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001899062000221565b90600052602060002090601f016020900481019282620001ad5760008555620001f8565b82601f10620001c857805160ff1916838001178555620001f8565b82800160010185558215620001f8579182015b82811115620001f8578251825591602001919060010190620001db565b50620002069291506200020a565b5090565b5b808211156200020657600081556001016200020b565b600181811c908216806200023657607f821691505b602082108114156200025857634e487b7160e01b600052602260045260246000fd5b50919050565b612d7d806200026e6000396000f3fe6080604052600436106102195760003560e01c806362b99ad41161011d578063a0712d68116100b0578063c87b56dd1161007f578063e985e9c511610064578063e985e9c514610615578063efbd73f41461066b578063f2fde38b1461068b57600080fd5b8063c87b56dd146105df578063d5abeb01146105ff57600080fd5b8063a0712d681461056c578063a22cb4651461057f578063b071401b1461059f578063b88d4fde146105bf57600080fd5b80637ec4a659116100ec5780637ec4a659146104f65780638da5cb5b1461051657806394354fd01461054157806395d89b411461055757600080fd5b806362b99ad41461048c5780636352211e146104a157806370a08231146104c1578063715018a6146104e157600080fd5b806323b872dd116101b057806342842e0e1161017f57806344a0d68a1161016457806344a0d68a1461043d5780635503a0e81461045d5780635c975abb1461047257600080fd5b806342842e0e146103f0578063438b63001461041057600080fd5b806323b872dd146103555780632ec869ce146103755780633af32abf146103955780633ccfd60b146103db57600080fd5b806313faede6116101ec57806313faede6146102dc57806316ba10e01461030057806316c38b3c1461032057806318160ddd1461034057600080fd5b806301ffc9a71461021e57806306fdde0314610253578063081812fc14610275578063095ea7b3146102ba575b600080fd5b34801561022a57600080fd5b5061023e61023936600461281d565b6106ab565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b50610268610790565b60405161024a9190612aae565b34801561028157600080fd5b506102956102903660046128a0565b610822565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024a565b3480156102c657600080fd5b506102da6102d5366004612724565b6108e7565b005b3480156102e857600080fd5b506102f2600a5481565b60405190815260200161024a565b34801561030c57600080fd5b506102da61031b366004612857565b610a40565b34801561032c57600080fd5b506102da61033b366004612802565b610abe565b34801561034c57600080fd5b506102f2610b56565b34801561036157600080fd5b506102da610370366004612642565b610b66565b34801561038157600080fd5b506102da61039036600461274e565b610bed565b3480156103a157600080fd5b5061023e6103b03660046125f4565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205460ff1690565b3480156103e757600080fd5b506102da610d20565b3480156103fc57600080fd5b506102da61040b366004612642565b610e15565b34801561041c57600080fd5b5061043061042b3660046125f4565b610e30565b60405161024a9190612a6a565b34801561044957600080fd5b506102da6104583660046128a0565b610f2b565b34801561046957600080fd5b50610268610f97565b34801561047e57600080fd5b50600d5461023e9060ff1681565b34801561049857600080fd5b50610268611025565b3480156104ad57600080fd5b506102956104bc3660046128a0565b611032565b3480156104cd57600080fd5b506102f26104dc3660046125f4565b6110ca565b3480156104ed57600080fd5b506102da61117e565b34801561050257600080fd5b506102da610511366004612857565b6111f1565b34801561052257600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff16610295565b34801561054d57600080fd5b506102f2600c5481565b34801561056357600080fd5b5061026861126b565b6102da61057a3660046128a0565b61127a565b34801561058b57600080fd5b506102da61059a3660046126fa565b6114b4565b3480156105ab57600080fd5b506102da6105ba3660046128a0565b6114bf565b3480156105cb57600080fd5b506102da6105da36600461267e565b61152b565b3480156105eb57600080fd5b506102686105fa3660046128a0565b6115b9565b34801561060b57600080fd5b506102f2600b5481565b34801561062157600080fd5b5061023e61063036600461260f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067757600080fd5b506102da6106863660046128b9565b6116b2565b34801561069757600080fd5b506102da6106a63660046125f4565b6117e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061073e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061078a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461079f90612bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546107cb90612bbc565b80156108185780601f106107ed57610100808354040283529160200191610818565b820191906000526020600020905b8154815290600101906020018083116107fb57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166108be5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006108f282611032565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016108b5565b3373ffffffffffffffffffffffffffffffffffffffff821614806109bf57506109bf8133610630565b610a315760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108b5565b610a3b83836118e0565b505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b8051610aba9060099060208401906124ac565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610b6160075490565b905090565b610b703382611980565b610be25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108b5565b610a3b838383611ad6565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b60005b8151811015610aba57610c6e600780546001019055565b610c99828281518110610c8357610c83612cbb565b6020026020010151610c9460075490565b611d09565b6001600f6000848481518110610cb157610cb1612cbb565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610d1881612c10565b915050610c57565b60065473ffffffffffffffffffffffffffffffffffffffff163314610d875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b6000610da860065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610dff576040519150601f19603f3d011682016040523d82523d6000602084013e610e04565b606091505b5050905080610e1257600080fd5b50565b610a3b8383836040518060200160405280600081525061152b565b60606000610e3d836110ca565b905060008167ffffffffffffffff811115610e5a57610e5a612cea565b604051908082528060200260200182016040528015610e83578160200160208202803683370190505b509050600160005b8381108015610e9c5750600b548211155b15610f21576000610eac83611032565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f0e5782848381518110610ef557610ef5612cbb565b602090810291909101015281610f0a81612c10565b9250505b82610f1881612c10565b93505050610e8b565b5090949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600a55565b60098054610fa490612bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612bbc565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505081565b60088054610fa490612bbc565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff168061078a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016108b5565b600073ffffffffffffffffffffffffffffffffffffffff82166111555760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016108b5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60065473ffffffffffffffffffffffffffffffffffffffff1633146111e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b6111ef6000611d23565b565b60065473ffffffffffffffffffffffffffffffffffffffff1633146112585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b8051610aba9060089060208401906124ac565b60606001805461079f90612bbc565b8060008111801561128d5750600c548111155b6112d95760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e7420616d6f756e742100000000000000000000000060448201526064016108b5565b600b54816112e660075490565b6112f09190612b10565b111561133e5760405162461bcd60e51b815260206004820152601460248201527f4d617820737570706c792065786365656465642100000000000000000000000060448201526064016108b5565b600d5460ff16156113915760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016108b5565b42600e54620a8c006113a39190612b10565b1061144d57336000908152600f602052604090205460ff1680156113c75750816001145b6114135760405162461bcd60e51b815260206004820152601560248201527f596f7520617265206e6f7420656c696769626c6521000000000000000000000060448201526064016108b5565b336000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556114aa565b81600a5461145b9190612b3c565b3410156114aa5760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e742066756e6473210000000000000000000000000060448201526064016108b5565b610aba3383611d9a565b610aba338383611dd2565b60065473ffffffffffffffffffffffffffffffffffffffff1633146115265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600c55565b6115353383611980565b6115a75760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108b5565b6115b384848484611ee6565b50505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166116535760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016108b5565b600061165d611f6f565b9050600081511161167d57604051806020016040528060008152506116ab565b8061168784611f7e565b600960405160200161169b93929190612926565b6040516020818303038152906040525b9392505050565b816000811180156116c55750600c548111155b6117115760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e7420616d6f756e742100000000000000000000000060448201526064016108b5565b600b548161171e60075490565b6117289190612b10565b11156117765760405162461bcd60e51b815260206004820152601460248201527f4d617820737570706c792065786365656465642100000000000000000000000060448201526064016108b5565b60065473ffffffffffffffffffffffffffffffffffffffff1633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b610a3b8284611d9a565b60065473ffffffffffffffffffffffffffffffffffffffff16331461184e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff81166118d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108b5565b610e1281611d23565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061193a82611032565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16611a175760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108b5565b6000611a2283611032565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a9157508373ffffffffffffffffffffffffffffffffffffffff16611a7984610822565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ace575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611af682611032565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108b5565b73ffffffffffffffffffffffffffffffffffffffff8216611c075760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108b5565b611c126000826118e0565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290611c48908490612b79565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611c83908490612b10565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610aba8282604051806020016040528060008152506120b0565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a3b57611db3600780546001019055565b611dc083610c9460075490565b80611dca81612c10565b915050611d9d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e4e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611ef1848484611ad6565b611efd84848484612139565b6115b35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b60606008805461079f90612bbc565b606081611fbe57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611fe85780611fd281612c10565b9150611fe19050600a83612b28565b9150611fc2565b60008167ffffffffffffffff81111561200357612003612cea565b6040519080825280601f01601f19166020018201604052801561202d576020820181803683370190505b5090505b8415611ace57612042600183612b79565b915061204f600a86612c49565b61205a906030612b10565b60f81b81838151811061206f5761206f612cbb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506120a9600a86612b28565b9450612031565b6120ba838361231e565b6120c76000848484612139565b610a3b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612313576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906121b0903390899088908890600401612a21565b602060405180830381600087803b1580156121ca57600080fd5b505af1925050508015612218575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122159181019061283a565b60015b6122c8573d808015612246576040519150601f19603f3d011682016040523d82523d6000602084013e61224b565b606091505b5080516122c05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611ace565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166123815760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108b5565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156123f35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612429908490612b10565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124b890612bbc565b90600052602060002090601f0160209004810192826124da5760008555612520565b82601f106124f357805160ff1916838001178555612520565b82800160010185558215612520579182015b82811115612520578251825591602001919060010190612505565b5061252c929150612530565b5090565b5b8082111561252c5760008155600101612531565b600067ffffffffffffffff83111561255f5761255f612cea565b61259060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612ac1565b90508281528383830111156125a457600080fd5b828260208301376000602084830101529392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b919050565b803580151581146125df57600080fd5b60006020828403121561260657600080fd5b6116ab826125bb565b6000806040838503121561262257600080fd5b61262b836125bb565b9150612639602084016125bb565b90509250929050565b60008060006060848603121561265757600080fd5b612660846125bb565b925061266e602085016125bb565b9150604084013590509250925092565b6000806000806080858703121561269457600080fd5b61269d856125bb565b93506126ab602086016125bb565b925060408501359150606085013567ffffffffffffffff8111156126ce57600080fd5b8501601f810187136126df57600080fd5b6126ee87823560208401612545565b91505092959194509250565b6000806040838503121561270d57600080fd5b612716836125bb565b9150612639602084016125e4565b6000806040838503121561273757600080fd5b612740836125bb565b946020939093013593505050565b6000602080838503121561276157600080fd5b823567ffffffffffffffff8082111561277957600080fd5b818501915085601f83011261278d57600080fd5b81358181111561279f5761279f612cea565b8060051b91506127b0848301612ac1565b8181528481019084860184860187018a10156127cb57600080fd5b600095505b838610156127f5576127e1816125bb565b8352600195909501949186019186016127d0565b5098975050505050505050565b60006020828403121561281457600080fd5b6116ab826125e4565b60006020828403121561282f57600080fd5b81356116ab81612d19565b60006020828403121561284c57600080fd5b81516116ab81612d19565b60006020828403121561286957600080fd5b813567ffffffffffffffff81111561288057600080fd5b8201601f8101841361289157600080fd5b611ace84823560208401612545565b6000602082840312156128b257600080fd5b5035919050565b600080604083850312156128cc57600080fd5b82359150612639602084016125bb565b600081518084526128f4816020860160208601612b90565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000845160206129398285838a01612b90565b85519184019161294c8184848a01612b90565b8554920191600090600181811c908083168061296957607f831692505b8583108114156129a0577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b8080156129b457600181146129e357612a10565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851688528388019550612a10565b60008b81526020902060005b85811015612a085781548a8201529084019088016129ef565b505083880195505b50939b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612a6060808301846128dc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612aa257835183529284019291840191600101612a86565b50909695505050505050565b6020815260006116ab60208301846128dc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b0857612b08612cea565b604052919050565b60008219821115612b2357612b23612c5d565b500190565b600082612b3757612b37612c8c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b7457612b74612c5d565b500290565b600082821015612b8b57612b8b612c5d565b500390565b60005b83811015612bab578181015183820152602001612b93565b838111156115b35750506000910152565b600181811c90821680612bd057607f821691505b60208210811415612c0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4257612c42612c5d565b5060010190565b600082612c5857612c58612c8c565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e1257600080fdfea2646970667358221220aed998fbb17c25ebe2dc45398cc4dad281c119425b7b949dcf1cf03636c1b76464736f6c63430008070033697066733a2f2f516d547767745544694b6676325754753437385650516d6354793234597066676b7450536a574a4d31414a596f372f

Deployed Bytecode

0x6080604052600436106102195760003560e01c806362b99ad41161011d578063a0712d68116100b0578063c87b56dd1161007f578063e985e9c511610064578063e985e9c514610615578063efbd73f41461066b578063f2fde38b1461068b57600080fd5b8063c87b56dd146105df578063d5abeb01146105ff57600080fd5b8063a0712d681461056c578063a22cb4651461057f578063b071401b1461059f578063b88d4fde146105bf57600080fd5b80637ec4a659116100ec5780637ec4a659146104f65780638da5cb5b1461051657806394354fd01461054157806395d89b411461055757600080fd5b806362b99ad41461048c5780636352211e146104a157806370a08231146104c1578063715018a6146104e157600080fd5b806323b872dd116101b057806342842e0e1161017f57806344a0d68a1161016457806344a0d68a1461043d5780635503a0e81461045d5780635c975abb1461047257600080fd5b806342842e0e146103f0578063438b63001461041057600080fd5b806323b872dd146103555780632ec869ce146103755780633af32abf146103955780633ccfd60b146103db57600080fd5b806313faede6116101ec57806313faede6146102dc57806316ba10e01461030057806316c38b3c1461032057806318160ddd1461034057600080fd5b806301ffc9a71461021e57806306fdde0314610253578063081812fc14610275578063095ea7b3146102ba575b600080fd5b34801561022a57600080fd5b5061023e61023936600461281d565b6106ab565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b50610268610790565b60405161024a9190612aae565b34801561028157600080fd5b506102956102903660046128a0565b610822565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024a565b3480156102c657600080fd5b506102da6102d5366004612724565b6108e7565b005b3480156102e857600080fd5b506102f2600a5481565b60405190815260200161024a565b34801561030c57600080fd5b506102da61031b366004612857565b610a40565b34801561032c57600080fd5b506102da61033b366004612802565b610abe565b34801561034c57600080fd5b506102f2610b56565b34801561036157600080fd5b506102da610370366004612642565b610b66565b34801561038157600080fd5b506102da61039036600461274e565b610bed565b3480156103a157600080fd5b5061023e6103b03660046125f4565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205460ff1690565b3480156103e757600080fd5b506102da610d20565b3480156103fc57600080fd5b506102da61040b366004612642565b610e15565b34801561041c57600080fd5b5061043061042b3660046125f4565b610e30565b60405161024a9190612a6a565b34801561044957600080fd5b506102da6104583660046128a0565b610f2b565b34801561046957600080fd5b50610268610f97565b34801561047e57600080fd5b50600d5461023e9060ff1681565b34801561049857600080fd5b50610268611025565b3480156104ad57600080fd5b506102956104bc3660046128a0565b611032565b3480156104cd57600080fd5b506102f26104dc3660046125f4565b6110ca565b3480156104ed57600080fd5b506102da61117e565b34801561050257600080fd5b506102da610511366004612857565b6111f1565b34801561052257600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff16610295565b34801561054d57600080fd5b506102f2600c5481565b34801561056357600080fd5b5061026861126b565b6102da61057a3660046128a0565b61127a565b34801561058b57600080fd5b506102da61059a3660046126fa565b6114b4565b3480156105ab57600080fd5b506102da6105ba3660046128a0565b6114bf565b3480156105cb57600080fd5b506102da6105da36600461267e565b61152b565b3480156105eb57600080fd5b506102686105fa3660046128a0565b6115b9565b34801561060b57600080fd5b506102f2600b5481565b34801561062157600080fd5b5061023e61063036600461260f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067757600080fd5b506102da6106863660046128b9565b6116b2565b34801561069757600080fd5b506102da6106a63660046125f4565b6117e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061073e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061078a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461079f90612bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546107cb90612bbc565b80156108185780601f106107ed57610100808354040283529160200191610818565b820191906000526020600020905b8154815290600101906020018083116107fb57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166108be5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006108f282611032565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109965760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016108b5565b3373ffffffffffffffffffffffffffffffffffffffff821614806109bf57506109bf8133610630565b610a315760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108b5565b610a3b83836118e0565b505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b8051610aba9060099060208401906124ac565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610b6160075490565b905090565b610b703382611980565b610be25760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108b5565b610a3b838383611ad6565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b60005b8151811015610aba57610c6e600780546001019055565b610c99828281518110610c8357610c83612cbb565b6020026020010151610c9460075490565b611d09565b6001600f6000848481518110610cb157610cb1612cbb565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610d1881612c10565b915050610c57565b60065473ffffffffffffffffffffffffffffffffffffffff163314610d875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b6000610da860065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610dff576040519150601f19603f3d011682016040523d82523d6000602084013e610e04565b606091505b5050905080610e1257600080fd5b50565b610a3b8383836040518060200160405280600081525061152b565b60606000610e3d836110ca565b905060008167ffffffffffffffff811115610e5a57610e5a612cea565b604051908082528060200260200182016040528015610e83578160200160208202803683370190505b509050600160005b8381108015610e9c5750600b548211155b15610f21576000610eac83611032565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f0e5782848381518110610ef557610ef5612cbb565b602090810291909101015281610f0a81612c10565b9250505b82610f1881612c10565b93505050610e8b565b5090949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600a55565b60098054610fa490612bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090612bbc565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505081565b60088054610fa490612bbc565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff168061078a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016108b5565b600073ffffffffffffffffffffffffffffffffffffffff82166111555760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016108b5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60065473ffffffffffffffffffffffffffffffffffffffff1633146111e55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b6111ef6000611d23565b565b60065473ffffffffffffffffffffffffffffffffffffffff1633146112585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b8051610aba9060089060208401906124ac565b60606001805461079f90612bbc565b8060008111801561128d5750600c548111155b6112d95760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e7420616d6f756e742100000000000000000000000060448201526064016108b5565b600b54816112e660075490565b6112f09190612b10565b111561133e5760405162461bcd60e51b815260206004820152601460248201527f4d617820737570706c792065786365656465642100000000000000000000000060448201526064016108b5565b600d5460ff16156113915760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016108b5565b42600e54620a8c006113a39190612b10565b1061144d57336000908152600f602052604090205460ff1680156113c75750816001145b6114135760405162461bcd60e51b815260206004820152601560248201527f596f7520617265206e6f7420656c696769626c6521000000000000000000000060448201526064016108b5565b336000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556114aa565b81600a5461145b9190612b3c565b3410156114aa5760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e742066756e6473210000000000000000000000000060448201526064016108b5565b610aba3383611d9a565b610aba338383611dd2565b60065473ffffffffffffffffffffffffffffffffffffffff1633146115265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b600c55565b6115353383611980565b6115a75760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016108b5565b6115b384848484611ee6565b50505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166116535760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016108b5565b600061165d611f6f565b9050600081511161167d57604051806020016040528060008152506116ab565b8061168784611f7e565b600960405160200161169b93929190612926565b6040516020818303038152906040525b9392505050565b816000811180156116c55750600c548111155b6117115760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e7420616d6f756e742100000000000000000000000060448201526064016108b5565b600b548161171e60075490565b6117289190612b10565b11156117765760405162461bcd60e51b815260206004820152601460248201527f4d617820737570706c792065786365656465642100000000000000000000000060448201526064016108b5565b60065473ffffffffffffffffffffffffffffffffffffffff1633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b610a3b8284611d9a565b60065473ffffffffffffffffffffffffffffffffffffffff16331461184e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff81166118d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108b5565b610e1281611d23565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061193a82611032565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16611a175760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016108b5565b6000611a2283611032565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a9157508373ffffffffffffffffffffffffffffffffffffffff16611a7984610822565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ace575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16611af682611032565b73ffffffffffffffffffffffffffffffffffffffff1614611b7f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016108b5565b73ffffffffffffffffffffffffffffffffffffffff8216611c075760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108b5565b611c126000826118e0565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290611c48908490612b79565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611c83908490612b10565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610aba8282604051806020016040528060008152506120b0565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a3b57611db3600780546001019055565b611dc083610c9460075490565b80611dca81612c10565b915050611d9d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e4e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611ef1848484611ad6565b611efd84848484612139565b6115b35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b60606008805461079f90612bbc565b606081611fbe57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611fe85780611fd281612c10565b9150611fe19050600a83612b28565b9150611fc2565b60008167ffffffffffffffff81111561200357612003612cea565b6040519080825280601f01601f19166020018201604052801561202d576020820181803683370190505b5090505b8415611ace57612042600183612b79565b915061204f600a86612c49565b61205a906030612b10565b60f81b81838151811061206f5761206f612cbb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506120a9600a86612b28565b9450612031565b6120ba838361231e565b6120c76000848484612139565b610a3b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612313576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906121b0903390899088908890600401612a21565b602060405180830381600087803b1580156121ca57600080fd5b505af1925050508015612218575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526122159181019061283a565b60015b6122c8573d808015612246576040519150601f19603f3d011682016040523d82523d6000602084013e61224b565b606091505b5080516122c05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016108b5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611ace565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff82166123815760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108b5565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156123f35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108b5565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612429908490612b10565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546124b890612bbc565b90600052602060002090601f0160209004810192826124da5760008555612520565b82601f106124f357805160ff1916838001178555612520565b82800160010185558215612520579182015b82811115612520578251825591602001919060010190612505565b5061252c929150612530565b5090565b5b8082111561252c5760008155600101612531565b600067ffffffffffffffff83111561255f5761255f612cea565b61259060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612ac1565b90508281528383830111156125a457600080fd5b828260208301376000602084830101529392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b919050565b803580151581146125df57600080fd5b60006020828403121561260657600080fd5b6116ab826125bb565b6000806040838503121561262257600080fd5b61262b836125bb565b9150612639602084016125bb565b90509250929050565b60008060006060848603121561265757600080fd5b612660846125bb565b925061266e602085016125bb565b9150604084013590509250925092565b6000806000806080858703121561269457600080fd5b61269d856125bb565b93506126ab602086016125bb565b925060408501359150606085013567ffffffffffffffff8111156126ce57600080fd5b8501601f810187136126df57600080fd5b6126ee87823560208401612545565b91505092959194509250565b6000806040838503121561270d57600080fd5b612716836125bb565b9150612639602084016125e4565b6000806040838503121561273757600080fd5b612740836125bb565b946020939093013593505050565b6000602080838503121561276157600080fd5b823567ffffffffffffffff8082111561277957600080fd5b818501915085601f83011261278d57600080fd5b81358181111561279f5761279f612cea565b8060051b91506127b0848301612ac1565b8181528481019084860184860187018a10156127cb57600080fd5b600095505b838610156127f5576127e1816125bb565b8352600195909501949186019186016127d0565b5098975050505050505050565b60006020828403121561281457600080fd5b6116ab826125e4565b60006020828403121561282f57600080fd5b81356116ab81612d19565b60006020828403121561284c57600080fd5b81516116ab81612d19565b60006020828403121561286957600080fd5b813567ffffffffffffffff81111561288057600080fd5b8201601f8101841361289157600080fd5b611ace84823560208401612545565b6000602082840312156128b257600080fd5b5035919050565b600080604083850312156128cc57600080fd5b82359150612639602084016125bb565b600081518084526128f4816020860160208601612b90565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000845160206129398285838a01612b90565b85519184019161294c8184848a01612b90565b8554920191600090600181811c908083168061296957607f831692505b8583108114156129a0577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b8080156129b457600181146129e357612a10565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851688528388019550612a10565b60008b81526020902060005b85811015612a085781548a8201529084019088016129ef565b505083880195505b50939b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612a6060808301846128dc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612aa257835183529284019291840191600101612a86565b50909695505050505050565b6020815260006116ab60208301846128dc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612b0857612b08612cea565b604052919050565b60008219821115612b2357612b23612c5d565b500190565b600082612b3757612b37612c8c565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b7457612b74612c5d565b500290565b600082821015612b8b57612b8b612c5d565b500390565b60005b83811015612bab578181015183820152602001612b93565b838111156115b35750506000910152565b600181811c90821680612bd057607f821691505b60208210811415612c0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c4257612c42612c5d565b5060010190565b600082612c5857612c58612c8c565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610e1257600080fdfea2646970667358221220aed998fbb17c25ebe2dc45398cc4dad281c119425b7b949dcf1cf03636c1b76464736f6c63430008070033

Deployed Bytecode Sourcemap

39198:4049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25977:305;;;;;;;;;;-1:-1:-1;25977:305:0;;;;;:::i;:::-;;:::i;:::-;;;9111:14:1;;9104:22;9086:41;;9074:2;9059:18;25977:305:0;;;;;;;;26922:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28481:221::-;;;;;;;;;;-1:-1:-1;28481:221:0;;;;;:::i;:::-;;:::i;:::-;;;7738:42:1;7726:55;;;7708:74;;7696:2;7681:18;28481:221:0;7562:226:1;28004:411:0;;;;;;;;;;-1:-1:-1;28004:411:0;;;;;:::i;:::-;;:::i;:::-;;39488:32;;;;;;;;;;;;;;;;;;;17634:25:1;;;17622:2;17607:18;39488:32:0;17488:177:1;42183:100:0;;;;;;;;;;-1:-1:-1;42183:100:0;;;;;:::i;:::-;;:::i;42289:77::-;;;;;;;;;;-1:-1:-1;42289:77:0;;;;;:::i;:::-;;:::i;40071:89::-;;;;;;;;;;;;;:::i;29231:339::-;;;;;;;;;;-1:-1:-1;29231:339:0;;;;;:::i;:::-;;:::i;42835:294::-;;;;;;;;;;-1:-1:-1;42835:294:0;;;;;:::i;:::-;;:::i;43135:109::-;;;;;;;;;;-1:-1:-1;43135:109:0;;;;;:::i;:::-;43218:18;;43194:4;43218:18;;;:11;:18;;;;;;;;;43135:109;42372:137;;;;;;;;;;;;;:::i;29641:185::-;;;;;;;;;;-1:-1:-1;29641:185:0;;;;;:::i;:::-;;:::i;40792:635::-;;;;;;;;;;-1:-1:-1;40792:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41861:74::-;;;;;;;;;;-1:-1:-1;41861:74:0;;;;;:::i;:::-;;:::i;39446:33::-;;;;;;;;;;;;;:::i;39605:26::-;;;;;;;;;;-1:-1:-1;39605:26:0;;;;;;;;39361:80;;;;;;;;;;;;;:::i;26616:239::-;;;;;;;;;;-1:-1:-1;26616:239:0;;;;;:::i;:::-;;:::i;26346:208::-;;;;;;;;;;-1:-1:-1;26346:208:0;;;;;:::i;:::-;;:::i;6598:103::-;;;;;;;;;;;;;:::i;42077:100::-;;;;;;;;;;-1:-1:-1;42077:100:0;;;;;:::i;:::-;;:::i;5947:87::-;;;;;;;;;;-1:-1:-1;6020:6:0;;;;5947:87;;39561:37;;;;;;;;;;;;;;;;27091:104;;;;;;;;;;;;;:::i;40166:457::-;;;;;;:::i;:::-;;:::i;28774:155::-;;;;;;;;;;-1:-1:-1;28774:155:0;;;;;:::i;:::-;;:::i;41941:130::-;;;;;;;;;;-1:-1:-1;41941:130:0;;;;;:::i;:::-;;:::i;29897:328::-;;;;;;;;;;-1:-1:-1;29897:328:0;;;;;:::i;:::-;;:::i;41433:422::-;;;;;;;;;;-1:-1:-1;41433:422:0;;;;;:::i;:::-;;:::i;39525:31::-;;;;;;;;;;;;;;;;29000:164;;;;;;;;;;-1:-1:-1;29000:164:0;;;;;:::i;:::-;29121:25;;;;29097:4;29121:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29000:164;40631:155;;;;;;;;;;-1:-1:-1;40631:155:0;;;;;:::i;:::-;;:::i;6856:201::-;;;;;;;;;;-1:-1:-1;6856:201:0;;;;;:::i;:::-;;:::i;25977:305::-;26079:4;26116:40;;;26131:25;26116:40;;:105;;-1:-1:-1;26173:48:0;;;26188:33;26173:48;26116:105;:158;;;-1:-1:-1;18855:25:0;18840:40;;;;26238:36;26096:178;25977:305;-1:-1:-1;;25977:305:0:o;26922:100::-;26976:13;27009:5;27002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26922:100;:::o;28481:221::-;28557:7;31824:16;;;:7;:16;;;;;;:30;:16;28577:73;;;;-1:-1:-1;;;28577:73:0;;14631:2:1;28577:73:0;;;14613:21:1;14670:2;14650:18;;;14643:30;14709:34;14689:18;;;14682:62;14780:14;14760:18;;;14753:42;14812:19;;28577:73:0;;;;;;;;;-1:-1:-1;28670:24:0;;;;:15;:24;;;;;;;;;28481:221::o;28004:411::-;28085:13;28101:23;28116:7;28101:14;:23::i;:::-;28085:39;;28149:5;28143:11;;:2;:11;;;;28135:57;;;;-1:-1:-1;;;28135:57:0;;16173:2:1;28135:57:0;;;16155:21:1;16212:2;16192:18;;;16185:30;16251:34;16231:18;;;16224:62;16322:3;16302:18;;;16295:31;16343:19;;28135:57:0;15971:397:1;28135:57:0;4751:10;28227:21;;;;;:62;;-1:-1:-1;28252:37:0;28269:5;4751:10;29000:164;:::i;28252:37::-;28205:168;;;;-1:-1:-1;;;28205:168:0;;13024:2:1;28205:168:0;;;13006:21:1;13063:2;13043:18;;;13036:30;13102:34;13082:18;;;13075:62;13173:26;13153:18;;;13146:54;13217:19;;28205:168:0;12822:420:1;28205:168:0;28386:21;28395:2;28399:7;28386:8;:21::i;:::-;28074:341;28004:411;;:::o;42183:100::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42255:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;42183:100:::0;:::o;42289:77::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42345:6:::1;:15:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;42289:77::o;40071:89::-;40115:7;40138:16;:6;1367:14;;1275:114;40138:16;40131:23;;40071:89;:::o;29231:339::-;29426:41;4751:10;29459:7;29426:18;:41::i;:::-;29418:103;;;;-1:-1:-1;;;29418:103:0;;16924:2:1;29418:103:0;;;16906:21:1;16963:2;16943:18;;;16936:30;17002:34;16982:18;;;16975:62;17073:19;17053:18;;;17046:47;17110:19;;29418:103:0;16722:413:1;29418:103:0;29534:28;29544:4;29550:2;29554:7;29534:9;:28::i;42835:294::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42931:9:::1;42926:198;42950:8;:15;42946:1;:19;42926:198;;;42991:18;:6;1486:19:::0;;1504:1;1486:19;;;1397:127;42991:18:::1;43028:40;43038:8;43047:1;43038:11;;;;;;;;:::i;:::-;;;;;;;43051:16;:6;1367:14:::0;;1275:114;43051:16:::1;43028:9;:40::i;:::-;43112:4;43087:11;:24;43099:8;43108:1;43099:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;43087:24:::1;;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43087:24:0;:29;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;42967:3;::::1;::::0;::::1;:::i;:::-;;;;42926:198;;42372:137:::0;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42417:7:::1;42438;6020:6:::0;;;;;5947:87;42438:7:::1;42430:21;;42459;42430:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42416:69;;;42500:2;42492:11;;;::::0;::::1;;42409:100;42372:137::o:0;29641:185::-;29779:39;29796:4;29802:2;29806:7;29779:39;;;;;;;;;;;;:16;:39::i;40792:635::-;40867:16;40895:23;40921:17;40931:6;40921:9;:17::i;:::-;40895:43;;40945:30;40992:15;40978:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40978:30:0;-1:-1:-1;40945:63:0;-1:-1:-1;41040:1:0;41015:22;41084:309;41109:15;41091;:33;:64;;;;;41146:9;;41128:14;:27;;41091:64;41084:309;;;41166:25;41194:23;41202:14;41194:7;:23::i;:::-;41166:51;;41253:6;41232:27;;:17;:27;;;41228:131;;;41305:14;41272:13;41286:15;41272:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;41332:17;;;;:::i;:::-;;;;41228:131;41369:16;;;;:::i;:::-;;;;41157:236;41084:309;;;-1:-1:-1;41408:13:0;;40792:635;-1:-1:-1;;;;40792:635:0:o;41861:74::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;41917:4:::1;:12:::0;41861:74::o;39446:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39361:80::-;;;;;;;:::i;26616:239::-;26688:7;26724:16;;;:7;:16;;;;;;;;26759:19;26751:73;;;;-1:-1:-1;;;26751:73:0;;13860:2:1;26751:73:0;;;13842:21:1;13899:2;13879:18;;;13872:30;13938:34;13918:18;;;13911:62;14009:11;13989:18;;;13982:39;14038:19;;26751:73:0;13658:405:1;26346:208:0;26418:7;26446:19;;;26438:74;;;;-1:-1:-1;;;26438:74:0;;13449:2:1;26438:74:0;;;13431:21:1;13488:2;13468:18;;;13461:30;13527:34;13507:18;;;13500:62;13598:12;13578:18;;;13571:40;13628:19;;26438:74:0;13247:406:1;26438:74:0;-1:-1:-1;26530:16:0;;;;;;:9;:16;;;;;;;26346:208::o;6598:103::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;6663:30:::1;6690:1;6663:18;:30::i;:::-;6598:103::o:0;42077:100::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42149:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;27091:104::-:0;27147:13;27180:7;27173:14;;;;;:::i;40166:457::-;40231:11;39905:1;39891:11;:15;:52;;;;;39925:18;;39910:11;:33;;39891:52;39883:85;;;;-1:-1:-1;;;39883:85:0;;11503:2:1;39883:85:0;;;11485:21:1;11542:2;11522:18;;;11515:30;11581:22;11561:18;;;11554:50;11621:18;;39883:85:0;11301:344:1;39883:85:0;40017:9;;40002:11;39983:16;:6;1367:14;;1275:114;39983:16;:30;;;;:::i;:::-;:43;;39975:76;;;;-1:-1:-1;;;39975:76:0;;16575:2:1;39975:76:0;;;16557:21:1;16614:2;16594:18;;;16587:30;16653:22;16633:18;;;16626:50;16693:18;;39975:76:0;16373:344:1;39975:76:0;40260:6:::1;::::0;::::1;;40259:7;40251:43;;;::::0;-1:-1:-1;;;40251:43:0;;15405:2:1;40251:43:0::1;::::0;::::1;15387:21:1::0;15444:2;15424:18;;;15417:30;15483:25;15463:18;;;15456:53;15526:18;;40251:43:0::1;15203:347:1::0;40251:43:0::1;40333:15;40305:16;;40323:6;40305:24;;;;:::i;:::-;:43;40301:272;;40383:10;43194:4:::0;43218:18;;;:11;:18;;;;;;;;40369:43:::1;;;;;40398:11;40411:1;40398:14;40369:43;40361:77;;;::::0;-1:-1:-1;;;40361:77:0;;9564:2:1;40361:77:0::1;::::0;::::1;9546:21:1::0;9603:2;9583:18;;;9576:30;9642:23;9622:18;;;9615:51;9683:18;;40361:77:0::1;9362:345:1::0;40361:77:0::1;40462:10;40474:5;40450:23:::0;;;:11:::1;:23;::::0;;;;:29;;;::::1;::::0;;40301:272:::1;;;40530:11;40523:4;;:18;;;;:::i;:::-;40510:9;:31;;40502:63;;;::::0;-1:-1:-1;;;40502:63:0;;17342:2:1;40502:63:0::1;::::0;::::1;17324:21:1::0;17381:2;17361:18;;;17354:30;17420:21;17400:18;;;17393:49;17459:18;;40502:63:0::1;17140:343:1::0;40502:63:0::1;40583:34;40593:10;40605:11;40583:9;:34::i;28774:155::-:0;28869:52;4751:10;28902:8;28912;28869:18;:52::i;41941:130::-;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;42025:18:::1;:40:::0;41941:130::o;29897:328::-;30072:41;4751:10;30105:7;30072:18;:41::i;:::-;30064:103;;;;-1:-1:-1;;;30064:103:0;;16924:2:1;30064:103:0;;;16906:21:1;16963:2;16943:18;;;16936:30;17002:34;16982:18;;;16975:62;17073:19;17053:18;;;17046:47;17110:19;;30064:103:0;16722:413:1;30064:103:0;30178:39;30192:4;30198:2;30202:7;30211:5;30178:13;:39::i;:::-;29897:328;;;;:::o;41433:422::-;31800:4;31824:16;;;:7;:16;;;;;;41532:13;;31824:30;:16;41557:98;;;;-1:-1:-1;;;41557:98:0;;15757:2:1;41557:98:0;;;15739:21:1;15796:2;15776:18;;;15769:30;15835:34;15815:18;;;15808:62;15906:17;15886:18;;;15879:45;15941:19;;41557:98:0;15555:411:1;41557:98:0;41664:28;41695:10;:8;:10::i;:::-;41664:41;;41750:1;41725:14;41719:28;:32;:130;;;;;;;;;;;;;;;;;41787:14;41803:19;:8;:17;:19::i;:::-;41824:9;41770:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41719:130;41712:137;41433:422;-1:-1:-1;;;41433:422:0:o;40631:155::-;40717:11;39905:1;39891:11;:15;:52;;;;;39925:18;;39910:11;:33;;39891:52;39883:85;;;;-1:-1:-1;;;39883:85:0;;11503:2:1;39883:85:0;;;11485:21:1;11542:2;11522:18;;;11515:30;11581:22;11561:18;;;11554:50;11621:18;;39883:85:0;11301:344:1;39883:85:0;40017:9;;40002:11;39983:16;:6;1367:14;;1275:114;39983:16;:30;;;;:::i;:::-;:43;;39975:76;;;;-1:-1:-1;;;39975:76:0;;16575:2:1;39975:76:0;;;16557:21:1;16614:2;16594:18;;;16587:30;16653:22;16633:18;;;16626:50;16693:18;;39975:76:0;16373:344:1;39975:76:0;6020:6;;6167:23:::1;6020:6:::0;4751:10;6167:23:::1;6159:68;;;::::0;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0::1;::::0;::::1;15026:21:1::0;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0::1;14842:356:1::0;6159:68:0::1;40747:33:::2;40757:9;40768:11;40747:9;:33::i;6856:201::-:0;6020:6;;6167:23;6020:6;4751:10;6167:23;6159:68;;;;-1:-1:-1;;;6159:68:0;;15044:2:1;6159:68:0;;;15026:21:1;;;15063:18;;;15056:30;15122:34;15102:18;;;15095:62;15174:18;;6159:68:0;14842:356:1;6159:68:0;6945:22:::1;::::0;::::1;6937:73;;;::::0;-1:-1:-1;;;6937:73:0;;10333:2:1;6937:73:0::1;::::0;::::1;10315:21:1::0;10372:2;10352:18;;;10345:30;10411:34;10391:18;;;10384:62;10482:8;10462:18;;;10455:36;10508:19;;6937:73:0::1;10131:402:1::0;6937:73:0::1;7021:28;7040:8;7021:18;:28::i;35881:174::-:0;35956:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;36010:23;35956:24;36010:14;:23::i;:::-;36001:46;;;;;;;;;;;;35881:174;;:::o;32029:348::-;32122:4;31824:16;;;:7;:16;;;;;;:30;:16;32139:73;;;;-1:-1:-1;;;32139:73:0;;12611:2:1;32139:73:0;;;12593:21:1;12650:2;12630:18;;;12623:30;12689:34;12669:18;;;12662:62;12760:14;12740:18;;;12733:42;12792:19;;32139:73:0;12409:408:1;32139:73:0;32223:13;32239:23;32254:7;32239:14;:23::i;:::-;32223:39;;32292:5;32281:16;;:7;:16;;;:51;;;;32325:7;32301:31;;:20;32313:7;32301:11;:20::i;:::-;:31;;;32281:51;:87;;;-1:-1:-1;29121:25:0;;;;29097:4;29121:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32336:32;32273:96;32029:348;-1:-1:-1;;;;32029:348:0:o;35138:625::-;35297:4;35270:31;;:23;35285:7;35270:14;:23::i;:::-;:31;;;35262:81;;;;-1:-1:-1;;;35262:81:0;;10740:2:1;35262:81:0;;;10722:21:1;10779:2;10759:18;;;10752:30;10818:34;10798:18;;;10791:62;10889:7;10869:18;;;10862:35;10914:19;;35262:81:0;10538:401:1;35262:81:0;35362:16;;;35354:65;;;;-1:-1:-1;;;35354:65:0;;11852:2:1;35354:65:0;;;11834:21:1;11891:2;11871:18;;;11864:30;11930:34;11910:18;;;11903:62;12001:6;11981:18;;;11974:34;12025:19;;35354:65:0;11650:400:1;35354:65:0;35536:29;35553:1;35557:7;35536:8;:29::i;:::-;35578:15;;;;;;;:9;:15;;;;;:20;;35597:1;;35578:15;:20;;35597:1;;35578:20;:::i;:::-;;;;-1:-1:-1;;35609:13:0;;;;;;;:9;:13;;;;;:18;;35626:1;;35609:13;:18;;35626:1;;35609:18;:::i;:::-;;;;-1:-1:-1;;35638:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;;35677:27;;35638:16;;35677:27;;;;;;;28074:341;28004:411;;:::o;32719:110::-;32795:26;32805:2;32809:7;32795:26;;;;;;;;;;;;:9;:26::i;7217:191::-;7310:6;;;;7327:17;;;;;;;;;;;7360:40;;7310:6;;;7327:17;7310:6;;7360:40;;7291:16;;7360:40;7280:128;7217:191;:::o;42515:204::-;42595:9;42590:124;42614:11;42610:1;:15;42590:124;;;42641:18;:6;1486:19;;1504:1;1486:19;;;1397:127;42641:18;42668:38;42678:9;42689:16;:6;1367:14;;1275:114;42668:38;42627:3;;;;:::i;:::-;;;;42590:124;;36197:315;36352:8;36343:17;;:5;:17;;;;36335:55;;;;-1:-1:-1;;;36335:55:0;;12257:2:1;36335:55:0;;;12239:21:1;12296:2;12276:18;;;12269:30;12335:27;12315:18;;;12308:55;12380:18;;36335:55:0;12055:349:1;36335:55:0;36401:25;;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;36463:41;;9086::1;;;36463::0;;9059:18:1;36463:41:0;;;;;;;36197:315;;;:::o;31107:::-;31264:28;31274:4;31280:2;31284:7;31264:9;:28::i;:::-;31311:48;31334:4;31340:2;31344:7;31353:5;31311:22;:48::i;:::-;31303:111;;;;-1:-1:-1;;;31303:111:0;;9914:2:1;31303:111:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992:34;9972:18;;;9965:62;10063:20;10043:18;;;10036:48;10101:19;;31303:111:0;9712:414:1;42725:104:0;42785:13;42814:9;42807:16;;;;;:::i;2233:723::-;2289:13;2510:10;2506:53;;-1:-1:-1;;2537:10:0;;;;;;;;;;;;;;;;;;2233:723::o;2506:53::-;2584:5;2569:12;2625:78;2632:9;;2625:78;;2658:8;;;;:::i;:::-;;-1:-1:-1;2681:10:0;;-1:-1:-1;2689:2:0;2681:10;;:::i;:::-;;;2625:78;;;2713:19;2745:6;2735:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2735:17:0;;2713:39;;2763:154;2770:10;;2763:154;;2797:11;2807:1;2797:11;;:::i;:::-;;-1:-1:-1;2866:10:0;2874:2;2866:5;:10;:::i;:::-;2853:24;;:2;:24;:::i;:::-;2840:39;;2823:6;2830;2823:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;2894:11:0;2903:2;2894:11;;:::i;:::-;;;2763:154;;33056:321;33186:18;33192:2;33196:7;33186:5;:18::i;:::-;33237:54;33268:1;33272:2;33276:7;33285:5;33237:22;:54::i;:::-;33215:154;;;;-1:-1:-1;;;33215:154:0;;9914:2:1;33215:154:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992:34;9972:18;;;9965:62;10063:20;10043:18;;;10036:48;10101:19;;33215:154:0;9712:414:1;37077:799:0;37232:4;37253:13;;;8943:19;:23;37249:620;;37289:72;;;;;:36;;;;;;:72;;4751:10;;37340:4;;37346:7;;37355:5;;37289:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37289:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37285:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37531:13:0;;37527:272;;37574:60;;-1:-1:-1;;;37574:60:0;;9914:2:1;37574:60:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992:34;9972:18;;;9965:62;10063:20;10043:18;;;10036:48;10101:19;;37574:60:0;9712:414:1;37527:272:0;37749:6;37743:13;37734:6;37730:2;37726:15;37719:38;37285:529;37412:51;;37422:41;37412:51;;-1:-1:-1;37405:58:0;;37249:620;-1:-1:-1;37853:4:0;37077:799;;;;;;:::o;33713:439::-;33793:16;;;33785:61;;;;-1:-1:-1;;;33785:61:0;;14270:2:1;33785:61:0;;;14252:21:1;;;14289:18;;;14282:30;14348:34;14328:18;;;14321:62;14400:18;;33785:61:0;14068:356:1;33785:61:0;31800:4;31824:16;;;:7;:16;;;;;;:30;:16;:30;33857:58;;;;-1:-1:-1;;;33857:58:0;;11146:2:1;33857:58:0;;;11128:21:1;11185:2;11165:18;;;11158:30;11224;11204:18;;;11197:58;11272:18;;33857:58:0;10944:352:1;33857:58:0;33986:13;;;;;;;:9;:13;;;;;:18;;34003:1;;33986:13;:18;;34003:1;;33986:18;:::i;:::-;;;;-1:-1:-1;;34015:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;34054:33;;34015:16;;;34054:33;;34015:16;;34054:33;42255:22:::1;42183:100:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:465:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:116;282:4;213:66;208:2;200:6;196:15;192:88;188:99;172:116;:::i;:::-;163:125;;311:6;304:5;297:21;351:3;342:6;337:3;333:16;330:25;327:45;;;368:1;365;358:12;327:45;417:6;412:3;405:4;398:5;394:16;381:43;471:1;464:4;455:6;448:5;444:18;440:29;433:40;14:465;;;;;:::o;484:196::-;552:20;;612:42;601:54;;591:65;;581:93;;670:1;667;660:12;581:93;484:196;;;:::o;685:160::-;750:20;;806:13;;799:21;789:32;;779:60;;835:1;832;825:12;850:186;909:6;962:2;950:9;941:7;937:23;933:32;930:52;;;978:1;975;968:12;930:52;1001:29;1020:9;1001:29;:::i;1041:260::-;1109:6;1117;1170:2;1158:9;1149:7;1145:23;1141:32;1138:52;;;1186:1;1183;1176:12;1138:52;1209:29;1228:9;1209:29;:::i;:::-;1199:39;;1257:38;1291:2;1280:9;1276:18;1257:38;:::i;:::-;1247:48;;1041:260;;;;;:::o;1306:328::-;1383:6;1391;1399;1452:2;1440:9;1431:7;1427:23;1423:32;1420:52;;;1468:1;1465;1458:12;1420:52;1491:29;1510:9;1491:29;:::i;:::-;1481:39;;1539:38;1573:2;1562:9;1558:18;1539:38;:::i;:::-;1529:48;;1624:2;1613:9;1609:18;1596:32;1586:42;;1306:328;;;;;:::o;1639:666::-;1734:6;1742;1750;1758;1811:3;1799:9;1790:7;1786:23;1782:33;1779:53;;;1828:1;1825;1818:12;1779:53;1851:29;1870:9;1851:29;:::i;:::-;1841:39;;1899:38;1933:2;1922:9;1918:18;1899:38;:::i;:::-;1889:48;;1984:2;1973:9;1969:18;1956:32;1946:42;;2039:2;2028:9;2024:18;2011:32;2066:18;2058:6;2055:30;2052:50;;;2098:1;2095;2088:12;2052:50;2121:22;;2174:4;2166:13;;2162:27;-1:-1:-1;2152:55:1;;2203:1;2200;2193:12;2152:55;2226:73;2291:7;2286:2;2273:16;2268:2;2264;2260:11;2226:73;:::i;:::-;2216:83;;;1639:666;;;;;;;:::o;2310:254::-;2375:6;2383;2436:2;2424:9;2415:7;2411:23;2407:32;2404:52;;;2452:1;2449;2442:12;2404:52;2475:29;2494:9;2475:29;:::i;:::-;2465:39;;2523:35;2554:2;2543:9;2539:18;2523:35;:::i;2569:254::-;2637:6;2645;2698:2;2686:9;2677:7;2673:23;2669:32;2666:52;;;2714:1;2711;2704:12;2666:52;2737:29;2756:9;2737:29;:::i;:::-;2727:39;2813:2;2798:18;;;;2785:32;;-1:-1:-1;;;2569:254:1:o;2828:963::-;2912:6;2943:2;2986;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3042:9;3029:23;3071:18;3112:2;3104:6;3101:14;3098:34;;;3128:1;3125;3118:12;3098:34;3166:6;3155:9;3151:22;3141:32;;3211:7;3204:4;3200:2;3196:13;3192:27;3182:55;;3233:1;3230;3223:12;3182:55;3269:2;3256:16;3291:2;3287;3284:10;3281:36;;;3297:18;;:::i;:::-;3343:2;3340:1;3336:10;3326:20;;3366:28;3390:2;3386;3382:11;3366:28;:::i;:::-;3428:15;;;3459:12;;;;3491:11;;;3521;;;3517:20;;3514:33;-1:-1:-1;3511:53:1;;;3560:1;3557;3550:12;3511:53;3582:1;3573:10;;3592:169;3606:2;3603:1;3600:9;3592:169;;;3663:23;3682:3;3663:23;:::i;:::-;3651:36;;3624:1;3617:9;;;;;3707:12;;;;3739;;3592:169;;;-1:-1:-1;3780:5:1;2828:963;-1:-1:-1;;;;;;;;2828:963:1:o;3796:180::-;3852:6;3905:2;3893:9;3884:7;3880:23;3876:32;3873:52;;;3921:1;3918;3911:12;3873:52;3944:26;3960:9;3944:26;:::i;3981:245::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:52;;;4108:1;4105;4098:12;4060:52;4147:9;4134:23;4166:30;4190:5;4166:30;:::i;4231:249::-;4300:6;4353:2;4341:9;4332:7;4328:23;4324:32;4321:52;;;4369:1;4366;4359:12;4321:52;4401:9;4395:16;4420:30;4444:5;4420:30;:::i;4485:450::-;4554:6;4607:2;4595:9;4586:7;4582:23;4578:32;4575:52;;;4623:1;4620;4613:12;4575:52;4663:9;4650:23;4696:18;4688:6;4685:30;4682:50;;;4728:1;4725;4718:12;4682:50;4751:22;;4804:4;4796:13;;4792:27;-1:-1:-1;4782:55:1;;4833:1;4830;4823:12;4782:55;4856:73;4921:7;4916:2;4903:16;4898:2;4894;4890:11;4856:73;:::i;4940:180::-;4999:6;5052:2;5040:9;5031:7;5027:23;5023:32;5020:52;;;5068:1;5065;5058:12;5020:52;-1:-1:-1;5091:23:1;;4940:180;-1:-1:-1;4940:180:1:o;5125:254::-;5193:6;5201;5254:2;5242:9;5233:7;5229:23;5225:32;5222:52;;;5270:1;5267;5260:12;5222:52;5306:9;5293:23;5283:33;;5335:38;5369:2;5358:9;5354:18;5335:38;:::i;5384:316::-;5425:3;5463:5;5457:12;5490:6;5485:3;5478:19;5506:63;5562:6;5555:4;5550:3;5546:14;5539:4;5532:5;5528:16;5506:63;:::i;:::-;5614:2;5602:15;5619:66;5598:88;5589:98;;;;5689:4;5585:109;;5384:316;-1:-1:-1;;5384:316:1:o;5705:1642::-;5929:3;5967:6;5961:13;5993:4;6006:51;6050:6;6045:3;6040:2;6032:6;6028:15;6006:51;:::i;:::-;6120:13;;6079:16;;;;6142:55;6120:13;6079:16;6164:15;;;6142:55;:::i;:::-;6286:13;;6219:20;;;6259:1;;6346;6368:18;;;;6421;;;;6448:93;;6526:4;6516:8;6512:19;6500:31;;6448:93;6589:2;6579:8;6576:16;6556:18;6553:40;6550:224;;;6628:77;6623:3;6616:90;6729:4;6726:1;6719:15;6759:4;6754:3;6747:17;6550:224;6790:18;6817:168;;;;6999:1;6994:328;;;;6783:539;;6817:168;6867:66;6856:9;6852:82;6845:5;6838:97;6966:8;6959:5;6955:20;6948:27;;6817:168;;6994:328;18082:1;18075:14;;;18119:4;18106:18;;7089:1;7103:169;7117:8;7114:1;7111:15;7103:169;;;7199:14;;7184:13;;;7177:37;7242:16;;;;7134:10;;7103:169;;;7107:3;;7303:8;7296:5;7292:20;7285:27;;6783:539;-1:-1:-1;7338:3:1;;5705:1642;-1:-1:-1;;;;;;;;;;;5705:1642:1:o;7793:511::-;7987:4;8016:42;8097:2;8089:6;8085:15;8074:9;8067:34;8149:2;8141:6;8137:15;8132:2;8121:9;8117:18;8110:43;;8189:6;8184:2;8173:9;8169:18;8162:34;8232:3;8227:2;8216:9;8212:18;8205:31;8253:45;8293:3;8282:9;8278:19;8270:6;8253:45;:::i;:::-;8245:53;7793:511;-1:-1:-1;;;;;;7793:511:1:o;8309:632::-;8480:2;8532:21;;;8602:13;;8505:18;;;8624:22;;;8451:4;;8480:2;8703:15;;;;8677:2;8662:18;;;8451:4;8746:169;8760:6;8757:1;8754:13;8746:169;;;8821:13;;8809:26;;8890:15;;;;8855:12;;;;8782:1;8775:9;8746:169;;;-1:-1:-1;8932:3:1;;8309:632;-1:-1:-1;;;;;;8309:632:1:o;9138:219::-;9287:2;9276:9;9269:21;9250:4;9307:44;9347:2;9336:9;9332:18;9324:6;9307:44;:::i;17670:334::-;17741:2;17735:9;17797:2;17787:13;;17802:66;17783:86;17771:99;;17900:18;17885:34;;17921:22;;;17882:62;17879:88;;;17947:18;;:::i;:::-;17983:2;17976:22;17670:334;;-1:-1:-1;17670:334:1:o;18135:128::-;18175:3;18206:1;18202:6;18199:1;18196:13;18193:39;;;18212:18;;:::i;:::-;-1:-1:-1;18248:9:1;;18135:128::o;18268:120::-;18308:1;18334;18324:35;;18339:18;;:::i;:::-;-1:-1:-1;18373:9:1;;18268:120::o;18393:228::-;18433:7;18559:1;18491:66;18487:74;18484:1;18481:81;18476:1;18469:9;18462:17;18458:105;18455:131;;;18566:18;;:::i;:::-;-1:-1:-1;18606:9:1;;18393:228::o;18626:125::-;18666:4;18694:1;18691;18688:8;18685:34;;;18699:18;;:::i;:::-;-1:-1:-1;18736:9:1;;18626:125::o;18756:258::-;18828:1;18838:113;18852:6;18849:1;18846:13;18838:113;;;18928:11;;;18922:18;18909:11;;;18902:39;18874:2;18867:10;18838:113;;;18969:6;18966:1;18963:13;18960:48;;;-1:-1:-1;;19004:1:1;18986:16;;18979:27;18756:258::o;19019:437::-;19098:1;19094:12;;;;19141;;;19162:61;;19216:4;19208:6;19204:17;19194:27;;19162:61;19269:2;19261:6;19258:14;19238:18;19235:38;19232:218;;;19306:77;19303:1;19296:88;19407:4;19404:1;19397:15;19435:4;19432:1;19425:15;19232:218;;19019:437;;;:::o;19461:195::-;19500:3;19531:66;19524:5;19521:77;19518:103;;;19601:18;;:::i;:::-;-1:-1:-1;19648:1:1;19637:13;;19461:195::o;19661:112::-;19693:1;19719;19709:35;;19724:18;;:::i;:::-;-1:-1:-1;19758:9:1;;19661:112::o;19778:184::-;19830:77;19827:1;19820:88;19927:4;19924:1;19917:15;19951:4;19948:1;19941:15;19967:184;20019:77;20016:1;20009:88;20116:4;20113:1;20106:15;20140:4;20137:1;20130:15;20156:184;20208:77;20205:1;20198:88;20305:4;20302:1;20295:15;20329:4;20326:1;20319:15;20345:184;20397:77;20394:1;20387:88;20494:4;20491:1;20484:15;20518:4;20515:1;20508:15;20534:177;20619:66;20612:5;20608:78;20601:5;20598:89;20588:117;;20701:1;20698;20691:12

Swarm Source

ipfs://aed998fbb17c25ebe2dc45398cc4dad281c119425b7b949dcf1cf03636c1b764
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.