ETH Price: $3,101.29 (+1.34%)
Gas: 7 Gwei

Token

ARABPUNKS (ABP)
 

Overview

Max Total Supply

0 ABP

Holders

3

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
*٣٣٣٣٠.eth
Balance
1 ABP
0x17fd87ab6da67797bde709f446826af10ceaf2de
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ARABPUNKS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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 (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


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

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

    bool private _paused;

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

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

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

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

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

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

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

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _burn(tokenId);
    }
}

// File: arabpunks23.sol


pragma solidity ^0.8.4;







contract ARABPUNKS is ERC721, Ownable, ERC721Burnable, Pausable  {
    
    using Counters for Counters.Counter;

    bool public contractStatus = true;
    string _baseTokenURI;


    Counters.Counter private _tokenIdCounter;

    modifier iswhiteListedUser() {
        require(whiteList[msg.sender], "Not a White listed User");
        _;
    }

    constructor(string memory baseURI) ERC721("ARABPUNKS", "ABP") {
         _baseTokenURI = baseURI;
    }


    mapping(address => bool) public whiteList;
    mapping(uint => string) _tokenURIs;
    mapping(address => bool) public addressMintedStatus;



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

    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,"/AlphaPass.json")) : "";
        }

    
    function setcontractStatus(bool _status) external onlyOwner {
        contractStatus = _status;
    }

    function safeMint() public iswhiteListedUser {
        require(contractStatus, "Currently contract is not active");
        require(addressMintedStatus[msg.sender] == false,"You have already minted");
         uint _tokenId = _tokenIdCounter.current();
       
                _tokenIdCounter.increment();
                _mint(msg.sender, _tokenId);
                tokenURI(_tokenId);
                 addressMintedStatus[msg.sender] = true;
            }
        
    
    

    function airdropMint(address[] memory _addresses, uint[] memory _tokenIds) external onlyOwner {
         require(contractStatus, "Currently contract is not active");
        require(_addresses.length == _tokenIds.length);
        uint arrayLength = _addresses.length;
        for(uint i = 0; i < arrayLength; ++i){
            _mint(_addresses[i], _tokenIds[i]);
            tokenURI(_tokenIds[i]);            
        }
    }
    
    function addWhilteListUser (address[] memory _whiteListUser) public onlyOwner {
        for ( uint i=0; i < _whiteListUser.length; ++i){
        whiteList[_whiteListUser[i]] = true;
        } 
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"_whiteListUser","type":"address[]"}],"name":"addWhilteListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"airdropMint","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safeMint","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":"bool","name":"_status","type":"bool"}],"name":"setcontractStatus","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526001600660156101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003a2738038062003a27833981810160405281019062000052919062000349565b6040518060400160405280600981526020017f4152414250554e4b5300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41425000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d69291906200021b565b508060019080519060200190620000ef9291906200021b565b50505062000112620001066200014d60201b60201c565b6200015560201b60201c565b6000600660146101000a81548160ff0219169083151502179055508060079080519060200190620001459291906200021b565b50506200051e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000229906200042f565b90600052602060002090601f0160209004810192826200024d576000855562000299565b82601f106200026857805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002985782518255916020019190600101906200027b565b5b509050620002a89190620002ac565b5090565b5b80821115620002c7576000816000905550600101620002ad565b5090565b6000620002e2620002dc84620003c3565b6200039a565b905082815260208101848484011115620003015762000300620004fe565b5b6200030e848285620003f9565b509392505050565b600082601f8301126200032e576200032d620004f9565b5b815162000340848260208601620002cb565b91505092915050565b60006020828403121562000362576200036162000508565b5b600082015167ffffffffffffffff81111562000383576200038262000503565b5b620003918482850162000316565b91505092915050565b6000620003a6620003b9565b9050620003b4828262000465565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e157620003e0620004ca565b5b620003ec826200050d565b9050602081019050919050565b60005b8381101562000419578082015181840152602081019050620003fc565b8381111562000429576000848401525b50505050565b600060028204905060018216806200044857607f821691505b602082108114156200045f576200045e6200049b565b5b50919050565b62000470826200050d565b810181811067ffffffffffffffff82111715620004925762000491620004ca565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6134f9806200052e6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636871ee40116100f9578063a22cb46511610097578063c6ee20d211610071578063c6ee20d21461046a578063c87b56dd14610488578063e985e9c5146104b8578063f2fde38b146104e8576101a9565b8063a22cb46514610416578063b46f820514610432578063b88d4fde1461044e576101a9565b806382604ebf116100d357806382604ebf146103a05780638456cb59146103d05780638da5cb5b146103da57806395d89b41146103f8576101a9565b80636871ee401461035c57806370a0823114610366578063715018a614610396576101a9565b8063372c12b11161016657806342966c681161014057806342966c68146102d65780635c975abb146102f25780636352211e14610310578063671b1b2314610340576101a9565b8063372c12b1146102805780633f4ba83a146102b057806342842e0e146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806323b872dd14610248578063279a669e14610264575b600080fd5b6101c860048036038101906101c391906124c6565b610504565b6040516101d59190612962565b60405180910390f35b6101e66105e6565b6040516101f3919061297d565b60405180910390f35b61021660048036038101906102119190612520565b610678565b60405161022391906128fb565b60405180910390f35b61024660048036038101906102419190612398565b6106be565b005b610262600480360381019061025d9190612282565b6107d6565b005b61027e60048036038101906102799190612421565b610836565b005b61029a60048036038101906102959190612215565b610925565b6040516102a79190612962565b60405180910390f35b6102b8610945565b005b6102d460048036038101906102cf9190612282565b610957565b005b6102f060048036038101906102eb9190612520565b610977565b005b6102fa6109d3565b6040516103079190612962565b60405180910390f35b61032a60048036038101906103259190612520565b6109ea565b60405161033791906128fb565b60405180910390f35b61035a60048036038101906103559190612499565b610a9c565b005b610364610ac1565b005b610380600480360381019061037b9190612215565b610cb6565b60405161038d9190612bff565b60405180910390f35b61039e610d6e565b005b6103ba60048036038101906103b59190612215565b610d82565b6040516103c79190612962565b60405180910390f35b6103d8610da2565b005b6103e2610db4565b6040516103ef91906128fb565b60405180910390f35b610400610dde565b60405161040d919061297d565b60405180910390f35b610430600480360381019061042b9190612358565b610e70565b005b61044c600480360381019061044791906123d8565b610e86565b005b610468600480360381019061046391906122d5565b610f21565b005b610472610f83565b60405161047f9190612962565b60405180910390f35b6104a2600480360381019061049d9190612520565b610f96565b6040516104af919061297d565b60405180910390f35b6104d260048036038101906104cd9190612242565b611033565b6040516104df9190612962565b60405180910390f35b61050260048036038101906104fd9190612215565b6110c7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105df57506105de8261114b565b5b9050919050565b6060600080546105f590612e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461062190612e4b565b801561066e5780601f106106435761010080835404028352916020019161066e565b820191906000526020600020905b81548152906001019060200180831161065157829003601f168201915b5050505050905090565b6000610683826111b5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106c9826109ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190612b7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610759611200565b73ffffffffffffffffffffffffffffffffffffffff161480610788575061078781610782611200565b611033565b5b6107c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be90612adf565b60405180910390fd5b6107d18383611208565b505050565b6107e76107e1611200565b826112c1565b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612bbf565b60405180910390fd5b610831838383611356565b505050565b61083e6115bd565b600660159054906101000a900460ff1661088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490612b9f565b60405180910390fd5b805182511461089b57600080fd5b60008251905060005b8181101561091f576108ea8482815181106108c2576108c1612f55565b5b60200260200101518483815181106108dd576108dc612f55565b5b602002602001015161163b565b61090d838281518110610900576108ff612f55565b5b6020026020010151610f96565b508061091890612eae565b90506108a4565b50505050565b60096020528060005260406000206000915054906101000a900460ff1681565b61094d6115bd565b610955611815565b565b61097283838360405180602001604052806000815250610f21565b505050565b610988610982611200565b826112c1565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90612bbf565b60405180910390fd5b6109d081611878565b50565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612b5f565b60405180910390fd5b80915050919050565b610aa46115bd565b80600660156101000a81548160ff02191690831515021790555050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490612bdf565b60405180910390fd5b600660159054906101000a900460ff16610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612b9f565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690612a3f565b60405180910390fd5b6000610c3b6008611995565b9050610c4760086119a3565b610c51338261163b565b610c5a81610f96565b506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90612abf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d766115bd565b610d8060006119b9565b565b600b6020528060005260406000206000915054906101000a900460ff1681565b610daa6115bd565b610db2611a7f565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ded90612e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1990612e4b565b8015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b5050505050905090565b610e82610e7b611200565b8383611ae2565b5050565b610e8e6115bd565b60005b8151811015610f1d57600160096000848481518110610eb357610eb2612f55565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080610f1690612eae565b9050610e91565b5050565b610f32610f2c611200565b836112c1565b610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612bbf565b60405180910390fd5b610f7d84848484611c4f565b50505050565b600660159054906101000a900460ff1681565b6060610fa182611cab565b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790612b3f565b60405180910390fd5b6000610fea611d17565b9050600081511161100a576040518060200160405280600081525061102b565b8060405160200161101b91906128d9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110cf6115bd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906129df565b60405180910390fd5b611148816119b9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111be81611cab565b6111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490612b5f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661127b836109ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112cd836109ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061130f575061130e8185611033565b5b8061134d57508373ffffffffffffffffffffffffffffffffffffffff1661133584610678565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611376826109ea565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906129ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612a5f565b60405180910390fd5b611447838383611da9565b611452600082611208565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a29190612d61565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114f99190612d0b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115b8838383611dae565b505050565b6115c5611200565b73ffffffffffffffffffffffffffffffffffffffff166115e3610db4565b73ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163090612b1f565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290612aff565b60405180910390fd5b6116b481611cab565b156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90612a1f565b60405180910390fd5b61170060008383611da9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117509190612d0b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461181160008383611dae565b5050565b61181d611db3565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611861611200565b60405161186e91906128fb565b60405180910390a1565b6000611883826109ea565b905061189181600084611da9565b61189c600083611208565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ec9190612d61565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461199181600084611dae565b5050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a87611dfc565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611acb611200565b604051611ad891906128fb565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890612a7f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c429190612962565b60405180910390a3505050565b611c5a848484611356565b611c6684848484611e46565b611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c906129bf565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060078054611d2690612e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5290612e4b565b8015611d9f5780601f10611d7457610100808354040283529160200191611d9f565b820191906000526020600020905b815481529060010190602001808311611d8257829003601f168201915b5050505050905090565b505050565b505050565b611dbb6109d3565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df19061299f565b60405180910390fd5b565b611e046109d3565b15611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90612a9f565b60405180910390fd5b565b6000611e678473ffffffffffffffffffffffffffffffffffffffff16611fdd565b15611fd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e90611200565b8786866040518563ffffffff1660e01b8152600401611eb29493929190612916565b602060405180830381600087803b158015611ecc57600080fd5b505af1925050508015611efd57506040513d601f19601f82011682018060405250810190611efa91906124f3565b60015b611f80573d8060008114611f2d576040519150601f19603f3d011682016040523d82523d6000602084013e611f32565b606091505b50600081511415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f906129bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fd5565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061201361200e84612c3f565b612c1a565b9050808382526020820190508285602086028201111561203657612035612fb8565b5b60005b85811015612066578161204c8882612122565b845260208401935060208301925050600181019050612039565b5050509392505050565b600061208361207e84612c6b565b612c1a565b905080838252602082019050828560208602820111156120a6576120a5612fb8565b5b60005b858110156120d657816120bc8882612200565b8452602084019350602083019250506001810190506120a9565b5050509392505050565b60006120f36120ee84612c97565b612c1a565b90508281526020810184848401111561210f5761210e612fbd565b5b61211a848285612e09565b509392505050565b60008135905061213181613467565b92915050565b600082601f83011261214c5761214b612fb3565b5b813561215c848260208601612000565b91505092915050565b600082601f83011261217a57612179612fb3565b5b813561218a848260208601612070565b91505092915050565b6000813590506121a28161347e565b92915050565b6000813590506121b781613495565b92915050565b6000815190506121cc81613495565b92915050565b600082601f8301126121e7576121e6612fb3565b5b81356121f78482602086016120e0565b91505092915050565b60008135905061220f816134ac565b92915050565b60006020828403121561222b5761222a612fc7565b5b600061223984828501612122565b91505092915050565b6000806040838503121561225957612258612fc7565b5b600061226785828601612122565b925050602061227885828601612122565b9150509250929050565b60008060006060848603121561229b5761229a612fc7565b5b60006122a986828701612122565b93505060206122ba86828701612122565b92505060406122cb86828701612200565b9150509250925092565b600080600080608085870312156122ef576122ee612fc7565b5b60006122fd87828801612122565b945050602061230e87828801612122565b935050604061231f87828801612200565b925050606085013567ffffffffffffffff8111156123405761233f612fc2565b5b61234c878288016121d2565b91505092959194509250565b6000806040838503121561236f5761236e612fc7565b5b600061237d85828601612122565b925050602061238e85828601612193565b9150509250929050565b600080604083850312156123af576123ae612fc7565b5b60006123bd85828601612122565b92505060206123ce85828601612200565b9150509250929050565b6000602082840312156123ee576123ed612fc7565b5b600082013567ffffffffffffffff81111561240c5761240b612fc2565b5b61241884828501612137565b91505092915050565b6000806040838503121561243857612437612fc7565b5b600083013567ffffffffffffffff81111561245657612455612fc2565b5b61246285828601612137565b925050602083013567ffffffffffffffff81111561248357612482612fc2565b5b61248f85828601612165565b9150509250929050565b6000602082840312156124af576124ae612fc7565b5b60006124bd84828501612193565b91505092915050565b6000602082840312156124dc576124db612fc7565b5b60006124ea848285016121a8565b91505092915050565b60006020828403121561250957612508612fc7565b5b6000612517848285016121bd565b91505092915050565b60006020828403121561253657612535612fc7565b5b600061254484828501612200565b91505092915050565b61255681612d95565b82525050565b61256581612da7565b82525050565b600061257682612cc8565b6125808185612cde565b9350612590818560208601612e18565b61259981612fcc565b840191505092915050565b60006125af82612cd3565b6125b98185612cef565b93506125c9818560208601612e18565b6125d281612fcc565b840191505092915050565b60006125e882612cd3565b6125f28185612d00565b9350612602818560208601612e18565b80840191505092915050565b600061261b601483612cef565b915061262682612fdd565b602082019050919050565b600061263e603283612cef565b915061264982613006565b604082019050919050565b6000612661602683612cef565b915061266c82613055565b604082019050919050565b6000612684602583612cef565b915061268f826130a4565b604082019050919050565b60006126a7601c83612cef565b91506126b2826130f3565b602082019050919050565b60006126ca601783612cef565b91506126d58261311c565b602082019050919050565b60006126ed602483612cef565b91506126f882613145565b604082019050919050565b6000612710601983612cef565b915061271b82613194565b602082019050919050565b6000612733601083612cef565b915061273e826131bd565b602082019050919050565b6000612756602983612cef565b9150612761826131e6565b604082019050919050565b6000612779603e83612cef565b915061278482613235565b604082019050919050565b600061279c602083612cef565b91506127a782613284565b602082019050919050565b60006127bf602083612cef565b91506127ca826132ad565b602082019050919050565b60006127e2602f83612cef565b91506127ed826132d6565b604082019050919050565b6000612805601883612cef565b915061281082613325565b602082019050919050565b6000612828602183612cef565b91506128338261334e565b604082019050919050565b600061284b602083612cef565b91506128568261339d565b602082019050919050565b600061286e602e83612cef565b9150612879826133c6565b604082019050919050565b6000612891601783612cef565b915061289c82613415565b602082019050919050565b60006128b4600f83612d00565b91506128bf8261343e565b600f82019050919050565b6128d381612dff565b82525050565b60006128e582846125dd565b91506128f0826128a7565b915081905092915050565b6000602082019050612910600083018461254d565b92915050565b600060808201905061292b600083018761254d565b612938602083018661254d565b61294560408301856128ca565b8181036060830152612957818461256b565b905095945050505050565b6000602082019050612977600083018461255c565b92915050565b6000602082019050818103600083015261299781846125a4565b905092915050565b600060208201905081810360008301526129b88161260e565b9050919050565b600060208201905081810360008301526129d881612631565b9050919050565b600060208201905081810360008301526129f881612654565b9050919050565b60006020820190508181036000830152612a1881612677565b9050919050565b60006020820190508181036000830152612a388161269a565b9050919050565b60006020820190508181036000830152612a58816126bd565b9050919050565b60006020820190508181036000830152612a78816126e0565b9050919050565b60006020820190508181036000830152612a9881612703565b9050919050565b60006020820190508181036000830152612ab881612726565b9050919050565b60006020820190508181036000830152612ad881612749565b9050919050565b60006020820190508181036000830152612af88161276c565b9050919050565b60006020820190508181036000830152612b188161278f565b9050919050565b60006020820190508181036000830152612b38816127b2565b9050919050565b60006020820190508181036000830152612b58816127d5565b9050919050565b60006020820190508181036000830152612b78816127f8565b9050919050565b60006020820190508181036000830152612b988161281b565b9050919050565b60006020820190508181036000830152612bb88161283e565b9050919050565b60006020820190508181036000830152612bd881612861565b9050919050565b60006020820190508181036000830152612bf881612884565b9050919050565b6000602082019050612c1460008301846128ca565b92915050565b6000612c24612c35565b9050612c308282612e7d565b919050565b6000604051905090565b600067ffffffffffffffff821115612c5a57612c59612f84565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c8657612c85612f84565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cb257612cb1612f84565b5b612cbb82612fcc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d1682612dff565b9150612d2183612dff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d5657612d55612ef7565b5b828201905092915050565b6000612d6c82612dff565b9150612d7783612dff565b925082821015612d8a57612d89612ef7565b5b828203905092915050565b6000612da082612ddf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e36578082015181840152602081019050612e1b565b83811115612e45576000848401525b50505050565b60006002820490506001821680612e6357607f821691505b60208210811415612e7757612e76612f26565b5b50919050565b612e8682612fcc565b810181811067ffffffffffffffff82111715612ea557612ea4612f84565b5b80604052505050565b6000612eb982612dff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eec57612eeb612ef7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43757272656e746c7920636f6e7472616374206973206e6f7420616374697665600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f742061205768697465206c69737465642055736572000000000000000000600082015250565b7f2f416c706861506173732e6a736f6e0000000000000000000000000000000000600082015250565b61347081612d95565b811461347b57600080fd5b50565b61348781612da7565b811461349257600080fd5b50565b61349e81612db3565b81146134a957600080fd5b50565b6134b581612dff565b81146134c057600080fd5b5056fea2646970667358221220b243684c2229c9d9fd731de757cec6af99feb68e347441a1931f19abdeaa02d664736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d567a316e457135394e724268506f78386438685568776766626a6e66763339514e59586e50347a646e675a520000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80636871ee40116100f9578063a22cb46511610097578063c6ee20d211610071578063c6ee20d21461046a578063c87b56dd14610488578063e985e9c5146104b8578063f2fde38b146104e8576101a9565b8063a22cb46514610416578063b46f820514610432578063b88d4fde1461044e576101a9565b806382604ebf116100d357806382604ebf146103a05780638456cb59146103d05780638da5cb5b146103da57806395d89b41146103f8576101a9565b80636871ee401461035c57806370a0823114610366578063715018a614610396576101a9565b8063372c12b11161016657806342966c681161014057806342966c68146102d65780635c975abb146102f25780636352211e14610310578063671b1b2314610340576101a9565b8063372c12b1146102805780633f4ba83a146102b057806342842e0e146102ba576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806323b872dd14610248578063279a669e14610264575b600080fd5b6101c860048036038101906101c391906124c6565b610504565b6040516101d59190612962565b60405180910390f35b6101e66105e6565b6040516101f3919061297d565b60405180910390f35b61021660048036038101906102119190612520565b610678565b60405161022391906128fb565b60405180910390f35b61024660048036038101906102419190612398565b6106be565b005b610262600480360381019061025d9190612282565b6107d6565b005b61027e60048036038101906102799190612421565b610836565b005b61029a60048036038101906102959190612215565b610925565b6040516102a79190612962565b60405180910390f35b6102b8610945565b005b6102d460048036038101906102cf9190612282565b610957565b005b6102f060048036038101906102eb9190612520565b610977565b005b6102fa6109d3565b6040516103079190612962565b60405180910390f35b61032a60048036038101906103259190612520565b6109ea565b60405161033791906128fb565b60405180910390f35b61035a60048036038101906103559190612499565b610a9c565b005b610364610ac1565b005b610380600480360381019061037b9190612215565b610cb6565b60405161038d9190612bff565b60405180910390f35b61039e610d6e565b005b6103ba60048036038101906103b59190612215565b610d82565b6040516103c79190612962565b60405180910390f35b6103d8610da2565b005b6103e2610db4565b6040516103ef91906128fb565b60405180910390f35b610400610dde565b60405161040d919061297d565b60405180910390f35b610430600480360381019061042b9190612358565b610e70565b005b61044c600480360381019061044791906123d8565b610e86565b005b610468600480360381019061046391906122d5565b610f21565b005b610472610f83565b60405161047f9190612962565b60405180910390f35b6104a2600480360381019061049d9190612520565b610f96565b6040516104af919061297d565b60405180910390f35b6104d260048036038101906104cd9190612242565b611033565b6040516104df9190612962565b60405180910390f35b61050260048036038101906104fd9190612215565b6110c7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105df57506105de8261114b565b5b9050919050565b6060600080546105f590612e4b565b80601f016020809104026020016040519081016040528092919081815260200182805461062190612e4b565b801561066e5780601f106106435761010080835404028352916020019161066e565b820191906000526020600020905b81548152906001019060200180831161065157829003601f168201915b5050505050905090565b6000610683826111b5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106c9826109ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190612b7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610759611200565b73ffffffffffffffffffffffffffffffffffffffff161480610788575061078781610782611200565b611033565b5b6107c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be90612adf565b60405180910390fd5b6107d18383611208565b505050565b6107e76107e1611200565b826112c1565b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612bbf565b60405180910390fd5b610831838383611356565b505050565b61083e6115bd565b600660159054906101000a900460ff1661088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490612b9f565b60405180910390fd5b805182511461089b57600080fd5b60008251905060005b8181101561091f576108ea8482815181106108c2576108c1612f55565b5b60200260200101518483815181106108dd576108dc612f55565b5b602002602001015161163b565b61090d838281518110610900576108ff612f55565b5b6020026020010151610f96565b508061091890612eae565b90506108a4565b50505050565b60096020528060005260406000206000915054906101000a900460ff1681565b61094d6115bd565b610955611815565b565b61097283838360405180602001604052806000815250610f21565b505050565b610988610982611200565b826112c1565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90612bbf565b60405180910390fd5b6109d081611878565b50565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612b5f565b60405180910390fd5b80915050919050565b610aa46115bd565b80600660156101000a81548160ff02191690831515021790555050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4490612bdf565b60405180910390fd5b600660159054906101000a900460ff16610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612b9f565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690612a3f565b60405180910390fd5b6000610c3b6008611995565b9050610c4760086119a3565b610c51338261163b565b610c5a81610f96565b506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90612abf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d766115bd565b610d8060006119b9565b565b600b6020528060005260406000206000915054906101000a900460ff1681565b610daa6115bd565b610db2611a7f565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610ded90612e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1990612e4b565b8015610e665780601f10610e3b57610100808354040283529160200191610e66565b820191906000526020600020905b815481529060010190602001808311610e4957829003601f168201915b5050505050905090565b610e82610e7b611200565b8383611ae2565b5050565b610e8e6115bd565b60005b8151811015610f1d57600160096000848481518110610eb357610eb2612f55565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080610f1690612eae565b9050610e91565b5050565b610f32610f2c611200565b836112c1565b610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890612bbf565b60405180910390fd5b610f7d84848484611c4f565b50505050565b600660159054906101000a900460ff1681565b6060610fa182611cab565b610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd790612b3f565b60405180910390fd5b6000610fea611d17565b9050600081511161100a576040518060200160405280600081525061102b565b8060405160200161101b91906128d9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110cf6115bd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611136906129df565b60405180910390fd5b611148816119b9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111be81611cab565b6111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490612b5f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661127b836109ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112cd836109ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061130f575061130e8185611033565b5b8061134d57508373ffffffffffffffffffffffffffffffffffffffff1661133584610678565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611376826109ea565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906129ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390612a5f565b60405180910390fd5b611447838383611da9565b611452600082611208565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a29190612d61565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114f99190612d0b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115b8838383611dae565b505050565b6115c5611200565b73ffffffffffffffffffffffffffffffffffffffff166115e3610db4565b73ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163090612b1f565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290612aff565b60405180910390fd5b6116b481611cab565b156116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90612a1f565b60405180910390fd5b61170060008383611da9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117509190612d0b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461181160008383611dae565b5050565b61181d611db3565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611861611200565b60405161186e91906128fb565b60405180910390a1565b6000611883826109ea565b905061189181600084611da9565b61189c600083611208565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ec9190612d61565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461199181600084611dae565b5050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a87611dfc565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611acb611200565b604051611ad891906128fb565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890612a7f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c429190612962565b60405180910390a3505050565b611c5a848484611356565b611c6684848484611e46565b611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c906129bf565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060078054611d2690612e4b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5290612e4b565b8015611d9f5780601f10611d7457610100808354040283529160200191611d9f565b820191906000526020600020905b815481529060010190602001808311611d8257829003601f168201915b5050505050905090565b505050565b505050565b611dbb6109d3565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df19061299f565b60405180910390fd5b565b611e046109d3565b15611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90612a9f565b60405180910390fd5b565b6000611e678473ffffffffffffffffffffffffffffffffffffffff16611fdd565b15611fd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e90611200565b8786866040518563ffffffff1660e01b8152600401611eb29493929190612916565b602060405180830381600087803b158015611ecc57600080fd5b505af1925050508015611efd57506040513d601f19601f82011682018060405250810190611efa91906124f3565b60015b611f80573d8060008114611f2d576040519150601f19603f3d011682016040523d82523d6000602084013e611f32565b606091505b50600081511415611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f906129bf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fd5565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061201361200e84612c3f565b612c1a565b9050808382526020820190508285602086028201111561203657612035612fb8565b5b60005b85811015612066578161204c8882612122565b845260208401935060208301925050600181019050612039565b5050509392505050565b600061208361207e84612c6b565b612c1a565b905080838252602082019050828560208602820111156120a6576120a5612fb8565b5b60005b858110156120d657816120bc8882612200565b8452602084019350602083019250506001810190506120a9565b5050509392505050565b60006120f36120ee84612c97565b612c1a565b90508281526020810184848401111561210f5761210e612fbd565b5b61211a848285612e09565b509392505050565b60008135905061213181613467565b92915050565b600082601f83011261214c5761214b612fb3565b5b813561215c848260208601612000565b91505092915050565b600082601f83011261217a57612179612fb3565b5b813561218a848260208601612070565b91505092915050565b6000813590506121a28161347e565b92915050565b6000813590506121b781613495565b92915050565b6000815190506121cc81613495565b92915050565b600082601f8301126121e7576121e6612fb3565b5b81356121f78482602086016120e0565b91505092915050565b60008135905061220f816134ac565b92915050565b60006020828403121561222b5761222a612fc7565b5b600061223984828501612122565b91505092915050565b6000806040838503121561225957612258612fc7565b5b600061226785828601612122565b925050602061227885828601612122565b9150509250929050565b60008060006060848603121561229b5761229a612fc7565b5b60006122a986828701612122565b93505060206122ba86828701612122565b92505060406122cb86828701612200565b9150509250925092565b600080600080608085870312156122ef576122ee612fc7565b5b60006122fd87828801612122565b945050602061230e87828801612122565b935050604061231f87828801612200565b925050606085013567ffffffffffffffff8111156123405761233f612fc2565b5b61234c878288016121d2565b91505092959194509250565b6000806040838503121561236f5761236e612fc7565b5b600061237d85828601612122565b925050602061238e85828601612193565b9150509250929050565b600080604083850312156123af576123ae612fc7565b5b60006123bd85828601612122565b92505060206123ce85828601612200565b9150509250929050565b6000602082840312156123ee576123ed612fc7565b5b600082013567ffffffffffffffff81111561240c5761240b612fc2565b5b61241884828501612137565b91505092915050565b6000806040838503121561243857612437612fc7565b5b600083013567ffffffffffffffff81111561245657612455612fc2565b5b61246285828601612137565b925050602083013567ffffffffffffffff81111561248357612482612fc2565b5b61248f85828601612165565b9150509250929050565b6000602082840312156124af576124ae612fc7565b5b60006124bd84828501612193565b91505092915050565b6000602082840312156124dc576124db612fc7565b5b60006124ea848285016121a8565b91505092915050565b60006020828403121561250957612508612fc7565b5b6000612517848285016121bd565b91505092915050565b60006020828403121561253657612535612fc7565b5b600061254484828501612200565b91505092915050565b61255681612d95565b82525050565b61256581612da7565b82525050565b600061257682612cc8565b6125808185612cde565b9350612590818560208601612e18565b61259981612fcc565b840191505092915050565b60006125af82612cd3565b6125b98185612cef565b93506125c9818560208601612e18565b6125d281612fcc565b840191505092915050565b60006125e882612cd3565b6125f28185612d00565b9350612602818560208601612e18565b80840191505092915050565b600061261b601483612cef565b915061262682612fdd565b602082019050919050565b600061263e603283612cef565b915061264982613006565b604082019050919050565b6000612661602683612cef565b915061266c82613055565b604082019050919050565b6000612684602583612cef565b915061268f826130a4565b604082019050919050565b60006126a7601c83612cef565b91506126b2826130f3565b602082019050919050565b60006126ca601783612cef565b91506126d58261311c565b602082019050919050565b60006126ed602483612cef565b91506126f882613145565b604082019050919050565b6000612710601983612cef565b915061271b82613194565b602082019050919050565b6000612733601083612cef565b915061273e826131bd565b602082019050919050565b6000612756602983612cef565b9150612761826131e6565b604082019050919050565b6000612779603e83612cef565b915061278482613235565b604082019050919050565b600061279c602083612cef565b91506127a782613284565b602082019050919050565b60006127bf602083612cef565b91506127ca826132ad565b602082019050919050565b60006127e2602f83612cef565b91506127ed826132d6565b604082019050919050565b6000612805601883612cef565b915061281082613325565b602082019050919050565b6000612828602183612cef565b91506128338261334e565b604082019050919050565b600061284b602083612cef565b91506128568261339d565b602082019050919050565b600061286e602e83612cef565b9150612879826133c6565b604082019050919050565b6000612891601783612cef565b915061289c82613415565b602082019050919050565b60006128b4600f83612d00565b91506128bf8261343e565b600f82019050919050565b6128d381612dff565b82525050565b60006128e582846125dd565b91506128f0826128a7565b915081905092915050565b6000602082019050612910600083018461254d565b92915050565b600060808201905061292b600083018761254d565b612938602083018661254d565b61294560408301856128ca565b8181036060830152612957818461256b565b905095945050505050565b6000602082019050612977600083018461255c565b92915050565b6000602082019050818103600083015261299781846125a4565b905092915050565b600060208201905081810360008301526129b88161260e565b9050919050565b600060208201905081810360008301526129d881612631565b9050919050565b600060208201905081810360008301526129f881612654565b9050919050565b60006020820190508181036000830152612a1881612677565b9050919050565b60006020820190508181036000830152612a388161269a565b9050919050565b60006020820190508181036000830152612a58816126bd565b9050919050565b60006020820190508181036000830152612a78816126e0565b9050919050565b60006020820190508181036000830152612a9881612703565b9050919050565b60006020820190508181036000830152612ab881612726565b9050919050565b60006020820190508181036000830152612ad881612749565b9050919050565b60006020820190508181036000830152612af88161276c565b9050919050565b60006020820190508181036000830152612b188161278f565b9050919050565b60006020820190508181036000830152612b38816127b2565b9050919050565b60006020820190508181036000830152612b58816127d5565b9050919050565b60006020820190508181036000830152612b78816127f8565b9050919050565b60006020820190508181036000830152612b988161281b565b9050919050565b60006020820190508181036000830152612bb88161283e565b9050919050565b60006020820190508181036000830152612bd881612861565b9050919050565b60006020820190508181036000830152612bf881612884565b9050919050565b6000602082019050612c1460008301846128ca565b92915050565b6000612c24612c35565b9050612c308282612e7d565b919050565b6000604051905090565b600067ffffffffffffffff821115612c5a57612c59612f84565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c8657612c85612f84565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cb257612cb1612f84565b5b612cbb82612fcc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d1682612dff565b9150612d2183612dff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d5657612d55612ef7565b5b828201905092915050565b6000612d6c82612dff565b9150612d7783612dff565b925082821015612d8a57612d89612ef7565b5b828203905092915050565b6000612da082612ddf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e36578082015181840152602081019050612e1b565b83811115612e45576000848401525b50505050565b60006002820490506001821680612e6357607f821691505b60208210811415612e7757612e76612f26565b5b50919050565b612e8682612fcc565b810181811067ffffffffffffffff82111715612ea557612ea4612f84565b5b80604052505050565b6000612eb982612dff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eec57612eeb612ef7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43757272656e746c7920636f6e7472616374206973206e6f7420616374697665600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f742061205768697465206c69737465642055736572000000000000000000600082015250565b7f2f416c706861506173732e6a736f6e0000000000000000000000000000000000600082015250565b61347081612d95565b811461347b57600080fd5b50565b61348781612da7565b811461349257600080fd5b50565b61349e81612db3565b81146134a957600080fd5b50565b6134b581612dff565b81146134c057600080fd5b5056fea2646970667358221220b243684c2229c9d9fd731de757cec6af99feb68e347441a1931f19abdeaa02d664736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d567a316e457135394e724268506f78386438685568776766626a6e66763339514e59586e50347a646e675a520000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://ipfs.io/ipfs/QmVz1nEq59NrBhPox8d8hUhwgfbjnfv39QNYXnP4zdngZR

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d567a316e457135394e
Arg [3] : 724268506f78386438685568776766626a6e66763339514e59586e50347a646e
Arg [4] : 675a520000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42896:2525:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28857:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29784:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31297:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30814:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31997:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44628:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43378:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45353:65;;;:::i;:::-;;32404:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42577:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6528:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29495:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44021:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44132:466;;;:::i;:::-;;29226:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9393:103;;;:::i;:::-;;43467:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45284:61;;;:::i;:::-;;8745:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31540:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45074:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32660:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43018:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43661:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31766:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9651:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28857:305;28959:4;29011:25;28996:40;;;:11;:40;;;;:105;;;;29068:33;29053:48;;;:11;:48;;;;28996:105;:158;;;;29118:36;29142:11;29118:23;:36::i;:::-;28996:158;28976:178;;28857:305;;;:::o;29784:100::-;29838:13;29871:5;29864:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29784:100;:::o;31297:171::-;31373:7;31393:23;31408:7;31393:14;:23::i;:::-;31436:15;:24;31452:7;31436:24;;;;;;;;;;;;;;;;;;;;;31429:31;;31297:171;;;:::o;30814:417::-;30895:13;30911:23;30926:7;30911:14;:23::i;:::-;30895:39;;30959:5;30953:11;;:2;:11;;;;30945:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31053:5;31037:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31062:37;31079:5;31086:12;:10;:12::i;:::-;31062:16;:37::i;:::-;31037:62;31015:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;31202:21;31211:2;31215:7;31202:8;:21::i;:::-;30884:347;30814:417;;:::o;31997:336::-;32192:41;32211:12;:10;:12::i;:::-;32225:7;32192:18;:41::i;:::-;32184:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32297:28;32307:4;32313:2;32317:7;32297:9;:28::i;:::-;31997:336;;;:::o;44628:434::-;8631:13;:11;:13::i;:::-;44742:14:::1;;;;;;;;;;;44734:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44833:9;:16;44812:10;:17;:37;44804:46;;;::::0;::::1;;44861:16;44880:10;:17;44861:36;;44912:6;44908:147;44928:11;44924:1;:15;44908:147;;;44960:34;44966:10;44977:1;44966:13;;;;;;;;:::i;:::-;;;;;;;;44981:9;44991:1;44981:12;;;;;;;;:::i;:::-;;;;;;;;44960:5;:34::i;:::-;45009:22;45018:9;45028:1;45018:12;;;;;;;;:::i;:::-;;;;;;;;45009:8;:22::i;:::-;;44941:3;;;;:::i;:::-;;;44908:147;;;;44722:340;44628:434:::0;;:::o;43378:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;45353:65::-;8631:13;:11;:13::i;:::-;45400:10:::1;:8;:10::i;:::-;45353:65::o:0;32404:185::-;32542:39;32559:4;32565:2;32569:7;32542:39;;;;;;;;;;;;:16;:39::i;:::-;32404:185;;;:::o;42577:243::-;42695:41;42714:12;:10;:12::i;:::-;42728:7;42695:18;:41::i;:::-;42687:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42798:14;42804:7;42798:5;:14::i;:::-;42577:243;:::o;6528:86::-;6575:4;6599:7;;;;;;;;;;;6592:14;;6528:86;:::o;29495:222::-;29567:7;29587:13;29603:7;:16;29611:7;29603:16;;;;;;;;;;;;;;;;;;;;;29587:32;;29655:1;29638:19;;:5;:19;;;;29630:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29704:5;29697:12;;;29495:222;;;:::o;44021:103::-;8631:13;:11;:13::i;:::-;44109:7:::1;44092:14;;:24;;;;;;;;;;;;;;;;;;44021:103:::0;:::o;44132:466::-;43186:9;:21;43196:10;43186:21;;;;;;;;;;;;;;;;;;;;;;;;;43178:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44196:14:::1;;;;;;;;;;;44188:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44301:5;44266:40;;:19;:31;44286:10;44266:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;44258:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44345:13;44361:25;:15;:23;:25::i;:::-;44345:41;;44414:27;:15;:25;:27::i;:::-;44460;44466:10;44478:8;44460:5;:27::i;:::-;44506:18;44515:8;44506;:18::i;:::-;;44578:4;44544:19;:31;44564:10;44544:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;44177:421;44132:466::o:0;29226:207::-;29298:7;29343:1;29326:19;;:5;:19;;;;29318:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29409:9;:16;29419:5;29409:16;;;;;;;;;;;;;;;;29402:23;;29226:207;;;:::o;9393:103::-;8631:13;:11;:13::i;:::-;9458:30:::1;9485:1;9458:18;:30::i;:::-;9393:103::o:0;43467:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;45284:61::-;8631:13;:11;:13::i;:::-;45329:8:::1;:6;:8::i;:::-;45284:61::o:0;8745:87::-;8791:7;8818:6;;;;;;;;;;;8811:13;;8745:87;:::o;29953:104::-;30009:13;30042:7;30035:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29953:104;:::o;31540:155::-;31635:52;31654:12;:10;:12::i;:::-;31668:8;31678;31635:18;:52::i;:::-;31540:155;;:::o;45074:202::-;8631:13;:11;:13::i;:::-;45169:6:::1;45163:105;45183:14;:21;45179:1;:25;45163:105;;;45252:4;45221:9;:28;45231:14;45246:1;45231:17;;;;;;;;:::i;:::-;;;;;;;;45221:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;45206:3;;;;:::i;:::-;;;45163:105;;;;45074:202:::0;:::o;32660:323::-;32834:41;32853:12;:10;:12::i;:::-;32867:7;32834:18;:41::i;:::-;32826:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32937:38;32951:4;32957:2;32961:7;32970:4;32937:13;:38::i;:::-;32660:323;;;;:::o;43018:33::-;;;;;;;;;;;;;:::o;43661:346::-;43734:13;43772:16;43780:7;43772;:16::i;:::-;43764:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43855:21;43879:10;:8;:10::i;:::-;43855:34;;43935:1;43917:7;43911:21;:25;:84;;;;;;;;;;;;;;;;;43963:7;43946:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;43911:84;43904:91;;;43661:346;;;:::o;31766:164::-;31863:4;31887:18;:25;31906:5;31887:25;;;;;;;;;;;;;;;:35;31913:8;31887:35;;;;;;;;;;;;;;;;;;;;;;;;;31880:42;;31766:164;;;;:::o;9651:201::-;8631:13;:11;:13::i;:::-;9760:1:::1;9740:22;;:8;:22;;;;9732:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9816:28;9835:8;9816:18;:28::i;:::-;9651:201:::0;:::o;21599:157::-;21684:4;21723:25;21708:40;;;:11;:40;;;;21701:47;;21599:157;;;:::o;39272:135::-;39354:16;39362:7;39354;:16::i;:::-;39346:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39272:135;:::o;4641:98::-;4694:7;4721:10;4714:17;;4641:98;:::o;38551:174::-;38653:2;38626:15;:24;38642:7;38626:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38709:7;38705:2;38671:46;;38680:23;38695:7;38680:14;:23::i;:::-;38671:46;;;;;;;;;;;;38551:174;;:::o;34784:264::-;34877:4;34894:13;34910:23;34925:7;34910:14;:23::i;:::-;34894:39;;34963:5;34952:16;;:7;:16;;;:52;;;;34972:32;34989:5;34996:7;34972:16;:32::i;:::-;34952:52;:87;;;;35032:7;35008:31;;:20;35020:7;35008:11;:20::i;:::-;:31;;;34952:87;34944:96;;;34784:264;;;;:::o;37807:625::-;37966:4;37939:31;;:23;37954:7;37939:14;:23::i;:::-;:31;;;37931:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38045:1;38031:16;;:2;:16;;;;38023:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38101:39;38122:4;38128:2;38132:7;38101:20;:39::i;:::-;38205:29;38222:1;38226:7;38205:8;:29::i;:::-;38266:1;38247:9;:15;38257:4;38247:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38295:1;38278:9;:13;38288:2;38278:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38326:2;38307:7;:16;38315:7;38307:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38365:7;38361:2;38346:27;;38355:4;38346:27;;;;;;;;;;;;38386:38;38406:4;38412:2;38416:7;38386:19;:38::i;:::-;37807:625;;;:::o;8910:132::-;8985:12;:10;:12::i;:::-;8974:23;;:7;:5;:7::i;:::-;:23;;;8966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8910:132::o;36382:439::-;36476:1;36462:16;;:2;:16;;;;36454:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36535:16;36543:7;36535;:16::i;:::-;36534:17;36526:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36597:45;36626:1;36630:2;36634:7;36597:20;:45::i;:::-;36672:1;36655:9;:13;36665:2;36655:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36703:2;36684:7;:16;36692:7;36684:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36748:7;36744:2;36723:33;;36740:1;36723:33;;;;;;;;;;;;36769:44;36797:1;36801:2;36805:7;36769:19;:44::i;:::-;36382:439;;:::o;7383:120::-;6392:16;:14;:16::i;:::-;7452:5:::1;7442:7;;:15;;;;;;;;;;;;;;;;;;7473:22;7482:12;:10;:12::i;:::-;7473:22;;;;;;:::i;:::-;;;;;;;;7383:120::o:0;37050:420::-;37110:13;37126:23;37141:7;37126:14;:23::i;:::-;37110:39;;37162:48;37183:5;37198:1;37202:7;37162:20;:48::i;:::-;37251:29;37268:1;37272:7;37251:8;:29::i;:::-;37313:1;37293:9;:16;37303:5;37293:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;37332:7;:16;37340:7;37332:16;;;;;;;;;;;;37325:23;;;;;;;;;;;37394:7;37390:1;37366:36;;37375:5;37366:36;;;;;;;;;;;;37415:47;37435:5;37450:1;37454:7;37415:19;:47::i;:::-;37099:371;37050:420;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;10012:191::-;10086:16;10105:6;;;;;;;;;;;10086:25;;10131:8;10122:6;;:17;;;;;;;;;;;;;;;;;;10186:8;10155:40;;10176:8;10155:40;;;;;;;;;;;;10075:128;10012:191;:::o;7124:118::-;6133:19;:17;:19::i;:::-;7194:4:::1;7184:7;;:14;;;;;;;;;;;;;;;;;;7214:20;7221:12;:10;:12::i;:::-;7214:20;;;;;;:::i;:::-;;;;;;;;7124:118::o:0;38868:315::-;39023:8;39014:17;;:5;:17;;;;39006:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39110:8;39072:18;:25;39091:5;39072:25;;;;;;;;;;;;;;;:35;39098:8;39072:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39156:8;39134:41;;39149:5;39134:41;;;39166:8;39134:41;;;;;;:::i;:::-;;;;;;;;38868:315;;;:::o;33864:313::-;34020:28;34030:4;34036:2;34040:7;34020:9;:28::i;:::-;34067:47;34090:4;34096:2;34100:7;34109:4;34067:22;:47::i;:::-;34059:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33864:313;;;;:::o;34490:127::-;34555:4;34607:1;34579:30;;:7;:16;34587:7;34579:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34572:37;;34490:127;;;:::o;43531:122::-;43591:13;43628;43621:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43531:122;:::o;41396:126::-;;;;:::o;41907:125::-;;;;:::o;6872:108::-;6939:8;:6;:8::i;:::-;6931:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6872:108::o;6687:::-;6758:8;:6;:8::i;:::-;6757:9;6749:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6687:108::o;39971:853::-;40125:4;40146:15;:2;:13;;;:15::i;:::-;40142:675;;;40198:2;40182:36;;;40219:12;:10;:12::i;:::-;40233:4;40239:7;40248:4;40182:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40178:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40440:1;40423:6;:13;:18;40419:328;;;40466:60;;;;;;;;;;:::i;:::-;;;;;;;;40419:328;40697:6;40691:13;40682:6;40678:2;40674:15;40667:38;40178:584;40314:41;;;40304:51;;;:6;:51;;;;40297:58;;;;;40142:675;40801:4;40794:11;;39971:853;;;;;;;:::o;11443:326::-;11503:4;11760:1;11738:7;:19;;;:23;11731:30;;11443:326;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3630:139::-;3676:5;3714:6;3701:20;3692:29;;3730:33;3757:5;3730:33;:::i;:::-;3630:139;;;;:::o;3775:329::-;3834:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:119;;;3889:79;;:::i;:::-;3851:119;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;3775:329;;;;:::o;4110:474::-;4178:6;4186;4235:2;4223:9;4214:7;4210:23;4206:32;4203:119;;;4241:79;;:::i;:::-;4203:119;4361:1;4386:53;4431:7;4422:6;4411:9;4407:22;4386:53;:::i;:::-;4376:63;;4332:117;4488:2;4514:53;4559:7;4550:6;4539:9;4535:22;4514:53;:::i;:::-;4504:63;;4459:118;4110:474;;;;;:::o;4590:619::-;4667:6;4675;4683;4732:2;4720:9;4711:7;4707:23;4703:32;4700:119;;;4738:79;;:::i;:::-;4700:119;4858:1;4883:53;4928:7;4919:6;4908:9;4904:22;4883:53;:::i;:::-;4873:63;;4829:117;4985:2;5011:53;5056:7;5047:6;5036:9;5032:22;5011:53;:::i;:::-;5001:63;;4956:118;5113:2;5139:53;5184:7;5175:6;5164:9;5160:22;5139:53;:::i;:::-;5129:63;;5084:118;4590:619;;;;;:::o;5215:943::-;5310:6;5318;5326;5334;5383:3;5371:9;5362:7;5358:23;5354:33;5351:120;;;5390:79;;:::i;:::-;5351:120;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5921:2;5910:9;5906:18;5893:32;5952:18;5944:6;5941:30;5938:117;;;5974:79;;:::i;:::-;5938:117;6079:62;6133:7;6124:6;6113:9;6109:22;6079:62;:::i;:::-;6069:72;;5864:287;5215:943;;;;;;;:::o;6164:468::-;6229:6;6237;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6539:2;6565:50;6607:7;6598:6;6587:9;6583:22;6565:50;:::i;:::-;6555:60;;6510:115;6164:468;;;;;:::o;6638:474::-;6706:6;6714;6763:2;6751:9;6742:7;6738:23;6734:32;6731:119;;;6769:79;;:::i;:::-;6731:119;6889:1;6914:53;6959:7;6950:6;6939:9;6935:22;6914:53;:::i;:::-;6904:63;;6860:117;7016:2;7042:53;7087:7;7078:6;7067:9;7063:22;7042:53;:::i;:::-;7032:63;;6987:118;6638:474;;;;;:::o;7118:539::-;7202:6;7251:2;7239:9;7230:7;7226:23;7222:32;7219:119;;;7257:79;;:::i;:::-;7219:119;7405:1;7394:9;7390:17;7377:31;7435:18;7427:6;7424:30;7421:117;;;7457:79;;:::i;:::-;7421:117;7562:78;7632:7;7623:6;7612:9;7608:22;7562:78;:::i;:::-;7552:88;;7348:302;7118:539;;;;:::o;7663:894::-;7781:6;7789;7838:2;7826:9;7817:7;7813:23;7809:32;7806:119;;;7844:79;;:::i;:::-;7806:119;7992:1;7981:9;7977:17;7964:31;8022:18;8014:6;8011:30;8008:117;;;8044:79;;:::i;:::-;8008:117;8149:78;8219:7;8210:6;8199:9;8195:22;8149:78;:::i;:::-;8139:88;;7935:302;8304:2;8293:9;8289:18;8276:32;8335:18;8327:6;8324:30;8321:117;;;8357:79;;:::i;:::-;8321:117;8462:78;8532:7;8523:6;8512:9;8508:22;8462:78;:::i;:::-;8452:88;;8247:303;7663:894;;;;;:::o;8563:323::-;8619:6;8668:2;8656:9;8647:7;8643:23;8639:32;8636:119;;;8674:79;;:::i;:::-;8636:119;8794:1;8819:50;8861:7;8852:6;8841:9;8837:22;8819:50;:::i;:::-;8809:60;;8765:114;8563:323;;;;:::o;8892:327::-;8950:6;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:52;9194:7;9185:6;9174:9;9170:22;9150:52;:::i;:::-;9140:62;;9096:116;8892:327;;;;:::o;9225:349::-;9294:6;9343:2;9331:9;9322:7;9318:23;9314:32;9311:119;;;9349:79;;:::i;:::-;9311:119;9469:1;9494:63;9549:7;9540:6;9529:9;9525:22;9494:63;:::i;:::-;9484:73;;9440:127;9225:349;;;;:::o;9580:329::-;9639:6;9688:2;9676:9;9667:7;9663:23;9659:32;9656:119;;;9694:79;;:::i;:::-;9656:119;9814:1;9839:53;9884:7;9875:6;9864:9;9860:22;9839:53;:::i;:::-;9829:63;;9785:117;9580:329;;;;:::o;9915:118::-;10002:24;10020:5;10002:24;:::i;:::-;9997:3;9990:37;9915:118;;:::o;10039:109::-;10120:21;10135:5;10120:21;:::i;:::-;10115:3;10108:34;10039:109;;:::o;10154:360::-;10240:3;10268:38;10300:5;10268:38;:::i;:::-;10322:70;10385:6;10380:3;10322:70;:::i;:::-;10315:77;;10401:52;10446:6;10441:3;10434:4;10427:5;10423:16;10401:52;:::i;:::-;10478:29;10500:6;10478:29;:::i;:::-;10473:3;10469:39;10462:46;;10244:270;10154:360;;;;:::o;10520:364::-;10608:3;10636:39;10669:5;10636:39;:::i;:::-;10691:71;10755:6;10750:3;10691:71;:::i;:::-;10684:78;;10771:52;10816:6;10811:3;10804:4;10797:5;10793:16;10771:52;:::i;:::-;10848:29;10870:6;10848:29;:::i;:::-;10843:3;10839:39;10832:46;;10612:272;10520:364;;;;:::o;10890:377::-;10996:3;11024:39;11057:5;11024:39;:::i;:::-;11079:89;11161:6;11156:3;11079:89;:::i;:::-;11072:96;;11177:52;11222:6;11217:3;11210:4;11203:5;11199:16;11177:52;:::i;:::-;11254:6;11249:3;11245:16;11238:23;;11000:267;10890:377;;;;:::o;11273:366::-;11415:3;11436:67;11500:2;11495:3;11436:67;:::i;:::-;11429:74;;11512:93;11601:3;11512:93;:::i;:::-;11630:2;11625:3;11621:12;11614:19;;11273:366;;;:::o;11645:::-;11787:3;11808:67;11872:2;11867:3;11808:67;:::i;:::-;11801:74;;11884:93;11973:3;11884:93;:::i;:::-;12002:2;11997:3;11993:12;11986:19;;11645:366;;;:::o;12017:::-;12159:3;12180:67;12244:2;12239:3;12180:67;:::i;:::-;12173:74;;12256:93;12345:3;12256:93;:::i;:::-;12374:2;12369:3;12365:12;12358:19;;12017:366;;;:::o;12389:::-;12531:3;12552:67;12616:2;12611:3;12552:67;:::i;:::-;12545:74;;12628:93;12717:3;12628:93;:::i;:::-;12746:2;12741:3;12737:12;12730:19;;12389:366;;;:::o;12761:::-;12903:3;12924:67;12988:2;12983:3;12924:67;:::i;:::-;12917:74;;13000:93;13089:3;13000:93;:::i;:::-;13118:2;13113:3;13109:12;13102:19;;12761:366;;;:::o;13133:::-;13275:3;13296:67;13360:2;13355:3;13296:67;:::i;:::-;13289:74;;13372:93;13461:3;13372:93;:::i;:::-;13490:2;13485:3;13481:12;13474:19;;13133:366;;;:::o;13505:::-;13647:3;13668:67;13732:2;13727:3;13668:67;:::i;:::-;13661:74;;13744:93;13833:3;13744:93;:::i;:::-;13862:2;13857:3;13853:12;13846:19;;13505:366;;;:::o;13877:::-;14019:3;14040:67;14104:2;14099:3;14040:67;:::i;:::-;14033:74;;14116:93;14205:3;14116:93;:::i;:::-;14234:2;14229:3;14225:12;14218:19;;13877:366;;;:::o;14249:::-;14391:3;14412:67;14476:2;14471:3;14412:67;:::i;:::-;14405:74;;14488:93;14577:3;14488:93;:::i;:::-;14606:2;14601:3;14597:12;14590:19;;14249:366;;;:::o;14621:::-;14763:3;14784:67;14848:2;14843:3;14784:67;:::i;:::-;14777:74;;14860:93;14949:3;14860:93;:::i;:::-;14978:2;14973:3;14969:12;14962:19;;14621:366;;;:::o;14993:::-;15135:3;15156:67;15220:2;15215:3;15156:67;:::i;:::-;15149:74;;15232:93;15321:3;15232:93;:::i;:::-;15350:2;15345:3;15341:12;15334:19;;14993:366;;;:::o;15365:::-;15507:3;15528:67;15592:2;15587:3;15528:67;:::i;:::-;15521:74;;15604:93;15693:3;15604:93;:::i;:::-;15722:2;15717:3;15713:12;15706:19;;15365:366;;;:::o;15737:::-;15879:3;15900:67;15964:2;15959:3;15900:67;:::i;:::-;15893:74;;15976:93;16065:3;15976:93;:::i;:::-;16094:2;16089:3;16085:12;16078:19;;15737:366;;;:::o;16109:::-;16251:3;16272:67;16336:2;16331:3;16272:67;:::i;:::-;16265:74;;16348:93;16437:3;16348:93;:::i;:::-;16466:2;16461:3;16457:12;16450:19;;16109:366;;;:::o;16481:::-;16623:3;16644:67;16708:2;16703:3;16644:67;:::i;:::-;16637:74;;16720:93;16809:3;16720:93;:::i;:::-;16838:2;16833:3;16829:12;16822:19;;16481:366;;;:::o;16853:::-;16995:3;17016:67;17080:2;17075:3;17016:67;:::i;:::-;17009:74;;17092:93;17181:3;17092:93;:::i;:::-;17210:2;17205:3;17201:12;17194:19;;16853:366;;;:::o;17225:::-;17367:3;17388:67;17452:2;17447:3;17388:67;:::i;:::-;17381:74;;17464:93;17553:3;17464:93;:::i;:::-;17582:2;17577:3;17573:12;17566:19;;17225:366;;;:::o;17597:::-;17739:3;17760:67;17824:2;17819:3;17760:67;:::i;:::-;17753:74;;17836:93;17925:3;17836:93;:::i;:::-;17954:2;17949:3;17945:12;17938:19;;17597:366;;;:::o;17969:::-;18111:3;18132:67;18196:2;18191:3;18132:67;:::i;:::-;18125:74;;18208:93;18297:3;18208:93;:::i;:::-;18326:2;18321:3;18317:12;18310:19;;17969:366;;;:::o;18341:402::-;18501:3;18522:85;18604:2;18599:3;18522:85;:::i;:::-;18515:92;;18616:93;18705:3;18616:93;:::i;:::-;18734:2;18729:3;18725:12;18718:19;;18341:402;;;:::o;18749:118::-;18836:24;18854:5;18836:24;:::i;:::-;18831:3;18824:37;18749:118;;:::o;18873:541::-;19106:3;19128:95;19219:3;19210:6;19128:95;:::i;:::-;19121:102;;19240:148;19384:3;19240:148;:::i;:::-;19233:155;;19405:3;19398:10;;18873:541;;;;:::o;19420:222::-;19513:4;19551:2;19540:9;19536:18;19528:26;;19564:71;19632:1;19621:9;19617:17;19608:6;19564:71;:::i;:::-;19420:222;;;;:::o;19648:640::-;19843:4;19881:3;19870:9;19866:19;19858:27;;19895:71;19963:1;19952:9;19948:17;19939:6;19895:71;:::i;:::-;19976:72;20044:2;20033:9;20029:18;20020:6;19976:72;:::i;:::-;20058;20126:2;20115:9;20111:18;20102:6;20058:72;:::i;:::-;20177:9;20171:4;20167:20;20162:2;20151:9;20147:18;20140:48;20205:76;20276:4;20267:6;20205:76;:::i;:::-;20197:84;;19648:640;;;;;;;:::o;20294:210::-;20381:4;20419:2;20408:9;20404:18;20396:26;;20432:65;20494:1;20483:9;20479:17;20470:6;20432:65;:::i;:::-;20294:210;;;;:::o;20510:313::-;20623:4;20661:2;20650:9;20646:18;20638:26;;20710:9;20704:4;20700:20;20696:1;20685:9;20681:17;20674:47;20738:78;20811:4;20802:6;20738:78;:::i;:::-;20730:86;;20510:313;;;;:::o;20829:419::-;20995:4;21033:2;21022:9;21018:18;21010:26;;21082:9;21076:4;21072:20;21068:1;21057:9;21053:17;21046:47;21110:131;21236:4;21110:131;:::i;:::-;21102:139;;20829:419;;;:::o;21254:::-;21420:4;21458:2;21447:9;21443:18;21435:26;;21507:9;21501:4;21497:20;21493:1;21482:9;21478:17;21471:47;21535:131;21661:4;21535:131;:::i;:::-;21527:139;;21254:419;;;:::o;21679:::-;21845:4;21883:2;21872:9;21868:18;21860:26;;21932:9;21926:4;21922:20;21918:1;21907:9;21903:17;21896:47;21960:131;22086:4;21960:131;:::i;:::-;21952:139;;21679:419;;;:::o;22104:::-;22270:4;22308:2;22297:9;22293:18;22285:26;;22357:9;22351:4;22347:20;22343:1;22332:9;22328:17;22321:47;22385:131;22511:4;22385:131;:::i;:::-;22377:139;;22104:419;;;:::o;22529:::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:::-;23120:4;23158:2;23147:9;23143:18;23135:26;;23207:9;23201:4;23197:20;23193:1;23182:9;23178:17;23171:47;23235:131;23361:4;23235:131;:::i;:::-;23227:139;;22954:419;;;:::o;23379:::-;23545:4;23583:2;23572:9;23568:18;23560:26;;23632:9;23626:4;23622:20;23618:1;23607:9;23603:17;23596:47;23660:131;23786:4;23660:131;:::i;:::-;23652:139;;23379:419;;;:::o;23804:::-;23970:4;24008:2;23997:9;23993:18;23985:26;;24057:9;24051:4;24047:20;24043:1;24032:9;24028:17;24021:47;24085:131;24211:4;24085:131;:::i;:::-;24077:139;;23804:419;;;:::o;24229:::-;24395:4;24433:2;24422:9;24418:18;24410:26;;24482:9;24476:4;24472:20;24468:1;24457:9;24453:17;24446:47;24510:131;24636:4;24510:131;:::i;:::-;24502:139;;24229:419;;;:::o;24654:::-;24820:4;24858:2;24847:9;24843:18;24835:26;;24907:9;24901:4;24897:20;24893:1;24882:9;24878:17;24871:47;24935:131;25061:4;24935:131;:::i;:::-;24927:139;;24654:419;;;:::o;25079:::-;25245:4;25283:2;25272:9;25268:18;25260:26;;25332:9;25326:4;25322:20;25318:1;25307:9;25303:17;25296:47;25360:131;25486:4;25360:131;:::i;:::-;25352:139;;25079:419;;;:::o;25504:::-;25670:4;25708:2;25697:9;25693:18;25685:26;;25757:9;25751:4;25747:20;25743:1;25732:9;25728:17;25721:47;25785:131;25911:4;25785:131;:::i;:::-;25777:139;;25504:419;;;:::o;25929:::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:::-;26520:4;26558:2;26547:9;26543:18;26535:26;;26607:9;26601:4;26597:20;26593:1;26582:9;26578:17;26571:47;26635:131;26761:4;26635:131;:::i;:::-;26627:139;;26354:419;;;:::o;26779:::-;26945:4;26983:2;26972:9;26968:18;26960:26;;27032:9;27026:4;27022:20;27018:1;27007:9;27003:17;26996:47;27060:131;27186:4;27060:131;:::i;:::-;27052:139;;26779:419;;;:::o;27204:::-;27370:4;27408:2;27397:9;27393:18;27385:26;;27457:9;27451:4;27447:20;27443:1;27432:9;27428:17;27421:47;27485:131;27611:4;27485:131;:::i;:::-;27477:139;;27204:419;;;:::o;27629:::-;27795:4;27833:2;27822:9;27818:18;27810:26;;27882:9;27876:4;27872:20;27868:1;27857:9;27853:17;27846:47;27910:131;28036:4;27910:131;:::i;:::-;27902:139;;27629:419;;;:::o;28054:::-;28220:4;28258:2;28247:9;28243:18;28235:26;;28307:9;28301:4;28297:20;28293:1;28282:9;28278:17;28271:47;28335:131;28461:4;28335:131;:::i;:::-;28327:139;;28054:419;;;:::o;28479:::-;28645:4;28683:2;28672:9;28668:18;28660:26;;28732:9;28726:4;28722:20;28718:1;28707:9;28703:17;28696:47;28760:131;28886:4;28760:131;:::i;:::-;28752:139;;28479:419;;;:::o;28904:222::-;28997:4;29035:2;29024:9;29020:18;29012:26;;29048:71;29116:1;29105:9;29101:17;29092:6;29048:71;:::i;:::-;28904:222;;;;:::o;29132:129::-;29166:6;29193:20;;:::i;:::-;29183:30;;29222:33;29250:4;29242:6;29222:33;:::i;:::-;29132:129;;;:::o;29267:75::-;29300:6;29333:2;29327:9;29317:19;;29267:75;:::o;29348:311::-;29425:4;29515:18;29507:6;29504:30;29501:56;;;29537:18;;:::i;:::-;29501:56;29587:4;29579:6;29575:17;29567:25;;29647:4;29641;29637:15;29629:23;;29348:311;;;:::o;29665:::-;29742:4;29832:18;29824:6;29821:30;29818:56;;;29854:18;;:::i;:::-;29818:56;29904:4;29896:6;29892:17;29884:25;;29964:4;29958;29954:15;29946:23;;29665:311;;;:::o;29982:307::-;30043:4;30133:18;30125:6;30122:30;30119:56;;;30155:18;;:::i;:::-;30119:56;30193:29;30215:6;30193:29;:::i;:::-;30185:37;;30277:4;30271;30267:15;30259:23;;29982:307;;;:::o;30295:98::-;30346:6;30380:5;30374:12;30364:22;;30295:98;;;:::o;30399:99::-;30451:6;30485:5;30479:12;30469:22;;30399:99;;;:::o;30504:168::-;30587:11;30621:6;30616:3;30609:19;30661:4;30656:3;30652:14;30637:29;;30504:168;;;;:::o;30678:169::-;30762:11;30796:6;30791:3;30784:19;30836:4;30831:3;30827:14;30812:29;;30678:169;;;;:::o;30853:148::-;30955:11;30992:3;30977:18;;30853:148;;;;:::o;31007:305::-;31047:3;31066:20;31084:1;31066:20;:::i;:::-;31061:25;;31100:20;31118:1;31100:20;:::i;:::-;31095:25;;31254:1;31186:66;31182:74;31179:1;31176:81;31173:107;;;31260:18;;:::i;:::-;31173:107;31304:1;31301;31297:9;31290:16;;31007:305;;;;:::o;31318:191::-;31358:4;31378:20;31396:1;31378:20;:::i;:::-;31373:25;;31412:20;31430:1;31412:20;:::i;:::-;31407:25;;31451:1;31448;31445:8;31442:34;;;31456:18;;:::i;:::-;31442:34;31501:1;31498;31494:9;31486:17;;31318:191;;;;:::o;31515:96::-;31552:7;31581:24;31599:5;31581:24;:::i;:::-;31570:35;;31515:96;;;:::o;31617:90::-;31651:7;31694:5;31687:13;31680:21;31669:32;;31617:90;;;:::o;31713:149::-;31749:7;31789:66;31782:5;31778:78;31767:89;;31713:149;;;:::o;31868:126::-;31905:7;31945:42;31938:5;31934:54;31923:65;;31868:126;;;:::o;32000:77::-;32037:7;32066:5;32055:16;;32000:77;;;:::o;32083:154::-;32167:6;32162:3;32157;32144:30;32229:1;32220:6;32215:3;32211:16;32204:27;32083:154;;;:::o;32243:307::-;32311:1;32321:113;32335:6;32332:1;32329:13;32321:113;;;32420:1;32415:3;32411:11;32405:18;32401:1;32396:3;32392:11;32385:39;32357:2;32354:1;32350:10;32345:15;;32321:113;;;32452:6;32449:1;32446:13;32443:101;;;32532:1;32523:6;32518:3;32514:16;32507:27;32443:101;32292:258;32243:307;;;:::o;32556:320::-;32600:6;32637:1;32631:4;32627:12;32617:22;;32684:1;32678:4;32674:12;32705:18;32695:81;;32761:4;32753:6;32749:17;32739:27;;32695:81;32823:2;32815:6;32812:14;32792:18;32789:38;32786:84;;;32842:18;;:::i;:::-;32786:84;32607:269;32556:320;;;:::o;32882:281::-;32965:27;32987:4;32965:27;:::i;:::-;32957:6;32953:40;33095:6;33083:10;33080:22;33059:18;33047:10;33044:34;33041:62;33038:88;;;33106:18;;:::i;:::-;33038:88;33146:10;33142:2;33135:22;32925:238;32882:281;;:::o;33169:233::-;33208:3;33231:24;33249:5;33231:24;:::i;:::-;33222:33;;33277:66;33270:5;33267:77;33264:103;;;33347:18;;:::i;:::-;33264:103;33394:1;33387:5;33383:13;33376:20;;33169:233;;;:::o;33408:180::-;33456:77;33453:1;33446:88;33553:4;33550:1;33543:15;33577:4;33574:1;33567:15;33594:180;33642:77;33639:1;33632:88;33739:4;33736:1;33729:15;33763:4;33760:1;33753:15;33780:180;33828:77;33825:1;33818:88;33925:4;33922:1;33915:15;33949:4;33946:1;33939:15;33966:180;34014:77;34011:1;34004:88;34111:4;34108:1;34101:15;34135:4;34132:1;34125:15;34152:117;34261:1;34258;34251:12;34275:117;34384:1;34381;34374:12;34398:117;34507:1;34504;34497:12;34521:117;34630:1;34627;34620:12;34644:117;34753:1;34750;34743:12;34767:102;34808:6;34859:2;34855:7;34850:2;34843:5;34839:14;34835:28;34825:38;;34767:102;;;:::o;34875:170::-;35015:22;35011:1;35003:6;34999:14;34992:46;34875:170;:::o;35051:237::-;35191:34;35187:1;35179:6;35175:14;35168:58;35260:20;35255:2;35247:6;35243:15;35236:45;35051:237;:::o;35294:225::-;35434:34;35430:1;35422:6;35418:14;35411:58;35503:8;35498:2;35490:6;35486:15;35479:33;35294:225;:::o;35525:224::-;35665:34;35661:1;35653:6;35649:14;35642:58;35734:7;35729:2;35721:6;35717:15;35710:32;35525:224;:::o;35755:178::-;35895:30;35891:1;35883:6;35879:14;35872:54;35755:178;:::o;35939:173::-;36079:25;36075:1;36067:6;36063:14;36056:49;35939:173;:::o;36118:223::-;36258:34;36254:1;36246:6;36242:14;36235:58;36327:6;36322:2;36314:6;36310:15;36303:31;36118:223;:::o;36347:175::-;36487:27;36483:1;36475:6;36471:14;36464:51;36347:175;:::o;36528:166::-;36668:18;36664:1;36656:6;36652:14;36645:42;36528:166;:::o;36700:228::-;36840:34;36836:1;36828:6;36824:14;36817:58;36909:11;36904:2;36896:6;36892:15;36885:36;36700:228;:::o;36934:249::-;37074:34;37070:1;37062:6;37058:14;37051:58;37143:32;37138:2;37130:6;37126:15;37119:57;36934:249;:::o;37189:182::-;37329:34;37325:1;37317:6;37313:14;37306:58;37189:182;:::o;37377:::-;37517:34;37513:1;37505:6;37501:14;37494:58;37377:182;:::o;37565:234::-;37705:34;37701:1;37693:6;37689:14;37682:58;37774:17;37769:2;37761:6;37757:15;37750:42;37565:234;:::o;37805:174::-;37945:26;37941:1;37933:6;37929:14;37922:50;37805:174;:::o;37985:220::-;38125:34;38121:1;38113:6;38109:14;38102:58;38194:3;38189:2;38181:6;38177:15;38170:28;37985:220;:::o;38211:182::-;38351:34;38347:1;38339:6;38335:14;38328:58;38211:182;:::o;38399:233::-;38539:34;38535:1;38527:6;38523:14;38516:58;38608:16;38603:2;38595:6;38591:15;38584:41;38399:233;:::o;38638:173::-;38778:25;38774:1;38766:6;38762:14;38755:49;38638:173;:::o;38817:165::-;38957:17;38953:1;38945:6;38941:14;38934:41;38817:165;:::o;38988:122::-;39061:24;39079:5;39061:24;:::i;:::-;39054:5;39051:35;39041:63;;39100:1;39097;39090:12;39041:63;38988:122;:::o;39116:116::-;39186:21;39201:5;39186:21;:::i;:::-;39179:5;39176:32;39166:60;;39222:1;39219;39212:12;39166:60;39116:116;:::o;39238:120::-;39310:23;39327:5;39310:23;:::i;:::-;39303:5;39300:34;39290:62;;39348:1;39345;39338:12;39290:62;39238:120;:::o;39364:122::-;39437:24;39455:5;39437:24;:::i;:::-;39430:5;39427:35;39417:63;;39476:1;39473;39466:12;39417:63;39364:122;:::o

Swarm Source

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