ETH Price: $2,764.54 (+5.34%)

Token

HashWizards (HSHWZRDS)
 

Overview

Max Total Supply

77 HSHWZRDS

Holders

41

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jahbless.eth
Balance
2 HSHWZRDS
0xe6a423740BA21dbBe79Dd7FFD477BA279e857124
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:
HashWizards

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-17
*/

// File: @openzeppelin/contracts/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: contracts/WithLimitedSupply.sol

pragma solidity ^0.8.0;



/// @title A token tracker that limits the token supply and increments token IDs on each new mint.
abstract contract WithLimitedSupply {
    using Counters for Counters.Counter;

    // Keeps track of how many we have minted
    Counters.Counter private _tokenCount;

    /// @dev The maximum count of tokens this token tracker will hold.
    uint256 private _totalSupply;

    /// Instanciate the contract
    /// @param totalSupply_ how many tokens this collection should hold
    constructor (uint256 totalSupply_) {
        _totalSupply = totalSupply_;
    }

    /// @dev Get the max Supply
    /// @return the maximum token count
    function TotalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /// @dev Get the current token count
    /// @return the created token count
    function tokenCount() public view returns (uint256) {
        return _tokenCount.current();
    }

    /// @dev Check whether tokens are still available
    /// @return the available token count
    function availableTokenCount() public view returns (uint256) {
        return TotalSupply() - tokenCount();
    }

    /// @dev Increment the token count and fetch the latest count
    /// @return the next token id
    function nextToken() internal virtual ensureAvailability returns (uint256) {
        uint256 token = _tokenCount.current();

        _tokenCount.increment();

        return token;
    }

    /// @dev Check whether another token is still available
    modifier ensureAvailability() {
        require(availableTokenCount() > 0, "No more tokens available");
        _;
    }

    /// @param amount Check whether number of tokens are still available
    /// @dev Check whether tokens are still available
    modifier ensureAvailabilityFor(uint256 amount) {
        require(availableTokenCount() >= amount, "Requested number of tokens not available");
        _;
    }
}
// File: contracts/RandomlyAssigned.sol


pragma solidity ^0.8.0;


/// @author 1001.digital
/// @title Randomly assign tokenIDs from a given set of tokens.
abstract contract RandomlyAssigned is WithLimitedSupply {
    // Used for random index assignment
    mapping(uint256 => uint256) private tokenMatrix;

    // The initial token ID
    uint256 private startFrom;

    /// Instanciate the contract
    /// @param _totalSupply how many tokens this collection should hold
    /// @param _startFrom the tokenID with which to start counting
    constructor (uint256 _totalSupply, uint256 _startFrom)
        WithLimitedSupply(_totalSupply)
    {
        startFrom = _startFrom;
    }

    /// Get the next token ID
    /// @dev Randomly gets a new token ID and keeps track of the ones that are still available.
    /// @return the next token ID
    function nextToken() internal override ensureAvailability returns (uint256) {
        uint256 maxIndex = TotalSupply() - tokenCount();
        uint256 random = uint256(keccak256(
            abi.encodePacked(
                msg.sender,
                block.coinbase,
                block.difficulty,
                block.gaslimit,
                block.timestamp
            )
        )) % maxIndex;

        uint256 value = 0;
        if (tokenMatrix[random] == 0) {
            // If this matrix position is empty, set the value to the generated random number.
            value = random;
        } else {
            // Otherwise, use the previously stored number from the matrix.
            value = tokenMatrix[random];
        }

        // If the last available tokenID is still unused...
        if (tokenMatrix[maxIndex - 1] == 0) {
            // ...store that ID in the current matrix position.
            tokenMatrix[random] = maxIndex - 1;
        } else {
            // ...otherwise copy over the stored number to the current matrix position.
            tokenMatrix[random] = tokenMatrix[maxIndex - 1];
        }

        // Increment counts
        super.nextToken();

        return value + startFrom;
    }
}

// File: contracts/clean.sol



/**
 *Submitted for verification at Etherscan.io on 2021-10-07
*/

// 
//    __            __            _                 __  
//   / /  ___ ____ / /    _    __(_)__ ___ ________/ /__
//  / _ \/ * `(_-</ _ \  | |/|/ / /_ // _ `/ __/ *  (_-<
// /_//_/\_,_/___/_//_/  |__,__/_//__/\_,_/_/  \_,_/___/
//                                                                   
//                                                                               
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/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/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/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/IERC721Receiver.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/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/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/// HashWizards SmartContract

pragma solidity >=0.7.0 <0.9.0;


