ETH Price: $2,505.04 (-0.42%)
Gas: 1.74 Gwei

Token

ARABPUNKS (ABP)
 

Overview

Max Total Supply

0 ABP

Holders

352

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
kahiro.eth
Balance
1 ABP
0x7713aab5aef6067b4cb477fc246dafaba8d6ca9a
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-21
*/

// 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: airdroppass.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(uint _tokenId) public iswhiteListedUser {
        require(contractStatus, "Currently contract is not active");
        require(addressMintedStatus[msg.sender] == false,"You have already minted");
        _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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"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"}]

60806040526001600660156101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620039fd380380620039fd833981810160405281019062000052919062000349565b6040518060400160405280600981526020017f4152414250554e4b5300000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41425000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d69291906200021b565b508060019080519060200190620000ef9291906200021b565b50505062000112620001066200014d60201b60201c565b6200015560201b60201c565b6000600660146101000a81548160ff0219169083151502179055508060079080519060200190620001459291906200021b565b50506200051e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000229906200042f565b90600052602060002090601f0160209004810192826200024d576000855562000299565b82601f106200026857805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002985782518255916020019190600101906200027b565b5b509050620002a89190620002ac565b5090565b5b80821115620002c7576000816000905550600101620002ad565b5090565b6000620002e2620002dc84620003c3565b6200039a565b905082815260208101848484011115620003015762000300620004fe565b5b6200030e848285620003f9565b509392505050565b600082601f8301126200032e576200032d620004f9565b5b815162000340848260208601620002cb565b91505092915050565b60006020828403121562000362576200036162000508565b5b600082015167ffffffffffffffff81111562000383576200038262000503565b5b620003918482850162000316565b91505092915050565b6000620003a6620003b9565b9050620003b4828262000465565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e157620003e0620004ca565b5b620003ec826200050d565b9050602081019050919050565b60005b8381101562000419578082015181840152602081019050620003fc565b8381111562000429576000848401525b50505050565b600060028204905060018216806200044857607f821691505b602082108114156200045f576200045e6200049b565b5b50919050565b62000470826200050d565b810181811067ffffffffffffffff82111715620004925762000491620004ca565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6134cf806200052e6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063671b1b23116100f9578063a22cb46511610097578063c6ee20d211610071578063c6ee20d21461047c578063c87b56dd1461049a578063e985e9c5146104ca578063f2fde38b146104fa576101a9565b8063a22cb46514610428578063b46f820514610444578063b88d4fde14610460576101a9565b806382604ebf116100d357806382604ebf146103b25780638456cb59146103e25780638da5cb5b146103ec57806395d89b411461040a576101a9565b8063671b1b231461035c57806370a0823114610378578063715018a6146103a8576101a9565b806331c864e81161016657806342842e0e1161014057806342842e0e146102d657806342966c68146102f25780635c975abb1461030e5780636352211e1461032c576101a9565b806331c864e814610280578063372c12b11461029c5780633f4ba83a146102cc576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806323b872dd14610248578063279a669e14610264575b600080fd5b6101c860048036038101906101c3919061249c565b610516565b6040516101d59190612938565b60405180910390f35b6101e66105f8565b6040516101f39190612953565b60405180910390f35b610216600480360381019061021191906124f6565b61068a565b60405161022391906128d1565b60405180910390f35b6102466004803603810190610241919061236e565b6106d0565b005b610262600480360381019061025d9190612258565b6107e8565b005b61027e600480360381019061027991906123f7565b610848565b005b61029a600480360381019061029591906124f6565b610937565b005b6102b660048036038101906102b191906121eb565b610b14565b6040516102c39190612938565b60405180910390f35b6102d4610b34565b005b6102f060048036038101906102eb9190612258565b610b46565b005b61030c600480360381019061030791906124f6565b610b66565b005b610316610bc2565b6040516103239190612938565b60405180910390f35b610346600480360381019061034191906124f6565b610bd9565b60405161035391906128d1565b60405180910390f35b6103766004803603810190610371919061246f565b610c8b565b005b610392600480360381019061038d91906121eb565b610cb0565b60405161039f9190612bd5565b60405180910390f35b6103b0610d68565b005b6103cc60048036038101906103c791906121eb565b610d7c565b6040516103d99190612938565b60405180910390f35b6103ea610d9c565b005b6103f4610dae565b60405161040191906128d1565b60405180910390f35b610412610dd8565b60405161041f9190612953565b60405180910390f35b610442600480360381019061043d919061232e565b610e6a565b005b61045e600480360381019061045991906123ae565b610e80565b005b61047a600480360381019061047591906122ab565b610f1b565b005b610484610f7d565b6040516104919190612938565b60405180910390f35b6104b460048036038101906104af91906124f6565b610f90565b6040516104c19190612953565b60405180910390f35b6104e460048036038101906104df9190612218565b61102d565b6040516104f19190612938565b60405180910390f35b610514600480360381019061050f91906121eb565b6110c1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105f157506105f082611145565b5b9050919050565b60606000805461060790612e21565b80601f016020809104026020016040519081016040528092919081815260200182805461063390612e21565b80156106805780601f1061065557610100808354040283529160200191610680565b820191906000526020600020905b81548152906001019060200180831161066357829003601f168201915b5050505050905090565b6000610695826111af565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106db82610bd9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390612b55565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076b6111fa565b73ffffffffffffffffffffffffffffffffffffffff16148061079a5750610799816107946111fa565b61102d565b5b6107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d090612ab5565b60405180910390fd5b6107e38383611202565b505050565b6107f96107f36111fa565b826112bb565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612b95565b60405180910390fd5b610843838383611350565b505050565b6108506115b7565b600660159054906101000a900460ff1661089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690612b75565b60405180910390fd5b80518251146108ad57600080fd5b60008251905060005b81811015610931576108fc8482815181106108d4576108d3612f2b565b5b60200260200101518483815181106108ef576108ee612f2b565b5b6020026020010151611635565b61091f83828151811061091257610911612f2b565b5b6020026020010151610f90565b508061092a90612e84565b90506108b6565b50505050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90612bb5565b60405180910390fd5b600660159054906101000a900460ff16610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990612b75565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90612a15565b60405180910390fd5b610aaf3382611635565b610ab881610f90565b506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b610b3c6115b7565b610b4461180f565b565b610b6183838360405180602001604052806000815250610f1b565b505050565b610b77610b716111fa565b826112bb565b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90612b95565b60405180910390fd5b610bbf81611872565b50565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990612b35565b60405180910390fd5b80915050919050565b610c936115b7565b80600660156101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612a95565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d706115b7565b610d7a600061198f565b565b600b6020528060005260406000206000915054906101000a900460ff1681565b610da46115b7565b610dac611a55565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610de790612e21565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1390612e21565b8015610e605780601f10610e3557610100808354040283529160200191610e60565b820191906000526020600020905b815481529060010190602001808311610e4357829003601f168201915b5050505050905090565b610e7c610e756111fa565b8383611ab8565b5050565b610e886115b7565b60005b8151811015610f1757600160096000848481518110610ead57610eac612f2b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080610f1090612e84565b9050610e8b565b5050565b610f2c610f266111fa565b836112bb565b610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290612b95565b60405180910390fd5b610f7784848484611c25565b50505050565b600660159054906101000a900460ff1681565b6060610f9b82611c81565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190612b15565b60405180910390fd5b6000610fe4611ced565b905060008151116110045760405180602001604052806000815250611025565b8060405160200161101591906128af565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110c96115b7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611130906129b5565b60405180910390fd5b6111428161198f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111b881611c81565b6111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90612b35565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661127583610bd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112c783610bd9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113095750611308818561102d565b5b8061134757508373ffffffffffffffffffffffffffffffffffffffff1661132f8461068a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661137082610bd9565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906129d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612a35565b60405180910390fd5b611441838383611d7f565b61144c600082611202565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149c9190612d37565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114f39190612ce1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115b2838383611d84565b505050565b6115bf6111fa565b73ffffffffffffffffffffffffffffffffffffffff166115dd610dae565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90612af5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612ad5565b60405180910390fd5b6116ae81611c81565b156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e5906129f5565b60405180910390fd5b6116fa60008383611d7f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461174a9190612ce1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461180b60008383611d84565b5050565b611817611d89565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61185b6111fa565b60405161186891906128d1565b60405180910390a1565b600061187d82610bd9565b905061188b81600084611d7f565b611896600083611202565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e69190612d37565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461198b81600084611d84565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a5d611dd2565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611aa16111fa565b604051611aae91906128d1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90612a55565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c189190612938565b60405180910390a3505050565b611c30848484611350565b611c3c84848484611e1c565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290612995565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060078054611cfc90612e21565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2890612e21565b8015611d755780601f10611d4a57610100808354040283529160200191611d75565b820191906000526020600020905b815481529060010190602001808311611d5857829003601f168201915b5050505050905090565b505050565b505050565b611d91610bc2565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790612975565b60405180910390fd5b565b611dda610bc2565b15611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190612a75565b60405180910390fd5b565b6000611e3d8473ffffffffffffffffffffffffffffffffffffffff16611fb3565b15611fa6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e666111fa565b8786866040518563ffffffff1660e01b8152600401611e8894939291906128ec565b602060405180830381600087803b158015611ea257600080fd5b505af1925050508015611ed357506040513d601f19601f82011682018060405250810190611ed091906124c9565b60015b611f56573d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50600081511415611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590612995565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fab565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611fe9611fe484612c15565b612bf0565b9050808382526020820190508285602086028201111561200c5761200b612f8e565b5b60005b8581101561203c578161202288826120f8565b84526020840193506020830192505060018101905061200f565b5050509392505050565b600061205961205484612c41565b612bf0565b9050808382526020820190508285602086028201111561207c5761207b612f8e565b5b60005b858110156120ac578161209288826121d6565b84526020840193506020830192505060018101905061207f565b5050509392505050565b60006120c96120c484612c6d565b612bf0565b9050828152602081018484840111156120e5576120e4612f93565b5b6120f0848285612ddf565b509392505050565b6000813590506121078161343d565b92915050565b600082601f83011261212257612121612f89565b5b8135612132848260208601611fd6565b91505092915050565b600082601f8301126121505761214f612f89565b5b8135612160848260208601612046565b91505092915050565b60008135905061217881613454565b92915050565b60008135905061218d8161346b565b92915050565b6000815190506121a28161346b565b92915050565b600082601f8301126121bd576121bc612f89565b5b81356121cd8482602086016120b6565b91505092915050565b6000813590506121e581613482565b92915050565b60006020828403121561220157612200612f9d565b5b600061220f848285016120f8565b91505092915050565b6000806040838503121561222f5761222e612f9d565b5b600061223d858286016120f8565b925050602061224e858286016120f8565b9150509250929050565b60008060006060848603121561227157612270612f9d565b5b600061227f868287016120f8565b9350506020612290868287016120f8565b92505060406122a1868287016121d6565b9150509250925092565b600080600080608085870312156122c5576122c4612f9d565b5b60006122d3878288016120f8565b94505060206122e4878288016120f8565b93505060406122f5878288016121d6565b925050606085013567ffffffffffffffff81111561231657612315612f98565b5b612322878288016121a8565b91505092959194509250565b6000806040838503121561234557612344612f9d565b5b6000612353858286016120f8565b925050602061236485828601612169565b9150509250929050565b6000806040838503121561238557612384612f9d565b5b6000612393858286016120f8565b92505060206123a4858286016121d6565b9150509250929050565b6000602082840312156123c4576123c3612f9d565b5b600082013567ffffffffffffffff8111156123e2576123e1612f98565b5b6123ee8482850161210d565b91505092915050565b6000806040838503121561240e5761240d612f9d565b5b600083013567ffffffffffffffff81111561242c5761242b612f98565b5b6124388582860161210d565b925050602083013567ffffffffffffffff81111561245957612458612f98565b5b6124658582860161213b565b9150509250929050565b60006020828403121561248557612484612f9d565b5b600061249384828501612169565b91505092915050565b6000602082840312156124b2576124b1612f9d565b5b60006124c08482850161217e565b91505092915050565b6000602082840312156124df576124de612f9d565b5b60006124ed84828501612193565b91505092915050565b60006020828403121561250c5761250b612f9d565b5b600061251a848285016121d6565b91505092915050565b61252c81612d6b565b82525050565b61253b81612d7d565b82525050565b600061254c82612c9e565b6125568185612cb4565b9350612566818560208601612dee565b61256f81612fa2565b840191505092915050565b600061258582612ca9565b61258f8185612cc5565b935061259f818560208601612dee565b6125a881612fa2565b840191505092915050565b60006125be82612ca9565b6125c88185612cd6565b93506125d8818560208601612dee565b80840191505092915050565b60006125f1601483612cc5565b91506125fc82612fb3565b602082019050919050565b6000612614603283612cc5565b915061261f82612fdc565b604082019050919050565b6000612637602683612cc5565b91506126428261302b565b604082019050919050565b600061265a602583612cc5565b91506126658261307a565b604082019050919050565b600061267d601c83612cc5565b9150612688826130c9565b602082019050919050565b60006126a0601783612cc5565b91506126ab826130f2565b602082019050919050565b60006126c3602483612cc5565b91506126ce8261311b565b604082019050919050565b60006126e6601983612cc5565b91506126f18261316a565b602082019050919050565b6000612709601083612cc5565b915061271482613193565b602082019050919050565b600061272c602983612cc5565b9150612737826131bc565b604082019050919050565b600061274f603e83612cc5565b915061275a8261320b565b604082019050919050565b6000612772602083612cc5565b915061277d8261325a565b602082019050919050565b6000612795602083612cc5565b91506127a082613283565b602082019050919050565b60006127b8602f83612cc5565b91506127c3826132ac565b604082019050919050565b60006127db601883612cc5565b91506127e6826132fb565b602082019050919050565b60006127fe602183612cc5565b915061280982613324565b604082019050919050565b6000612821602083612cc5565b915061282c82613373565b602082019050919050565b6000612844602e83612cc5565b915061284f8261339c565b604082019050919050565b6000612867601783612cc5565b9150612872826133eb565b602082019050919050565b600061288a600f83612cd6565b915061289582613414565b600f82019050919050565b6128a981612dd5565b82525050565b60006128bb82846125b3565b91506128c68261287d565b915081905092915050565b60006020820190506128e66000830184612523565b92915050565b60006080820190506129016000830187612523565b61290e6020830186612523565b61291b60408301856128a0565b818103606083015261292d8184612541565b905095945050505050565b600060208201905061294d6000830184612532565b92915050565b6000602082019050818103600083015261296d818461257a565b905092915050565b6000602082019050818103600083015261298e816125e4565b9050919050565b600060208201905081810360008301526129ae81612607565b9050919050565b600060208201905081810360008301526129ce8161262a565b9050919050565b600060208201905081810360008301526129ee8161264d565b9050919050565b60006020820190508181036000830152612a0e81612670565b9050919050565b60006020820190508181036000830152612a2e81612693565b9050919050565b60006020820190508181036000830152612a4e816126b6565b9050919050565b60006020820190508181036000830152612a6e816126d9565b9050919050565b60006020820190508181036000830152612a8e816126fc565b9050919050565b60006020820190508181036000830152612aae8161271f565b9050919050565b60006020820190508181036000830152612ace81612742565b9050919050565b60006020820190508181036000830152612aee81612765565b9050919050565b60006020820190508181036000830152612b0e81612788565b9050919050565b60006020820190508181036000830152612b2e816127ab565b9050919050565b60006020820190508181036000830152612b4e816127ce565b9050919050565b60006020820190508181036000830152612b6e816127f1565b9050919050565b60006020820190508181036000830152612b8e81612814565b9050919050565b60006020820190508181036000830152612bae81612837565b9050919050565b60006020820190508181036000830152612bce8161285a565b9050919050565b6000602082019050612bea60008301846128a0565b92915050565b6000612bfa612c0b565b9050612c068282612e53565b919050565b6000604051905090565b600067ffffffffffffffff821115612c3057612c2f612f5a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c5c57612c5b612f5a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c8857612c87612f5a565b5b612c9182612fa2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cec82612dd5565b9150612cf783612dd5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d2c57612d2b612ecd565b5b828201905092915050565b6000612d4282612dd5565b9150612d4d83612dd5565b925082821015612d6057612d5f612ecd565b5b828203905092915050565b6000612d7682612db5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e0c578082015181840152602081019050612df1565b83811115612e1b576000848401525b50505050565b60006002820490506001821680612e3957607f821691505b60208210811415612e4d57612e4c612efc565b5b50919050565b612e5c82612fa2565b810181811067ffffffffffffffff82111715612e7b57612e7a612f5a565b5b80604052505050565b6000612e8f82612dd5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ec257612ec1612ecd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43757272656e746c7920636f6e7472616374206973206e6f7420616374697665600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f742061205768697465206c69737465642055736572000000000000000000600082015250565b7f2f416c706861506173732e6a736f6e0000000000000000000000000000000000600082015250565b61344681612d6b565b811461345157600080fd5b50565b61345d81612d7d565b811461346857600080fd5b50565b61347481612d89565b811461347f57600080fd5b50565b61348b81612dd5565b811461349657600080fd5b5056fea2646970667358221220a9ae6de70415568923de56e35936b01ae1729aef0eeb4c01197c70aa2e3ce65d64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d567a316e457135394e724268506f78386438685568776766626a6e66763339514e59586e50347a646e675a520000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063671b1b23116100f9578063a22cb46511610097578063c6ee20d211610071578063c6ee20d21461047c578063c87b56dd1461049a578063e985e9c5146104ca578063f2fde38b146104fa576101a9565b8063a22cb46514610428578063b46f820514610444578063b88d4fde14610460576101a9565b806382604ebf116100d357806382604ebf146103b25780638456cb59146103e25780638da5cb5b146103ec57806395d89b411461040a576101a9565b8063671b1b231461035c57806370a0823114610378578063715018a6146103a8576101a9565b806331c864e81161016657806342842e0e1161014057806342842e0e146102d657806342966c68146102f25780635c975abb1461030e5780636352211e1461032c576101a9565b806331c864e814610280578063372c12b11461029c5780633f4ba83a146102cc576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806323b872dd14610248578063279a669e14610264575b600080fd5b6101c860048036038101906101c3919061249c565b610516565b6040516101d59190612938565b60405180910390f35b6101e66105f8565b6040516101f39190612953565b60405180910390f35b610216600480360381019061021191906124f6565b61068a565b60405161022391906128d1565b60405180910390f35b6102466004803603810190610241919061236e565b6106d0565b005b610262600480360381019061025d9190612258565b6107e8565b005b61027e600480360381019061027991906123f7565b610848565b005b61029a600480360381019061029591906124f6565b610937565b005b6102b660048036038101906102b191906121eb565b610b14565b6040516102c39190612938565b60405180910390f35b6102d4610b34565b005b6102f060048036038101906102eb9190612258565b610b46565b005b61030c600480360381019061030791906124f6565b610b66565b005b610316610bc2565b6040516103239190612938565b60405180910390f35b610346600480360381019061034191906124f6565b610bd9565b60405161035391906128d1565b60405180910390f35b6103766004803603810190610371919061246f565b610c8b565b005b610392600480360381019061038d91906121eb565b610cb0565b60405161039f9190612bd5565b60405180910390f35b6103b0610d68565b005b6103cc60048036038101906103c791906121eb565b610d7c565b6040516103d99190612938565b60405180910390f35b6103ea610d9c565b005b6103f4610dae565b60405161040191906128d1565b60405180910390f35b610412610dd8565b60405161041f9190612953565b60405180910390f35b610442600480360381019061043d919061232e565b610e6a565b005b61045e600480360381019061045991906123ae565b610e80565b005b61047a600480360381019061047591906122ab565b610f1b565b005b610484610f7d565b6040516104919190612938565b60405180910390f35b6104b460048036038101906104af91906124f6565b610f90565b6040516104c19190612953565b60405180910390f35b6104e460048036038101906104df9190612218565b61102d565b6040516104f19190612938565b60405180910390f35b610514600480360381019061050f91906121eb565b6110c1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105f157506105f082611145565b5b9050919050565b60606000805461060790612e21565b80601f016020809104026020016040519081016040528092919081815260200182805461063390612e21565b80156106805780601f1061065557610100808354040283529160200191610680565b820191906000526020600020905b81548152906001019060200180831161066357829003601f168201915b5050505050905090565b6000610695826111af565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106db82610bd9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390612b55565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076b6111fa565b73ffffffffffffffffffffffffffffffffffffffff16148061079a5750610799816107946111fa565b61102d565b5b6107d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d090612ab5565b60405180910390fd5b6107e38383611202565b505050565b6107f96107f36111fa565b826112bb565b610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612b95565b60405180910390fd5b610843838383611350565b505050565b6108506115b7565b600660159054906101000a900460ff1661089f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089690612b75565b60405180910390fd5b80518251146108ad57600080fd5b60008251905060005b81811015610931576108fc8482815181106108d4576108d3612f2b565b5b60200260200101518483815181106108ef576108ee612f2b565b5b6020026020010151611635565b61091f83828151811061091257610911612f2b565b5b6020026020010151610f90565b508061092a90612e84565b90506108b6565b50505050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90612bb5565b60405180910390fd5b600660159054906101000a900460ff16610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0990612b75565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90612a15565b60405180910390fd5b610aaf3382611635565b610ab881610f90565b506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b610b3c6115b7565b610b4461180f565b565b610b6183838360405180602001604052806000815250610f1b565b505050565b610b77610b716111fa565b826112bb565b610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad90612b95565b60405180910390fd5b610bbf81611872565b50565b6000600660149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7990612b35565b60405180910390fd5b80915050919050565b610c936115b7565b80600660156101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612a95565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d706115b7565b610d7a600061198f565b565b600b6020528060005260406000206000915054906101000a900460ff1681565b610da46115b7565b610dac611a55565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610de790612e21565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1390612e21565b8015610e605780601f10610e3557610100808354040283529160200191610e60565b820191906000526020600020905b815481529060010190602001808311610e4357829003601f168201915b5050505050905090565b610e7c610e756111fa565b8383611ab8565b5050565b610e886115b7565b60005b8151811015610f1757600160096000848481518110610ead57610eac612f2b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080610f1090612e84565b9050610e8b565b5050565b610f2c610f266111fa565b836112bb565b610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290612b95565b60405180910390fd5b610f7784848484611c25565b50505050565b600660159054906101000a900460ff1681565b6060610f9b82611c81565b610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190612b15565b60405180910390fd5b6000610fe4611ced565b905060008151116110045760405180602001604052806000815250611025565b8060405160200161101591906128af565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110c96115b7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611130906129b5565b60405180910390fd5b6111428161198f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111b881611c81565b6111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90612b35565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661127583610bd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112c783610bd9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113095750611308818561102d565b5b8061134757508373ffffffffffffffffffffffffffffffffffffffff1661132f8461068a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661137082610bd9565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906129d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612a35565b60405180910390fd5b611441838383611d7f565b61144c600082611202565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461149c9190612d37565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114f39190612ce1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115b2838383611d84565b505050565b6115bf6111fa565b73ffffffffffffffffffffffffffffffffffffffff166115dd610dae565b73ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90612af5565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90612ad5565b60405180910390fd5b6116ae81611c81565b156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e5906129f5565b60405180910390fd5b6116fa60008383611d7f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461174a9190612ce1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461180b60008383611d84565b5050565b611817611d89565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61185b6111fa565b60405161186891906128d1565b60405180910390a1565b600061187d82610bd9565b905061188b81600084611d7f565b611896600083611202565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e69190612d37565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461198b81600084611d84565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a5d611dd2565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611aa16111fa565b604051611aae91906128d1565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90612a55565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c189190612938565b60405180910390a3505050565b611c30848484611350565b611c3c84848484611e1c565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290612995565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060078054611cfc90612e21565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2890612e21565b8015611d755780601f10611d4a57610100808354040283529160200191611d75565b820191906000526020600020905b815481529060010190602001808311611d5857829003601f168201915b5050505050905090565b505050565b505050565b611d91610bc2565b611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790612975565b60405180910390fd5b565b611dda610bc2565b15611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190612a75565b60405180910390fd5b565b6000611e3d8473ffffffffffffffffffffffffffffffffffffffff16611fb3565b15611fa6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e666111fa565b8786866040518563ffffffff1660e01b8152600401611e8894939291906128ec565b602060405180830381600087803b158015611ea257600080fd5b505af1925050508015611ed357506040513d601f19601f82011682018060405250810190611ed091906124c9565b60015b611f56573d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50600081511415611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590612995565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fab565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611fe9611fe484612c15565b612bf0565b9050808382526020820190508285602086028201111561200c5761200b612f8e565b5b60005b8581101561203c578161202288826120f8565b84526020840193506020830192505060018101905061200f565b5050509392505050565b600061205961205484612c41565b612bf0565b9050808382526020820190508285602086028201111561207c5761207b612f8e565b5b60005b858110156120ac578161209288826121d6565b84526020840193506020830192505060018101905061207f565b5050509392505050565b60006120c96120c484612c6d565b612bf0565b9050828152602081018484840111156120e5576120e4612f93565b5b6120f0848285612ddf565b509392505050565b6000813590506121078161343d565b92915050565b600082601f83011261212257612121612f89565b5b8135612132848260208601611fd6565b91505092915050565b600082601f8301126121505761214f612f89565b5b8135612160848260208601612046565b91505092915050565b60008135905061217881613454565b92915050565b60008135905061218d8161346b565b92915050565b6000815190506121a28161346b565b92915050565b600082601f8301126121bd576121bc612f89565b5b81356121cd8482602086016120b6565b91505092915050565b6000813590506121e581613482565b92915050565b60006020828403121561220157612200612f9d565b5b600061220f848285016120f8565b91505092915050565b6000806040838503121561222f5761222e612f9d565b5b600061223d858286016120f8565b925050602061224e858286016120f8565b9150509250929050565b60008060006060848603121561227157612270612f9d565b5b600061227f868287016120f8565b9350506020612290868287016120f8565b92505060406122a1868287016121d6565b9150509250925092565b600080600080608085870312156122c5576122c4612f9d565b5b60006122d3878288016120f8565b94505060206122e4878288016120f8565b93505060406122f5878288016121d6565b925050606085013567ffffffffffffffff81111561231657612315612f98565b5b612322878288016121a8565b91505092959194509250565b6000806040838503121561234557612344612f9d565b5b6000612353858286016120f8565b925050602061236485828601612169565b9150509250929050565b6000806040838503121561238557612384612f9d565b5b6000612393858286016120f8565b92505060206123a4858286016121d6565b9150509250929050565b6000602082840312156123c4576123c3612f9d565b5b600082013567ffffffffffffffff8111156123e2576123e1612f98565b5b6123ee8482850161210d565b91505092915050565b6000806040838503121561240e5761240d612f9d565b5b600083013567ffffffffffffffff81111561242c5761242b612f98565b5b6124388582860161210d565b925050602083013567ffffffffffffffff81111561245957612458612f98565b5b6124658582860161213b565b9150509250929050565b60006020828403121561248557612484612f9d565b5b600061249384828501612169565b91505092915050565b6000602082840312156124b2576124b1612f9d565b5b60006124c08482850161217e565b91505092915050565b6000602082840312156124df576124de612f9d565b5b60006124ed84828501612193565b91505092915050565b60006020828403121561250c5761250b612f9d565b5b600061251a848285016121d6565b91505092915050565b61252c81612d6b565b82525050565b61253b81612d7d565b82525050565b600061254c82612c9e565b6125568185612cb4565b9350612566818560208601612dee565b61256f81612fa2565b840191505092915050565b600061258582612ca9565b61258f8185612cc5565b935061259f818560208601612dee565b6125a881612fa2565b840191505092915050565b60006125be82612ca9565b6125c88185612cd6565b93506125d8818560208601612dee565b80840191505092915050565b60006125f1601483612cc5565b91506125fc82612fb3565b602082019050919050565b6000612614603283612cc5565b915061261f82612fdc565b604082019050919050565b6000612637602683612cc5565b91506126428261302b565b604082019050919050565b600061265a602583612cc5565b91506126658261307a565b604082019050919050565b600061267d601c83612cc5565b9150612688826130c9565b602082019050919050565b60006126a0601783612cc5565b91506126ab826130f2565b602082019050919050565b60006126c3602483612cc5565b91506126ce8261311b565b604082019050919050565b60006126e6601983612cc5565b91506126f18261316a565b602082019050919050565b6000612709601083612cc5565b915061271482613193565b602082019050919050565b600061272c602983612cc5565b9150612737826131bc565b604082019050919050565b600061274f603e83612cc5565b915061275a8261320b565b604082019050919050565b6000612772602083612cc5565b915061277d8261325a565b602082019050919050565b6000612795602083612cc5565b91506127a082613283565b602082019050919050565b60006127b8602f83612cc5565b91506127c3826132ac565b604082019050919050565b60006127db601883612cc5565b91506127e6826132fb565b602082019050919050565b60006127fe602183612cc5565b915061280982613324565b604082019050919050565b6000612821602083612cc5565b915061282c82613373565b602082019050919050565b6000612844602e83612cc5565b915061284f8261339c565b604082019050919050565b6000612867601783612cc5565b9150612872826133eb565b602082019050919050565b600061288a600f83612cd6565b915061289582613414565b600f82019050919050565b6128a981612dd5565b82525050565b60006128bb82846125b3565b91506128c68261287d565b915081905092915050565b60006020820190506128e66000830184612523565b92915050565b60006080820190506129016000830187612523565b61290e6020830186612523565b61291b60408301856128a0565b818103606083015261292d8184612541565b905095945050505050565b600060208201905061294d6000830184612532565b92915050565b6000602082019050818103600083015261296d818461257a565b905092915050565b6000602082019050818103600083015261298e816125e4565b9050919050565b600060208201905081810360008301526129ae81612607565b9050919050565b600060208201905081810360008301526129ce8161262a565b9050919050565b600060208201905081810360008301526129ee8161264d565b9050919050565b60006020820190508181036000830152612a0e81612670565b9050919050565b60006020820190508181036000830152612a2e81612693565b9050919050565b60006020820190508181036000830152612a4e816126b6565b9050919050565b60006020820190508181036000830152612a6e816126d9565b9050919050565b60006020820190508181036000830152612a8e816126fc565b9050919050565b60006020820190508181036000830152612aae8161271f565b9050919050565b60006020820190508181036000830152612ace81612742565b9050919050565b60006020820190508181036000830152612aee81612765565b9050919050565b60006020820190508181036000830152612b0e81612788565b9050919050565b60006020820190508181036000830152612b2e816127ab565b9050919050565b60006020820190508181036000830152612b4e816127ce565b9050919050565b60006020820190508181036000830152612b6e816127f1565b9050919050565b60006020820190508181036000830152612b8e81612814565b9050919050565b60006020820190508181036000830152612bae81612837565b9050919050565b60006020820190508181036000830152612bce8161285a565b9050919050565b6000602082019050612bea60008301846128a0565b92915050565b6000612bfa612c0b565b9050612c068282612e53565b919050565b6000604051905090565b600067ffffffffffffffff821115612c3057612c2f612f5a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c5c57612c5b612f5a565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c8857612c87612f5a565b5b612c9182612fa2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cec82612dd5565b9150612cf783612dd5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d2c57612d2b612ecd565b5b828201905092915050565b6000612d4282612dd5565b9150612d4d83612dd5565b925082821015612d6057612d5f612ecd565b5b828203905092915050565b6000612d7682612db5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e0c578082015181840152602081019050612df1565b83811115612e1b576000848401525b50505050565b60006002820490506001821680612e3957607f821691505b60208210811415612e4d57612e4c612efc565b5b50919050565b612e5c82612fa2565b810181811067ffffffffffffffff82111715612e7b57612e7a612f5a565b5b80604052505050565b6000612e8f82612dd5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ec257612ec1612ecd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f75206861766520616c7265616479206d696e746564000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f43757272656e746c7920636f6e7472616374206973206e6f7420616374697665600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f4e6f742061205768697465206c69737465642055736572000000000000000000600082015250565b7f2f416c706861506173732e6a736f6e0000000000000000000000000000000000600082015250565b61344681612d6b565b811461345157600080fd5b50565b61345d81612d7d565b811461346857600080fd5b50565b61347481612d89565b811461347f57600080fd5b50565b61348b81612dd5565b811461349657600080fd5b5056fea2646970667358221220a9ae6de70415568923de56e35936b01ae1729aef0eeb4c01197c70aa2e3ce65d64736f6c63430008070033

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

42900:2382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28857:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29784:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31297:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30814:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31997:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44491:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44136:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43382:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45214:65;;;:::i;:::-;;32404:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42577:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6528:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29495:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44025:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29226:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9393:103;;;:::i;:::-;;43471:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45145:61;;;:::i;:::-;;8745:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29953:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31540:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44936:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32660:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43022:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43665: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;44491:433::-;8631:13;:11;:13::i;:::-;44604:14:::1;;;;;;;;;;;44596:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44695:9;:16;44674:10;:17;:37;44666:46;;;::::0;::::1;;44723:16;44742:10;:17;44723:36;;44774:6;44770:147;44790:11;44786:1;:15;44770:147;;;44822:34;44828:10;44839:1;44828:13;;;;;;;;:::i;:::-;;;;;;;;44843:9;44853:1;44843:12;;;;;;;;:::i;:::-;;;;;;;;44822:5;:34::i;:::-;44871:22;44880:9;44890:1;44880:12;;;;;;;;:::i;:::-;;;;;;;;44871:8;:22::i;:::-;;44803:3;;;;:::i;:::-;;;44770:147;;;;44585:339;44491:433:::0;;:::o;44136:339::-;43190:9;:21;43200:10;43190:21;;;;;;;;;;;;;;;;;;;;;;;;;43182:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44213:14:::1;;;;;;;;;;;44205:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;44318:5;44283:40;;:19;:31;44303:10;44283:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;44275:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44361:27;44367:10;44379:8;44361:5;:27::i;:::-;44399:18;44408:8;44399;:18::i;:::-;;44462:4;44428:19;:31;44448:10;44428:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;44136:339:::0;:::o;43382:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;45214:65::-;8631:13;:11;:13::i;:::-;45261:10:::1;:8;:10::i;:::-;45214: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;44025:103::-;8631:13;:11;:13::i;:::-;44113:7:::1;44096:14;;:24;;;;;;;;;;;;;;;;;;44025:103:::0;:::o;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;43471:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;45145:61::-;8631:13;:11;:13::i;:::-;45190:8:::1;:6;:8::i;:::-;45145: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;44936:201::-;8631:13;:11;:13::i;:::-;45030:6:::1;45024:105;45044:14;:21;45040:1;:25;45024:105;;;45113:4;45082:9;:28;45092:14;45107:1;45092:17;;;;;;;;:::i;:::-;;;;;;;;45082:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;45067:3;;;;:::i;:::-;;;45024:105;;;;44936:201:::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;43022:33::-;;;;;;;;;;;;;:::o;43665:346::-;43738:13;43776:16;43784:7;43776;:16::i;:::-;43768:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43859:21;43883:10;:8;:10::i;:::-;43859:34;;43939:1;43921:7;43915:21;:25;:84;;;;;;;;;;;;;;;;;43967:7;43950:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;43915:84;43908:91;;;43665: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;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;43535:122::-;43595:13;43632;43625:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43535: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://a9ae6de70415568923de56e35936b01ae1729aef0eeb4c01197c70aa2e3ce65d
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.