contract HashWizards is ERC721Enumerable, Ownable, RandomlyAssigned {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = .04 ether;
  uint256 public maxSupply = 8008;
  uint256 public maxMintAmount = 1;
  bool public paused = false;
  bool public revealed = false;
  bool public onlyWhitelisted = true;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;
  mapping(address => bool) public whitelisted;

  constructor
  ( uint256 amount,
    uint256 startFrom,
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol)
    RandomlyAssigned(amount, startFrom){
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    mint(msg.sender, 1);
    
  }

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

  // public

  function mint(address _to, uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
        if(whitelisted[msg.sender] != true) {
          require(msg.value >= cost * _mintAmount);
        }
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(_to, nextToken());
    }
  }

  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
          return true;
      }
    }
    return false;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner() {
      revealed = true;
  }

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

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  
  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }
  
  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }
 
  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startFrom","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"TotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availableTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601090805190602001906200005192919062001221565b50668e1bc9bf040000601255611f4860135560016014556000601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff021916908315150217905550348015620000c657600080fd5b5060405162006d3638038062006d368339818101604052810190620000ec9190620013af565b858581868681600090805190602001906200010992919062001221565b5080600190805190602001906200012292919062001221565b50505062000145620001396200019760201b60201c565b6200019f60201b60201c565b80600c819055505080600e81905550505062000167826200026560201b60201c565b62000178816200031060201b60201c565b6200018b336001620003bb60201b60201c565b50505050505062001e21565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002756200019760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029b6200052c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002eb90620017cc565b60405180910390fd5b80600f90805190602001906200030c92919062001221565b5050565b620003206200019760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003466200052c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200039f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039690620017cc565b60405180910390fd5b8060119080519060200190620003b792919062001221565b5050565b6000620003cd6200055660201b60201c565b9050601560009054906101000a900460ff1615620003ea57600080fd5b60008211620003f857600080fd5b6014548211156200040857600080fd5b60135482826200041991906200187a565b11156200042557600080fd5b620004356200052c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004e05760011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620004df5781601254620004d19190620018d7565b341015620004de57600080fd5b5b5b6000600190505b82811162000526576200051084620005046200056360201b60201c565b6200072b60201b60201c565b80806200051d9062001a93565b915050620004e7565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b600080620005766200075160201b60201c565b11620005b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b09062001766565b60405180910390fd5b6000620005cb6200078460201b60201c565b620005db620007a260201b60201c565b620005e7919062001938565b905060008133414445426040516020016200060795949392919062001665565b6040516020818303038152906040528051906020012060001c6200062c919062001b27565b9050600080600d600084815260200190815260200160002054141562000655578190506200066c565b600d60008381526020019081526020016000205490505b6000600d600060018662000681919062001938565b8152602001908152602001600020541415620006c357600183620006a6919062001938565b600d600084815260200190815260200160002081905550620006fd565b600d6000600185620006d6919062001938565b815260200190815260200160002054600d6000848152602001908152602001600020819055505b62000712620007ac60201b6200221f1760201c565b50600e54816200072391906200187a565b935050505090565b6200074d8282604051806020016040528060008152506200083b60201b60201c565b5050565b6000620007636200078460201b60201c565b62000773620007a260201b60201c565b6200077f919062001938565b905090565b60006200079d600b620008a960201b620022891760201c565b905090565b6000600c54905090565b600080620007bf6200075160201b60201c565b1162000802576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f99062001766565b60405180910390fd5b60006200081b600b620008a960201b620022891760201c565b905062000834600b620008b760201b620022971760201c565b8091505090565b6200084d8383620008cd60201b60201c565b62000862600084848462000ab360201b60201c565b620008a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089b9062001722565b60405180910390fd5b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000940576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093790620017aa565b60405180910390fd5b620009518162000c6d60201b60201c565b1562000994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200098b9062001744565b60405180910390fd5b620009a86000838362000cd960201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009fa91906200187a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000ae18473ffffffffffffffffffffffffffffffffffffffff1662000e2060201b620022ad1760201c565b1562000c60578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b136200019760201b60201c565b8786866040518563ffffffff1660e01b815260040162000b379493929190620016ce565b602060405180830381600087803b15801562000b5257600080fd5b505af192505050801562000b8657506040513d601f19601f8201168201806040525081019062000b8391906200137d565b60015b62000c0f573d806000811462000bb9576040519150601f19603f3d011682016040523d82523d6000602084013e62000bbe565b606091505b5060008151141562000c07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfe9062001722565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000c65565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000cf183838362000e3360201b620022c01760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000d3e5762000d388162000e3860201b60201c565b62000d86565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000d855762000d84838262000e8160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000dd35762000dcd8162000ffe60201b60201c565b62000e1b565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000e1a5762000e198282620010da60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000e9b846200116660201b6200172e1760201c565b62000ea7919062001938565b905060006007600084815260200190815260200160002054905081811462000f8d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062001014919062001938565b905060006009600084815260200190815260200160002054905060006008838154811062001047576200104662001c1b565b5b9060005260206000200154905080600883815481106200106c576200106b62001c1b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480620010be57620010bd62001bec565b5b6001900381819060005260206000200160009055905550505050565b6000620010f2836200116660201b6200172e1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620011da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011d19062001788565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8280546200122f9062001a27565b90600052602060002090601f0160209004810192826200125357600085556200129f565b82601f106200126e57805160ff19168380011785556200129f565b828001600101855582156200129f579182015b828111156200129e57825182559160200191906001019062001281565b5b509050620012ae9190620012b2565b5090565b5b80821115620012cd576000816000905550600101620012b3565b5090565b6000620012e8620012e28462001817565b620017ee565b90508281526020810184848401111562001307576200130662001c7e565b5b62001314848285620019f1565b509392505050565b6000815190506200132d8162001ded565b92915050565b600082601f8301126200134b576200134a62001c79565b5b81516200135d848260208601620012d1565b91505092915050565b600081519050620013778162001e07565b92915050565b60006020828403121562001396576200139562001c88565b5b6000620013a6848285016200131c565b91505092915050565b60008060008060008060c08789031215620013cf57620013ce62001c88565b5b6000620013df89828a0162001366565b9650506020620013f289828a0162001366565b955050604087015167ffffffffffffffff81111562001416576200141562001c83565b5b6200142489828a0162001333565b945050606087015167ffffffffffffffff81111562001448576200144762001c83565b5b6200145689828a0162001333565b935050608087015167ffffffffffffffff8111156200147a576200147962001c83565b5b6200148889828a0162001333565b92505060a087015167ffffffffffffffff811115620014ac57620014ab62001c83565b5b620014ba89828a0162001333565b9150509295509295509295565b620014dc620014d68262001987565b62001af5565b82525050565b620014ed8162001973565b82525050565b62001508620015028262001973565b62001ae1565b82525050565b60006200151b826200184d565b62001527818562001858565b935062001539818560208601620019f1565b620015448162001c8d565b840191505092915050565b60006200155e60328362001869565b91506200156b8262001cab565b604082019050919050565b600062001585601c8362001869565b9150620015928262001cfa565b602082019050919050565b6000620015ac60188362001869565b9150620015b98262001d23565b602082019050919050565b6000620015d3602a8362001869565b9150620015e08262001d4c565b604082019050919050565b6000620015fa60208362001869565b9150620016078262001d9b565b602082019050919050565b60006200162160208362001869565b91506200162e8262001dc4565b602082019050919050565b6200164481620019e7565b82525050565b6200165f6200165982620019e7565b62001b1d565b82525050565b6000620016738288620014f3565b601482019150620016858287620014c7565b6014820191506200169782866200164a565b602082019150620016a982856200164a565b602082019150620016bb82846200164a565b6020820191508190509695505050505050565b6000608082019050620016e56000830187620014e2565b620016f46020830186620014e2565b62001703604083018562001639565b81810360608301526200171781846200150e565b905095945050505050565b600060208201905081810360008301526200173d816200154f565b9050919050565b600060208201905081810360008301526200175f8162001576565b9050919050565b6000602082019050818103600083015262001781816200159d565b9050919050565b60006020820190508181036000830152620017a381620015c4565b9050919050565b60006020820190508181036000830152620017c581620015eb565b9050919050565b60006020820190508181036000830152620017e78162001612565b9050919050565b6000620017fa6200180d565b905062001808828262001a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111562001835576200183462001c4a565b5b620018408262001c8d565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200188782620019e7565b91506200189483620019e7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620018cc57620018cb62001b5f565b5b828201905092915050565b6000620018e482620019e7565b9150620018f183620019e7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200192d576200192c62001b5f565b5b828202905092915050565b60006200194582620019e7565b91506200195283620019e7565b92508282101562001968576200196762001b5f565b5b828203905092915050565b60006200198082620019c7565b9050919050565b60006200199482620019c7565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001a11578082015181840152602081019050620019f4565b8381111562001a21576000848401525b50505050565b6000600282049050600182168062001a4057607f821691505b6020821081141562001a575762001a5662001bbd565b5b50919050565b62001a688262001c8d565b810181811067ffffffffffffffff8211171562001a8a5762001a8962001c4a565b5b80604052505050565b600062001aa082620019e7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001ad65762001ad562001b5f565b5b600182019050919050565b600062001aee8262001b09565b9050919050565b600062001b028262001b09565b9050919050565b600062001b168262001c9e565b9050919050565b6000819050919050565b600062001b3482620019e7565b915062001b4183620019e7565b92508262001b545762001b5362001b8e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f206d6f726520746f6b656e7320617661696c61626c650000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62001df8816200199b565b811462001e0457600080fd5b50565b62001e1281620019e7565b811462001e1e57600080fd5b50565b614f058062001e316000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063da3ef23f1161007a578063da3ef23f146109dc578063e14ca35314610a05578063e985e9c514610a30578063edec5f2714610a6d578063f2c4ce1e14610a96578063f2fde38b14610abf57610288565b8063b88d4fde146108a6578063ba4e5c49146108cf578063c66828621461090c578063c87b56dd14610937578063d5abeb0114610974578063d936547e1461099f57610288565b806395d89b411161011357806395d89b41146107ba5780639c70b512146107e55780639f181b5e14610810578063a22cb4651461083b578063a44b47f714610864578063a475b5dd1461088f57610288565b80636352211e146106aa5780636c0360eb146106e757806370a0823114610712578063715018a61461074f5780637f00c7a6146107665780638da5cb5b1461078f57610288565b80632f745c59116101fe578063438b6300116101b7578063438b63001461058857806344a0d68a146105c55780634f6ccce7146105ee578063518302271461062b57806355f804b3146106565780635c975abb1461067f57610288565b80632f745c59146104965780633af32abf146104d35780633c952764146105105780633ccfd60b1461053957806340c10f191461054357806342842e0e1461055f57610288565b8063095ea7b311610250578063095ea7b31461038657806313faede6146103af57806318160ddd146103da57806318cae26914610405578063239c70ae1461044257806323b872dd1461046d57610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613a53565b610ae8565b6040516102c19190614126565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613a26565b610b62565b005b3480156102ff57600080fd5b50610308610bfb565b6040516103159190614141565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190613af6565b610c8d565b604051610352919061409d565b60405180910390f35b34801561036757600080fd5b50610370610d12565b60405161037d9190614141565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613999565b610da0565b005b3480156103bb57600080fd5b506103c4610eb8565b6040516103d191906143c3565b60405180910390f35b3480156103e657600080fd5b506103ef610ebe565b6040516103fc91906143c3565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613816565b610ecb565b60405161043991906143c3565b60405180910390f35b34801561044e57600080fd5b50610457610ee3565b60405161046491906143c3565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613883565b610ee9565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613999565b610f49565b6040516104ca91906143c3565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613816565b610fee565b6040516105079190614126565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613a26565b61109d565b005b610541611136565b005b61055d60048036038101906105589190613999565b61122b565b005b34801561056b57600080fd5b5061058660048036038101906105819190613883565b61136d565b005b34801561059457600080fd5b506105af60048036038101906105aa9190613816565b61138d565b6040516105bc9190614104565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613af6565b61143b565b005b3480156105fa57600080fd5b5061061560048036038101906106109190613af6565b6114c1565b60405161062291906143c3565b60405180910390f35b34801561063757600080fd5b50610640611532565b60405161064d9190614126565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613aad565b611545565b005b34801561068b57600080fd5b506106946115db565b6040516106a19190614126565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613af6565b6115ee565b6040516106de919061409d565b60405180910390f35b3480156106f357600080fd5b506106fc6116a0565b6040516107099190614141565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613816565b61172e565b60405161074691906143c3565b60405180910390f35b34801561075b57600080fd5b506107646117e6565b005b34801561077257600080fd5b5061078d60048036038101906107889190613af6565b61186e565b005b34801561079b57600080fd5b506107a46118f4565b6040516107b1919061409d565b60405180910390f35b3480156107c657600080fd5b506107cf61191e565b6040516107dc9190614141565b60405180910390f35b3480156107f157600080fd5b506107fa6119b0565b6040516108079190614126565b60405180910390f35b34801561081c57600080fd5b506108256119c3565b60405161083291906143c3565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613959565b6119d4565b005b34801561087057600080fd5b50610879611b55565b60405161088691906143c3565b60405180910390f35b34801561089b57600080fd5b506108a4611b5f565b005b3480156108b257600080fd5b506108cd60048036038101906108c891906138d6565b611bf8565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613af6565b611c5a565b604051610903919061409d565b60405180910390f35b34801561091857600080fd5b50610921611c99565b60405161092e9190614141565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613af6565b611d27565b60405161096b9190614141565b60405180910390f35b34801561098057600080fd5b50610989611e80565b60405161099691906143c3565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613816565b611e86565b6040516109d39190614126565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190613aad565b611ea6565b005b348015610a1157600080fd5b50610a1a611f3c565b604051610a2791906143c3565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a529190613843565b611f5d565b604051610a649190614126565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f91906139d9565b611ff1565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190613aad565b612091565b005b348015610acb57600080fd5b50610ae66004803603810190610ae19190613816565b612127565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5b5750610b5a826122c5565b5b9050919050565b610b6a6123a7565b73ffffffffffffffffffffffffffffffffffffffff16610b886118f4565b73ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614303565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610c0a906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054610c36906146de565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b5050505050905090565b6000610c98826123af565b610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906142e3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610d1f906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b906146de565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b505050505081565b6000610dab826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614363565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e3b6123a7565b73ffffffffffffffffffffffffffffffffffffffff161480610e6a5750610e6981610e646123a7565b611f5d565b5b610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea090614263565b60405180910390fd5b610eb3838361241b565b505050565b60125481565b6000600880549050905090565b60176020528060005260406000206000915090505481565b60145481565b610efa610ef46123a7565b826124d4565b610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614383565b60405180910390fd5b610f448383836125b2565b505050565b6000610f548361172e565b8210610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614163565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601680549050811015611092578273ffffffffffffffffffffffffffffffffffffffff166016828154811061102e5761102d6148b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561107f576001915050611098565b808061108a90614741565b915050610ff6565b50600090505b919050565b6110a56123a7565b73ffffffffffffffffffffffffffffffffffffffff166110c36118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111090614303565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b61113e6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661115c6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614303565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111d890614088565b60006040518083038185875af1925050503d8060008114611215576040519150601f19603f3d011682016040523d82523d6000602084013e61121a565b606091505b505090508061122857600080fd5b50565b6000611235610ebe565b9050601560009054906101000a900460ff161561125157600080fd5b6000821161125e57600080fd5b60145482111561126d57600080fd5b601354828261127c9190614501565b111561128757600080fd5b61128f6118f4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113355760011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461133457816012546113279190614588565b34101561133357600080fd5b5b5b6000600190505b828111611367576113548461134f61280e565b61299c565b808061135f90614741565b91505061133c565b50505050565b61138883838360405180602001604052806000815250611bf8565b505050565b6060600061139a8361172e565b905060008167ffffffffffffffff8111156113b8576113b76148e6565b5b6040519080825280602002602001820160405280156113e65781602001602082028036833780820191505090505b50905060005b82811015611430576113fe8582610f49565b828281518110611411576114106148b7565b5b602002602001018181525050808061142890614741565b9150506113ec565b508092505050919050565b6114436123a7565b73ffffffffffffffffffffffffffffffffffffffff166114616118f4565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614303565b60405180910390fd5b8060128190555050565b60006114cb610ebe565b821061150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906143a3565b60405180910390fd5b600882815481106115205761151f6148b7565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b61154d6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661156b6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614303565b60405180910390fd5b80600f90805190602001906115d7929190613513565b5050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e906142a3565b60405180910390fd5b80915050919050565b600f80546116ad906146de565b80601f01602080910402602001604051908101604052809291908181526020018280546116d9906146de565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690614283565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117ee6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661180c6118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990614303565b60405180910390fd5b61186c60006129ba565b565b6118766123a7565b73ffffffffffffffffffffffffffffffffffffffff166118946118f4565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614303565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461192d906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611959906146de565b80156119a65780601f1061197b576101008083540402835291602001916119a6565b820191906000526020600020905b81548152906001019060200180831161198957829003601f168201915b5050505050905090565b601560029054906101000a900460ff1681565b60006119cf600b612289565b905090565b6119dc6123a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614203565b60405180910390fd5b8060056000611a576123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b046123a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b499190614126565b60405180910390a35050565b6000600c54905090565b611b676123a7565b73ffffffffffffffffffffffffffffffffffffffff16611b856118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290614303565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b611c09611c036123a7565b836124d4565b611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90614383565b60405180910390fd5b611c5484848484612a80565b50505050565b60168181548110611c6a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60108054611ca6906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd2906146de565b8015611d1f5780601f10611cf457610100808354040283529160200191611d1f565b820191906000526020600020905b815481529060010190602001808311611d0257829003601f168201915b505050505081565b6060611d32826123af565b611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890614343565b60405180910390fd5b60001515601560019054906101000a900460ff1615151415611e1f5760118054611d9a906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc6906146de565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b50505050509050611e7b565b6000611e29612adc565b90506000815111611e495760405180602001604052806000815250611e77565b80611e5384612b6e565b6010604051602001611e6793929190614057565b6040516020818303038152906040525b9150505b919050565b60135481565b60186020528060005260406000206000915054906101000a900460ff1681565b611eae6123a7565b73ffffffffffffffffffffffffffffffffffffffff16611ecc6118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614303565b60405180910390fd5b8060109080519060200190611f38929190613513565b5050565b6000611f466119c3565b611f4e611b55565b611f5891906145e2565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ff96123a7565b73ffffffffffffffffffffffffffffffffffffffff166120176118f4565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614303565b60405180910390fd5b6016600061207b9190613599565b81816016919061208c9291906135ba565b505050565b6120996123a7565b73ffffffffffffffffffffffffffffffffffffffff166120b76118f4565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614303565b60405180910390fd5b8060119080519060200190612123929190613513565b5050565b61212f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661214d6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614303565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906141a3565b60405180910390fd5b61221c816129ba565b50565b60008061222a611f3c565b1161226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190614223565b60405180910390fd5b6000612276600b612289565b9050612282600b612297565b8091505090565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061239057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123a0575061239f82612ccf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661248e836115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124df826123af565b61251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614243565b60405180910390fd5b6000612529836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061259857508373ffffffffffffffffffffffffffffffffffffffff1661258084610c8d565b73ffffffffffffffffffffffffffffffffffffffff16145b806125a957506125a88185611f5d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125d2826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614323565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906141e3565b60405180910390fd5b6126a3838383612d39565b6126ae60008261241b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126fe91906145e2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127559190614501565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612819611f3c565b11612859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285090614223565b60405180910390fd5b60006128636119c3565b61286b611b55565b61287591906145e2565b90506000813341444542604051602001612893959493929190613ff8565b6040516020818303038152906040528051906020012060001c6128b691906147ca565b9050600080600d60008481526020019081526020016000205414156128dd578190506128f4565b600d60008381526020019081526020016000205490505b6000600d600060018661290791906145e2565b81526020019081526020016000205414156129455760018361292991906145e2565b600d60008481526020019081526020016000208190555061297d565b600d600060018561295691906145e2565b815260200190815260200160002054600d6000848152602001908152602001600020819055505b61298561221f565b50600e54816129949190614501565b935050505090565b6129b6828260405180602001604052806000815250612e4d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a8b8484846125b2565b612a9784848484612ea8565b612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614183565b60405180910390fd5b50505050565b6060600f8054612aeb906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906146de565b8015612b645780601f10612b3957610100808354040283529160200191612b64565b820191906000526020600020905b815481529060010190602001808311612b4757829003601f168201915b5050505050905090565b60606000821415612bb6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cca565b600082905060005b60008214612be8578080612bd190614741565b915050600a82612be19190614557565b9150612bbe565b60008167ffffffffffffffff811115612c0457612c036148e6565b5b6040519080825280601f01601f191660200182016040528015612c365781602001600182028036833780820191505090505b5090505b60008514612cc357600182612c4f91906145e2565b9150600a85612c5e91906147ca565b6030612c6a9190614501565b60f81b818381518110612c8057612c7f6148b7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cbc9190614557565b9450612c3a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d448383836122c0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8757612d828161303f565b612dc6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc557612dc48382613088565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0957612e04816131f5565b612e48565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4757612e4682826132c6565b5b5b505050565b612e578383613345565b612e646000848484612ea8565b612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90614183565b60405180910390fd5b505050565b6000612ec98473ffffffffffffffffffffffffffffffffffffffff166122ad565b15613032578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ef26123a7565b8786866040518563ffffffff1660e01b8152600401612f1494939291906140b8565b602060405180830381600087803b158015612f2e57600080fd5b505af1925050508015612f5f57506040513d601f19601f82011682018060405250810190612f5c9190613a80565b60015b612fe2573d8060008114612f8f576040519150601f19603f3d011682016040523d82523d6000602084013e612f94565b606091505b50600081511415612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190614183565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613037565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130958461172e565b61309f91906145e2565b9050600060076000848152602001908152602001600020549050818114613184576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061320991906145e2565b9050600060096000848152602001908152602001600020549050600060088381548110613239576132386148b7565b5b90600052602060002001549050806008838154811061325b5761325a6148b7565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132aa576132a9614888565b5b6001900381819060005260206000200160009055905550505050565b60006132d18361172e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ac906142c3565b60405180910390fd5b6133be816123af565b156133fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f5906141c3565b60405180910390fd5b61340a60008383612d39565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345a9190614501565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461351f906146de565b90600052602060002090601f0160209004810192826135415760008555613588565b82601f1061355a57805160ff1916838001178555613588565b82800160010185558215613588579182015b8281111561358757825182559160200191906001019061356c565b5b509050613595919061365a565b5090565b50805460008255906000526020600020908101906135b7919061365a565b50565b828054828255906000526020600020908101928215613649579160200282015b8281111561364857823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906135da565b5b509050613656919061365a565b5090565b5b8082111561367357600081600090555060010161365b565b5090565b600061368a61368584614403565b6143de565b9050828152602081018484840111156136a6576136a5614924565b5b6136b184828561469c565b509392505050565b60006136cc6136c784614434565b6143de565b9050828152602081018484840111156136e8576136e7614924565b5b6136f384828561469c565b509392505050565b60008135905061370a81614e73565b92915050565b60008083601f8401126137265761372561491a565b5b8235905067ffffffffffffffff81111561374357613742614915565b5b60208301915083602082028301111561375f5761375e61491f565b5b9250929050565b60008135905061377581614e8a565b92915050565b60008135905061378a81614ea1565b92915050565b60008151905061379f81614ea1565b92915050565b600082601f8301126137ba576137b961491a565b5b81356137ca848260208601613677565b91505092915050565b600082601f8301126137e8576137e761491a565b5b81356137f88482602086016136b9565b91505092915050565b60008135905061381081614eb8565b92915050565b60006020828403121561382c5761382b61492e565b5b600061383a848285016136fb565b91505092915050565b6000806040838503121561385a5761385961492e565b5b6000613868858286016136fb565b9250506020613879858286016136fb565b9150509250929050565b60008060006060848603121561389c5761389b61492e565b5b60006138aa868287016136fb565b93505060206138bb868287016136fb565b92505060406138cc86828701613801565b9150509250925092565b600080600080608085870312156138f0576138ef61492e565b5b60006138fe878288016136fb565b945050602061390f878288016136fb565b935050604061392087828801613801565b925050606085013567ffffffffffffffff81111561394157613940614929565b5b61394d878288016137a5565b91505092959194509250565b600080604083850312156139705761396f61492e565b5b600061397e858286016136fb565b925050602061398f85828601613766565b9150509250929050565b600080604083850312156139b0576139af61492e565b5b60006139be858286016136fb565b92505060206139cf85828601613801565b9150509250929050565b600080602083850312156139f0576139ef61492e565b5b600083013567ffffffffffffffff811115613a0e57613a0d614929565b5b613a1a85828601613710565b92509250509250929050565b600060208284031215613a3c57613a3b61492e565b5b6000613a4a84828501613766565b91505092915050565b600060208284031215613a6957613a6861492e565b5b6000613a778482850161377b565b91505092915050565b600060208284031215613a9657613a9561492e565b5b6000613aa484828501613790565b91505092915050565b600060208284031215613ac357613ac261492e565b5b600082013567ffffffffffffffff811115613ae157613ae0614929565b5b613aed848285016137d3565b91505092915050565b600060208284031215613b0c57613b0b61492e565b5b6000613b1a84828501613801565b91505092915050565b6000613b2f8383613fc3565b60208301905092915050565b613b4c613b4782614628565b61479c565b82525050565b613b5b81614616565b82525050565b613b72613b6d82614616565b61478a565b82525050565b6000613b838261448a565b613b8d81856144b8565b9350613b9883614465565b8060005b83811015613bc9578151613bb08882613b23565b9750613bbb836144ab565b925050600181019050613b9c565b5085935050505092915050565b613bdf8161463a565b82525050565b6000613bf082614495565b613bfa81856144c9565b9350613c0a8185602086016146ab565b613c1381614933565b840191505092915050565b6000613c29826144a0565b613c3381856144e5565b9350613c438185602086016146ab565b613c4c81614933565b840191505092915050565b6000613c62826144a0565b613c6c81856144f6565b9350613c7c8185602086016146ab565b80840191505092915050565b60008154613c95816146de565b613c9f81866144f6565b94506001821660008114613cba5760018114613ccb57613cfe565b60ff19831686528186019350613cfe565b613cd485614475565b60005b83811015613cf657815481890152600182019150602081019050613cd7565b838801955050505b50505092915050565b6000613d14602b836144e5565b9150613d1f82614951565b604082019050919050565b6000613d376032836144e5565b9150613d42826149a0565b604082019050919050565b6000613d5a6026836144e5565b9150613d65826149ef565b604082019050919050565b6000613d7d601c836144e5565b9150613d8882614a3e565b602082019050919050565b6000613da06024836144e5565b9150613dab82614a67565b604082019050919050565b6000613dc36019836144e5565b9150613dce82614ab6565b602082019050919050565b6000613de66018836144e5565b9150613df182614adf565b602082019050919050565b6000613e09602c836144e5565b9150613e1482614b08565b604082019050919050565b6000613e2c6038836144e5565b9150613e3782614b57565b604082019050919050565b6000613e4f602a836144e5565b9150613e5a82614ba6565b604082019050919050565b6000613e726029836144e5565b9150613e7d82614bf5565b604082019050919050565b6000613e956020836144e5565b9150613ea082614c44565b602082019050919050565b6000613eb8602c836144e5565b9150613ec382614c6d565b604082019050919050565b6000613edb6020836144e5565b9150613ee682614cbc565b602082019050919050565b6000613efe6029836144e5565b9150613f0982614ce5565b604082019050919050565b6000613f21602f836144e5565b9150613f2c82614d34565b604082019050919050565b6000613f446021836144e5565b9150613f4f82614d83565b604082019050919050565b6000613f676000836144da565b9150613f7282614dd2565b600082019050919050565b6000613f8a6031836144e5565b9150613f9582614dd5565b604082019050919050565b6000613fad602c836144e5565b9150613fb882614e24565b604082019050919050565b613fcc81614692565b82525050565b613fdb81614692565b82525050565b613ff2613fed82614692565b6147c0565b82525050565b60006140048288613b61565b6014820191506140148287613b3b565b6014820191506140248286613fe1565b6020820191506140348285613fe1565b6020820191506140448284613fe1565b6020820191508190509695505050505050565b60006140638286613c57565b915061406f8285613c57565b915061407b8284613c88565b9150819050949350505050565b600061409382613f5a565b9150819050919050565b60006020820190506140b26000830184613b52565b92915050565b60006080820190506140cd6000830187613b52565b6140da6020830186613b52565b6140e76040830185613fd2565b81810360608301526140f98184613be5565b905095945050505050565b6000602082019050818103600083015261411e8184613b78565b905092915050565b600060208201905061413b6000830184613bd6565b92915050565b6000602082019050818103600083015261415b8184613c1e565b905092915050565b6000602082019050818103600083015261417c81613d07565b9050919050565b6000602082019050818103600083015261419c81613d2a565b9050919050565b600060208201905081810360008301526141bc81613d4d565b9050919050565b600060208201905081810360008301526141dc81613d70565b9050919050565b600060208201905081810360008301526141fc81613d93565b9050919050565b6000602082019050818103600083015261421c81613db6565b9050919050565b6000602082019050818103600083015261423c81613dd9565b9050919050565b6000602082019050818103600083015261425c81613dfc565b9050919050565b6000602082019050818103600083015261427c81613e1f565b9050919050565b6000602082019050818103600083015261429c81613e42565b9050919050565b600060208201905081810360008301526142bc81613e65565b9050919050565b600060208201905081810360008301526142dc81613e88565b9050919050565b600060208201905081810360008301526142fc81613eab565b9050919050565b6000602082019050818103600083015261431c81613ece565b9050919050565b6000602082019050818103600083015261433c81613ef1565b9050919050565b6000602082019050818103600083015261435c81613f14565b9050919050565b6000602082019050818103600083015261437c81613f37565b9050919050565b6000602082019050818103600083015261439c81613f7d565b9050919050565b600060208201905081810360008301526143bc81613fa0565b9050919050565b60006020820190506143d86000830184613fd2565b92915050565b60006143e86143f9565b90506143f48282614710565b919050565b6000604051905090565b600067ffffffffffffffff82111561441e5761441d6148e6565b5b61442782614933565b9050602081019050919050565b600067ffffffffffffffff82111561444f5761444e6148e6565b5b61445882614933565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061450c82614692565b915061451783614692565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561454c5761454b6147fb565b5b828201905092915050565b600061456282614692565b915061456d83614692565b92508261457d5761457c61482a565b5b828204905092915050565b600061459382614692565b915061459e83614692565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145d7576145d66147fb565b5b828202905092915050565b60006145ed82614692565b91506145f883614692565b92508282101561460b5761460a6147fb565b5b828203905092915050565b600061462182614672565b9050919050565b600061463382614672565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146c95780820151818401526020810190506146ae565b838111156146d8576000848401525b50505050565b600060028204905060018216806146f657607f821691505b6020821081141561470a57614709614859565b5b50919050565b61471982614933565b810181811067ffffffffffffffff82111715614738576147376148e6565b5b80604052505050565b600061474c82614692565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561477f5761477e6147fb565b5b600182019050919050565b6000614795826147ae565b9050919050565b60006147a7826147ae565b9050919050565b60006147b982614944565b9050919050565b6000819050919050565b60006147d582614692565b91506147e083614692565b9250826147f0576147ef61482a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f206d6f726520746f6b656e7320617661696c61626c650000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614e7c81614616565b8114614e8757600080fd5b50565b614e938161463a565b8114614e9e57600080fd5b50565b614eaa81614646565b8114614eb557600080fd5b50565b614ec181614692565b8114614ecc57600080fd5b5056fea2646970667358221220269388b6edfb44b50bbccac25fb46941ec92a2da3588234c36c43118b5a059c664736f6c634300080700330000000000000000000000000000000000000000000000000000000000001f48000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000b4861736857697a617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008485348575a524453000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6861736877697a617264732e696f2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6861736877697a617264732e696f2f72657665616c2f74656d706d6574612e6a736f6e000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063da3ef23f1161007a578063da3ef23f146109dc578063e14ca35314610a05578063e985e9c514610a30578063edec5f2714610a6d578063f2c4ce1e14610a96578063f2fde38b14610abf57610288565b8063b88d4fde146108a6578063ba4e5c49146108cf578063c66828621461090c578063c87b56dd14610937578063d5abeb0114610974578063d936547e1461099f57610288565b806395d89b411161011357806395d89b41146107ba5780639c70b512146107e55780639f181b5e14610810578063a22cb4651461083b578063a44b47f714610864578063a475b5dd1461088f57610288565b80636352211e146106aa5780636c0360eb146106e757806370a0823114610712578063715018a61461074f5780637f00c7a6146107665780638da5cb5b1461078f57610288565b80632f745c59116101fe578063438b6300116101b7578063438b63001461058857806344a0d68a146105c55780634f6ccce7146105ee578063518302271461062b57806355f804b3146106565780635c975abb1461067f57610288565b80632f745c59146104965780633af32abf146104d35780633c952764146105105780633ccfd60b1461053957806340c10f191461054357806342842e0e1461055f57610288565b8063095ea7b311610250578063095ea7b31461038657806313faede6146103af57806318160ddd146103da57806318cae26914610405578063239c70ae1461044257806323b872dd1461046d57610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613a53565b610ae8565b6040516102c19190614126565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613a26565b610b62565b005b3480156102ff57600080fd5b50610308610bfb565b6040516103159190614141565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190613af6565b610c8d565b604051610352919061409d565b60405180910390f35b34801561036757600080fd5b50610370610d12565b60405161037d9190614141565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613999565b610da0565b005b3480156103bb57600080fd5b506103c4610eb8565b6040516103d191906143c3565b60405180910390f35b3480156103e657600080fd5b506103ef610ebe565b6040516103fc91906143c3565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613816565b610ecb565b60405161043991906143c3565b60405180910390f35b34801561044e57600080fd5b50610457610ee3565b60405161046491906143c3565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613883565b610ee9565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613999565b610f49565b6040516104ca91906143c3565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190613816565b610fee565b6040516105079190614126565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613a26565b61109d565b005b610541611136565b005b61055d60048036038101906105589190613999565b61122b565b005b34801561056b57600080fd5b5061058660048036038101906105819190613883565b61136d565b005b34801561059457600080fd5b506105af60048036038101906105aa9190613816565b61138d565b6040516105bc9190614104565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190613af6565b61143b565b005b3480156105fa57600080fd5b5061061560048036038101906106109190613af6565b6114c1565b60405161062291906143c3565b60405180910390f35b34801561063757600080fd5b50610640611532565b60405161064d9190614126565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613aad565b611545565b005b34801561068b57600080fd5b506106946115db565b6040516106a19190614126565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613af6565b6115ee565b6040516106de919061409d565b60405180910390f35b3480156106f357600080fd5b506106fc6116a0565b6040516107099190614141565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190613816565b61172e565b60405161074691906143c3565b60405180910390f35b34801561075b57600080fd5b506107646117e6565b005b34801561077257600080fd5b5061078d60048036038101906107889190613af6565b61186e565b005b34801561079b57600080fd5b506107a46118f4565b6040516107b1919061409d565b60405180910390f35b3480156107c657600080fd5b506107cf61191e565b6040516107dc9190614141565b60405180910390f35b3480156107f157600080fd5b506107fa6119b0565b6040516108079190614126565b60405180910390f35b34801561081c57600080fd5b506108256119c3565b60405161083291906143c3565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613959565b6119d4565b005b34801561087057600080fd5b50610879611b55565b60405161088691906143c3565b60405180910390f35b34801561089b57600080fd5b506108a4611b5f565b005b3480156108b257600080fd5b506108cd60048036038101906108c891906138d6565b611bf8565b005b3480156108db57600080fd5b506108f660048036038101906108f19190613af6565b611c5a565b604051610903919061409d565b60405180910390f35b34801561091857600080fd5b50610921611c99565b60405161092e9190614141565b60405180910390f35b34801561094357600080fd5b5061095e60048036038101906109599190613af6565b611d27565b60405161096b9190614141565b60405180910390f35b34801561098057600080fd5b50610989611e80565b60405161099691906143c3565b60405180910390f35b3480156109ab57600080fd5b506109c660048036038101906109c19190613816565b611e86565b6040516109d39190614126565b60405180910390f35b3480156109e857600080fd5b50610a0360048036038101906109fe9190613aad565b611ea6565b005b348015610a1157600080fd5b50610a1a611f3c565b604051610a2791906143c3565b60405180910390f35b348015610a3c57600080fd5b50610a576004803603810190610a529190613843565b611f5d565b604051610a649190614126565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f91906139d9565b611ff1565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190613aad565b612091565b005b348015610acb57600080fd5b50610ae66004803603810190610ae19190613816565b612127565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5b5750610b5a826122c5565b5b9050919050565b610b6a6123a7565b73ffffffffffffffffffffffffffffffffffffffff16610b886118f4565b73ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614303565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b606060008054610c0a906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054610c36906146de565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b5050505050905090565b6000610c98826123af565b610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce906142e3565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610d1f906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b906146de565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b505050505081565b6000610dab826115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390614363565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e3b6123a7565b73ffffffffffffffffffffffffffffffffffffffff161480610e6a5750610e6981610e646123a7565b611f5d565b5b610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea090614263565b60405180910390fd5b610eb3838361241b565b505050565b60125481565b6000600880549050905090565b60176020528060005260406000206000915090505481565b60145481565b610efa610ef46123a7565b826124d4565b610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614383565b60405180910390fd5b610f448383836125b2565b505050565b6000610f548361172e565b8210610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614163565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601680549050811015611092578273ffffffffffffffffffffffffffffffffffffffff166016828154811061102e5761102d6148b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561107f576001915050611098565b808061108a90614741565b915050610ff6565b50600090505b919050565b6110a56123a7565b73ffffffffffffffffffffffffffffffffffffffff166110c36118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111090614303565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b61113e6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661115c6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a990614303565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111d890614088565b60006040518083038185875af1925050503d8060008114611215576040519150601f19603f3d011682016040523d82523d6000602084013e61121a565b606091505b505090508061122857600080fd5b50565b6000611235610ebe565b9050601560009054906101000a900460ff161561125157600080fd5b6000821161125e57600080fd5b60145482111561126d57600080fd5b601354828261127c9190614501565b111561128757600080fd5b61128f6118f4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113355760011515601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461133457816012546113279190614588565b34101561133357600080fd5b5b5b6000600190505b828111611367576113548461134f61280e565b61299c565b808061135f90614741565b91505061133c565b50505050565b61138883838360405180602001604052806000815250611bf8565b505050565b6060600061139a8361172e565b905060008167ffffffffffffffff8111156113b8576113b76148e6565b5b6040519080825280602002602001820160405280156113e65781602001602082028036833780820191505090505b50905060005b82811015611430576113fe8582610f49565b828281518110611411576114106148b7565b5b602002602001018181525050808061142890614741565b9150506113ec565b508092505050919050565b6114436123a7565b73ffffffffffffffffffffffffffffffffffffffff166114616118f4565b73ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614303565b60405180910390fd5b8060128190555050565b60006114cb610ebe565b821061150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906143a3565b60405180910390fd5b600882815481106115205761151f6148b7565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b61154d6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661156b6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890614303565b60405180910390fd5b80600f90805190602001906115d7929190613513565b5050565b601560009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e906142a3565b60405180910390fd5b80915050919050565b600f80546116ad906146de565b80601f01602080910402602001604051908101604052809291908181526020018280546116d9906146de565b80156117265780601f106116fb57610100808354040283529160200191611726565b820191906000526020600020905b81548152906001019060200180831161170957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690614283565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117ee6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661180c6118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990614303565b60405180910390fd5b61186c60006129ba565b565b6118766123a7565b73ffffffffffffffffffffffffffffffffffffffff166118946118f4565b73ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614303565b60405180910390fd5b8060148190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461192d906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611959906146de565b80156119a65780601f1061197b576101008083540402835291602001916119a6565b820191906000526020600020905b81548152906001019060200180831161198957829003601f168201915b5050505050905090565b601560029054906101000a900460ff1681565b60006119cf600b612289565b905090565b6119dc6123a7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4190614203565b60405180910390fd5b8060056000611a576123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b046123a7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b499190614126565b60405180910390a35050565b6000600c54905090565b611b676123a7565b73ffffffffffffffffffffffffffffffffffffffff16611b856118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290614303565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b611c09611c036123a7565b836124d4565b611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f90614383565b60405180910390fd5b611c5484848484612a80565b50505050565b60168181548110611c6a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60108054611ca6906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd2906146de565b8015611d1f5780601f10611cf457610100808354040283529160200191611d1f565b820191906000526020600020905b815481529060010190602001808311611d0257829003601f168201915b505050505081565b6060611d32826123af565b611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6890614343565b60405180910390fd5b60001515601560019054906101000a900460ff1615151415611e1f5760118054611d9a906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc6906146de565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b50505050509050611e7b565b6000611e29612adc565b90506000815111611e495760405180602001604052806000815250611e77565b80611e5384612b6e565b6010604051602001611e6793929190614057565b6040516020818303038152906040525b9150505b919050565b60135481565b60186020528060005260406000206000915054906101000a900460ff1681565b611eae6123a7565b73ffffffffffffffffffffffffffffffffffffffff16611ecc6118f4565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990614303565b60405180910390fd5b8060109080519060200190611f38929190613513565b5050565b6000611f466119c3565b611f4e611b55565b611f5891906145e2565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ff96123a7565b73ffffffffffffffffffffffffffffffffffffffff166120176118f4565b73ffffffffffffffffffffffffffffffffffffffff161461206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614303565b60405180910390fd5b6016600061207b9190613599565b81816016919061208c9291906135ba565b505050565b6120996123a7565b73ffffffffffffffffffffffffffffffffffffffff166120b76118f4565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614303565b60405180910390fd5b8060119080519060200190612123929190613513565b5050565b61212f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1661214d6118f4565b73ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614303565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906141a3565b60405180910390fd5b61221c816129ba565b50565b60008061222a611f3c565b1161226a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226190614223565b60405180910390fd5b6000612276600b612289565b9050612282600b612297565b8091505090565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061239057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123a0575061239f82612ccf565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661248e836115ee565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124df826123af565b61251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614243565b60405180910390fd5b6000612529836115ee565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061259857508373ffffffffffffffffffffffffffffffffffffffff1661258084610c8d565b73ffffffffffffffffffffffffffffffffffffffff16145b806125a957506125a88185611f5d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125d2826115ee565b73ffffffffffffffffffffffffffffffffffffffff1614612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614323565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906141e3565b60405180910390fd5b6126a3838383612d39565b6126ae60008261241b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126fe91906145e2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127559190614501565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612819611f3c565b11612859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285090614223565b60405180910390fd5b60006128636119c3565b61286b611b55565b61287591906145e2565b90506000813341444542604051602001612893959493929190613ff8565b6040516020818303038152906040528051906020012060001c6128b691906147ca565b9050600080600d60008481526020019081526020016000205414156128dd578190506128f4565b600d60008381526020019081526020016000205490505b6000600d600060018661290791906145e2565b81526020019081526020016000205414156129455760018361292991906145e2565b600d60008481526020019081526020016000208190555061297d565b600d600060018561295691906145e2565b815260200190815260200160002054600d6000848152602001908152602001600020819055505b61298561221f565b50600e54816129949190614501565b935050505090565b6129b6828260405180602001604052806000815250612e4d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a8b8484846125b2565b612a9784848484612ea8565b612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acd90614183565b60405180910390fd5b50505050565b6060600f8054612aeb906146de565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906146de565b8015612b645780601f10612b3957610100808354040283529160200191612b64565b820191906000526020600020905b815481529060010190602001808311612b4757829003601f168201915b5050505050905090565b60606000821415612bb6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cca565b600082905060005b60008214612be8578080612bd190614741565b915050600a82612be19190614557565b9150612bbe565b60008167ffffffffffffffff811115612c0457612c036148e6565b5b6040519080825280601f01601f191660200182016040528015612c365781602001600182028036833780820191505090505b5090505b60008514612cc357600182612c4f91906145e2565b9150600a85612c5e91906147ca565b6030612c6a9190614501565b60f81b818381518110612c8057612c7f6148b7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cbc9190614557565b9450612c3a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d448383836122c0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8757612d828161303f565b612dc6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc557612dc48382613088565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0957612e04816131f5565b612e48565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4757612e4682826132c6565b5b5b505050565b612e578383613345565b612e646000848484612ea8565b612ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9a90614183565b60405180910390fd5b505050565b6000612ec98473ffffffffffffffffffffffffffffffffffffffff166122ad565b15613032578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ef26123a7565b8786866040518563ffffffff1660e01b8152600401612f1494939291906140b8565b602060405180830381600087803b158015612f2e57600080fd5b505af1925050508015612f5f57506040513d601f19601f82011682018060405250810190612f5c9190613a80565b60015b612fe2573d8060008114612f8f576040519150601f19603f3d011682016040523d82523d6000602084013e612f94565b606091505b50600081511415612fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd190614183565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613037565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130958461172e565b61309f91906145e2565b9050600060076000848152602001908152602001600020549050818114613184576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061320991906145e2565b9050600060096000848152602001908152602001600020549050600060088381548110613239576132386148b7565b5b90600052602060002001549050806008838154811061325b5761325a6148b7565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132aa576132a9614888565b5b6001900381819060005260206000200160009055905550505050565b60006132d18361172e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ac906142c3565b60405180910390fd5b6133be816123af565b156133fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f5906141c3565b60405180910390fd5b61340a60008383612d39565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461345a9190614501565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461351f906146de565b90600052602060002090601f0160209004810192826135415760008555613588565b82601f1061355a57805160ff1916838001178555613588565b82800160010185558215613588579182015b8281111561358757825182559160200191906001019061356c565b5b509050613595919061365a565b5090565b50805460008255906000526020600020908101906135b7919061365a565b50565b828054828255906000526020600020908101928215613649579160200282015b8281111561364857823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906135da565b5b509050613656919061365a565b5090565b5b8082111561367357600081600090555060010161365b565b5090565b600061368a61368584614403565b6143de565b9050828152602081018484840111156136a6576136a5614924565b5b6136b184828561469c565b509392505050565b60006136cc6136c784614434565b6143de565b9050828152602081018484840111156136e8576136e7614924565b5b6136f384828561469c565b509392505050565b60008135905061370a81614e73565b92915050565b60008083601f8401126137265761372561491a565b5b8235905067ffffffffffffffff81111561374357613742614915565b5b60208301915083602082028301111561375f5761375e61491f565b5b9250929050565b60008135905061377581614e8a565b92915050565b60008135905061378a81614ea1565b92915050565b60008151905061379f81614ea1565b92915050565b600082601f8301126137ba576137b961491a565b5b81356137ca848260208601613677565b91505092915050565b600082601f8301126137e8576137e761491a565b5b81356137f88482602086016136b9565b91505092915050565b60008135905061381081614eb8565b92915050565b60006020828403121561382c5761382b61492e565b5b600061383a848285016136fb565b91505092915050565b6000806040838503121561385a5761385961492e565b5b6000613868858286016136fb565b9250506020613879858286016136fb565b9150509250929050565b60008060006060848603121561389c5761389b61492e565b5b60006138aa868287016136fb565b93505060206138bb868287016136fb565b92505060406138cc86828701613801565b9150509250925092565b600080600080608085870312156138f0576138ef61492e565b5b60006138fe878288016136fb565b945050602061390f878288016136fb565b935050604061392087828801613801565b925050606085013567ffffffffffffffff81111561394157613940614929565b5b61394d878288016137a5565b91505092959194509250565b600080604083850312156139705761396f61492e565b5b600061397e858286016136fb565b925050602061398f85828601613766565b9150509250929050565b600080604083850312156139b0576139af61492e565b5b60006139be858286016136fb565b92505060206139cf85828601613801565b9150509250929050565b600080602083850312156139f0576139ef61492e565b5b600083013567ffffffffffffffff811115613a0e57613a0d614929565b5b613a1a85828601613710565b92509250509250929050565b600060208284031215613a3c57613a3b61492e565b5b6000613a4a84828501613766565b91505092915050565b600060208284031215613a6957613a6861492e565b5b6000613a778482850161377b565b91505092915050565b600060208284031215613a9657613a9561492e565b5b6000613aa484828501613790565b91505092915050565b600060208284031215613ac357613ac261492e565b5b600082013567ffffffffffffffff811115613ae157613ae0614929565b5b613aed848285016137d3565b91505092915050565b600060208284031215613b0c57613b0b61492e565b5b6000613b1a84828501613801565b91505092915050565b6000613b2f8383613fc3565b60208301905092915050565b613b4c613b4782614628565b61479c565b82525050565b613b5b81614616565b82525050565b613b72613b6d82614616565b61478a565b82525050565b6000613b838261448a565b613b8d81856144b8565b9350613b9883614465565b8060005b83811015613bc9578151613bb08882613b23565b9750613bbb836144ab565b925050600181019050613b9c565b5085935050505092915050565b613bdf8161463a565b82525050565b6000613bf082614495565b613bfa81856144c9565b9350613c0a8185602086016146ab565b613c1381614933565b840191505092915050565b6000613c29826144a0565b613c3381856144e5565b9350613c438185602086016146ab565b613c4c81614933565b840191505092915050565b6000613c62826144a0565b613c6c81856144f6565b9350613c7c8185602086016146ab565b80840191505092915050565b60008154613c95816146de565b613c9f81866144f6565b94506001821660008114613cba5760018114613ccb57613cfe565b60ff19831686528186019350613cfe565b613cd485614475565b60005b83811015613cf657815481890152600182019150602081019050613cd7565b838801955050505b50505092915050565b6000613d14602b836144e5565b9150613d1f82614951565b604082019050919050565b6000613d376032836144e5565b9150613d42826149a0565b604082019050919050565b6000613d5a6026836144e5565b9150613d65826149ef565b604082019050919050565b6000613d7d601c836144e5565b9150613d8882614a3e565b602082019050919050565b6000613da06024836144e5565b9150613dab82614a67565b604082019050919050565b6000613dc36019836144e5565b9150613dce82614ab6565b602082019050919050565b6000613de66018836144e5565b9150613df182614adf565b602082019050919050565b6000613e09602c836144e5565b9150613e1482614b08565b604082019050919050565b6000613e2c6038836144e5565b9150613e3782614b57565b604082019050919050565b6000613e4f602a836144e5565b9150613e5a82614ba6565b604082019050919050565b6000613e726029836144e5565b9150613e7d82614bf5565b604082019050919050565b6000613e956020836144e5565b9150613ea082614c44565b602082019050919050565b6000613eb8602c836144e5565b9150613ec382614c6d565b604082019050919050565b6000613edb6020836144e5565b9150613ee682614cbc565b602082019050919050565b6000613efe6029836144e5565b9150613f0982614ce5565b604082019050919050565b6000613f21602f836144e5565b9150613f2c82614d34565b604082019050919050565b6000613f446021836144e5565b9150613f4f82614d83565b604082019050919050565b6000613f676000836144da565b9150613f7282614dd2565b600082019050919050565b6000613f8a6031836144e5565b9150613f9582614dd5565b604082019050919050565b6000613fad602c836144e5565b9150613fb882614e24565b604082019050919050565b613fcc81614692565b82525050565b613fdb81614692565b82525050565b613ff2613fed82614692565b6147c0565b82525050565b60006140048288613b61565b6014820191506140148287613b3b565b6014820191506140248286613fe1565b6020820191506140348285613fe1565b6020820191506140448284613fe1565b6020820191508190509695505050505050565b60006140638286613c57565b915061406f8285613c57565b915061407b8284613c88565b9150819050949350505050565b600061409382613f5a565b9150819050919050565b60006020820190506140b26000830184613b52565b92915050565b60006080820190506140cd6000830187613b52565b6140da6020830186613b52565b6140e76040830185613fd2565b81810360608301526140f98184613be5565b905095945050505050565b6000602082019050818103600083015261411e8184613b78565b905092915050565b600060208201905061413b6000830184613bd6565b92915050565b6000602082019050818103600083015261415b8184613c1e565b905092915050565b6000602082019050818103600083015261417c81613d07565b9050919050565b6000602082019050818103600083015261419c81613d2a565b9050919050565b600060208201905081810360008301526141bc81613d4d565b9050919050565b600060208201905081810360008301526141dc81613d70565b9050919050565b600060208201905081810360008301526141fc81613d93565b9050919050565b6000602082019050818103600083015261421c81613db6565b9050919050565b6000602082019050818103600083015261423c81613dd9565b9050919050565b6000602082019050818103600083015261425c81613dfc565b9050919050565b6000602082019050818103600083015261427c81613e1f565b9050919050565b6000602082019050818103600083015261429c81613e42565b9050919050565b600060208201905081810360008301526142bc81613e65565b9050919050565b600060208201905081810360008301526142dc81613e88565b9050919050565b600060208201905081810360008301526142fc81613eab565b9050919050565b6000602082019050818103600083015261431c81613ece565b9050919050565b6000602082019050818103600083015261433c81613ef1565b9050919050565b6000602082019050818103600083015261435c81613f14565b9050919050565b6000602082019050818103600083015261437c81613f37565b9050919050565b6000602082019050818103600083015261439c81613f7d565b9050919050565b600060208201905081810360008301526143bc81613fa0565b9050919050565b60006020820190506143d86000830184613fd2565b92915050565b60006143e86143f9565b90506143f48282614710565b919050565b6000604051905090565b600067ffffffffffffffff82111561441e5761441d6148e6565b5b61442782614933565b9050602081019050919050565b600067ffffffffffffffff82111561444f5761444e6148e6565b5b61445882614933565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061450c82614692565b915061451783614692565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561454c5761454b6147fb565b5b828201905092915050565b600061456282614692565b915061456d83614692565b92508261457d5761457c61482a565b5b828204905092915050565b600061459382614692565b915061459e83614692565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145d7576145d66147fb565b5b828202905092915050565b60006145ed82614692565b91506145f883614692565b92508282101561460b5761460a6147fb565b5b828203905092915050565b600061462182614672565b9050919050565b600061463382614672565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146c95780820151818401526020810190506146ae565b838111156146d8576000848401525b50505050565b600060028204905060018216806146f657607f821691505b6020821081141561470a57614709614859565b5b50919050565b61471982614933565b810181811067ffffffffffffffff82111715614738576147376148e6565b5b80604052505050565b600061474c82614692565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561477f5761477e6147fb565b5b600182019050919050565b6000614795826147ae565b9050919050565b60006147a7826147ae565b9050919050565b60006147b982614944565b9050919050565b6000819050919050565b60006147d582614692565b91506147e083614692565b9250826147f0576147ef61482a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f206d6f726520746f6b656e7320617661696c61626c650000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614e7c81614616565b8114614e8757600080fd5b50565b614e938161463a565b8114614e9e57600080fd5b50565b614eaa81614646565b8114614eb557600080fd5b50565b614ec181614692565b8114614ecc57600080fd5b5056fea2646970667358221220269388b6edfb44b50bbccac25fb46941ec92a2da3588234c36c43118b5a059c664736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000001f48000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000b4861736857697a617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008485348575a524453000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6861736877697a617264732e696f2f6d657461646174612f000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f6861736877697a617264732e696f2f72657665616c2f74656d706d6574612e6a736f6e000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : amount (uint256): 8008
Arg [1] : startFrom (uint256): 1
Arg [2] : _name (string): HashWizards
Arg [3] : _symbol (string): HSHWZRDS
Arg [4] : _initBaseURI (string): https://hashwizards.io/metadata/
Arg [5] : _initNotRevealedUri (string): https://hashwizards.io/reveal/tempmeta.json

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000001f48
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [7] : 4861736857697a61726473000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [9] : 485348575a524453000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [11] : 68747470733a2f2f6861736877697a617264732e696f2f6d657461646174612f
Arg [12] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [13] : 68747470733a2f2f6861736877697a617264732e696f2f72657665616c2f7465
Arg [14] : 6d706d6574612e6a736f6e000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49269:3850:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40781:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52623:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28673:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30232:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49442:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29755:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49475:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41421:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49729:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49547:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31122:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41089:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50856:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52704:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52958:158;;;:::i;:::-;;50348:502;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31532:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51101:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52051:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41611:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49615:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52263:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49584:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28367:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49374:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28097:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48570:94;;;;;;;;;;;;;:::i;:::-;;52139:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47919:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28842:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49648:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2325:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30525:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2143:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51974:67;;;;;;;;;;;;;:::i;:::-;;31788:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49687:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49400;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51455:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49511:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49789:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52367:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2530:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30891:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52807:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52497:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48819:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40781:224;40883:4;40922:35;40907:50;;;:11;:50;;;;:90;;;;40961:36;40985:11;40961:23;:36::i;:::-;40907:90;40900:97;;40781:224;;;:::o;52623:73::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52684:6:::1;52675;;:15;;;;;;;;;;;;;;;;;;52623:73:::0;:::o;28673:100::-;28727:13;28760:5;28753:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:100;:::o;30232:221::-;30308:7;30336:16;30344:7;30336;:16::i;:::-;30328:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30421:15;:24;30437:7;30421:24;;;;;;;;;;;;;;;;;;;;;30414:31;;30232:221;;;:::o;49442:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29755:411::-;29836:13;29852:23;29867:7;29852:14;:23::i;:::-;29836:39;;29900:5;29894:11;;:2;:11;;;;29886:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29994:5;29978:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30003:37;30020:5;30027:12;:10;:12::i;:::-;30003:16;:37::i;:::-;29978:62;29956:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30137:21;30146:2;30150:7;30137:8;:21::i;:::-;29825:341;29755:411;;:::o;49475:31::-;;;;:::o;41421:113::-;41482:7;41509:10;:17;;;;41502:24;;41421:113;:::o;49729:55::-;;;;;;;;;;;;;;;;;:::o;49547:32::-;;;;:::o;31122:339::-;31317:41;31336:12;:10;:12::i;:::-;31350:7;31317:18;:41::i;:::-;31309:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31425:28;31435:4;31441:2;31445:7;31425:9;:28::i;:::-;31122:339;;;:::o;41089:256::-;41186:7;41222:23;41239:5;41222:16;:23::i;:::-;41214:5;:31;41206:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41311:12;:19;41324:5;41311:19;;;;;;;;;;;;;;;:26;41331:5;41311:26;;;;;;;;;;;;41304:33;;41089:256;;;;:::o;50856:239::-;50915:4;50933:6;50942:1;50933:10;;50928:143;50949:20;:27;;;;50945:1;:31;50928:143;;;51023:5;50996:32;;:20;51017:1;50996:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;50992:72;;;51050:4;51043:11;;;;;50992:72;50978:3;;;;;:::i;:::-;;;;50928:143;;;;51084:5;51077:12;;50856:239;;;;:::o;52704:95::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52787:6:::1;52769:15;;:24;;;;;;;;;;;;;;;;;;52704:95:::0;:::o;52958:158::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53011:12:::1;53037:10;53029:24;;53061:21;53029:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53010:77;;;53102:7;53094:16;;;::::0;::::1;;53003:113;52958:158::o:0;50348:502::-;50418:14;50435:13;:11;:13::i;:::-;50418:30;;50464:6;;;;;;;;;;;50463:7;50455:16;;;;;;50500:1;50486:11;:15;50478:24;;;;;;50532:13;;50517:11;:28;;50509:37;;;;;;50585:9;;50570:11;50561:6;:20;;;;:::i;:::-;:33;;50553:42;;;;;;50622:7;:5;:7::i;:::-;50608:21;;:10;:21;;;50604:146;;50672:4;50645:31;;:11;:23;50657:10;50645:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;50642:101;;50719:11;50712:4;;:18;;;;:::i;:::-;50699:9;:31;;50691:40;;;;;;50642:101;50604:146;50763:9;50775:1;50763:13;;50758:87;50783:11;50778:1;:16;50758:87;;50810:27;50820:3;50825:11;:9;:11::i;:::-;50810:9;:27::i;:::-;50796:3;;;;;:::i;:::-;;;;50758:87;;;;50411:439;50348:502;;:::o;31532:185::-;31670:39;31687:4;31693:2;31697:7;31670:39;;;;;;;;;;;;:16;:39::i;:::-;31532:185;;;:::o;51101:348::-;51176:16;51204:23;51230:17;51240:6;51230:9;:17::i;:::-;51204:43;;51254:25;51296:15;51282:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51254:58;;51324:9;51319:103;51339:15;51335:1;:19;51319:103;;;51384:30;51404:6;51412:1;51384:19;:30::i;:::-;51370:8;51379:1;51370:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;51356:3;;;;;:::i;:::-;;;;51319:103;;;;51435:8;51428:15;;;;51101:348;;;:::o;52051:82::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52119:8:::1;52112:4;:15;;;;52051:82:::0;:::o;41611:233::-;41686:7;41722:30;:28;:30::i;:::-;41714:5;:38;41706:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41819:10;41830:5;41819:17;;;;;;;;:::i;:::-;;;;;;;;;;41812:24;;41611:233;;;:::o;49615:28::-;;;;;;;;;;;;;:::o;52263:98::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52344:11:::1;52334:7;:21;;;;;;;;;;;;:::i;:::-;;52263:98:::0;:::o;49584:26::-;;;;;;;;;;;;;:::o;28367:239::-;28439:7;28459:13;28475:7;:16;28483:7;28475:16;;;;;;;;;;;;;;;;;;;;;28459:32;;28527:1;28510:19;;:5;:19;;;;28502:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28593:5;28586:12;;;28367:239;;;:::o;49374:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28097:208::-;28169:7;28214:1;28197:19;;:5;:19;;;;28189:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28281:9;:16;28291:5;28281:16;;;;;;;;;;;;;;;;28274:23;;28097:208;;;:::o;48570:94::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48635:21:::1;48653:1;48635:9;:21::i;:::-;48570:94::o:0;52139:118::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52234:17:::1;52218:13;:33;;;;52139:118:::0;:::o;47919:87::-;47965:7;47992:6;;;;;;;;;;;47985:13;;47919:87;:::o;28842:104::-;28898:13;28931:7;28924:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28842:104;:::o;49648:34::-;;;;;;;;;;;;;:::o;2325:99::-;2368:7;2395:21;:11;:19;:21::i;:::-;2388:28;;2325:99;:::o;30525:295::-;30640:12;:10;:12::i;:::-;30628:24;;:8;:24;;;;30620:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30740:8;30695:18;:32;30714:12;:10;:12::i;:::-;30695:32;;;;;;;;;;;;;;;:42;30728:8;30695:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30793:8;30764:48;;30779:12;:10;:12::i;:::-;30764:48;;;30803:8;30764:48;;;;;;:::i;:::-;;;;;;;;30525:295;;:::o;2143:91::-;2187:7;2214:12;;2207:19;;2143:91;:::o;51974:67::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52031:4:::1;52020:8;;:15;;;;;;;;;;;;;;;;;;51974:67::o:0;31788:328::-;31963:41;31982:12;:10;:12::i;:::-;31996:7;31963:18;:41::i;:::-;31955:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32069:39;32083:4;32089:2;32093:7;32102:5;32069:13;:39::i;:::-;31788:328;;;;:::o;49687:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49400:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51455:497::-;51553:13;51594:16;51602:7;51594;:16::i;:::-;51578:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51703:5;51691:17;;:8;;;;;;;;;;;:17;;;51688:62;;;51728:14;51721:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51688:62;51758:28;51789:10;:8;:10::i;:::-;51758:41;;51844:1;51819:14;51813:28;:32;:133;;;;;;;;;;;;;;;;;51881:14;51897:18;:7;:16;:18::i;:::-;51917:13;51864:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51813:133;51806:140;;;51455:497;;;;:::o;49511:31::-;;;;:::o;49789:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;52367:122::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52466:17:::1;52450:13;:33;;;;;;;;;;;;:::i;:::-;;52367:122:::0;:::o;2530:115::-;2582:7;2625:12;:10;:12::i;:::-;2609:13;:11;:13::i;:::-;:28;;;;:::i;:::-;2602:35;;2530:115;:::o;30891:164::-;30988:4;31012:18;:25;31031:5;31012:25;;;;;;;;;;;;;;;:35;31038:8;31012:35;;;;;;;;;;;;;;;;;;;;;;;;;31005:42;;30891:164;;;;:::o;52807:144::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52889:20:::1;;52882:27;;;;:::i;:::-;52939:6;;52916:20;:29;;;;;;;:::i;:::-;;52807:144:::0;;:::o;52497:120::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52596:15:::1;52579:14;:32;;;;;;;;;;;;:::i;:::-;;52497:120:::0;:::o;48819:192::-;48150:12;:10;:12::i;:::-;48139:23;;:7;:5;:7::i;:::-;:23;;;48131:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48928:1:::1;48908:22;;:8;:22;;;;48900:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48984:19;48994:8;48984:9;:19::i;:::-;48819:192:::0;:::o;2755:::-;2821:7;3089:1;3065:21;:19;:21::i;:::-;:25;3057:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2841:13:::1;2857:21;:11;:19;:21::i;:::-;2841:37;;2891:23;:11;:21;:23::i;:::-;2934:5;2927:12;;;2755:192:::0;:::o;817:114::-;882:7;909;:14;;;902:21;;817:114;;;:::o;939:127::-;1046:1;1028:7;:14;;;:19;;;;;;;;;;;939:127;:::o;16559:387::-;16619:4;16827:12;16894:7;16882:20;16874:28;;16937:1;16930:4;:8;16923:15;;;16559:387;;;:::o;39718:126::-;;;;:::o;27728:305::-;27830:4;27882:25;27867:40;;;:11;:40;;;;:105;;;;27939:33;27924:48;;;:11;:48;;;;27867:105;:158;;;;27989:36;28013:11;27989:23;:36::i;:::-;27867:158;27847:178;;27728:305;;;:::o;26202:98::-;26255:7;26282:10;26275:17;;26202:98;:::o;33626:127::-;33691:4;33743:1;33715:30;;:7;:16;33723:7;33715:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33708:37;;33626:127;;;:::o;37608:174::-;37710:2;37683:15;:24;37699:7;37683:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37766:7;37762:2;37728:46;;37737:23;37752:7;37737:14;:23::i;:::-;37728:46;;;;;;;;;;;;37608:174;;:::o;33920:348::-;34013:4;34038:16;34046:7;34038;:16::i;:::-;34030:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34114:13;34130:23;34145:7;34130:14;:23::i;:::-;34114:39;;34183:5;34172:16;;:7;:16;;;:51;;;;34216:7;34192:31;;:20;34204:7;34192:11;:20::i;:::-;:31;;;34172:51;:87;;;;34227:32;34244:5;34251:7;34227:16;:32::i;:::-;34172:87;34164:96;;;33920:348;;;;:::o;36912:578::-;37071:4;37044:31;;:23;37059:7;37044:14;:23::i;:::-;:31;;;37036:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37154:1;37140:16;;:2;:16;;;;37132:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37210:39;37231:4;37237:2;37241:7;37210:20;:39::i;:::-;37314:29;37331:1;37335:7;37314:8;:29::i;:::-;37375:1;37356:9;:15;37366:4;37356:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37404:1;37387:9;:13;37397:2;37387:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37435:2;37416:7;:16;37424:7;37416:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37474:7;37470:2;37455:27;;37464:4;37455:27;;;;;;;;;;;;36912:578;;;:::o;4319:1264::-;4386:7;3089:1;3065:21;:19;:21::i;:::-;:25;3057:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:16:::1;4441:12;:10;:12::i;:::-;4425:13;:11;:13::i;:::-;:28;;;;:::i;:::-;4406:47;;4464:14;4723:8;4548:10;4577:14;4610:16;4645:14;4678:15;4513:195;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4489:230;;;;;;4481:239;;:250;;;;:::i;:::-;4464:267;;4744:13;4799:1:::0;4776:11:::1;:19;4788:6;4776:19;;;;;;;;;;;;:24;4772:304;;;4921:6;4913:14;;4772:304;;;5045:11;:19;5057:6;5045:19;;;;;;;;;;;;5037:27;;4772:304;5182:1;5153:11;:25;5176:1;5165:8;:12;;;;:::i;:::-;5153:25;;;;;;;;;;;;:30;5149:331;;;5298:1;5287:8;:12;;;;:::i;:::-;5265:11;:19;5277:6;5265:19;;;;;;;;;;;:34;;;;5149:331;;;5443:11;:25;5466:1;5455:8;:12;;;;:::i;:::-;5443:25;;;;;;;;;;;;5421:11;:19;5433:6;5421:19;;;;;;;;;;;:47;;;;5149:331;5521:17;:15;:17::i;:::-;;5566:9;;5558:5;:17;;;;:::i;:::-;5551:24;;;;;4319:1264:::0;:::o;34610:110::-;34686:26;34696:2;34700:7;34686:26;;;;;;;;;;;;:9;:26::i;:::-;34610:110;;:::o;49019:173::-;49075:16;49094:6;;;;;;;;;;;49075:25;;49120:8;49111:6;;:17;;;;;;;;;;;;;;;;;;49175:8;49144:40;;49165:8;49144:40;;;;;;;;;;;;49064:128;49019:173;:::o;32998:315::-;33155:28;33165:4;33171:2;33175:7;33155:9;:28::i;:::-;33202:48;33225:4;33231:2;33235:7;33244:5;33202:22;:48::i;:::-;33194:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32998:315;;;;:::o;50225:102::-;50285:13;50314:7;50307:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50225:102;:::o;14034:723::-;14090:13;14320:1;14311:5;:10;14307:53;;;14338:10;;;;;;;;;;;;;;;;;;;;;14307:53;14370:12;14385:5;14370:20;;14401:14;14426:78;14441:1;14433:4;:9;14426:78;;14459:8;;;;;:::i;:::-;;;;14490:2;14482:10;;;;;:::i;:::-;;;14426:78;;;14514:19;14546:6;14536:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14514:39;;14564:154;14580:1;14571:5;:10;14564:154;;14608:1;14598:11;;;;;:::i;:::-;;;14675:2;14667:5;:10;;;;:::i;:::-;14654:2;:24;;;;:::i;:::-;14641:39;;14624:6;14631;14624:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14704:2;14695:11;;;;;:::i;:::-;;;14564:154;;;14742:6;14728:21;;;;;14034:723;;;;:::o;13559:157::-;13644:4;13683:25;13668:40;;;:11;:40;;;;13661:47;;13559:157;;;:::o;42457:589::-;42601:45;42628:4;42634:2;42638:7;42601:26;:45::i;:::-;42679:1;42663:18;;:4;:18;;;42659:187;;;42698:40;42730:7;42698:31;:40::i;:::-;42659:187;;;42768:2;42760:10;;:4;:10;;;42756:90;;42787:47;42820:4;42826:7;42787:32;:47::i;:::-;42756:90;42659:187;42874:1;42860:16;;:2;:16;;;42856:183;;;42893:45;42930:7;42893:36;:45::i;:::-;42856:183;;;42966:4;42960:10;;:2;:10;;;42956:83;;42987:40;43015:2;43019:7;42987:27;:40::i;:::-;42956:83;42856:183;42457:589;;;:::o;34947:321::-;35077:18;35083:2;35087:7;35077:5;:18::i;:::-;35128:54;35159:1;35163:2;35167:7;35176:5;35128:22;:54::i;:::-;35106:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34947:321;;;:::o;38347:799::-;38502:4;38523:15;:2;:13;;;:15::i;:::-;38519:620;;;38575:2;38559:36;;;38596:12;:10;:12::i;:::-;38610:4;38616:7;38625:5;38559:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38555:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38818:1;38801:6;:13;:18;38797:272;;;38844:60;;;;;;;;;;:::i;:::-;;;;;;;;38797:272;39019:6;39013:13;39004:6;39000:2;38996:15;38989:38;38555:529;38692:41;;;38682:51;;;:6;:51;;;;38675:58;;;;;38519:620;39123:4;39116:11;;38347:799;;;;;;;:::o;43769:164::-;43873:10;:17;;;;43846:15;:24;43862:7;43846:24;;;;;;;;;;;:44;;;;43901:10;43917:7;43901:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43769:164;:::o;44560:988::-;44826:22;44876:1;44851:22;44868:4;44851:16;:22::i;:::-;:26;;;;:::i;:::-;44826:51;;44888:18;44909:17;:26;44927:7;44909:26;;;;;;;;;;;;44888:47;;45056:14;45042:10;:28;45038:328;;45087:19;45109:12;:18;45122:4;45109:18;;;;;;;;;;;;;;;:34;45128:14;45109:34;;;;;;;;;;;;45087:56;;45193:11;45160:12;:18;45173:4;45160:18;;;;;;;;;;;;;;;:30;45179:10;45160:30;;;;;;;;;;;:44;;;;45310:10;45277:17;:30;45295:11;45277:30;;;;;;;;;;;:43;;;;45072:294;45038:328;45462:17;:26;45480:7;45462:26;;;;;;;;;;;45455:33;;;45506:12;:18;45519:4;45506:18;;;;;;;;;;;;;;;:34;45525:14;45506:34;;;;;;;;;;;45499:41;;;44641:907;;44560:988;;:::o;45843:1079::-;46096:22;46141:1;46121:10;:17;;;;:21;;;;:::i;:::-;46096:46;;46153:18;46174:15;:24;46190:7;46174:24;;;;;;;;;;;;46153:45;;46525:19;46547:10;46558:14;46547:26;;;;;;;;:::i;:::-;;;;;;;;;;46525:48;;46611:11;46586:10;46597;46586:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46722:10;46691:15;:28;46707:11;46691:28;;;;;;;;;;;:41;;;;46863:15;:24;46879:7;46863:24;;;;;;;;;;;46856:31;;;46898:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45914:1008;;;45843:1079;:::o;43347:221::-;43432:14;43449:20;43466:2;43449:16;:20::i;:::-;43432:37;;43507:7;43480:12;:16;43493:2;43480:16;;;;;;;;;;;;;;;:24;43497:6;43480:24;;;;;;;;;;;:34;;;;43554:6;43525:17;:26;43543:7;43525:26;;;;;;;;;;;:35;;;;43421:147;43347:221;;:::o;35604:382::-;35698:1;35684:16;;:2;:16;;;;35676:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35757:16;35765:7;35757;:16::i;:::-;35756:17;35748:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35819:45;35848:1;35852:2;35856:7;35819:20;:45::i;:::-;35894:1;35877:9;:13;35887:2;35877:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35925:2;35906:7;:16;35914:7;35906:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35970:7;35966:2;35945:33;;35962:1;35945:33;;;;;;;;;;;;35604:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:189::-;8949:61;8977:32;9003:5;8977:32;:::i;:::-;8949:61;:::i;:::-;8944:3;8937:74;8828:189;;:::o;9023:118::-;9110:24;9128:5;9110:24;:::i;:::-;9105:3;9098:37;9023:118;;:::o;9147:157::-;9252:45;9272:24;9290:5;9272:24;:::i;:::-;9252:45;:::i;:::-;9247:3;9240:58;9147:157;;:::o;9340:732::-;9459:3;9488:54;9536:5;9488:54;:::i;:::-;9558:86;9637:6;9632:3;9558:86;:::i;:::-;9551:93;;9668:56;9718:5;9668:56;:::i;:::-;9747:7;9778:1;9763:284;9788:6;9785:1;9782:13;9763:284;;;9864:6;9858:13;9891:63;9950:3;9935:13;9891:63;:::i;:::-;9884:70;;9977:60;10030:6;9977:60;:::i;:::-;9967:70;;9823:224;9810:1;9807;9803:9;9798:14;;9763:284;;;9767:14;10063:3;10056:10;;9464:608;;;9340:732;;;;:::o;10078:109::-;10159:21;10174:5;10159:21;:::i;:::-;10154:3;10147:34;10078:109;;:::o;10193:360::-;10279:3;10307:38;10339:5;10307:38;:::i;:::-;10361:70;10424:6;10419:3;10361:70;:::i;:::-;10354:77;;10440:52;10485:6;10480:3;10473:4;10466:5;10462:16;10440:52;:::i;:::-;10517:29;10539:6;10517:29;:::i;:::-;10512:3;10508:39;10501:46;;10283:270;10193:360;;;;:::o;10559:364::-;10647:3;10675:39;10708:5;10675:39;:::i;:::-;10730:71;10794:6;10789:3;10730:71;:::i;:::-;10723:78;;10810:52;10855:6;10850:3;10843:4;10836:5;10832:16;10810:52;:::i;:::-;10887:29;10909:6;10887:29;:::i;:::-;10882:3;10878:39;10871:46;;10651:272;10559:364;;;;:::o;10929:377::-;11035:3;11063:39;11096:5;11063:39;:::i;:::-;11118:89;11200:6;11195:3;11118:89;:::i;:::-;11111:96;;11216:52;11261:6;11256:3;11249:4;11242:5;11238:16;11216:52;:::i;:::-;11293:6;11288:3;11284:16;11277:23;;11039:267;10929:377;;;;:::o;11336:845::-;11439:3;11476:5;11470:12;11505:36;11531:9;11505:36;:::i;:::-;11557:89;11639:6;11634:3;11557:89;:::i;:::-;11550:96;;11677:1;11666:9;11662:17;11693:1;11688:137;;;;11839:1;11834:341;;;;11655:520;;11688:137;11772:4;11768:9;11757;11753:25;11748:3;11741:38;11808:6;11803:3;11799:16;11792:23;;11688:137;;11834:341;11901:38;11933:5;11901:38;:::i;:::-;11961:1;11975:154;11989:6;11986:1;11983:13;11975:154;;;12063:7;12057:14;12053:1;12048:3;12044:11;12037:35;12113:1;12104:7;12100:15;12089:26;;12011:4;12008:1;12004:12;11999:17;;11975:154;;;12158:6;12153:3;12149:16;12142:23;;11841:334;;11655:520;;11443:738;;11336:845;;;;:::o;12187:366::-;12329:3;12350:67;12414:2;12409:3;12350:67;:::i;:::-;12343:74;;12426:93;12515:3;12426:93;:::i;:::-;12544:2;12539:3;12535:12;12528:19;;12187:366;;;:::o;12559:::-;12701:3;12722:67;12786:2;12781:3;12722:67;:::i;:::-;12715:74;;12798:93;12887:3;12798:93;:::i;:::-;12916:2;12911:3;12907:12;12900:19;;12559:366;;;:::o;12931:::-;13073:3;13094:67;13158:2;13153:3;13094:67;:::i;:::-;13087:74;;13170:93;13259:3;13170:93;:::i;:::-;13288:2;13283:3;13279:12;13272:19;;12931:366;;;:::o;13303:::-;13445:3;13466:67;13530:2;13525:3;13466:67;:::i;:::-;13459:74;;13542:93;13631:3;13542:93;:::i;:::-;13660:2;13655:3;13651:12;13644:19;;13303:366;;;:::o;13675:::-;13817:3;13838:67;13902:2;13897:3;13838:67;:::i;:::-;13831:74;;13914:93;14003:3;13914:93;:::i;:::-;14032:2;14027:3;14023:12;14016:19;;13675:366;;;:::o;14047:::-;14189:3;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14286:93;14375:3;14286:93;:::i;:::-;14404:2;14399:3;14395:12;14388:19;;14047:366;;;:::o;14419:::-;14561:3;14582:67;14646:2;14641:3;14582:67;:::i;:::-;14575:74;;14658:93;14747:3;14658:93;:::i;:::-;14776:2;14771:3;14767:12;14760:19;;14419:366;;;:::o;14791:::-;14933:3;14954:67;15018:2;15013:3;14954:67;:::i;:::-;14947:74;;15030:93;15119:3;15030:93;:::i;:::-;15148:2;15143:3;15139:12;15132:19;;14791:366;;;:::o;15163:::-;15305:3;15326:67;15390:2;15385:3;15326:67;:::i;:::-;15319:74;;15402:93;15491:3;15402:93;:::i;:::-;15520:2;15515:3;15511:12;15504:19;;15163:366;;;:::o;15535:::-;15677:3;15698:67;15762:2;15757:3;15698:67;:::i;:::-;15691:74;;15774:93;15863:3;15774:93;:::i;:::-;15892:2;15887:3;15883:12;15876:19;;15535:366;;;:::o;15907:::-;16049:3;16070:67;16134:2;16129:3;16070:67;:::i;:::-;16063:74;;16146:93;16235:3;16146:93;:::i;:::-;16264:2;16259:3;16255:12;16248:19;;15907:366;;;:::o;16279:::-;16421:3;16442:67;16506:2;16501:3;16442:67;:::i;:::-;16435:74;;16518:93;16607:3;16518:93;:::i;:::-;16636:2;16631:3;16627:12;16620:19;;16279:366;;;:::o;16651:::-;16793:3;16814:67;16878:2;16873:3;16814:67;:::i;:::-;16807:74;;16890:93;16979:3;16890:93;:::i;:::-;17008:2;17003:3;16999:12;16992:19;;16651:366;;;:::o;17023:::-;17165:3;17186:67;17250:2;17245:3;17186:67;:::i;:::-;17179:74;;17262:93;17351:3;17262:93;:::i;:::-;17380:2;17375:3;17371:12;17364:19;;17023:366;;;:::o;17395:::-;17537:3;17558:67;17622:2;17617:3;17558:67;:::i;:::-;17551:74;;17634:93;17723:3;17634:93;:::i;:::-;17752:2;17747:3;17743:12;17736:19;;17395:366;;;:::o;17767:::-;17909:3;17930:67;17994:2;17989:3;17930:67;:::i;:::-;17923:74;;18006:93;18095:3;18006:93;:::i;:::-;18124:2;18119:3;18115:12;18108:19;;17767:366;;;:::o;18139:::-;18281:3;18302:67;18366:2;18361:3;18302:67;:::i;:::-;18295:74;;18378:93;18467:3;18378:93;:::i;:::-;18496:2;18491:3;18487:12;18480:19;;18139:366;;;:::o;18511:398::-;18670:3;18691:83;18772:1;18767:3;18691:83;:::i;:::-;18684:90;;18783:93;18872:3;18783:93;:::i;:::-;18901:1;18896:3;18892:11;18885:18;;18511:398;;;:::o;18915:366::-;19057:3;19078:67;19142:2;19137:3;19078:67;:::i;:::-;19071:74;;19154:93;19243:3;19154:93;:::i;:::-;19272:2;19267:3;19263:12;19256:19;;18915:366;;;:::o;19287:::-;19429:3;19450:67;19514:2;19509:3;19450:67;:::i;:::-;19443:74;;19526:93;19615:3;19526:93;:::i;:::-;19644:2;19639:3;19635:12;19628:19;;19287:366;;;:::o;19659:108::-;19736:24;19754:5;19736:24;:::i;:::-;19731:3;19724:37;19659:108;;:::o;19773:118::-;19860:24;19878:5;19860:24;:::i;:::-;19855:3;19848:37;19773:118;;:::o;19897:157::-;20002:45;20022:24;20040:5;20022:24;:::i;:::-;20002:45;:::i;:::-;19997:3;19990:58;19897:157;;:::o;20060:852::-;20300:3;20315:75;20386:3;20377:6;20315:75;:::i;:::-;20415:2;20410:3;20406:12;20399:19;;20428:91;20515:3;20506:6;20428:91;:::i;:::-;20544:2;20539:3;20535:12;20528:19;;20557:75;20628:3;20619:6;20557:75;:::i;:::-;20657:2;20652:3;20648:12;20641:19;;20670:75;20741:3;20732:6;20670:75;:::i;:::-;20770:2;20765:3;20761:12;20754:19;;20783:75;20854:3;20845:6;20783:75;:::i;:::-;20883:2;20878:3;20874:12;20867:19;;20903:3;20896:10;;20060:852;;;;;;;;:::o;20918:589::-;21143:3;21165:95;21256:3;21247:6;21165:95;:::i;:::-;21158:102;;21277:95;21368:3;21359:6;21277:95;:::i;:::-;21270:102;;21389:92;21477:3;21468:6;21389:92;:::i;:::-;21382:99;;21498:3;21491:10;;20918:589;;;;;;:::o;21513:379::-;21697:3;21719:147;21862:3;21719:147;:::i;:::-;21712:154;;21883:3;21876:10;;21513:379;;;:::o;21898:222::-;21991:4;22029:2;22018:9;22014:18;22006:26;;22042:71;22110:1;22099:9;22095:17;22086:6;22042:71;:::i;:::-;21898:222;;;;:::o;22126:640::-;22321:4;22359:3;22348:9;22344:19;22336:27;;22373:71;22441:1;22430:9;22426:17;22417:6;22373:71;:::i;:::-;22454:72;22522:2;22511:9;22507:18;22498:6;22454:72;:::i;:::-;22536;22604:2;22593:9;22589:18;22580:6;22536:72;:::i;:::-;22655:9;22649:4;22645:20;22640:2;22629:9;22625:18;22618:48;22683:76;22754:4;22745:6;22683:76;:::i;:::-;22675:84;;22126:640;;;;;;;:::o;22772:373::-;22915:4;22953:2;22942:9;22938:18;22930:26;;23002:9;22996:4;22992:20;22988:1;22977:9;22973:17;22966:47;23030:108;23133:4;23124:6;23030:108;:::i;:::-;23022:116;;22772:373;;;;:::o;23151:210::-;23238:4;23276:2;23265:9;23261:18;23253:26;;23289:65;23351:1;23340:9;23336:17;23327:6;23289:65;:::i;:::-;23151:210;;;;:::o;23367:313::-;23480:4;23518:2;23507:9;23503:18;23495:26;;23567:9;23561:4;23557:20;23553:1;23542:9;23538:17;23531:47;23595:78;23668:4;23659:6;23595:78;:::i;:::-;23587:86;;23367:313;;;;:::o;23686:419::-;23852:4;23890:2;23879:9;23875:18;23867:26;;23939:9;23933:4;23929:20;23925:1;23914:9;23910:17;23903:47;23967:131;24093:4;23967:131;:::i;:::-;23959:139;;23686:419;;;:::o;24111:::-;24277:4;24315:2;24304:9;24300:18;24292:26;;24364:9;24358:4;24354:20;24350:1;24339:9;24335:17;24328:47;24392:131;24518:4;24392:131;:::i;:::-;24384:139;;24111:419;;;:::o;24536:::-;24702:4;24740:2;24729:9;24725:18;24717:26;;24789:9;24783:4;24779:20;24775:1;24764:9;24760:17;24753:47;24817:131;24943:4;24817:131;:::i;:::-;24809:139;;24536:419;;;:::o;24961:::-;25127:4;25165:2;25154:9;25150:18;25142:26;;25214:9;25208:4;25204:20;25200:1;25189:9;25185:17;25178:47;25242:131;25368:4;25242:131;:::i;:::-;25234:139;;24961:419;;;:::o;25386:::-;25552:4;25590:2;25579:9;25575:18;25567:26;;25639:9;25633:4;25629:20;25625:1;25614:9;25610:17;25603:47;25667:131;25793:4;25667:131;:::i;:::-;25659:139;;25386:419;;;:::o;25811:::-;25977:4;26015:2;26004:9;26000:18;25992:26;;26064:9;26058:4;26054:20;26050:1;26039:9;26035:17;26028:47;26092:131;26218:4;26092:131;:::i;:::-;26084:139;;25811:419;;;:::o;26236:::-;26402:4;26440:2;26429:9;26425:18;26417:26;;26489:9;26483:4;26479:20;26475:1;26464:9;26460:17;26453:47;26517:131;26643:4;26517:131;:::i;:::-;26509:139;;26236:419;;;:::o;26661:::-;26827:4;26865:2;26854:9;26850:18;26842:26;;26914:9;26908:4;26904:20;26900:1;26889:9;26885:17;26878:47;26942:131;27068:4;26942:131;:::i;:::-;26934:139;;26661:419;;;:::o;27086:::-;27252:4;27290:2;27279:9;27275:18;27267:26;;27339:9;27333:4;27329:20;27325:1;27314:9;27310:17;27303:47;27367:131;27493:4;27367:131;:::i;:::-;27359:139;;27086:419;;;:::o;27511:::-;27677:4;27715:2;27704:9;27700:18;27692:26;;27764:9;27758:4;27754:20;27750:1;27739:9;27735:17;27728:47;27792:131;27918:4;27792:131;:::i;:::-;27784:139;;27511:419;;;:::o;27936:::-;28102:4;28140:2;28129:9;28125:18;28117:26;;28189:9;28183:4;28179:20;28175:1;28164:9;28160:17;28153:47;28217:131;28343:4;28217:131;:::i;:::-;28209:139;;27936:419;;;:::o;28361:::-;28527:4;28565:2;28554:9;28550:18;28542:26;;28614:9;28608:4;28604:20;28600:1;28589:9;28585:17;28578:47;28642:131;28768:4;28642:131;:::i;:::-;28634:139;;28361:419;;;:::o;28786:::-;28952:4;28990:2;28979:9;28975:18;28967:26;;29039:9;29033:4;29029:20;29025:1;29014:9;29010:17;29003:47;29067:131;29193:4;29067:131;:::i;:::-;29059:139;;28786:419;;;:::o;29211:::-;29377:4;29415:2;29404:9;29400:18;29392:26;;29464:9;29458:4;29454:20;29450:1;29439:9;29435:17;29428:47;29492:131;29618:4;29492:131;:::i;:::-;29484:139;;29211:419;;;:::o;29636:::-;29802:4;29840:2;29829:9;29825:18;29817:26;;29889:9;29883:4;29879:20;29875:1;29864:9;29860:17;29853:47;29917:131;30043:4;29917:131;:::i;:::-;29909:139;;29636:419;;;:::o;30061:::-;30227:4;30265:2;30254:9;30250:18;30242:26;;30314:9;30308:4;30304:20;30300:1;30289:9;30285:17;30278:47;30342:131;30468:4;30342:131;:::i;:::-;30334:139;;30061:419;;;:::o;30486:::-;30652:4;30690:2;30679:9;30675:18;30667:26;;30739:9;30733:4;30729:20;30725:1;30714:9;30710:17;30703:47;30767:131;30893:4;30767:131;:::i;:::-;30759:139;;30486:419;;;:::o;30911:::-;31077:4;31115:2;31104:9;31100:18;31092:26;;31164:9;31158:4;31154:20;31150:1;31139:9;31135:17;31128:47;31192:131;31318:4;31192:131;:::i;:::-;31184:139;;30911:419;;;:::o;31336:::-;31502:4;31540:2;31529:9;31525:18;31517:26;;31589:9;31583:4;31579:20;31575:1;31564:9;31560:17;31553:47;31617:131;31743:4;31617:131;:::i;:::-;31609:139;;31336:419;;;:::o;31761:222::-;31854:4;31892:2;31881:9;31877:18;31869:26;;31905:71;31973:1;31962:9;31958:17;31949:6;31905:71;:::i;:::-;31761:222;;;;:::o;31989:129::-;32023:6;32050:20;;:::i;:::-;32040:30;;32079:33;32107:4;32099:6;32079:33;:::i;:::-;31989:129;;;:::o;32124:75::-;32157:6;32190:2;32184:9;32174:19;;32124:75;:::o;32205:307::-;32266:4;32356:18;32348:6;32345:30;32342:56;;;32378:18;;:::i;:::-;32342:56;32416:29;32438:6;32416:29;:::i;:::-;32408:37;;32500:4;32494;32490:15;32482:23;;32205:307;;;:::o;32518:308::-;32580:4;32670:18;32662:6;32659:30;32656:56;;;32692:18;;:::i;:::-;32656:56;32730:29;32752:6;32730:29;:::i;:::-;32722:37;;32814:4;32808;32804:15;32796:23;;32518:308;;;:::o;32832:132::-;32899:4;32922:3;32914:11;;32952:4;32947:3;32943:14;32935:22;;32832:132;;;:::o;32970:141::-;33019:4;33042:3;33034:11;;33065:3;33062:1;33055:14;33099:4;33096:1;33086:18;33078:26;;32970:141;;;:::o;33117:114::-;33184:6;33218:5;33212:12;33202:22;;33117:114;;;:::o;33237:98::-;33288:6;33322:5;33316:12;33306:22;;33237:98;;;:::o;33341:99::-;33393:6;33427:5;33421:12;33411:22;;33341:99;;;:::o;33446:113::-;33516:4;33548;33543:3;33539:14;33531:22;;33446:113;;;:::o;33565:184::-;33664:11;33698:6;33693:3;33686:19;33738:4;33733:3;33729:14;33714:29;;33565:184;;;;:::o;33755:168::-;33838:11;33872:6;33867:3;33860:19;33912:4;33907:3;33903:14;33888:29;;33755:168;;;;:::o;33929:147::-;34030:11;34067:3;34052:18;;33929:147;;;;:::o;34082:169::-;34166:11;34200:6;34195:3;34188:19;34240:4;34235:3;34231:14;34216:29;;34082:169;;;;:::o;34257:148::-;34359:11;34396:3;34381:18;;34257:148;;;;:::o;34411:305::-;34451:3;34470:20;34488:1;34470:20;:::i;:::-;34465:25;;34504:20;34522:1;34504:20;:::i;:::-;34499:25;;34658:1;34590:66;34586:74;34583:1;34580:81;34577:107;;;34664:18;;:::i;:::-;34577:107;34708:1;34705;34701:9;34694:16;;34411:305;;;;:::o;34722:185::-;34762:1;34779:20;34797:1;34779:20;:::i;:::-;34774:25;;34813:20;34831:1;34813:20;:::i;:::-;34808:25;;34852:1;34842:35;;34857:18;;:::i;:::-;34842:35;34899:1;34896;34892:9;34887:14;;34722:185;;;;:::o;34913:348::-;34953:7;34976:20;34994:1;34976:20;:::i;:::-;34971:25;;35010:20;35028:1;35010:20;:::i;:::-;35005:25;;35198:1;35130:66;35126:74;35123:1;35120:81;35115:1;35108:9;35101:17;35097:105;35094:131;;;35205:18;;:::i;:::-;35094:131;35253:1;35250;35246:9;35235:20;;34913:348;;;;:::o;35267:191::-;35307:4;35327:20;35345:1;35327:20;:::i;:::-;35322:25;;35361:20;35379:1;35361:20;:::i;:::-;35356:25;;35400:1;35397;35394:8;35391:34;;;35405:18;;:::i;:::-;35391:34;35450:1;35447;35443:9;35435:17;;35267:191;;;;:::o;35464:96::-;35501:7;35530:24;35548:5;35530:24;:::i;:::-;35519:35;;35464:96;;;:::o;35566:104::-;35611:7;35640:24;35658:5;35640:24;:::i;:::-;35629:35;;35566:104;;;:::o;35676:90::-;35710:7;35753:5;35746:13;35739:21;35728:32;;35676:90;;;:::o;35772:149::-;35808:7;35848:66;35841:5;35837:78;35826:89;;35772:149;;;:::o;35927:126::-;35964:7;36004:42;35997:5;35993:54;35982:65;;35927:126;;;:::o;36059:77::-;36096:7;36125:5;36114:16;;36059:77;;;:::o;36142:154::-;36226:6;36221:3;36216;36203:30;36288:1;36279:6;36274:3;36270:16;36263:27;36142:154;;;:::o;36302:307::-;36370:1;36380:113;36394:6;36391:1;36388:13;36380:113;;;36479:1;36474:3;36470:11;36464:18;36460:1;36455:3;36451:11;36444:39;36416:2;36413:1;36409:10;36404:15;;36380:113;;;36511:6;36508:1;36505:13;36502:101;;;36591:1;36582:6;36577:3;36573:16;36566:27;36502:101;36351:258;36302:307;;;:::o;36615:320::-;36659:6;36696:1;36690:4;36686:12;36676:22;;36743:1;36737:4;36733:12;36764:18;36754:81;;36820:4;36812:6;36808:17;36798:27;;36754:81;36882:2;36874:6;36871:14;36851:18;36848:38;36845:84;;;36901:18;;:::i;:::-;36845:84;36666:269;36615:320;;;:::o;36941:281::-;37024:27;37046:4;37024:27;:::i;:::-;37016:6;37012:40;37154:6;37142:10;37139:22;37118:18;37106:10;37103:34;37100:62;37097:88;;;37165:18;;:::i;:::-;37097:88;37205:10;37201:2;37194:22;36984:238;36941:281;;:::o;37228:233::-;37267:3;37290:24;37308:5;37290:24;:::i;:::-;37281:33;;37336:66;37329:5;37326:77;37323:103;;;37406:18;;:::i;:::-;37323:103;37453:1;37446:5;37442:13;37435:20;;37228:233;;;:::o;37467:100::-;37506:7;37535:26;37555:5;37535:26;:::i;:::-;37524:37;;37467:100;;;:::o;37573:108::-;37620:7;37649:26;37669:5;37649:26;:::i;:::-;37638:37;;37573:108;;;:::o;37687:94::-;37726:7;37755:20;37769:5;37755:20;:::i;:::-;37744:31;;37687:94;;;:::o;37787:79::-;37826:7;37855:5;37844:16;;37787:79;;;:::o;37872:176::-;37904:1;37921:20;37939:1;37921:20;:::i;:::-;37916:25;;37955:20;37973:1;37955:20;:::i;:::-;37950:25;;37994:1;37984:35;;37999:18;;:::i;:::-;37984:35;38040:1;38037;38033:9;38028:14;;37872:176;;;;:::o;38054:180::-;38102:77;38099:1;38092:88;38199:4;38196:1;38189:15;38223:4;38220:1;38213:15;38240:180;38288:77;38285:1;38278:88;38385:4;38382:1;38375:15;38409:4;38406:1;38399:15;38426:180;38474:77;38471:1;38464:88;38571:4;38568:1;38561:15;38595:4;38592:1;38585:15;38612:180;38660:77;38657:1;38650:88;38757:4;38754:1;38747:15;38781:4;38778:1;38771:15;38798:180;38846:77;38843:1;38836:88;38943:4;38940:1;38933:15;38967:4;38964:1;38957:15;38984:180;39032:77;39029:1;39022:88;39129:4;39126:1;39119:15;39153:4;39150:1;39143:15;39170:117;39279:1;39276;39269:12;39293:117;39402:1;39399;39392:12;39416:117;39525:1;39522;39515:12;39539:117;39648:1;39645;39638:12;39662:117;39771:1;39768;39761:12;39785:117;39894:1;39891;39884:12;39908:102;39949:6;40000:2;39996:7;39991:2;39984:5;39980:14;39976:28;39966:38;;39908:102;;;:::o;40016:94::-;40049:8;40097:5;40093:2;40089:14;40068:35;;40016:94;;;:::o;40116:230::-;40256:34;40252:1;40244:6;40240:14;40233:58;40325:13;40320:2;40312:6;40308:15;40301:38;40116:230;:::o;40352:237::-;40492:34;40488:1;40480:6;40476:14;40469:58;40561:20;40556:2;40548:6;40544:15;40537:45;40352:237;:::o;40595:225::-;40735:34;40731:1;40723:6;40719:14;40712:58;40804:8;40799:2;40791:6;40787:15;40780:33;40595:225;:::o;40826:178::-;40966:30;40962:1;40954:6;40950:14;40943:54;40826:178;:::o;41010:223::-;41150:34;41146:1;41138:6;41134:14;41127:58;41219:6;41214:2;41206:6;41202:15;41195:31;41010:223;:::o;41239:175::-;41379:27;41375:1;41367:6;41363:14;41356:51;41239:175;:::o;41420:174::-;41560:26;41556:1;41548:6;41544:14;41537:50;41420:174;:::o;41600:231::-;41740:34;41736:1;41728:6;41724:14;41717:58;41809:14;41804:2;41796:6;41792:15;41785:39;41600:231;:::o;41837:243::-;41977:34;41973:1;41965:6;41961:14;41954:58;42046:26;42041:2;42033:6;42029:15;42022:51;41837:243;:::o;42086:229::-;42226:34;42222:1;42214:6;42210:14;42203:58;42295:12;42290:2;42282:6;42278:15;42271:37;42086:229;:::o;42321:228::-;42461:34;42457:1;42449:6;42445:14;42438:58;42530:11;42525:2;42517:6;42513:15;42506:36;42321:228;:::o;42555:182::-;42695:34;42691:1;42683:6;42679:14;42672:58;42555:182;:::o;42743:231::-;42883:34;42879:1;42871:6;42867:14;42860:58;42952:14;42947:2;42939:6;42935:15;42928:39;42743:231;:::o;42980:182::-;43120:34;43116:1;43108:6;43104:14;43097:58;42980:182;:::o;43168:228::-;43308:34;43304:1;43296:6;43292:14;43285:58;43377:11;43372:2;43364:6;43360:15;43353:36;43168:228;:::o;43402:234::-;43542:34;43538:1;43530:6;43526:14;43519:58;43611:17;43606:2;43598:6;43594:15;43587:42;43402:234;:::o;43642:220::-;43782:34;43778:1;43770:6;43766:14;43759:58;43851:3;43846:2;43838:6;43834:15;43827:28;43642:220;:::o;43868:114::-;;:::o;43988:236::-;44128:34;44124:1;44116:6;44112:14;44105:58;44197:19;44192:2;44184:6;44180:15;44173:44;43988:236;:::o;44230:231::-;44370:34;44366:1;44358:6;44354:14;44347:58;44439:14;44434:2;44426:6;44422:15;44415:39;44230:231;:::o;44467:122::-;44540:24;44558:5;44540:24;:::i;:::-;44533:5;44530:35;44520:63;;44579:1;44576;44569:12;44520:63;44467:122;:::o;44595:116::-;44665:21;44680:5;44665:21;:::i;:::-;44658:5;44655:32;44645:60;;44701:1;44698;44691:12;44645:60;44595:116;:::o;44717:120::-;44789:23;44806:5;44789:23;:::i;:::-;44782:5;44779:34;44769:62;;44827:1;44824;44817:12;44769:62;44717:120;:::o;44843:122::-;44916:24;44934:5;44916:24;:::i;:::-;44909:5;44906:35;44896:63;;44955:1;44952;44945:12;44896:63;44843:122;:::o

Swarm Source

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