ETH Price: $2,385.17 (-0.75%)

Token

Dropicall (DRCA)
 

Overview

Max Total Supply

593 DRCA

Holders

244

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
callil.eth
Balance
5 DRCA
0x4defa30195094963cfac7285d8d6e6e523c7f90d
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:
Dropicall

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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



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

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



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

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




//Copyleft (ɔ) All Rights Reversed




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





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

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

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

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

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

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

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

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



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




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




// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)





// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)



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


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





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


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



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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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





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


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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



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



struct Shareholder {
	address addr;
	uint256 percent;
}
contract Dropicall is ERC721Enumerable, Ownable {

	mapping(address => uint256) private share_pool;
	address[] private share_addr; // [i]

	// [addr][id] (usually i,j)
	// Contains "unrolled" share amounts to distribute.
	uint256[][] private share_price_matrix;
	// [j]
	// Pairs of [price,count]
	uint256[2][] private prices_n;

	uint256 public immutable item_count;

	bool private sale_data_ok = false;

	uint256 private immutable max_supply;
	function get_mint_price(uint j) public view returns(uint256) {
		require(j < prices_n.length);
		return prices_n[j][0] * prices_n[j][1];
	}
	function get_mint_count(uint j) public view returns(uint256) {
		require(j < prices_n.length);
		return prices_n[j][1];
	}
	function pay_and_mint(uint j) private {
		require( j < prices_n.length, "Invalid mint option." );
		require(msg.value == get_mint_price(j), "Incorrect value paid.");
		require(totalSupply() + prices_n[j][1] <= max_supply, "Not enough left.");
		distribute_share(j);
		uint ts = totalSupply() + 1;
		for (uint i = 0; i < prices_n[j][1]; i++) {
			_safeMint(msg.sender, ts + i);
		}
	}
	function distribute_share(uint256 j) private {
		for ( uint i = 0; i < share_addr.length; i++ ) {
			share_pool[share_addr[i]] += share_price_matrix[i][j];
		}
	}
	function init_sale_data(Shareholder[] memory shareholders, uint256[2][] memory amounts_prices ) private {
		require(!sale_data_ok, "Already initialized");
		require(shareholders.length > 0, "Must provide at least one shareholder.");
		require(amounts_prices.length > 0, "Must provide prices.");
		prices_n = amounts_prices;
		uint256 p = 0;
		for ( uint256 i = 0; i < shareholders.length; i++ ) {
			require( shareholders[i].percent > 0 && shareholders[i].percent <= 100, "Percentage out of range." );
			p += shareholders[i].percent;
			share_addr.push(shareholders[i].addr);
			share_price_matrix.push();
			for ( uint256 j = 0; j < amounts_prices.length; j++ ) {
				require( amounts_prices[j][0] % 100 == 0, "Prices must each be a multiple of 100 Wei." );
				uint256 v = (amounts_prices[j][0] / 100) * shareholders[i].percent;
				share_price_matrix[i].push(v * amounts_prices[j][1]);
			}
		}
		require( p == 100, "Combined shares do not add up to 100 percent." );
		sale_data_ok = true;
		/* Deactivate for less constructor gas * /
		for ( uint256 j = 0; j < amounts_prices.length; j++ ) {
			uint256 c = 0;
			for ( uint256 i = 0; i < shareholders.length; i++ ) {
				c += share_price_matrix[i][j];
			}
			assert( c == amounts_prices[j][0] * amounts_prices[j][1] ); // Unrolled prices do not add up to the original.
		}
		/ * */
	}
	function withdraw_share() public {
		require(share_pool[msg.sender] > 0, "No shares for this address to withdraw." );
		address payable dest = payable(msg.sender);
		uint256 bounty = share_pool[msg.sender];
		share_pool[msg.sender] = 0;
		dest.transfer(bounty);
	}

	///////////////

	string private __baseURI;
	function _baseURI() internal view virtual override returns (string memory) {
		return __baseURI;
	}
	function _setBaseURI(string memory baseURI_) internal virtual {
		__baseURI = baseURI_;
	}
	function setBaseURI(string memory baseURI) public onlyOwner {
		_setBaseURI(baseURI);
	}

	string private __contractURI;
	function _contractURI() internal view virtual returns (string memory) {
		return __contractURI;
	}
	function _setContractURI(string memory contractURI_) internal virtual {
		__contractURI = contractURI_;
	}
	function setContractURI(string memory contractURI) public onlyOwner {
		_setContractURI(contractURI);
	}
	///////////////

	bool premint_started;
	bool mint_started;

	mapping(address => bool) public whitelist;

	function mint_main(uint256 option_id) public payable {
		require( mint_started || ( premint_started && whitelist[msg.sender] ), "You may not mint at this time." );
		pay_and_mint( option_id );
	}

	function start_premint() public onlyOwner {
		premint_started = true;
	}
	function start_mint() public onlyOwner {
		require( premint_started, "Starting mint without premint first, did you press the wrong button?" );
		mint_started = true;
	}

	constructor() ERC721(
		"Dropicall",
		"DRCA"
	) {
		Shareholder[] memory sh = new Shareholder[](2);
		sh[0] = Shareholder( { addr: 0xB520F068a908A1782a543aAcC3847ADB77A04778, percent: 10 } ); // remco
		sh[1] = Shareholder( { addr: 0x4dDAc376f28BE60e1F7642A4D302C6Cf6CAe1D92, percent: 90 } ); // mezza

		// Why? So that you can query this (it's public)
		item_count = 3;
		uint256[2][] memory price_table = new uint256[2][](item_count);		
		price_table[0] = [ uint256(8e7 gwei), 1 ];
		price_table[1] = [ uint256(7e7 gwei), 5 ];
		price_table[2] = [ uint256(6e7 gwei), 10 ];

		max_supply = 3333;

		init_sale_data( sh, price_table );

		// _setContractURI( "this is a very long string about mice. squeak are mice making a home in your code??" );
		// _setBaseURI( "this is a very long string about mice. actually this is for more conservative gas estimates.." );

		whitelist[0x2cc2149D905fe27841055CC31700641e0E6C944D] = true;
		whitelist[0x9508d995ca98DAc918D0a4F18Acd67BC545C8b92] = true;
		whitelist[0x1077011F38c120973238eF266Dd45edad4a78E99] = true;
		whitelist[0x32E094eeD5995331a45F2eb8727Da81156845Ff0] = true;
		whitelist[0x88923378021BeA85f9b09Ce571a309E12C7D2262] = true;
		whitelist[0x87CBd58ba04C8a0D26A0242d5Ac06f30269a96c5] = true;
		whitelist[0xf5D4E11f6392a138cDaD459367C45Fe8B90dB704] = true;
		whitelist[0xF9f5a72142bd0bdb9A6053191104c010d912c1BD] = true;
		whitelist[0x2ec970270130EdbA7D9B1f0f7cE7DFb3d1f6Cf6a] = true;
		whitelist[0x32918DBB0Dad6C0E92eBc72F024A61FB8507277E] = true;
		whitelist[0x8694EC6954a576D42e5a95488ae2C175A959f04c] = true;
		whitelist[0x98c1d8A5cd2e6FA559ba6ae0680B388b799AC231] = true;
		whitelist[0xFB52e265F03e1783e222f30106418a4a1487D0e7] = true;
		whitelist[0x1F38EbCFfb0Be993b981225a917aAA8a6d6A4E52] = true;
		whitelist[0xA7b2A23fF93f04D9D04a645Fc90450845106f19c] = true;
		whitelist[0x104B2edadfe9F12E99C422E6823D1eEa40343564] = true;
		whitelist[0xF7C53Fd0599632cAa643C8bC7b195ffE041F9134] = true;
		whitelist[0x32Cc2EC897F21a77A704e9a7313af6a640c47BB5] = true;
		whitelist[0xdDe74f034163192dd2170BB56B9CAc2d45Ce0a36] = true;
		whitelist[0xDC89B615F0e36261c02b0B7d92bBcBD31C3C6269] = true;
		whitelist[0x984b18B1823Fef04A4Ca7cF1e8A0eF5359fA522F] = true;
		whitelist[0xd42d08ca1A876ac9BD2bFe631eE7D997cAE39229] = true;
		whitelist[0x56C82d09b490F63531656E25838536C97e10610f] = true;
		whitelist[0x0503bF05c49F96faaC2B0f5fD394672eD4603C52] = true;
		whitelist[0x768058a4b0054dc1cb025889B2eFD9C2051d2Bf6] = true;
		whitelist[0x76fC54b4eC08917fc4a7FC6a72d0BaAff9861ad7] = true;
		whitelist[0xF43E468e6E39F490E7198cDe92c6995e843ef4c5] = true;
		whitelist[0xD31D14f6B5AeFDaB5fE16DeA29fA46F6B8c15bF2] = true;
		whitelist[0xB1Bb9A663765255542221B8C2106660c84E0B7ce] = true;
		whitelist[0xF7C53Fd0599632cAa643C8bC7b195ffE041F9134] = true;
		whitelist[0x8694EC6954a576D42e5a95488ae2C175A959f04c] = true;
		whitelist[0x8d586f380846dCA988cB3B345231AF02F989C411] = true;
		whitelist[0xe4A24b53C97A25A21fe0Ee6a1a1F652A5dAFe88f] = true;
		whitelist[0x0EDb2533655876b1656243fd6ee9B16401281df8] = true;
		whitelist[0xe958a38D6819bBa0501020e37e1F7C0e54584FAA] = true;
		whitelist[0x008BA4907924f86C62fBb31Fe4A0dFE91c0e6acc] = true;
		whitelist[0xe81FC42336c9314A9Be1EDB3F50eA9e275C93df3] = true;
		whitelist[0xB7E64cb5B81cc275024B056DBDb8eB4afd84b4EA] = true;
		whitelist[0x2A1Ca52f11A7F0aA923A6739d49c69004C7246e1] = true;
		whitelist[0x1AC76Ec4c02c5488E8DcB892272e9E284d5Fe295] = true;
		whitelist[0xE0E7745713Cca16eE73e231428921B424f419b10] = true;
		whitelist[0x001Bf5f51453E74aa44dE9eE47F9deB6E896Ca29] = true;
		whitelist[0x2227de445Dbfd90712C48bCD74D492CccA1Cb242] = true;
		whitelist[0x767A60F295AEDd958932088F9Cd6a4951D8739b6] = true;
		whitelist[0x10455d2469b5235F95C2512026307bD77b1511d2] = true;
		whitelist[0x00000000000Cd56832cE5dfBcBFf02e7eC639BC9] = true;
		whitelist[0xcb9F176f3C90837a727E4678e29515cB2D557F18] = true;
		whitelist[0x5ea7e5e100aE141d1f0Fa98852e335CBa9A9f374] = true;
		whitelist[0xb6E34A8A93031a24C264Be59D0BaC00bcaeF9051] = true;
		whitelist[0x8149DC18D39FDBa137E43C871e7801E7CF566D41] = true;
		whitelist[0xda1D4Bd894709DbD9a140c05bdaedd19afE7fb00] = true;
		whitelist[0x4EfeceA2A42E1E73737e4dda7234e999A84Ca60B] = true;
		whitelist[0x49AAD19d4f36EB41dDF3d54151D5ba0c0531A888] = true;
		whitelist[0xdAE4012B41657B7118324Fe13aF91eEc0EC95acD] = true;
		whitelist[0xAf981AFA2f5fd50ffEDBB5728FA0fFd2a99b93CE] = true;
		whitelist[0x25a61B9CB2D749b062fA87b792ca60faEdDdF851] = true;
		whitelist[0x10172b1A8fD270C2F4F45561617747ad2a35B31E] = true;
		whitelist[0x885dA0E56F2B1aEd633f9A3847D3b057832a5463] = true;
		whitelist[0x9294bb652f4B1392Ff8c266Cc75BA45ba312c124] = true;
		whitelist[0xCbE7396ea129242438C565Ec5dCB8A37f187E639] = true;
		whitelist[0x5C45b39E13c4129dF392072045747DDbcedA1eB9] = true;
		whitelist[0x84a6C06CCEfE63C5C8df52dFff3101a480aD3760] = true;
		whitelist[0x2bFaC2D8D79D13D45862EA64ce0f25C5D34e9cA8] = true;
		whitelist[0xC41CfcEc2b5f65A2c6bF70869cbC116Aa0ec0Ada] = true;
		whitelist[0x2378598aEf5768d12df9ab72dee9AF37a2741F5A] = true;
		whitelist[0x8205F2AB276C78d06a8F9bE9b1C97A776C7dD805] = true;
		whitelist[0xe5A7a206E9a8769f90ca792EbB68E9268231F717] = true;
		whitelist[0x1258436bc2Ce96f60e0032b07DA166Ac588f1a00] = true;
		whitelist[0x4218bA2E10E56aAC410205A7576d8FBc3DD54420] = true;
		whitelist[0xc2086C494819b15EF371585e45682C50CbC20aF5] = true;
		whitelist[0xce0E1766269e63a87FB1C1e5C745B1db32b5713d] = true;
		whitelist[0xDc610C4766450E3184AfC312ef2224702299219b] = true;
		whitelist[0x3bfd26bCF88E595F65e1583AfbdFcd6CF87EA169] = true;
		whitelist[0xdc52C2E7FC45B30bd5636f8D45BBEBAE4CE87f46] = true;
		whitelist[0x264B6B1D31F95c01876C17a8b30D3Ce68dF1371C] = true;
		whitelist[0x2705045Ef16d185a84AEF570cdddE535A0A95d1f] = true;
		whitelist[0x9Be8cbE548110b4F09D932cdfbaC082c9dD98899] = true;
		whitelist[0xbb5D3Fc1E82dCAD48d07ADac292a08d765FD1eFf] = true;
		whitelist[0x419fD53f8c5c957Ae2c52A7df6904e986E59db62] = true;
		whitelist[0x284643Cea4d1Aa85596C69195557967408Fc18F7] = true;
		whitelist[0x91cE2EaAa0ae31B8b109E4a2038Fa7aC3e83034f] = true;
		whitelist[0x38b3bb561700fc263240c4bCfA6F9a5A10167556] = true;
		whitelist[0x4FB54f1F8c545cf31619978E97A3F8396894C88f] = true;
		whitelist[0xc6F236891c3099ce4b210793BB1b3030fFfBaA67] = true;
		whitelist[0x6232d7a6085D0Ab8F885292078eEb723064a376B] = true;
		whitelist[0x0f0924A3a5111e7987A23a49Af826D2Ba431342e] = true;
		whitelist[0xC273ee810842f9fFc9Ce781e4AeD4533A4bdd6De] = true;
		whitelist[0xa58112df57A29a5DFd7a22164a38216b56f39960] = true;
		whitelist[0x33d704D1347bBf81C05104bC41beE19e83C02205] = true;
		whitelist[0x389fb1a81410D20cB6119c134A727E21ebBFEA59] = true;
		whitelist[0xA381D21bc2bc9e349dc4332854788d1036BBD107] = true;
		whitelist[0x89032c0cFF4abb9bc490dF104Ec89eff27314909] = true;
		whitelist[0xdb29C08D0A11D376A54EAABbaa89EB7853e32da5] = true;
		whitelist[0x32E094eeD5995331a45F2eb8727Da81156845Ff0] = true;
		whitelist[0xF896E426615E44a2610F4C3D5343B63b557E11e2] = true;
		whitelist[0xa4939a893C7AEfE9629d7525BE3Db799a9E1045B] = true;
		whitelist[0x36ABc45216Ee411581DA092B9caa98Ac460afc45] = true;
		whitelist[0x657A38e6994CB578351376dCDb077330D00665d6] = true;
		whitelist[0x459B3154699F7e49F7FBcf9591dEfa0a1f1177fc] = true;
		whitelist[0x9b7657D46ea863bfDD0c48b4C41794D47e95E6De] = true;
		whitelist[0xcE20b5aF05868d1d39a65FA47ec285067145686a] = true;
		whitelist[0x40b1ED5efC7aE8a8B50F34963bA89984DcB0529d] = true;
		whitelist[0xB35248FeEB246b850Fac690a1BEaF5130dC71894] = true;
		whitelist[0xad9df182acaDfAd985E854FB93F52F62C0Af6db4] = true;
		whitelist[0x84572C31ACdd30c03982e27b809D30b1eFbCD8f2] = true;
		whitelist[0x018881270dD7738aE1D74dCBc48Ed70A0B47E5A5] = true;
		whitelist[0x8Bfd22d7fa34839447af3B4ED35B847DE5882dC5] = true;
		whitelist[0x9f3BcE237ea107ffad3aa7852F8Dd847e6b82A5D] = true;
		whitelist[0x354d4D759c49094f60D537bfD7177c05b70c20cC] = true;
		whitelist[0xf89C94f43B36719046b55E2AE60BacBfc0dB1C6a] = true;
		whitelist[0xA1830E8d9F019FEB448478a171Bb37Cc6C4c0482] = true;
		whitelist[0x40f465F1ba4c2Aba91c0C896cb92bbe4c7e545DF] = true;
		whitelist[0x57a879266C02bD29d11C956156E9a524de4483D7] = true;
		whitelist[0xFaED43c98a40711e9521859f9ad80a90B6a84968] = true;
		whitelist[0xAB723364C7Acb9b26029f002f942d2C8ed789a3B] = true;
		whitelist[0x3E09005C7B9FC14B4f035260aA4a38B44566dd62] = true;
		whitelist[0x1F4FD7F98275D44A48E1DDFB184aa125dC8Aa9AE] = true;
		whitelist[0x5ad3b640c760CA369321682A0FfBf866C07b2b5a] = true;
		whitelist[0x0B0b8696f89Ba073FC8515FF649618A4fb361885] = true;
		whitelist[0x8CFBD1994cF924d80ec7891CafcEc51CcE4f999b] = true;
		whitelist[0xab88C3E77D9CEB047Face254612653Ee35C9ff0e] = true;
		whitelist[0xF8eF2dD0Bd0D7cD6f60DDa52ab01da6cD2AbE7B1] = true;
		whitelist[0x7417E3bCdE8726908895152A8F3925a756b1894D] = true;
		whitelist[0x0FdbfDc79ad0e2e3F76cC8b7Be6e8bE901E57552] = true;
		whitelist[0xA23FcB4645cc618549Da1b61b8564429C2C32Ff9] = true;
		whitelist[0xCAc5EE14B2155bDf3c7CACAF091c9b481fB47bD2] = true;
		whitelist[0xF405f10feDE59e1D7350c3A3fF8488C33a1f07fa] = true;
		whitelist[0x6ae615835aa020fF1239DEC4DD7A3A5e8b975649] = true;
		whitelist[0x730Ca048cab18D4F09F2A295936325adDfeE7BcF] = true;
		whitelist[0xC9582D09acDec05aa8Fee7fdebb5F10B7E9d039f] = true;
		whitelist[0xE16491e0c975E0394D30e356dE7495Ad8550eAfa] = true;
		whitelist[0x5bd3bf853B9970D93Da64d7628919997C1a06a6c] = true;
		whitelist[0x98CaC89Bba31cE2B18f8CfdF34dAEdF29F383B2E] = true;
		whitelist[0x04ceFD6166D0Ee8f8112Cae7237Bb9207a0ef253] = true;
		whitelist[0x3F38FD15b1Ac453410d8D55e0Ec6696E70BE93a1] = true;
		whitelist[0xE9fAD6906bF563732012Ebf6c30BD47E5E96EbC8] = true;
		whitelist[0x4F64C6b8333F74890b0ba0AF4d480d8ecce01e17] = true;
		whitelist[0xa8A2Aa7200B360e9B76fAFe60950a587449a0ed4] = true;
		whitelist[0x08295076180ee8A6De5a4221Ab5bcD3f7A61200B] = true;
		whitelist[0xEf6c1456A2467c9016a443812D0c182706FDF722] = true;
		whitelist[0x11A6cdf624b0e32B377c6097606edFAB3f0f326E] = true;
		whitelist[0x003dfd836b5AecC95F0E42F1E1F21879C31E8F46] = true;
		whitelist[0xCcb147f3ef9Cb2e8E616D5bF55C1147d0Be6b371] = true;
		whitelist[0x7Ed716a3c0a634fa033CAD0e53BC5fDBc838e23B] = true;
		whitelist[0xeAc5f9b3cd48123a69FE69CE93A7F58100A56552] = true;
		whitelist[0xF9567F184dE6B1fcF617850dE093F78f6c78b0f6] = true;
		whitelist[0x788F93C6165B1Ae7A1297527d0037160A32C1252] = true;
		whitelist[0xd35fC346e15BA5b446917C9fD23A9471d6144701] = true;
		whitelist[0xF3D9281fa183B74F32B96E1c5244596045f4edE8] = true;
		whitelist[0x7302bC5b47F5588174A148C90747a88CB528A8c1] = true;
		whitelist[0xAca3b4110403F3c4dacb35A7B3Aa0a84eFb6A3e9] = true;
		whitelist[0x8F8B4759dC93CA55bD6997DF719F20F581F10F5C] = true;
		whitelist[0x69469f819AbdF47f0164b7fe905993EBDF09bbE8] = true;
		whitelist[0xb9ab9578a34a05c86124c399735fdE44dEc80E7F] = true;
		whitelist[0x327F66c77330AD01CBe89DE9523811CBA0c33fE6] = true;
		whitelist[0x0EC666C5901ba8829138716176Fb44CF214939ed] = true;
		whitelist[0xD68faC38f2AA31c499DF26e3C432Efe3bB019164] = true;
		whitelist[0x3BA3D09f70CED571FE3F629Adc234e200ef5EA46] = true;
		whitelist[0x08cF1208e638a5A3623be58d600e35c6199baa9C] = true;
		whitelist[0x59e147Ec5BB417745356A1e2d9433F3A07D74419] = true;
		whitelist[0x87933405d041141e3564cDD7a2D4b62411E76e89] = true;
		whitelist[0x40CbFEd4ce554C018306207A597586603428152d] = true;
		whitelist[0xb761b98E4A80A3b2d899Bd5cD7E04288952F614a] = true;
		whitelist[0x06687d0C06053124BF67B83a71dB1Dfb50A88527] = true;
		whitelist[0xe425FbdDA869433Db7a123F55d1Aa476947e8040] = true;
		whitelist[0x439EEc211024b3389D38972003cB9D845cF420ce] = true;
		whitelist[0xb540b333FD631F8c4bb389c6E81A99dd50C811C4] = true;
		whitelist[0xfE505FDC65030dD93F44c5bAE1B0F36a55b50291] = true;
		whitelist[0x1ad0b2a3760E4148479bC882c4f148558F17Fcd1] = true;
		whitelist[0xdB39DD32A6203840dB4D7406D780aB3125b66588] = true;
		whitelist[0xcC833833C2B9B0fd7e3122d92AaCb72B53633768] = true;
		whitelist[0xEa506b68aA88120a939372aB746A1b35551AF6F9] = true;
		whitelist[0x9d528bfDef21538303A59D5284801299DdF64e37] = true;
		whitelist[0x80b1960Ce559fDF3f7543B0d87fbB5381f8C3903] = true;
		whitelist[0x82674C58211C0134348B016810Db718b832d4233] = true;
		whitelist[0x8029D8D22610E457360e7Bdfb388e138A7730DA5] = true;
		whitelist[0x97e167a835C54FdeB1F55433ff8bFb94E3359514] = true;
		whitelist[0xD26593E8A99999d418bC58d7C77Ca10611731162] = true;
		whitelist[0x159Ae2b05b03460954fe7b6C0984157DA1A64ea6] = true;
		whitelist[0x1dFbCA42cC60Fbbf3b5FADc3BDF55353B1EA807f] = true;
		whitelist[0x23B2b77c050c4f4fB2EFEb8A6755719A179e7430] = true;
		whitelist[0x681Cbae1C41e5eeC8411dD8e009fA71F81D03F7F] = true;
		whitelist[0xc8664B56Df7ea10C57a8499B10AfC70C78b0650e] = true;
		whitelist[0xbE863eADD096Fe478D3589d6879d15794d729764] = true;
		whitelist[0x5b44a8aBf5b5280cD93fc7E481FbF1Fd46bEdB1A] = true;
		whitelist[0xe6B31e9FC87A81a9bdBFfadBD0c9809f53723efA] = true;
		whitelist[0xa6D3465aE5Da55e36aE33d508154c91F1fF0Bb17] = true;
		whitelist[0x517eCA408D25F7058812943f0682271A4271BF08] = true;
		whitelist[0x2DcCbFFB389576d2Da4e9B71A9016E213bbD5ec7] = true;
		whitelist[0x1f8A12Ad2F144193B12543ba7fd0410351142858] = true;
		whitelist[0x2A121375edF522F3bf8e0704661626Eb5C86aC8A] = true;
		whitelist[0xD30F2888E7928b52EA5bF4cb1D323e0531aFe272] = true;
		whitelist[0x3B570118B74fa0A39AD7C7FCfd75EF7A7A3e3301] = true;
		whitelist[0x25A6BBD4D8f041B4B14CD703560995a09A74B464] = true;
		whitelist[0x42a32D733BDf680c8741C9d2C286D4adF73C0867] = true;
		whitelist[0x5b2094bc95238Cd5A861eA3Bc8f2e3c0C4678ad6] = true;
		whitelist[0x70B0013c64E3439dE45bAcAa1978146b14cC9F2C] = true;
		whitelist[0x528d4e4E0dbF071eC23013f06D8487BaD5A8a68B] = true;
		whitelist[0x35B64947F786c8B756b35Fd25ef2B9917aCC25d3] = true;
		whitelist[0x3F138407A8893f20FC47b4ef0A9c972c19084a57] = true;
		whitelist[0x8e50b222b2C027259392f9F4d6E39e59c24edfC8] = true;
		whitelist[0xE1fc8b4c3566F5459923CBfadDc1B7741a997c58] = true;
		whitelist[0xA4f76fd64aD5cd460c6FB918Fc075EBCef8b5F9E] = true;
		whitelist[0xDAE7ed1ce27D9fF542Ab03c4aD845ACeb2B23E0C] = true;
		whitelist[0xF1140e2fBE438188dFD2FE1a01C6D24D90eF0CA3] = true;
		whitelist[0xB7a0cF8cc33025A654A73dbae1256828c004b7dc] = true;
		whitelist[0x9349F2246D266445f0D40055c9529F084a3ea74F] = true;
		whitelist[0xa8C14D9Fe2cbDF56E610f8F4647c2776c3505526] = true;
		whitelist[0xbFCf0663Ec8eAbd2090Fdcb36534fc8352BDc042] = true;
		whitelist[0xAF77E6ce8FEf4b096E909Ebe6c475Cb991c27675] = true;
		whitelist[0xBac3346e78f18485575B94AD0b1132017Eccb62f] = true;
		whitelist[0x4F7f9811De292Aa6E7FbBada8a1EB0eAB5d60254] = true;
		whitelist[0x849117D3722dC581e588C1F3B02cB7828BdEf2EF] = true;
		whitelist[0x6c0ea11E09f138d56E61b9dbb86cB7422d4e7183] = true;
		whitelist[0x6661280D2363f69A615AE69f57aDF936a89644ca] = true;
		whitelist[0xbAc9E1Da19FF794Cf1037eC332558C7987C6c506] = true;
		whitelist[0x0B01F1310e7224DAfEd24C3B62d53CeC37d9fAf8] = true;
		whitelist[0x82A0F25b6FE7E406c2c6E7884342164D7A9438c0] = true;
		whitelist[0x297cF79ad1CA102DE119fd5C4593E7c4CD99b13C] = true;
		whitelist[0x52734AA7B37A023BD650355A7Ed91025B1A2147E] = true;
		whitelist[0x418e2e450B7dE452Bc479A4efCd7f4262c6cf79c] = true;
		whitelist[0x97A554cb95EDEc7037292dEAa883864Cb35BC668] = true;
		whitelist[0x16D9fd80d8e3f055ba7793794E811712dcbdD9c2] = true;
		whitelist[0x7EB91dAD1fb797EF65887105f0DF3d0ceafb871C] = true;
		whitelist[0xDf4abd11D93cba45F8bE55E3A41c1c18c6f8e9C1] = true;
		whitelist[0xC17f20335080cD0b7283e042C89F16605f3A085f] = true;
		whitelist[0x542a5651F84145EfAaf8dC470e2adC2922877807] = true;
		whitelist[0xC1Ba5d206EE1F07E54185dA06bfAfbF83367BFDd] = true;
		whitelist[0x4dce3bB119FD5785f5f40B1394fb9b3F4d78096b] = true;
		whitelist[0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4] = true;
		whitelist[0x1077011F38c120973238eF266Dd45edad4a78E99] = true;
		whitelist[0x536122207cdE9c0b261ce01E9Af0EE2743c790bA] = true;
		whitelist[0x92d0060BF437A8f6BD9AC72233Ab8cB866BC63a0] = true;
		whitelist[0x6BD662F8b7258D0e371E18A23d509D045e486635] = true;
		whitelist[0xBA2f3CfC765cCE262579aB6Db69Ac7022bfDf0f2] = true;
		whitelist[0x21426471eBF0b7db0F07216d81a897B5F5554394] = true;
		whitelist[0x6EFc434b7858fc7307d0215142b3c019eeee7F72] = true;
		whitelist[0x13afD331C4D411c0dd81Ea257d6C42b6B8a4BBDd] = true;
		whitelist[0x269e5f8AddFAF05dDfaef856f6A36fa27fbaCc38] = true;
		whitelist[0xE37523f553606C6BbB0d5bD78da6C760B368CA2f] = true;
		whitelist[0x2eFf70000afa05066aF0134A1dF455bd2Cb41763] = true;
		whitelist[0xFA8479b6933EBD2A5921eBe82EE2734f494E3f26] = true;
		whitelist[0x5138C21b2A1a4898ee232F00d57B8f68678A7D99] = true;
		whitelist[0xd0C73ceB728bbD0eE113A7a7e312A0173c833E2c] = true;
		whitelist[0x92eC90D6e692d39B189308621c9B12f33372dDB9] = true;
		whitelist[0x189ecEbfa5D3c5EA82d5172b1069c3305a0a149A] = true;
		whitelist[0x92Cee34282f5ef5F387abE41b2976af83296b316] = true;
		whitelist[0x49E3cF47606a5Da7B11b270A790E2112a467485f] = true;
		whitelist[0x552922eEdfF18324098A18b7CC143E96855db7Cf] = true;
		whitelist[0x4E87AAb2ffC3ddDA8142981273c82Df2b5Cc76D7] = true;
		whitelist[0x38865683F5DD59048CCA3A2e91064a731bdB45A2] = true;
		whitelist[0x82509f1803d292FD4bb9A93abA54aA533D6609Db] = true;
		whitelist[0x6Ac0b41B017347309119e13159878B1F3e3eb410] = true;
		whitelist[0xe74a12e1bEFb0d65a399db1A6e231abD8Cf4E746] = true;
		whitelist[0x0EE15685674C6A0B1fF634d23d02D1Cb650d883A] = true;
		whitelist[0x0700D8a9c0B225946b60F8d24661878CAA6683A2] = true;
		whitelist[0x853D18353Ac666E87dB98c59550F2C7068f55cD7] = true;
		whitelist[0xE77d66e7F0903bCE55794E5f5828d521C27e1584] = true;
		whitelist[0x0c6306c1ff8F0cA8432B761085d5Ce74160A499a] = true;
		whitelist[0x6Ec06f8835F41Cc79BB4ADf25ba3DE13c7A5996a] = true;
		whitelist[0x2bDFC32ed7B113D79d04254848C8550D6Be2057D] = true;
		whitelist[0x6F3bA8A845D18D32bE6985650E449d7c29926F7F] = true;
		whitelist[0xc3Ab4F4451d65299540242bb8Ab3C2c65154B3F6] = true;
		whitelist[0x9Ef6aF5379c6C52a1e545Af2085D85015a6aa6Cd] = true;
		whitelist[0xE2d43dA6A3b36B0E97430e42420BFDE4052D0262] = true;
		whitelist[0xcc073E4c1930a974bbF9f07cfC845E639c3026af] = true;
		whitelist[0xD114B66903A4Fe92a75Bb95e6b3059c0766ed0d9] = true;
		whitelist[0xd2587e936569F12e4e553033C6be96d01440ecB7] = true;
		whitelist[0xd61daEBC28274d1feaAf51F11179cd264e4105fB] = true;
		whitelist[0x68e19ADa86678133FEfDc54A98558746bD56B067] = true;
		whitelist[0x542a5651F84145EfAaf8dC470e2adC2922877807] = true;
		whitelist[0x985B03CDC4Def39ED62785458F339DE0121be4D3] = true;
		whitelist[0x681Cbae1C41e5eeC8411dD8e009fA71F81D03F7F] = true;
		whitelist[0x71EAb2760e640775De36Eed89983741Ae83806C8] = true;
		whitelist[0xd21f21Ed6B663028D6B9fC31f240e6D42A2E401b] = true;
		whitelist[0x5877Af7FC64E26c695806E2Fd7e083c8511e61f1] = true;
		whitelist[0x8149DC18D39FDBa137E43C871e7801E7CF566D41] = true;
		whitelist[0x053E6294400a9268E35Df445624F58087C7F388f] = true;
		whitelist[0x1434A664bbAF93AB2655fEf271E5eC4A2431c2D7] = true;
		whitelist[0xff4160A2355B1fa42722cB63fA482E7061ee40e7] = true;
		whitelist[0x10455d2469b5235F95C2512026307bD77b1511d2] = true;
		whitelist[0x376275c4F9e4fffd8A89a90852F253F8e3373F67] = true;
		whitelist[0x05603561a53de107Ce513fE12ED0B13Cc0Da4ed2] = true;
		whitelist[0xD09bB703CBB6EB64034296Fc94488b6C6AC4d05F] = true;
		whitelist[0x34b5f399cc5A1dD491666c9866941FB8E8D09746] = true;
		whitelist[0x1CBD934Eaf49FE310Ba4E27606029c9dEF0168E3] = true;
		whitelist[0x96Afed3Ea9A4238F860423B701AB94CAE084F369] = true;
		whitelist[0x6232d7a6085D0Ab8F885292078eEb723064a376B] = true;
		whitelist[0xb6E34A8A93031a24C264Be59D0BaC00bcaeF9051] = true;
		whitelist[0x13280bA47862A393494F5a46c1910385aA292bd2] = true;
		whitelist[0x1Ca049Ccd785d1400944070c665B3c3132684373] = true;
		whitelist[0x0f0924A3a5111e7987A23a49Af826D2Ba431342e] = true;
		whitelist[0xc7A0D765C3aF6E2710bA05A56c5E2cA190C2E11e] = true;
		whitelist[0x8Da15F7e6bf20Eae393D0210d0F69eA98fC8Ea5e] = true;
		whitelist[0x9975969F2083694d35448c2a4cC40AfF24566700] = true;
		whitelist[0x564B5E5BEcDF359357C15810Ef172dD9d6Be6279] = true;
		whitelist[0x64174450c49242535B4184e3988CC4145B80526C] = true;
		whitelist[0xF7CB4396Dabe5f86128d03A6781bAFE7844bF6Ff] = true;
		whitelist[0xA732BB434e43E007C74B5f26250EE92380c3d2B6] = true;
		whitelist[0x717ba2d9AE88A92C98EB796D3D7dD2D09755a0d6] = true;
		whitelist[0xb1821263a27069c37AD6c042950c7BA59A7c8eC2] = true;
		whitelist[0xa1fC498f0D5ad41d3d1317Fc1dBcBA54e951a2fb] = true;
		whitelist[0x88A92a8a56e21C51d8C0d402d9a84FC81CcfF60C] = true;
		whitelist[0x4fEf654560d6ad788F4b35A5CD02ed185C12Fbbf] = true;
		whitelist[0x8293Fdc6648dcd00b9194dfa0ab731b51E294F66] = true;
		whitelist[0x3704E8d3a85e253b49cda9e5C6470979D6202336] = true;
		whitelist[0x1793a9D2752A0E65EA66e1D5F536d59717D622a4] = true;
		whitelist[0xe8d0587D82Ae54b0dd1F8E234bA3f0Ce1E2f047A] = true;
		whitelist[0xe81FC42336c9314A9Be1EDB3F50eA9e275C93df3] = true;
		whitelist[0x6a167aBE38959433aaaA984B3d50761aC60ee875] = true;
		whitelist[0xD80Dae31104d2361402128937bcF92A59F13E6E3] = true;
		whitelist[0xbb5D3Fc1E82dCAD48d07ADac292a08d765FD1eFf] = true;
		whitelist[0x2bC99F6C868b14Ea6BdE976CE5310F6115DD1382] = true;
		whitelist[0xAea6D987D521B0e61FD4af5164Ab743E00eeC94f] = true;
		whitelist[0x8Fac841807E21807F511dAf3C04a34cd78661F4c] = true;
		whitelist[0xaEE7E9BB015E1543c8ab3226a9d9615971C4C060] = true;
		whitelist[0x5F652f6443d742078A9AbB1C9e453Ed009BB64F2] = true;
		whitelist[0x8ba60b93055713b86A952102239d894dE4b85AB9] = true;
		whitelist[0xdDF06174511F1467811Aa55cD6Eb4efe0DfFc2E8] = true;
		whitelist[0x4dDAc376f28BE60e1F7642A4D302C6Cf6CAe1D92] = true;
		whitelist[0x41A00092909Aa49bB3144eA576d54C4E3e388BD3] = true;
		whitelist[0x5E78d0c7E548bbD070C84Ef6E199e521f4a135a5] = true;
		whitelist[0x08cF1208e638a5A3623be58d600e35c6199baa9C] = true;
		whitelist[0x4EBee6bA2771C19aDf9AF348985bCf06d3270d42] = true;
		whitelist[0xBc486420659a2009987207649d5d0b401349f679] = true;
		whitelist[0xC9582D09acDec05aa8Fee7fdebb5F10B7E9d039f] = true;
		whitelist[0x24f2112A3fe2bc186ffc7ABbAba34bb49d7b199e] = true;
		whitelist[0x528d4e4E0dbF071eC23013f06D8487BaD5A8a68B] = true;
		whitelist[0x0338CE5020c447f7e668DC2ef778025CE398266B] = true;
		whitelist[0xF7FDB7652171d5C2722B4cDd62c92E90f73c437E] = true;
		whitelist[0x269e5f8AddFAF05dDfaef856f6A36fa27fbaCc38] = true;
		whitelist[0x327F66c77330AD01CBe89DE9523811CBA0c33fE6] = true;
		whitelist[0xb9ab9578a34a05c86124c399735fdE44dEc80E7F] = true;
		whitelist[0xe557fBF5009ed3D3b2a7B2f75c5bc673C0e4D0d0] = true;
		whitelist[0xfFC88fC868A01003Fe5D3FCC389051a365d4f932] = true;
		whitelist[0xF9F40ceaca61Ec55CFb09AF821553c3b068341aa] = true;
		whitelist[0x69469f819AbdF47f0164b7fe905993EBDF09bbE8] = true;
		whitelist[0xa8A2Aa7200B360e9B76fAFe60950a587449a0ed4] = true;
		whitelist[0x38865683F5DD59048CCA3A2e91064a731bdB45A2] = true;
		whitelist[0x4E87AAb2ffC3ddDA8142981273c82Df2b5Cc76D7] = true;
		whitelist[0x6c71b204b394c9B8ADd99Ea37B6d1c2fc2b130FF] = true;
		whitelist[0x58f5CE1BDCB2D87EccC0cA2FD8D5073e4EC316a5] = true;
		whitelist[0x62BA33Ccc4a404456e388456C332D871DaE7ae9e] = true;
		whitelist[0x16D9fd80d8e3f055ba7793794E811712dcbdD9c2] = true;
		whitelist[0x0B455480f26444a76638EAC5b6a5B13B60469758] = true;
		whitelist[0xEf2e060E1569816B37bB923A911eC952b8694f42] = true;
		whitelist[0x0700D8a9c0B225946b60F8d24661878CAA6683A2] = true;
		whitelist[0xCa570FB7Ba1Da03a74C929580Dc17d543bF78b90] = true;
		whitelist[0xD724aDa4d48a795e99e547eb2DC2597B06Ac8392] = true;
		whitelist[0x08295076180ee8A6De5a4221Ab5bcD3f7A61200B] = true;
		whitelist[0x8aDc376F33Fd467FdF3293Df4eAe7De6Fd5CcAf1] = true;
		whitelist[0x7bF925893F7713e00493A67Ef0f0127855AD36be] = true;
		whitelist[0xCcb147f3ef9Cb2e8E616D5bF55C1147d0Be6b371] = true;
		whitelist[0xeAc5f9b3cd48123a69FE69CE93A7F58100A56552] = true;
		whitelist[0x763A7bfDe263168dA6DF5f450b4860ccf76749Fa] = true;
		whitelist[0xB3787093e364AE7419Bf9d0c4709900C0cF3469c] = true;
		whitelist[0x84572C31ACdd30c03982e27b809D30b1eFbCD8f2] = true;
		whitelist[0xeB42B12a965CFc16878A966c635e04f15146c665] = true;
		whitelist[0x69f32dbe156D3c5c116CA8feC75ECeB5148841e5] = true;
		whitelist[0xEF1509c5dCb93AFbE3195D4BB28CCc8660eB4945] = true;
		whitelist[0xac1Eb7459AF366444CC502d9b002E2eEf577C02E] = true;
		whitelist[0xda1D4Bd894709DbD9a140c05bdaedd19afE7fb00] = true;
		whitelist[0x11b03346Faabd4A0c9778D2ABa744aE7C7D62B45] = true;
		whitelist[0xA7D7Ac8Fe7e8693B5599C69cC7d4F6226677845B] = true;
		whitelist[0x06074Ff83C4240c554dE83160E611007D66125d5] = true;
		whitelist[0x0Dcf3968f5dD3A68b9a09E67c1E3eC08a82e6C22] = true;
		whitelist[0xD6b954F59F0Ebb252Edc7796c64BA167A1E2efAB] = true;
		whitelist[0x144b9A09B3d4e88212F69cf21bFdE6e3Eb64420e] = true;
		whitelist[0x82674C58211C0134348B016810Db718b832d4233] = true;
		whitelist[0x4650D0c9E3148A8f66AF374820AA2eCa0A47DAD4] = true;
		whitelist[0xe45aB678768CC7E5BAb6DE02Fad7235d6c615037] = true;
		whitelist[0x21af0A9117ee420CB26c32a49c59220F38F5991b] = true;
		whitelist[0xdDe74f034163192dd2170BB56B9CAc2d45Ce0a36] = true;
		whitelist[0xfc27C589B33b7a52EB0a304d76c0544CA4B496E6] = true;
		whitelist[0x92eC90D6e692d39B189308621c9B12f33372dDB9] = true;
		whitelist[0x003dfd836b5AecC95F0E42F1E1F21879C31E8F46] = true;
		whitelist[0xC17f20335080cD0b7283e042C89F16605f3A085f] = true;
		whitelist[0x5204677EeFA881A16D5F8EC4C5978EC3c1dd3059] = true;
		whitelist[0xc6435031926A631D0f241c9285c98Ea840Ee64DD] = true;
		whitelist[0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5] = true;
		whitelist[0x49E3cF47606a5Da7B11b270A790E2112a467485f] = true;
		whitelist[0xDf4abd11D93cba45F8bE55E3A41c1c18c6f8e9C1] = true;
		whitelist[0xce0E1766269e63a87FB1C1e5C745B1db32b5713d] = true;
		whitelist[0x593bee91EBe3A42e809d07189FCEbf9ca0414447] = true;
		whitelist[0x00bF11233fB3A0C0593129e815D0511870299Bc0] = true;
		whitelist[0xD39F25Fe6Fc80421585A07FCb854D2b11ceBE335] = true;
		whitelist[0x182e0C610c4A855b81169385821C4c8690Af5f3b] = true;
		whitelist[0x7f102a3fa4b786fBDEa615daA797E0f0e41b16e1] = true;
		whitelist[0xf6910D47FbB1F5518d60C721D4189936eCd5a1b6] = true;
		whitelist[0xD9917D5c30160240bDE95f8BA2A26034ABbc0541] = true;
		whitelist[0x8e3eDE4CC366dF012231671863720DCc9C929b16] = true;
		whitelist[0xA8652526111e3f5a78b112c3A59f0e7593033d70] = true;
		whitelist[0x333BE3261D637c822DB11085AF4aD9E59aAA2FfA] = true;
		whitelist[0xfba978799D7a6D67Eac09E2E8c052060804A175f] = true;
		whitelist[0x5C45b39E13c4129dF392072045747DDbcedA1eB9] = true;
		whitelist[0xDC4471ee9DFcA619Ac5465FdE7CF2634253a9dc6] = true;
		whitelist[0x70879832e89e0F307801613aa1DAF2FAe5775A31] = true;
		whitelist[0xE638cb3fA853622B2824CbDab3C27b06E8049651] = true;
		whitelist[0xf1ca4Bf4C325C3078Ec25299601A519eBc6BEA6D] = true;
		whitelist[0xAfAB37e854e2EDb2aa9E2830c6BFcd3eEf5C4C32] = true;
		whitelist[0x33d704D1347bBf81C05104bC41beE19e83C02205] = true;
		whitelist[0x3c6d7CE577E3703b8a93d2b77C20B23BfE23eD98] = true;
		whitelist[0xd26E23aAA39F29e07b299DA734C77765F6866A0E] = true;
		whitelist[0x435592c9DC7Fe4536c958D8f9975630dF18DF0cb] = true;
		whitelist[0xe9e9B22B65F17808880f726334BAAfAA8A124Fa8] = true;
		whitelist[0xBA2f3CfC765cCE262579aB6Db69Ac7022bfDf0f2] = true;
		whitelist[0xd319f112bf73eAe5e3cf06bF8D4076cC5f8B1cD5] = true;
		whitelist[0x55b451320A34CE88Fc8F1A1D9156e2AeB8aaD6Cb] = true;
		whitelist[0xA3C277b8f35881CBdb017E52bcC376B3ce8F21dA] = true;
		whitelist[0x5036e7857fdB7D8CcEAB64fDcC445C3B370f819b] = true;
		whitelist[0xa51449B96801233C23639cc7B3D9d95860E1E7a2] = true;
		whitelist[0x50025A3A50dA7Ae49630c5806b4411B0B7B55821] = true;
		whitelist[0x035E8A0A57f24FD10D447c6cE44524513dd6e09C] = true;
		whitelist[0x5EfDd9027575E7c3d1Fa5d7713462CF79Af5892d] = true;
		whitelist[0xc6334A606bDd3699a553fC47a81796234E217B3e] = true;
		whitelist[0xBe67DE0C3f7650B958aAbDFfF3BBD8D55d5c2Ccd] = true;
		whitelist[0x7e8dA72bA1656F62a5a07B18b23E5d23BcD5ed3d] = true;
		whitelist[0x6F3bA8A845D18D32bE6985650E449d7c29926F7F] = true;
		whitelist[0x78D6F9b69c99d2D972bfdAC24fbD70B973e3b763] = true;
		whitelist[0x45698cdCC733cBA4f8B1150C2f580587adF1Df92] = true;
		whitelist[0x492346B79818f9F4A31C2779b52D1DE2C64DBff7] = true;
		whitelist[0xd7E5A6F7b8B838F1be0856e5D3DD907608E40E50] = true;
		whitelist[0x03753428Ea0A136cE3ABA808419B7230e413CE85] = true;
		whitelist[0x2e274C7Ea1667D37373D6a7eC34201b4F4bB95dC] = true;
		whitelist[0x6a7ea8945D0Cdb9b53030F63b4b26263e4478C8f] = true;
		whitelist[0xc8a38F838b7951AB533be6d378ebE298fb41B25f] = true;
		whitelist[0xBB343898E3cAfd815Ce8184973753fcE6E4341be] = true;
		whitelist[0xD30F2888E7928b52EA5bF4cb1D323e0531aFe272] = true;
		whitelist[0x76fC54b4eC08917fc4a7FC6a72d0BaAff9861ad7] = true;
		whitelist[0x4defA30195094963cFAc7285d8d6E6E523c7f90D] = true;
		whitelist[0x0EDb2533655876b1656243fd6ee9B16401281df8] = true;
		whitelist[0x03F52a039d9665C19a771204493B53B81C9405aF] = true;
		whitelist[0xb78196b3e667841047d1Bb1365AB8fB3d46aB1A8] = true;
		whitelist[0x9006eeF759C79745509E8D99Ebd84eFD75975f3F] = true;
		whitelist[0xE2F130B5c02fFBE322DB7904a8a42198ffDC8EC0] = true;
		whitelist[0x66D30263D3E33dF6fECAFB89Cc6ef6582B248Bcc] = true;
		whitelist[0x06056Dcdc6471439e31e878492f594B6F0D8F9D0] = true;
		whitelist[0x79a074122bE96E1Fc9bDd32Dba04759421D12f90] = true;
		whitelist[0xB8eD097E86b7688F29b5b6Ff649AF573682F6F53] = true;
		whitelist[0x06CF8399E3f1ef9Cd94031a6FaE9F47877F512e7] = true;
		whitelist[0x9B32bf5D8D88Dd5CEF0D32cDFFf2eAB50d2e04b3] = true;
		whitelist[0xcBA7f4f44473e32Dd01cD863622b2B8797681955] = true;
		whitelist[0x43961f20194C1a27888386F8547B91aC23f9d8Ae] = true;
		whitelist[0x8Be7b518155184aa03fbDa531a165c567DA9AFfa] = true;
		whitelist[0x9128a39Fdb22De4cE3594e2e2e8EdD7BD9aBa987] = true;
		whitelist[0xDD8dB9f64512cB13fDfe24565670C603381FcA27] = true;
		whitelist[0xe5A7a206E9a8769f90ca792EbB68E9268231F717] = true;
		whitelist[0x9D16ceDC91b859F2e03d94F479994f795F422e27] = true;
		whitelist[0xb9d1Fb123C779B47269280D0e152Ac32E40b1177] = true;
		whitelist[0xf6Ae21A0586691f7F4Ea86fc4c08731Fa455aCB0] = true;
		whitelist[0x06904f07a74e1d47313cB530AF0487BF705aB099] = true;
		whitelist[0x64B7fcC8C17540139BDd84d00c7261035602Cb66] = true;
		whitelist[0x050920eDA4014e25DED17c346b425239a468d63d] = true;
		whitelist[0xf823825DC97a8c81Ec09D53b6E3F734E76E60cB6] = true;
		whitelist[0x7cB0393740204B1034E58Fddd1580563B6f3c0a3] = true;
		whitelist[0x2fF1bdC41B5c602e90951908ffeD997f3b5D97a6] = true;
		whitelist[0x0d9506F3498c73fA1b26Ec9f8B913834645a8b37] = true;
		whitelist[0x600a782c4D56961f8f72220d4c28b413b9Cf3c87] = true;
		whitelist[0xeB5264d5E08452c4966788c1C63D073B56cbff93] = true;
		whitelist[0xe684AEDcb17D70923dD50aC757ECeDc43d86cc49] = true;
		whitelist[0x38b3bb561700fc263240c4bCfA6F9a5A10167556] = true;
		whitelist[0xD5174e20aa8DCaB93bd7551CcB990b4B9E9f7789] = true;
		whitelist[0x5520082cAfe40F2De90DBDAf29a2ECC606B8f9AF] = true;
		whitelist[0x13454530E32A74faf73FB8210361aa66C3bba5A6] = true;
		whitelist[0xab40ef5d3D86f90a5069df913edcDc4E4B99f9a6] = true;
		whitelist[0x6bd8441EE1e4a1B326a29439A1d225627DfAd071] = true;
		whitelist[0x67ce74c19cdc9FC596B96778b9C17B10d34AF36d] = true;
		whitelist[0xc82a75D564521306e7Ee9eBD530a459292c45Ae7] = true;
		whitelist[0x0E1ca0c78C85457e04DD6F256b290f6c31B7629A] = true;
		whitelist[0x94B60bCCc939Aeb28FeC230659E4603eF17324f7] = true;
		whitelist[0xc252e410E213A9bc3DB942B4C7c6C69AA3cE8718] = true;
		whitelist[0x79FBa65F42731E4a4dB8472f0B2A5b48d0b4E7F9] = true;
		whitelist[0x1F4FD7F98275D44A48E1DDFB184aa125dC8Aa9AE] = true;
		whitelist[0x419Cd8897906fA7A60105b2f0c3369e0e36D8D26] = true;
		whitelist[0xAa73bdecb77AE96c2C73530cA1A276E256cb65e8] = true;
		whitelist[0x075483AD26925E558955Ca1D2679c12D8453a8CA] = true;
		whitelist[0x33cB0C602d9D2965c5538731bAB28F122988f74E] = true;
		whitelist[0xDc610C4766450E3184AfC312ef2224702299219b] = true;
		whitelist[0xfD3414fd643023D73457a7BFD628959E0f55CC97] = true;
		whitelist[0x0778e79130594FA32B0b3eC87E1d9f92AF43BcE7] = true;
		whitelist[0x9D2daC55816Aa70cF0357492E5A111461F912B19] = true;
		whitelist[0x284A9e0f4F7869b3294d1931B9845740A8607586] = true;
		whitelist[0xA5471Bd195552d35f299AFb4196750005e7298F5] = true;
		whitelist[0x04B9Cad474D427576344152FbEa36b996C586076] = true;
		whitelist[0xD1370243a9e83b9641f90C1Afd012BDa729331c4] = true;
		whitelist[0xBEEf32ccA6966bD3Bd0aA02659f829FcC8631a84] = true;
		whitelist[0x6519E6117480D140CD7d33163aC30fD01812f34a] = true;
		whitelist[0x18aEc641D8e2b1108FF5fE048539824b5B62c8E1] = true;
		whitelist[0xd48D8cef2F1A7b29BAFb5E17e8B88bfEBaeC602a] = true;
		whitelist[0x10665581d1ce1ef67593b7770F9fA555C9009C06] = true;
		whitelist[0x7545E91679A6cc1d744690F136fF5c705c2dDB67] = true;
		whitelist[0xF3D9281fa183B74F32B96E1c5244596045f4edE8] = true;
		whitelist[0x9431D1615FA755Faa25A74da7f34C8Bd6963bd0A] = true;
		whitelist[0x51050ec063d393217B436747617aD1C2285Aeeee] = true;
		whitelist[0xf2D499fD020d1b711238461F96DA9A07A137660d] = true;
		whitelist[0x186d562907bB057377d5c87e4f543C434fDB58F4] = true;
		whitelist[0x91cE2EaAa0ae31B8b109E4a2038Fa7aC3e83034f] = true;
		whitelist[0x5e40E0ad7b8b37C63aC1B9039b91E223DD27D688] = true;
		whitelist[0x6A09156e3741955f5fA556f61F5c9546e52c45f7] = true;
		whitelist[0x414be4F8572176Ac908926Cf2A9c328b873F75Bf] = true;
		whitelist[0xBE994cF43F52Fd73FE45ceD29F06D1B08bd1709A] = true;
		whitelist[0x2206e33975EF5CBf8d0DE16e4c6574a3a3aC65B6] = true;
		whitelist[0xB618aaCb9DcDc21Ca69D310A6fC04674D293A193] = true;
		whitelist[0xC77848cDD3D3C91A7c3b25d6443d2871bcbaFFc1] = true;
		whitelist[0x270e3A305495e675d582847D8F3Ac4d10825A690] = true;
		whitelist[0x7807829E002aD30F68c3072B3260bF912B3394Da] = true;
		whitelist[0x4a60A51B200cfC0224645C515530dcB3efFCb370] = true;
		whitelist[0x1f6D31774AD51A60C7b53EeC2C37052F6635235A] = true;
		whitelist[0xaF7031b4f2a1A52338fE6Bd75409e38564838154] = true;
		whitelist[0xb418Bd3d37e947C4B954C3750bF74C99804Fd776] = true;
		whitelist[0x64ab118484c38baEb5B924143ca459706c03953F] = true;
		whitelist[0xCf1DF6C3A26064A05b6437BBdF377fE46ac2d753] = true;
		whitelist[0x822F86864da9fE5ca3cAb3B7438CF6227f459346] = true;
		whitelist[0x8D19a5C86cf176d49419DD7E4EEC7b81B96431c4] = true;
		whitelist[0x8683A90E9fe51AF9e452437f14Fed9241Be9413e] = true;
		whitelist[0x0A4095a90bBe52625599EFd4B698d8d01B32676C] = true;
		whitelist[0x1E6BB25d0068C11331c100e3c7eDb3bb8b98d042] = true;
		whitelist[0x8B6D3eEe9048304aac53Ba571B1889A4f0609474] = true;
		whitelist[0xba6332d3f01D220f1Cc2Fda423Ed89249D495C43] = true;
		whitelist[0x9eaC7914e6dC6889E368dD48E3089706D7536a1b] = true;
		whitelist[0xf6607ad5992f32448D307ddC20f71D88B4fe35A5] = true;
		whitelist[0x93f0C941Da115cff5680F83172248e7644f5369e] = true;
		whitelist[0x768058a4b0054dc1cb025889B2eFD9C2051d2Bf6] = true;
		whitelist[0x2D8f11b3e4010C067Ad964D5d8558e2b61E21f07] = true;
		whitelist[0x277d1523f3993bb40eC647a2236316eAf5A39cF9] = true;
		whitelist[0x14B072f1954DD88131271D597A30e9899B57eb0F] = true;
		whitelist[0x5d96D8F927a7bf5F342017CAF70039B9e9CFC216] = true;
		whitelist[0x51Bd2CCceB74999380c26E401aC87D4afEf092Fe] = true;
		whitelist[0xe31AAf1A3C67D6909Eb7D104A620d3CD85c8411A] = true;
		whitelist[0x95B97AaA76fC57DCd65df419C6ccd73efaE611ad] = true;
		whitelist[0x8C1D0aC50ad00C220936E2f1647405B12B0B91C2] = true;
		whitelist[0x85CdF932E2cf53f8011D09A0088bF06D9dD96179] = true;
		whitelist[0xA289b1a2594bEa59e34DF6A17544Cc308C8e18F8] = true;
		whitelist[0xd23199F1222C418ffC74c385171330B21B16e452] = true;
		whitelist[0x8d17Ff92B8C92Ed3C3f0A99e9A1aB817Fb895BF7] = true;
		whitelist[0x6b7C318467F409A5Af2F0A9d0976Ef7b72d22a62] = true;
		whitelist[0xEf6c1456A2467c9016a443812D0c182706FDF722] = true;
		whitelist[0x265D5CEDbCecf2a70E78D31D0AcC7BE8617de7B9] = true;
		whitelist[0xd0D004B4ce867785D9aB4C684f0497680AA7B6Ae] = true;
		whitelist[0x325296d941a6e2d77f084488676704F8CFEc7b51] = true;
		whitelist[0x55EEeE5F33036885C336a78564522e89B69c26dC] = true;
		whitelist[0xc07A18c4ccE7F95A413515d3D137De47BcFfb495] = true;
		whitelist[0xc3Ab4F4451d65299540242bb8Ab3C2c65154B3F6] = true;
		whitelist[0x418A9a9f182B04EE9BDC5AE0dd0B4f0976dF5Eda] = true;
		whitelist[0xDb2eDCC7880F0071959e2f6713CC335a6690FC84] = true;
		whitelist[0xf19F3d5F1CB45a6953d6B8946917b06431314C00] = true;
		whitelist[0x89831EF83444823b033CBfEbf877a197D39aA231] = true;
		whitelist[0xB82eB1dA53C5e394f8525c7D627dd03640D6bc97] = true;
		whitelist[0xB09D70324fb2c73bC8Ba5c7fc1270Ec0c0546407] = true;
		whitelist[0xB15f55B848B56F80a08759C4064cb2e1957be6c0] = true;
		whitelist[0x46EcB3F576c31290E1A4b359fd993e36E86Ef9e1] = true;
		whitelist[0x3BA3D09f70CED571FE3F629Adc234e200ef5EA46] = true;
		whitelist[0x812DbB12a51a5173cBAE829dD451CD4A79f6a756] = true;
		whitelist[0x07819CD403605c35C94BcFdF386fdD5312D7D706] = true;
		whitelist[0x657A38e6994CB578351376dCDb077330D00665d6] = true;
		whitelist[0x120fb4D4b80DC98BF27341f0D98F0CCedFEeFDd4] = true;
		whitelist[0x767CD29fA0BeFC46690F2547a826152d67dFB189] = true;
		whitelist[0xcE64da4caf4c7D5A65c74Fbacb16E170d300285d] = true;
		whitelist[0x4441fBd5E5E1A5AE0BAD986C015c0DE9a320cE2C] = true;
		whitelist[0x329E630CA8507829B90660c26C555A906f6782e1] = true;
		whitelist[0x008BA4907924f86C62fBb31Fe4A0dFE91c0e6acc] = true;
		whitelist[0x21258055dfd7a287DCC224E3586210F1864c1996] = true;
		whitelist[0xdAE4012B41657B7118324Fe13aF91eEc0EC95acD] = true;
		whitelist[0x9294bb652f4B1392Ff8c266Cc75BA45ba312c124] = true;
		whitelist[0xdcbe2EDb494a5816Fb234b2407877149291d8bA4] = true;
		whitelist[0x10172b1A8fD270C2F4F45561617747ad2a35B31E] = true;
		whitelist[0x25a61B9CB2D749b062fA87b792ca60faEdDdF851] = true;
		whitelist[0xAf981AFA2f5fd50ffEDBB5728FA0fFd2a99b93CE] = true;
		whitelist[0xE3f3EbacD9Af846fd2385F390E400fe520923173] = true;
		whitelist[0xCAaD0665CD8007D692e57188A1C8e38Ea0A38F50] = true;
		whitelist[0x0F4Dc70b4229e859fC25DC8cA4Ea58956359eD83] = true;
		whitelist[0x3d7cdE7EA3da7fDd724482f11174CbC0b389BD8b] = true;
		whitelist[0x97A554cb95EDEc7037292dEAa883864Cb35BC668] = true;
		whitelist[0xD31D14f6B5AeFDaB5fE16DeA29fA46F6B8c15bF2] = true;
		whitelist[0x419fD53f8c5c957Ae2c52A7df6904e986E59db62] = true;
		whitelist[0x9402B3759C8f8f338639566826Fe7A684BA143B0] = true;
		whitelist[0x23FA84013Ba906121D80d839321823F75cE018b6] = true;
		whitelist[0x98011a7b0795F456FfcE7c988369f1149e8AEba2] = true;
		whitelist[0xEa302cF778a1186843Ae10689695349f5388E0D9] = true;
		whitelist[0xaECf6412Cf1A51986185F5718FadD640bae5C7cB] = true;
		whitelist[0xb65aFAa2c59fd94f00D667F651B5D0c800ab99B6] = true;
		whitelist[0x4d0bF3C6B181E719cdC50299303D65774dFB0aF7] = true;
		whitelist[0x22C3378F9842792f9e240B11201E7C2F4901a408] = true;
		whitelist[0xC208C84FC1B7A11ac3C798B396f9c0e5a23CFA38] = true;
		whitelist[0x753e13f134810DFBE55296A910c7961Aa1B839C4] = true;
		whitelist[0x34D7bCeaA2B3cfb1dE368BAA703683EDC666d3f1] = true;
		whitelist[0x2D2c027E0d1A899a1965910Dd272bcaE1cD03c22] = true;
		whitelist[0x6dE12C6478cba122eCec306e765385DF4C95E883] = true;
		whitelist[0xdc52C2E7FC45B30bd5636f8D45BBEBAE4CE87f46] = true;
		whitelist[0xfF5723A2967557D5a6E7277230B35b460f96E56c] = true;
		whitelist[0x79CE43f7F12d7762c0350b28dcC0810695Fb24dD] = true;
		whitelist[0x7E6FF370343468f5Bf8307D05427D1B02fE74E68] = true;
		whitelist[0xB0623C91c65621df716aB8aFE5f66656B21A9108] = true;
		whitelist[0x12F4b06a8cED0c0f35a5094c875a2b8a86562498] = true;
		whitelist[0xe43A5Bda37e98A9fb6F40Bdee4147C7D0C5a7dDE] = true;
		whitelist[0xab35EE8Df2f8dd950cc1cFd38fEf86857374e971] = true;
		whitelist[0x128Db0689C294f934df3f52e73877a78f2d783B5] = true;
		whitelist[0xc48d912C6596a0138e058323fD9929209A66Cfd8] = true;
		whitelist[0x02e04F52Dc954F25831e4edFd1A1086B9feEf801] = true;
		whitelist[0x75291cB8b75d6D0097a95F9F5B5389E20B1Fe40a] = true;
		whitelist[0x7f92C0b4970b8459462DaC9e3256a016B45ee15E] = true;
		whitelist[0xEA5338F40A649b58f15eBA78eF67262558343F03] = true;
		whitelist[0x552922eEdfF18324098A18b7CC143E96855db7Cf] = true;
		whitelist[0xfbA792D508d0f61e6BFD7c5A5bd00802a97AA0b2] = true;
		whitelist[0xb9dBf2caE6Fd864B1F7C2fb3dF5c0ce68D0E6B59] = true;
		whitelist[0x853D18353Ac666E87dB98c59550F2C7068f55cD7] = true;
		whitelist[0xAef9a463CB85e771bD8F3536e04956d30ee31ce2] = true;
		whitelist[0xc0b75b61c6ECFfd77743a8b77BD8a3E7fCbc5a93] = true;
		whitelist[0xa837b0f94974f37e17347A0BB8C448d8F25D0B0B] = true;
		whitelist[0xA95F4f51cc7FfB04e97eF0dDC9B6060c9200eE80] = true;
		whitelist[0x5e58538cc693b1099C68d7fEF963C1f148DaE8CB] = true;
		whitelist[0x4771B65e9A825d2917378F43810F6bAF4ce3F732] = true;
		whitelist[0x35bD3902A2Ed264f1803f78423e71Ee0BD7b189B] = true;
		whitelist[0x068baEE003C32D507a64eD7AF700a0aC7074Fa58] = true;
		whitelist[0xBd87C000fd1222d5dE79D91ef9ff23Aa6d1b0F52] = true;
		whitelist[0x8eBc92675F0182182994B44B204be932565E736D] = true;
		whitelist[0x6Ac40b84f5732cCc2d21ebe71f2ACC4140314843] = true;
		whitelist[0x6963D1743A452FE1A082B76b1432037a12c2C742] = true;
		whitelist[0x41BF39033C732F884A52ddf38F647aD63457CEEC] = true;
		whitelist[0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC] = true;
		whitelist[0xd3A1ab87C8aB81CB093Ef5430A387D127ac523a0] = true;
		whitelist[0x39B557A249706CAC1DFfe157cE5D25fF1791b56F] = true;
		whitelist[0xE0Dd8C40ACC74005C71CE5d02Cd5116A2eEDB1b0] = true;
		whitelist[0xF6f4B3d80884DCf2E602820622cafC1Bcc1F9AFE] = true;
		whitelist[0x95eE9e136f0d5EB6fb5b7b83Bd09b35e21ba55F0] = true;
		whitelist[0x127fa43E17eA1a819cD07692Ee17D4F65E927564] = true;
		whitelist[0x328Ca06CA310EFd4cbf9Cc2DD4B62C7dbC1BB791] = true;
		whitelist[0xC9b5db189631ED9bB35eb795826d90717b43B56A] = true;
		whitelist[0x13FD513c2104941Bc399589b5391957B27392E8b] = true;
		whitelist[0x7F7d6649af37189C3C1CBA4407265218086D5716] = true;
		whitelist[0xA1c256282e215e3040F3Fe5f17bb105C72Ec4E25] = true;
		whitelist[0xCeba00f5c2e0cA4E8dAE4D88EF79190a648B9966] = true;
		whitelist[0x2A3Ce3854762e057BA8296f4Ec18697D69140e1E] = true;
		whitelist[0x6DC16Cb8532967534Ef2BFE8C4eDEE9fD552603e] = true;
		whitelist[0xC2488CcF46573821a02E0dE829f1970dbC14A3E9] = true;
		whitelist[0x6564f96bE476A430Dede03EcD7352Be33B12FC0F] = true;
		whitelist[0x6457A438e924EEeb2aA14C254db044bf774b62Eb] = true;
		whitelist[0xeD66cE7eEe03790056cA5Ba5ee61Bc4F77bA2DED] = true;
		whitelist[0x4c3A392af5FC22253743b0600a4365DF3A7F9893] = true;
		whitelist[0xbA993c1FeE51a4A937bB6a8b7b74cD8DfFDCA1A4] = true;
		whitelist[0xDf9c5Cf591e1338bBA20A26D4177B733713108FD] = true;
		whitelist[0x4Fc83f87639C917A9703F135f4C48a50e54eF8c3] = true;
		whitelist[0x5Ed9e63Ea642DB16B3B6A58E3F867668178ac222] = true;
		whitelist[0x42FB05E09f8A477620dEFe49AF76e577Cbd791D8] = true;
		whitelist[0x775C4B0f9f13fc32548B060ab4bf5eff44B08348] = true;
		whitelist[0x7b5296dB485B599DD8604346163c0DFaC096D553] = true;
		whitelist[0xD6Fd8413B1FaCafcB46b3F7C08d07DaA0fe5E770] = true;
		whitelist[0x01be72263B12fE4D51919786f65bF13FF3E58ebE] = true;
		whitelist[0xa47Fd53CcEc8fe0ec67794AeA9e3Cd392A49b88E] = true;
		whitelist[0x013bbCfF38F4E875B0218E4eB460e0E7c8FFaFc2] = true;
		whitelist[0x8DD6629B2272b4fb384c13E982f8e08Bc8EE001E] = true;
		whitelist[0x1AfC8C45493DFb8176D12a5C5A0469dC4c14f02a] = true;
		whitelist[0xBb179f078BAC0FF4f181F6e01606cCAe883Ef74D] = true;
		whitelist[0x9Be8cbE548110b4F09D932cdfbaC082c9dD98899] = true;
		whitelist[0x41a195cD1b26cA3774f761c5652c9E0841932126] = true;
		whitelist[0x6885863E1aAa726346e9Ea88b7273fe779075E8a] = true;
		whitelist[0x97bac212815DfF849820e34b6F9a58e4C40909De] = true;
		whitelist[0x8Dc9c53B85FC13779C5874be6fD7A20Ce3Cf7e20] = true;
		whitelist[0x83E84CC194E595B43dCEDfBFfC3e0358366307f1] = true;
		whitelist[0x107Fb8867608508eb4B9F69333603fCD632BF330] = true;
		whitelist[0x26983a34F4E6cA1695C7b897904AD9212d042d27] = true;
		whitelist[0xf6FF6beCFe9D0b78424C598352cC8f64D0d1d675] = true;
		whitelist[0x553ea73C8d7932c94830Bfe16d91Dd3931d87305] = true;
		whitelist[0x7fC9435A996E6F07e75c244bd9F345FAAF81AF8C] = true;
		whitelist[0x3D5c457920Ff88a7a42D2aF63d450E5F2da61d14] = true;
		whitelist[0x99F0764BECCAEF7959795c16277a10CA7a80369C] = true;
		whitelist[0x2378598aEf5768d12df9ab72dee9AF37a2741F5A] = true;
		whitelist[0xA58715f1069d82233ba2bFa88058774678b33F05] = true;
		whitelist[0x660157aeDBF8f046b50D6EBd3a4502007aB6cBE7] = true;
		whitelist[0xb0cFeA22b93a4C85C46c55f6e665a77fefC5D197] = true;
		whitelist[0x55e2880c6984f671A78044B4027C899b12d7BA86] = true;
		whitelist[0x64Ad18fd2cdE41578d231955C98A714f8CBaC239] = true;
		whitelist[0x1C12c3FB74aA4658B13bDB744Fc314648311A082] = true;
		whitelist[0x993f5b993e733d7840F25981138DA602430e13Dc] = true;
		whitelist[0x977D3dbf93174f517a52736E1e556B79300CE3cC] = true;
		whitelist[0x22a001Eb8434Dfe92C22Af924A9A0a6ddA82B5e8] = true;
		whitelist[0xAdC3BD4529cbE18291E3f2dB73Cb7630Aba73Cb7] = true;
		whitelist[0xeCC1C3d38460FFc4fd58BECAEF72A90EdF0613a4] = true;
		whitelist[0xb6D089F0b4865F922FE92815A1c90b53598e5AAe] = true;
		whitelist[0x91aD771F1e4978479f7451F76d423093D26ba616] = true;
		whitelist[0xbFd3F0350120Ed7e7c45b722E69D6f5e1a063c6C] = true;
		whitelist[0x2E601885896103318269CA45431B943a6C8Ae39a] = true;
		whitelist[0xE4E565C4a2A5050BA1020314c76420dd52D88Cd6] = true;
		whitelist[0x6375594B4175100055813039CA22476CDDE06328] = true;
		whitelist[0x8C8024bf5f90a06CCeD7D32BAbcCB934942c82f6] = true;
		whitelist[0x0Db99Bf3b52EDa95FD6647C16442EF55815a40A9] = true;
		whitelist[0x9b973568b0664BFcA35e8F0Aa39daEEA737b3fcC] = true;
		whitelist[0x3822881D61803AF91a95847ad20B1bF20A5671B2] = true;
		whitelist[0x02a5c980029cB470Ac89Df2E2de1CF453aEE6558] = true;
		whitelist[0x7b923AaB6126b5F09b141e9cB4fd41bFaA6A4bB2] = true;
		whitelist[0x89032c0cFF4abb9bc490dF104Ec89eff27314909] = true;
		whitelist[0xF848E384e41d09DCe3DcAeD37e1714418e68ea7F] = true;
		whitelist[0x4FFe858b37c9398237246A81885c5d4dCB38245e] = true;
		whitelist[0x7373087E3901DA42A29AA5d585F9343385Fc2908] = true;
		whitelist[0x9f477D97a21389542e0a20879a3899730843dcCD] = true;
		whitelist[0x823dC685e777a7523954388FA7933DA770f49d42] = true;
		whitelist[0xDA86955802A0e8f69F1C8e04090E4dC109fd9653] = true;
		whitelist[0x8683BbBe511B269F1b9dC0108fb6B267Ea764F8e] = true;
		whitelist[0x1AC08405E96E3561893eef86F194acDB9A24D38D] = true;
		whitelist[0xe7779a8C5005098328A1ece6185B82c6A9DBE56D] = true;
		whitelist[0xd8758354945360a603BCbe1bb31C56383f6FefF3] = true;
		whitelist[0x7a2269e15d34FC2a69e4C598A7DC51733ae93638] = true;
		whitelist[0x9643805d1756d8990B5C492a2c3374a4dd29FA80] = true;
		whitelist[0x473888e67636661062daD4CFfC92a39437810313] = true;
		whitelist[0x22720cCDe7Db8141576f844beAfCC9c7B7D602aA] = true;
		whitelist[0x68c3494bAd6011033d10745144B51890861422E9] = true;
		whitelist[0x2eFf70000afa05066aF0134A1dF455bd2Cb41763] = true;
		whitelist[0x0D0b3B531cDBB38F854613969d83334cD73dC7CB] = true;
		whitelist[0x44ddBB35CfeBbafE98e402970517b33d8e925eB3] = true;
		whitelist[0xE076f2722c830d4441ec0BCe158fA1956e8B162E] = true;
		whitelist[0x2D0d77065aB397CcC8D7cCFD847eF46074a93c38] = true;
		whitelist[0x829004098cFd973A574a7c18dce5CD10EAa96Cb0] = true;
		whitelist[0xd7d35C3FbfeAaAA6ad1C9C020ED39764E0A604bb] = true;
		whitelist[0xF6746F1472EA920eee7b793a4d48BE0fEA647Bfe] = true;
		whitelist[0x03eE1E0e4eaa0eF034aC81831FAe674135a4995a] = true;
		whitelist[0xaF2E6340bcF42C39467dD6D86632a2db42C11dc5] = true;
		whitelist[0xBA12D8B01A6Bfe6FFf2250912caB159455Ee87ad] = true;
		whitelist[0x51e13ff041D86dcc4B8126eD58050b7C2BA2c5B0] = true;
		whitelist[0x78c4B4A8BB8C7366b80F470D7dBeb3932e5261aF] = true;
		whitelist[0xBd8e9e39ad49D2607805b77951C9b284E4E8CF31] = true;
		whitelist[0x71211a75C7995aA0a3f3FbF666ccb9446cE051B3] = true;
		whitelist[0x254B8073B057942235756B7E7249fB5Ca60753Ef] = true;
		whitelist[0x86Fd708A7762B5cb8625f794263516b95B22e129] = true;
		whitelist[0xEaf7D511a1956c9D297EFBB2D81b528B37D1d8D7] = true;
		whitelist[0x2a7B50f2FbdEfd9CAFF33cb386d87269EF5aBfCd] = true;
		whitelist[0xBa1fA72bE53A1693dE4867DeA60fA9f041073BEF] = true;
		whitelist[0x7FF50D24C87F3A4E0c3C527bBB563715cE6E71c5] = true;
		whitelist[0xF43479102a0d24d068a7912B092689000d9Cc5F0] = true;
		whitelist[0x7a18960043093E89d804A30D5664Ce769cd153A1] = true;
		whitelist[0x989057259D3a0D75c4C0E21584E296bBF044E722] = true;
		whitelist[0x50491bf5d8EA8d23AADeB482be496590DAb34fb7] = true;
		whitelist[0x915782DB070B286375C4B757f63fC9a81c3E93F7] = true;
		whitelist[0x4dd5D12a6b16224b4d234F0A06De1587db190679] = true;
		whitelist[0xc3B39978C872B3DD3A52Ebe34A6A3B08De7762E8] = true;
		whitelist[0x7a9DC8eEaf5022cECd60C54A042343484ce6C065] = true;
		whitelist[0x469B786bd2416eb6EB832741f2FD536F60a355D3] = true;
		whitelist[0x523A16DCF25698a9992327BD0c1d9832c82b8A4D] = true;
		whitelist[0x559d92d2bF798c4310e5b71001B6351c3c96005C] = true;
		whitelist[0xcfadBa5101911D04189331ff9F6e42fE44567439] = true;
		whitelist[0xD5D4aAFb3B2217607e5B5B5526Eb6932f8DF130F] = true;
		whitelist[0x6e3f8E093Fe749398aac60515686fC4FC4baC514] = true;
		whitelist[0xfD2307923C117e384b3aa9E34Bfec419Cb66a14d] = true;
		whitelist[0x2847E472A7F56c1693A815F2CA50F30d3d263F4E] = true;
		whitelist[0xaB4bE3171994fEa9F6717DbE1D2f7839295e7688] = true;
		whitelist[0xF6b11609c3A5bCDEbA0EAB46799A3ed7C1323db8] = true;
		whitelist[0xcC4f052FCDf3C94cc5acDec24E415248dAC9eEc2] = true;
		whitelist[0x094F8EECDf916aA47E5382c1c1E83888bCC03dfF] = true;
		whitelist[0x7E9631b460DE70F5b089594C4aC83Ce7026cd0B2] = true;
		whitelist[0x00C994c17976B06b6A7b22460E9001ECdb25c511] = true;
		whitelist[0xf2439241881964006369c0e2377D45F3740f48a0] = true;
		whitelist[0x4EfeceA2A42E1E73737e4dda7234e999A84Ca60B] = true;
		whitelist[0x179891636BAeAf21c5DEA72Ff9144fc4e4f48680] = true;
		whitelist[0x87Aa1150cAF247a35f303AA051568a81FeCa11a2] = true;
		whitelist[0xaDba5Ea1525C5aE27A0f98408C8E5D67e28c754c] = true;
		whitelist[0x1E94b256C7B0B07c7c0AEd932d12F03034c601Ab] = true;
		whitelist[0x1aD42FB475192C8C0a2Fc7D0DF6faC4F71142c58] = true;
		whitelist[0xAb30f11201d6D53215729D45DC05a0966C237922] = true;
		whitelist[0xf4f5AC536B4E39dAe47855744C311A87361337d8] = true;
		whitelist[0x4065a1D266B93001E7DF796735C68070E2154fa4] = true;
		whitelist[0x612aFa0059F72905f78f45fD147Cda08311b24eB] = true;
		whitelist[0xb48d6C33A96F5519C82569b478fcD723b3A94a2A] = true;
		whitelist[0x501D63B672E92274Ec7dCd4474751D8F62933386] = true;
		whitelist[0x370F75f54907AA06584892A86F891536DB5C4F49] = true;
		whitelist[0xf21E7aF6777b9a8F1eB57A94B5F1501e68eBFb91] = true;
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"j","type":"uint256"}],"name":"get_mint_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"j","type":"uint256"}],"name":"get_mint_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"item_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"option_id","type":"uint256"}],"name":"mint_main","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start_premint","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":[{"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":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw_share","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600f805460ff191690553480156200001b57600080fd5b506040805180820182526009815268111c9bdc1a58d85b1b60ba1b6020808301918252835180850190945260048452634452434160e01b908401528151919291620000699160009162007663565b5080516200007f90600190602084019062007663565b5050506200009c620000966200716560201b60201c565b62007169565b60408051600280825260608201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081620000b4579050509050604051806040016040528073b520f068a908a1782a543aacc3847adb77a047786001600160a01b03168152602001600a81525081600081518110620001275762000127620077d0565b60200260200101819052506040518060400160405280734ddac376f28be60e1f7642a4d302c6cf6cae1d926001600160a01b03168152602001605a815250816001815181106200017b576200017b620077d0565b602090810291909101015260036080818152604080518381529182019052600091816020015b620001ab620076f2565b815260200190600190039081620001a1579050509050604051806040016040528067011c37937e0800008152602001600181525081600081518110620001f557620001f5620077d0565b6020026020010181905250604051806040016040528066f8b0a10e4700008152602001600581525081600181518110620002335762000233620077d0565b6020026020010181905250604051806040016040528066d529ae9e8600008152602001600a81525081600281518110620002715762000271620077d0565b6020908102919091010152610d0560a0526200028e8282620071bb565b505060136020527f7abc5cb1c507b68cc59b679c71710c04eebe14ad0ff88a95d3febb0aaaa514408054600160ff1991821681179092557f1c104f5ad04a3ef07f4e6a44bc5e708beeded9fd5ed53dcff10bfca1f01b2a4780548216831790557fe48af1bd6cd589854714565a8f1251982f612d8ecaab2b37479a114cbe22900980548216831790557fd01c87f45d41f40b7d06e98a148b1da5be543c99f33dbe9b17c5e67fa3e2af0e80548216831790557f2d442a9ca1c6627491b1c6e0379fe6ffd30ba58f56175c2e32f13093c213c39180548216831790557ff37610a2571a762767fe6f4b9c69bf23d714c32fb90a6c6f1dfef8224bd554e680548216831790557fae75b244f96000849156e61957c93e71b89a5ca15ea02c09726259c65ee3416480548216831790557f51bea38c47fb318dad931ff8b02947d4f41a4123f1494ecc07c61f6e24bf559080548216831790557f871e12ba2772bbbe12962874fdcb20e5e5b5ae97c97b78e5c7083db77be1451680548216831790557f47ee37d3625044aa007ec25a0adced87e2fbcecd3dfe7530321a7b8a1a882e4080548216831790557fcfd4669d43cab32514310e75127829b267eb84201fb0def292f46feb4b291fba80548216831790557fc565bad84d05148f4e36d3cb6b4e66097c82333088c773572064b4720f36161e80548216831790557f8e867678f2466cca28b6e834c4ebcdcc8f0a20edeb6f42a9b586e0413fc4bc4380548216831790557f4b453e5733ab572e3d5ffa8e52c08181240c64e7392b261483ea7f34a716792480548216831790557fbf441cb66e2e3ef2133ea802ede21d76e15971f7ccd4f69cd8fe294d439b66a280548216831790557fa89b37e2a63fc126cc099630a8557dee4bb2628a78d3ab98fcc5b82c5a648d8480548216831790557f640e83c682380ad423ec7e25ece56de4ec6c6f45b23b77154e02216fbca9f12a80548216831790557f08ca1e5df3940a27c4bf41fc18a42b9ba7754a7700b6f67bc3b385f57b578b1280548216831790557f75d53b4170efeeecd287f7b24057fab3db14d27f975aab1bfedeeeefb3f0ce3480548216831790557f4d13d01c22bd95c12571ab631ea24a8d909dc0038eccc9bd75076e3b7ea21b1280548216831790557f91300e78087c3db358953090babebb716c6ec2acbca3685f0e60f2b8c65f1e7080548216831790557f336c4b9b87e3b74be1777bfb73242b19a6af9eaddbf1df185db97086d7d69d0480548216831790557f6c46862a496239c7fc8a38d4ab516035cc14bc50c336fc790c5241301688491f80548216831790557f3ec0c9cf3517b008cd2916414d36bf865602a780594d84637d91dba5068315ed80548216831790557f7122b2856420c35247dca23e67b14d67bf2770551991a1182154189a713ad22f80548216831790557fbb0af030bfc8ace589948cdf0bfa18af36ff7a751addc3f08827695c4586780b80548216831790557f1d9615b48820c9521dc838356a599dae6f774e6ef6bfd306dcff694e46cfcd4980548216831790557f15f7bbc45d07093eb26bd5740afb253c26b3d5d536209b11defdc26b5731ef7780548216831790557f9cdab64b8fbb52f460e9a776d3d87166b2b3d458fbe51d37d437ef4383bb7e1880548216831790557f234ce5d08f7e3daf5711a152f034737f6a33bb5911b082db186441541feb482580548216831790557f99e24504eb57e339bfe2c5fff775ef3bcc605ca45b6359a9c86ac5b2858d60fa80548216831790557f383a8610f62f6260fc5aa717646fd9dfe949bfcf61bbd9c474b041e0655f5c2380548216831790557ff5b5c0df9531381a569b4f2333aaad2feb4dba3cd7aef50f5e4d40a80932acd580548216831790557fd0bfe4d38e31f275511dd963e5230c7ca9cf662391da396fab251ce730c4e18e80548216831790557f2793836978f8bea9122ea5c6a7b85a602e92daafc3bed0f27a61a55dfdbad60880548216831790557f070a720e2a96b258780b94109801854117b57f9973352ed478cc6639bf5860b380548216831790557ffa90775da1c1600c1842dd4f75a1d6d571204005116d7abb1dff5b0eeeccce3480548216831790557f8dd6f297c86a49d9a6d18231a134744527cba7a81e61f6d81b97cbe321e630d880548216831790557fc5639205278e85d04fba490c86387eb09054ca20998d0ca7a4c2bd66a523541b80548216831790557f8b2c09376b96fe50a647dd9b9164a64b2f0c1e02bdf7c3f95ef0db0e3a5c044d80548216831790557f9204328809927099adca5fb998d376d2f78a82203e7af5eee2594310c30a7e5c80548216831790557f6104dd544ce14cf1b0547c28b419859b7f35b46ea4133252156001d37b2f0c4280548216831790557f705e5e3a33acdfe86c228a4a9095284e2f2f0e0ecaa4aaf45d5a48023d07d1af80548216831790557fb48a04ca2e9052469e80f44e8a37a6ef3cef4e45caa56020c450808c613421d180548216831790557f46326575eeeab83c32c4a919b481cbed3f4d5e6d575ed048d7681ec22bdb9aa880548216831790557f5796a59ff9e0bf18a546a39ffdc2acb2f1726391fb546d4961b49a6bc581b87080548216831790557ff91723e13a67443dab68477e338967db3f702a0e7e778f3b6518a2107c552de580548216831790557f1fd7fb37bc503b6b5b36fc01ae2dfd987691879b614f71aa32a7afe368c6ada980548216831790557f276ddc5a94fb5032acb09b65e1a675d1ef07af290955a38857f573022676cbf480548216831790557f18056d260141a0b74430e223d7117e18245966dae56561a4f9b96c8d96dd39e280548216831790557fa71e67bdf2d14fe261598df9a4f0d53e4d9af99a5470a8dd3389108f8da602d380548216831790557f239f6abc1832fa8cccfc9234de8cf5f79c5ac8a8ab15c28fde59b7d2995f9c4e80548216831790557fcd2e4017a5b3986448d5c898b91da457851398482e1eb468e12fc27de3b1c86580548216831790557fd7b5d6719ee83a1fa1fe37e92c31531373524ac49c008d14bf561d0a6186c58280548216831790557f3010d50fb82c979a12e857bfd5359a1343d11fd6ea60ce2e5f5e8c0c192ce24e80548216831790557f345805ec7b79f0b97ecdae600cd7fd8cc96b7a12a987138aafe8f46ba9a2d9d080548216831790557fda36cede4de365eb6b20d314a8c3de9774769046e6b98dd85c2c16e57b982f0f80548216831790557fb6d1ddc3edfedf5a3547a6894eaadcd616f769b0090203401f96b68db19cb38980548216831790557f494b8e2c662b1c1ec17448d8421c89c0d80f0474de93db94b95733ce02e031b680548216831790557fa8138a58065656a1ac8bdafa41feb12f1e0fc7ffede4d95a1daf9465f5a72b6680548216831790557f305c066f6516840ca1db58ef1f6dfe53c3e6208ed429b7997412d4be58dc4ced80548216831790557f6c13a143c4f49318e5e3fb9e7abf36009b36c6041beab060698488262d53329080548216831790557f2d3492b1d2ca63ed299ed3ca9252a7189fcd600c32963f74cc50de7326bb644380548216831790557fe4e482658feb729e874dc59af8e33e1c2761674e4ae8a756afedfb875261e9f080548216831790557f2cb1093d86d77f41ba6795a8d36f370c7704f39e8c56440fea4df4755e665b6080548216831790557f96e847fc6e6f12ca9befdedb33a5b5316d4c566aa32af752b52c83aa1460367580548216831790557f76e31a33733c8b067d458d2f9532dd0f03949a35c56bac4a0549f2c6a77d761280548216831790557fd918eee8943479c28bedbcf0710e9292903aef51cff0c2abb98bd78f2409cfcf80548216831790557f3ce7393da5d63aa94d6c9b278310c77b9d9883fe831f9467e3099ce53acb43f280548216831790557f52c8663fefa0872956fa10fd0f4ebec22a2d2556ab9fdf9d93b79ac76b60faf580548216831790557fc7819db071cd0eba996115ee5e04d15c6d669353cf64926a57e4e83a594aa52880548216831790557fa6e3358bb57e18de426414aacedd19887eeb90254aba71c439228e2d28720b5c80548216831790557f6384f22f48cbb9466d05b79a2f11720ab0209a07507e3b6c4b1367dc526e50af80548216831790557fe6055b45c87f7eb3575402894691253aae4ada9e569e5dbec4b0583e5849a67580548216831790557fbe79c1693ced1a8cac3120f97f97c433555f3cff06b20a1b30958ddfa4d9f49880548216831790557f3e060181cdbe15ae7632053ce1aca0c0fd27a3f621a26838d75ff25912ad541a80548216831790557f442c4a30cb41d617633122fd8042e977630850866f52a2252a42964f39b51e1b80548216831790557fb5820dfe80ef457b2f8b44182ab586395104531add4a23db5fcbb1165c5cc88a80548216831790557f8e5e546e341eb69b43d0e3d2b6584c210d93087dbb3d07e5ba5963a069c18b8980548216831790557fa1f35619a3e24471ea3c797446be50f7a0d06f79687cb6fbb19c7e54aa5d342c80548216831790557f64e82cc2cac369b10a9480a19997281ab86d63ee5a7905de937185aabd045bf880548216831790557fe1da7ee8974c0fc99ba82d53a46333b23f153a5c2fcdb791718b61b67f43b43c80548216831790557f59e8ee5c6d5b49c62a61491bbdce27050efaa8bade57472f823008001658a0a680548216831790557fb84b3565ae25dc357879655e92f2a3f16deb7a78cd620ff6ea1fdcdaf61c3eb380548216831790557f16f2658927a2c13426fec70f306a9b154860cab45f3743443b427d1638565e9b80548216831790557fe1323744935232b5327a8f8b8cae7b28a89332f70b317350caccc096542ad53780548216831790557f156f79c1fce7448d2afb53eeb0e144989dfac7ebdafb1861b7fd9e9d9abaf86080548216831790557fc086d323ba8fa101368fa4ca8826b937faec450a898a374172190b713335a0c280548216831790557f6d103fd2c6d5368befe0c513e09957d971cb68431b96c5f3980bb2bc27297f4180548216831790557fb74b4a97b7f901832cb5180f61bd374ed0661e6c2023553f31c97e4042b32a5480548216831790557fa5c04f9231cc1d308878c343c420f5fe9fda18c4eb02ccad1c43ffcd73adab6f80548216831790557f2e2a42f802765a89c1e928a575a98367a309349bc63d03c5070dd46538d1712780548216831790557f36345ca41b45a7378d101e08923158a1d006666c6206b65139b0c653d29fefa480548216831790557f9ca5f4ce4c1fb70ac11cf8d7d143f7db3fe58ff90deda27206e9ece23bdf7a7580548216831790557f4a1c8c33e8d2cbd33da20064d5218eb8109e464d47129cdf1468c09139a6023680548216831790557feafb123f155ef63df4ef54a7305e8331e5e8c3584735aaddd3de030cab677faa80548216831790557fa4143036f9eb4c807c7ade490fbeebd6d03dab754dfb76db94b60bb25190366680548216831790557fda205cf0055bf214495f170f835005ae041e5525516cb1dd64bbeb1ecdfb5e3e80548216831790557fa29de5302e7d617a7ddc0700f5e4f7722c08fc24c82b8bf6b564052fb7806db680548216831790557fb83cc7e1c04a7a8a88676955723cc7d554c1fc08f444ffff0cb580c44343ea9d80548216831790557f9ca08bf1b21de308b1d1826fc7992dc09553367e7f24a4a1eb82ecb3f7b8275c80548216831790557f81ee0a20b9a0c796907d2276d312166ff64fd29a82066fd83dca1ea28ea45a0480548216831790557fc3bd58279f5ac9e968f62cd0468944a97588c325865c7feea4ca920e70df523780548216831790557f8d8d932f32058249308270e88ac45685a05b599f9eaed7d8b80efdb7ba7b9d7880548216831790557fb714da7b12fc06c8e7a1e5b4b40f871593f46c481dc7801c2691e058c4559a9d80548216831790557f18f8b463c53354f6cdef234619e4ec94f3f63a176c1bbb0f0d1baafa306cb10980548216831790557f4ae60523212a5a382662ad2a2eff5e8cd7ebc41f67e984225b59782ace5e864780548216831790557f97286d97a14a12cb07fe6cc71cfd80b39e3c29e57fc7fb4156e0643e9a23ae8080548216831790557f696269233bf305c44dc92bce47dd57b11755ea429b06ce76bf1247961747315b80548216831790557f3270eb8df2440994589bcc15f2b0e005f766afa0bbd906172faaa8fd029632b080548216831790557f7ef7db56d87570a817efbb73a5d2b60ab1d8f8f0b964526acb42e2a0594d4d9680548216831790557f12136ad84fb8aa45dc34abf707a4775ceafa846295e5e493d4a26b1117401a3680548216831790557fa8034cafcd8564f71781bb210549d68a93ccf91ea72dd695552737376e0b39b980548216831790557f1f91ca8c9a366389d286650e3036d3c6b0ebf8adf2c6a4692862a7562953c8f880548216831790557f99bcc7e44d5a93d7758ec2ff6f154fb7b8e1a3ca6e5b4c0a02b57cf2047db52680548216831790557f2a70391b436190bfe0ecc202a8dbc86e05318e7ca79269548863f921be3a815280548216831790557f14adc16123805b2a655a1d6e947d94bb1b0a08077e7b160e63e01582afcc42d180548216831790557f96ea9fdccd46b9e4b1e68533f23aea31fb178a304858db06599c27b49781811680548216831790557fde0e97b7dcacc6693f964555ab196e011e8044061cd73e80a957b07f81f9f0f780548216831790557f0e4d2860f8af7abe49aa6742baddc569d63242aa3405b4d32e0b987ead2508b080548216831790557f1eab5122fb87eda35cd02c2f521ce518b54859fe5d0a30b51c280b82c9e59f3a80548216831790557f403c229c8e2130e442f08f484185f035b54c75dd899d2e730a9a180bb87fa15880548216831790557f8c6dc35c3d696ef9aa11392bde083b52fd763db2308051e18f075195b69b75a580548216831790557f09d4ab03ec6f5a84d8a57987156fb42126d442e67c8eaaa2d0c7d89941e0fd1180548216831790557fde846b009819937d19223956e7b3b4f13cda30276668e1c029049109f8435a4880548216831790557ff15184f325500e32ebb9c00a4723c5868489bb04bdd6f2b7fa93b8e6b2bb053080548216831790557f871774de934af8c016420fb5fcfa283663379cfc6dc5d966fdc0b7bb69ae781080548216831790557f17f5abb192549673c68589f58e3e3fe5d1c48536295fb6f1e0c81d3194ce371d80548216831790557f3015810c59856b722e4d3c9b6131e7ce1b133b5844234afc59c5ea41526b739480548216831790557ff281a03997fd97bc5400c1d71cbd7a486b34cbc12011bdbd23bcabbb516c5ac880548216831790557f7479f94173f759caff3b4b08b2995eec1066064b81feb55af0b772b7a3f84f3c80548216831790557f01e7e8a1889cde4c957aef8b385f7db4afbdccca5b889ab8b8d31e76940dd97880548216831790557f868b7535826985ff19ad0796db5355bdabd5d316610d45aa3dd0ed60133e32d880548216831790557f9d8549b901b843df44b8f97b7b6338a1824391bd5a52c5789817e883c25c441f80548216831790557f5189ff54014cba3588669494c7b3bea1824d6ec7b3ac20fe1d74093975d78cb480548216831790557fa6b6b0f93d1725a20b1bccd2c7280857bc74677c8eb9aee6e6433deb557fdd6480548216831790557f9d801a47ddfd9b908e2018cf25d8796a76afbb5eb8b674c7212239a05269869a80548216831790557fc64a08d283af511cd0c538a61ec0533d94e0b30e094168749bdd5cf49e5f689980548216831790557f3509b93a064194b6e080e28e5f8b65212cc23bc91c4035759eb581f758fb231b80548216831790557f70c96babfb7346e9d31f529cb3baa7b6263c5dc501c31d6cdef425b4a07a0bcf80548216831790557f90f6e6bef6666be8134822698879ea6b82a70e1a65487b72f215b1a86ab0fabd80548216831790557f895c36fb0a43d893b6eb6b85b91e5d39bcc2021fcde9bf90d009040038a86e2780548216831790557fa859ce0cb8f86751f0fe79adb28414294e956ab696e4e1d933d94e957dfc29da80548216831790557f9135f39bdf617115a648c23384915e4ba9064ebf79964086f6fc837082dcde0e80548216831790557f0cb1e5636db53e5855b4f434af950342468de6d75688f092e35b84767ca5460880548216831790557f0c647a82d90d1748fd62b5e8d9c3f96b2bfd97d32a6435edcb5982d06639c63d80548216831790557fe78fb7277b08c1e7264b9b3c28a88ef58d444056c7b815117592f8046cd790b280548216831790557f0f4c2f7ae8b4b75e1a00e2c97900a02d33e2d004fdb503485e6b0ca2e369daad80548216831790557f24abebd48cff2a27b71ad427320b681b8dba5c35228fdcf16f15825a5c01ffec80548216831790557f732aa17835aef0225cf0f363f8fbb0853dbcde73373671d0172ea72a80a24e4180548216831790557fd0e0b1cf1ed2b3ddf11261c1366ac8f9da70ee6615a839cb4b0b0a0d53a0832280548216831790557f7ba61a26fb91786d1048f411df09c770b37684fbebbcc45f56b265699f6c1a4c80548216831790557f5a74f2f1fbced3fb8f0c74cdebc1b7d51447df9b792ee6aa859e3ef97e3047ab80548216831790557f0409043f9924d13fedf5b0c36400a36c8bc72d4a84f8c7ab229a45af4ac9b1cc80548216831790557fc949732483806e11baa2fc8e632d7912988865ec95fcdb9c2e7f6d26ffe48b3580548216831790557f84e3a3b3f2ab6dbe81cdc4740e8aebc4ee79a830ce580bf145f940fbb7f47b1280548216831790557f1441b9c16e141d6f0d016e4296d1f2d70d8435a0fa1494648daf70dd068365c080548216831790557f85d889b99492cd06b2d976c2de72be40d62542c556d907e98be989649076b61280548216831790557ffc38ea2f90f4b01377d12c4201ce3cdf8dc9ae4d97c84a08a85ab522a55a73fe80548216831790557ffe774bffc9fc9b7113ae181b96febd064f649e613a96d09ba6d94e2508ae90b480548216831790557ffaeb748d2ca876de8b3b2505e9e566a225a8eedac797a22f1992c8000f2ec8f480548216831790557fc1200d86b61d8bbaa161d71f3f5d0409b02e65fb300216ffbf7853358fe78b7a80548216831790557f3f74621ea8bf222b6c8885d00284c4f76f281dbd4adb11e7896558207995479480548216831790557f629d9d6b5f77df6bbb0629fe97b5f81d93e05b8506e63859f650f4756207af7e80548216831790557f9139a85bf2a2da47d761b6d0ed0ffcf640d0aeb4a86b319c71ee6912f3d497e280548216831790557fc6f487ea78a24f4bf2474f1a5029823ebb3d91b561d13eb08b7dfea82a95f94b80548216831790557f3e2b0457511c69aae06fa66c9b5bb85929a22ca89ef10cdbc66b29fd9daf302c80548216831790557fc4f6fff8a4439d5dbf1e38a3bea4c112e3d36e5b217d745fd5e833668fcf953d80548216831790557f7edbdf860ffe3a10deffa16dded7f22ddba9662860155fe5c0c9b2d81cc3f5ea80548216831790557f01743e2a8c44491faa8968b797855fd0dabca02c1efd00c8b17883eab904d90b80548216831790557fb09e4b440245d020acf7bf80acae5545e84834190af80b19ac03e904e0657d9980548216831790557f835bbfac703d34a6e186b5016257af749e0da6285f4e19f8045c0066a024e4ce80548216831790557f96b2a326787b76359150a1feb2b5f2c7be2a8fae0d781e0454280c5b0c2743ff80548216831790557f41336b6b68d5da9913c8d5c4d6d18dce544d493878c7998b6b3220fcd1be515a80548216831790557f5e257569d8bdd0c52bfb12d0b26da8be46182f67aaf2eacdab2ca91c6ff151ba80548216831790557f746cc0b76093c24e09e7ea129f6d076a880d33ca03ed06241de73f460e0f85b980548216831790557fd177c1478199c8b7dd10e7e15cae3098386b26a4c14d3526b32b6131497d282e80548216831790557f305ecc688726438022e69668cdbed704bb7a85b41c132cf9110328a1bbb4873180548216831790557f80d825012ad79691d08bf3764c2803b79d686d4d3984a5cc5baa8182353f0d1580548216831790557f279c10b100a864e626583cea425d1f3c1cd5582a11e307b076675fdb91370c1780548216831790557f4f77eedd02ccab374521f9b3fcda6926708d89e76c41f6084662edd97d7d967d80548216831790557fa5e1010fea2c33dfd16d4c270b97d6a15dc1dbc8a5590cf140f8d5f702eca4c280548216831790557f24ed3f0d0ff8fce9a23a07f93ff9b80a8f86803e7dfbdcaea73563703ebc176680548216831790557f1a79ccae2fe61f07a3ca14c04ae4d9ed10e5f95dea477ef2b9c2b8fac336424880548216831790557f255664bd45a12cebb76538a6f5402da415968c5dd4c8126fbebca2fd650d9d7880548216831790557f1f2dcd702619f487e0b03cb2b66ba8ea1ad87bf245d109fb34da8ae8a210e1dd80548216831790557f8ed3faa7dea13d0adc17806b63defa6d59daf349a721af1139db33b13bfb80fe80548216831790557ffd8c7f342d2399130063929daccc33dfb47e5678692bb13ab12b2a69fa6ccb9f80548216831790557f387e55094e6bd2fafc471fefd5cf00edebce2a011ed22709387699aea104c59e80548216831790557fc91f8071b02d791a4f53e034cbd4ca8172d09d5f1e076f02655458b541d8c41880548216831790557f2e970b95b00a66bd50cec96648ebdc2031fca1e2a40814f604f7ea06259b281480548216831790557f692f82b7ad3895299e83539de68983f849f32278528942fb2af0159359dfef7880548216831790557ff957e0feb7cece89c5302c4ffb9eacc0257e5ba6b8c85f0882f8d6f206e013b980548216831790557f072808c650e4087c5b0c5ee7b3ec6ebb364e70bb049bba7e528e64f3a8cdfd3880548216831790557f3795064b73bb17cb147781d204c1cafaf474f99b88d609369924d45b3f6881b980548216831790557f5805a12b5b7aa969a2adec5365cef85c53e3b871f7e24d0b44ec0a58c3c1825980548216831790557ffd26c6e7ce90639685e6d5a62af77a11de92c66d43436266dd5218d83e62b76e80548216831790557f19ec0f2a444bc1ec294b3cf3d59adae01d81a54594a3bce6c26e0216fb63198b80548216831790557fd0115d6253b1d3a73eed6c4a46d30a5be7a923e43e2a3cab2655297d3bb4f54780548216831790557f2187c72c993f2a1ef8d7dd11d3129cf39848199ba75df7dadb0dcb4b3c7604ab80548216831790557f73cb477c41124c44d8cb020c6918b36bf0a644309e758dc23bad09f565a4130680548216831790557fa13f0c7616f514b7ba28af5d7925007fa558f38d26eec2c4a4e39be8b953ba6780548216831790557f260072ff8b11fa500919043cf8a4ccc27f032f3d8acdf5c62d07aff4e9d1381480548216831790557f5f01a5d07899dc29aadb767ee9ab2aba83b7cb5ebb8b095c6e13138d796cbf6680548216831790557f03eb047edaa8f3c71331481ff7b2a0a649d6cab03e9a7bb60577ff8c308305ac80548216831790557fc681fd13c4f10286d5c683d0dd4e0dbaeb04e0667e345c56f3b27f9ccb3d4eb180548216831790557fa7ffed30e407d693394ac49c0e0a2a6cfe20d896a8540242ce62c3bbd8751de980548216831790557f54121788a94b0fd72b1046cecd96fdd2f4518b6c614908d691510599cb1fa4a380548216831790557f4727f7725d0e6505ead285bb15af1ee96bb582b241e3a5489e24845ee9af3f0680548216831790557fb4888c32f2d7747117ebfdd497bc9c0a5f0379a7cbcc6dde6f3947b9b8efedb080548216831790557f5ac32e7879039a18d20a0e88dea52b20d812b87e920b5dcaa83521698018339e80548216831790557f429a106ea0c526299a0b95070d1d481a148a72fc7e4bbb750471936bc77bcda580548216831790557fc416e47108c89049013038679a20fb73febeedadd3773d2c92c9fcbeddd7f7b980548216831790557f1889d176fb95fd91346c5e87872fc93417121def525370861af9f4c20c3db8c580548216831790557f73de4b0f73a7db7dadfe27788de54d209cf205c28a3ca90a983f0bcd1cc6fa2480548216831790557f9f3b709eca48f6ebd6431da7a43d51911554b7064238f4c2ba093b8e60fa80b180548216831790557f671146235d3837274580b5cc6ed3455bfd4e7c811b3d4cd7bd7458b8e97cd10f80548216831790557f7ae6acff33487b5c94abada7443ad34373b15c496079f22ae917abb95feb475780548216831790557ff28f37a7709ac940c37411e67e5f398a25123e37f6ab75d659cd7d9c707adbab80548216831790557f301fe2c7f978ff962ef6edcd98efdf7aaf08b35bdb67c1716c37f8a073ba766c80548216831790557fb0d8b4be9677813268ea89c3febf5db602dd26992add41133c0de4095e88432880548216831790557fd58e7b8441b314ebeb10702f23bb280dd65989d33592b13037cbbfc4bb43208c80548216831790557fa0ed996d63ae3f962f968c85479ced3b7f741e2d1875dcc234c7b9013af876f580548216831790557f2de2f9472286c8e6bea4025293a63c57e939d4a497531b668143e078a579d60480548216831790557fe0975c4c5dddc40fe88d9fd24453bbd8b5457f88d241877c3b6f2fdbd728f64280548216831790557f0e6e2989c4abe65bf0ac41b5a42e295712af544002737673d2bc45fc845100bd80548216831790557fcf93c6039b6e4b2c61e60cfda199acca9995be039ab073f3fa64d546eaf2103680548216831790557f7670b2d6aa896a2c70af7b40acef3add2adbc3c194eb41fc019aa01960068d9c80548216831790557f0249ef69547f817a8fbf8ae78e75d8f8cb21cdc52ff3270232d6a129c08508af80548216831790557f7a87816fae8a817c5fc99c9f8c5ef46e5e788bacee397c50352e790dd6507ace80548216831790557fccfe46e8f67b1c59e0660fac72f2b938bafbadbbe8bf876f629144d2ae1bfc9d80548216831790557f995a578ba688f594ddc14982af531bf6e4343e71812f19e75e1ead95fd40616580548216831790557f0bc7bf44b429069dd605d689cea415cd42b8fe1d0b894a663b685301ed54f47880548216831790557f289be4897d7c82291ac271fa660ae6313e245a8569c8714adb1abe1fa15ae39580548216831790557fb19ed3601af873caedbd9eb8692afe2d9d078cebc8f6ef8636794128716215f480548216831790557ff612a02f29c06283507b6d7fa96d8565cee2dbf7f9a4f8a6870730b075050e6b80548216831790557fc088c0c31ee849559d126ff0507692475982e18c22fac5af94a0589319212ac980548216831790557f80e7f64894bbbeff0654f2e614c528da3f489a28e768e22969139e4786fe1a1e80548216831790557f2813a85da5eb075145f2f5e96ec0bb85a9cc9d39c6ec76eabf9ae7e76ed55a5f80548216831790557fd469e17f212bf34d277290ff68909a497d9483b5c7dcfc2c61af22a15dc3bbc580548216831790557f6bbfc0cdf46f9f0ded3f729e5dd339414a428a29fd8d89d7aac2a36b4b6f60d880548216831790557f567680ebe8164813a7394dcf7c6e9baca0935e9122002a53e092050c864ca7e780548216831790557f5516a2a956749174f3c7214e98da4b386cd3eb6fd59c27b63763ba46b1d786a780548216831790557f72de1b4199b8c05c1cc700fcc5170fe90111d3d6d67541833dda1fdb3b05172b80548216831790557fd21ad926dffc1512037a15ae4c1c691a1c5c9bea5f5488586a8ae7221ba7d71a80548216831790557f93c0e7bfed1dd9a4b4982c577ba72ae1740d610fb8a6b74f18f53e7116f6781580548216831790557f7589bd12551ae7f4f6c00cafcd66d8f0ad764188074b3b7c8a742cbcdbdde3f480548216831790557ff321c277d15d0606beac119e5da693f6f10e29d4eaac70340b2413460fd0b4ac80548216831790557fb42375e3dd76931ba3bd540c507a6a4aff0ab7f3a1daf49bda7cf7bf91382d4180548216831790557fb3371d98aabd76a25a0d4b1a880cc680c42fa9cf8ccfa515acc84635e8f3738180548216831790557fe932a593d09241554059a3e9f578f4dd1cb56ff6f92044d1278f007b9a33d1b980548216831790557f6ef2999b15c49611d644132f00c8880f6aa546c04587d6c91f7bb51d135ed41180548216831790557fd151a97a7f1779d0b973cd91e4788ba36be0b3e118016eacc1b26ef56b31237480548216831790557fe75dd8f1ff7970eb6e6a13e30b6083a47099f84d5a63730d4baa76042e0c0cf980548216831790557fd94e95e77c107001f5b217b39a1b322f2b99757262c94d0f39545975f8b1535780548216831790557f07eac81d4bb90486a37ee7c6a93ee886ccdcbe4bf0b14741f63a3e78e1fd964780548216831790557fef2c8cde9ce12bde3b9224eb9a68932af6b5662bb334762b2b06360a72c5438880548216831790557ff1bd7770c6f608f1ad915a7fdafda4acd5f527a539d1a1a06e1a6bc53bf5e48f80548216831790557f96845f76cbdfb1e92af17ae293ed7986464a2a0f8da2f24eb12ee90e40b75e8f80548216831790557fc03dc9cab29804fb2b2bbb2a78ec448cf6930ed6fcb049920508256bff38f4d380548216831790557fd37ea6bfd305ca467d4390667ce04d4bb321b706a111c436b9860bfc4560f62b80548216831790557f2198e52399418fe18ab368a58201aba0082f2ce0ac42809fb5c4a0316472b77d80548216831790557f1774a639d2859eca1b8f90d289572e8841a3cdcbb21ef024b33d0e7b46513a7280548216831790557fe387f5cb1a1b355f72545747e92c127a584179b6709583641251dbf496b9d68380548216831790557fff4f969be47bedd7dd7028d8eb03221ab41873784da71a090679fbedb8c0147480548216831790557fecde894e9d2c4264c7b73400915957a07909f7a060c566e7a600ace9971e629280548216831790557fd075e7b7453173ac0d18feba2e13e0cf5e614fd632b2b823e51baa356e77665c80548216831790557f1f99cf673bc1d4da5b3bc9c0dacaacd141dfcad680c921c86757050417ecbae880548216831790557fb7dd4424b58c140725b87a18c9d080285c3faf252893d0f02c6162f34467b90580548216831790557ffddd093d7d90bd067c60236e74046d6454837531170e0b7620fdce83591d5fd680548216831790557f486889f44b28e7b08ff5fcee5919859cd57776effe1fd32b73bb64c88b7c566a80548216831790557f807ee64b5b4cb8148f4858cfe7e233336aecf04f1cb2515b63e3f4da601a5e2d80548216831790557f6b2e6ffe4d0df3ef45661fe72f2bb95072a6b916da9ef5c31b981a30f1d8fc7880548216831790557fa77e0e58d3e50678cdf62dcb6567e0f2604bc1abe38f57fcb3bb724ff8307e5c80548216831790557fb5ae8aa35ad3c624eb092d9665c188f2b3c254f7db94b4971b3fff03b7e32a3880548216831790557e2320762e0505ed0e6ee89a1c9db09124e3f2d355b3c3fc8b57cffa16a18d2280548216831790557f630c53b6bb15223110e48c090fae0a189414e4e48bc1a454b00573e42d4c7c9b80548216831790557f33fbe9fb79786d27b0dce5bcb00f0e2db3f3430627680025c67751c5838fbd2d80548216831790557f6b6e24f0ee736d371ecebfc93971c4bfba38fa875d11e8ae5ab2fdb12fce76f480548216831790557f767c5efa137300d9b8c38819ff2b66890dc5cfc02aa33d2086ad209024bfea6280548216831790557f1b66c468a9a28d672e5da7943293368754106fb1f16270be996592cb09b4e19080548216831790557f85fc86b1fbf091487bf1978c0ffa69f88bd531946380d395a2d9704b40806c5b80548216831790557fa1de39c4dd6a2c78520e5cff5438e63467aa7f08aa3f950b3bb900b63ec2109f80548216831790557f7053d7bce3f78008ac440047dd88295b07edf5a124a154a0c6ff181d711614c780548216831790557f55909cbdca41ba5b7e1c4847dbf8a2d1d2ee97e8f4fd0d13a284979f2b750a3d80548216831790557f4501e90177d5f66f3714dde48cf1d1845b5f717d16589049e6a630bedd5ecca380548216831790557f6b8fe7102ff1257b946cb4be91f0bc2418cb404c043a60fd931159d2d5b0ce0680548216831790557fea627fa237b6889bd274fcf9d65fb2178b11feff9f0e288de52e3fcc7760483280548216831790557ff433dc1f2220e7adf69456872f0219fee71cb5e8f39e5b38010957fe4983f85480548216831790557f2d3b5fb4162db583dbaa485e9006dd3f0bfa75118103406b977f87d37d76ba0280548216831790557f83feaf65cd65a4bcec230e644517fb32d9be178dfeba8234812e5c52371aec7e80548216831790557f8e5156f9cfd34254eef4fe2da8d077401aaea2b6d4845aac1a6be5bcfdc4d33880548216831790557f502d30d8f6186d686ede4b17d26ccabc20416cef9f18359f0bd1d0b3f780d7ee80548216831790557fdf9973a182d0b614cb36ec7d5189dbb20effd7e49cc8e33ce06ed946f0deaf2a80548216831790557f5d358cb1f2812a7c7498f541ccfee2dda32488601192ab89c19d890ad46e985980548216831790557f3723fea8028343d1dad8a494813b02984f41509e4128af6b1227003fa53442a480548216831790557fed95d6f0f3130bd4008986001d65480d2e89a8ce9582a5783c5880750d395dde80548216831790557fb20cc357d3cc462d986b6b951d81b5cb5ba185d2266cdab8e50c99263c56557d80548216831790557f7cf576b0552e6a2bfd54cf03c7f41419d52adb6fee85639ae64b3636d436604280548216831790557f940db6d0326d62573689b32738b0464507dfba96f2003d2b443cee7f23dfe9ca80548216831790557fff2178b7f6a458ea565bbde429dabf02f87df3dd4422d6f0e45a89d475270b3d80548216831790557f0a0f344042f1ca6294e9f20a08e0973d650bcc2ffe7dc726c414464fd99be1f780548216831790557f73d69579f6d193b54d95dbd7e2058bacf3999cd0ea9fb5a2e29821b5cc41b60c80548216831790557f36fa6719e74ad44fb8f3963c3dfb7a69b04eaed5dd7861fba4ca7a3ea6a7b14d80548216831790557f38b29670c48df02c03a3deaae66ec2d3946de637e91ebb1e183cd4a821a1122380548216831790557fabb68c4edcdb1497ebd3eef381214127e8e248d519fae9585fd810539a1da33b80548216831790557feef9ecd2bd9ea7094ab7068fe5a6247076b522cd18193a8ab9a9d7448d6a33f780548216831790557f88e306449fb02c9e8d12907171318da21240406d2c9fdf1fdf2d0e87f9d7125d80548216831790557f93ccc4c1b67186eef7bfb2036286a57e879bf1f407472fcee1d08677cb67963680548216831790557f62115a27986194b7e3c2768149020ffd01304f1d6a91797e66c51b95316734dd80548216831790557f08d7b2e17e6c5f82ae8f0e34cd32906c4e70f47b11b6b67a4c136b25d785a6a780548216831790557faeb721bffad505b90f95efc1787ef9aa0c0398f846eec78d8bfd507e7dd16a7a80548216831790557fa139deb86efcb85a51561e177ff8b421e37796cd7a100b3202cd5c5d2752058380548216831790557f2263200e5afd3832b9b345d6aedcf9a648f620c3079b9b1922cbc0b5c135bcdf80548216831790557f7b263c5a38cef6e1869cec92f8c0ebc5ebed87022b66c7629f372ab674d84c3280548216831790557f0a05a66160204abb8a501d94381144e59ee1cc60b4b4da866913a5bdca118b7580548216831790557ff27c13e7e6405f66b61f2b383c09cd5abc13ba446977b5837f92f5ccf9d7598380548216831790557fa0b722152d4493e2b9991ee1c281ba5ad6a0816dc8ad2430081b9e973ae486e480548216831790557f309192df06e1704ffbc76aaa5c2c2355bf9094c1bf7e0bb91af654bfc06be1a380548216831790557f35c216d43462390cfe1ae38fc80f4287763818091d714ecac9c590f1b8269f9980548216831790557f460a0d86e029bcda6e17815745fb92276418895013998c6ed814f2a915c1eee380548216831790557faf191d2681cced12065f9b9c49fe793e4ec79369d1e241ab3c66dfba4fb8e7ca80548216831790557fc6ff2c0b3b426b1773b0a00b308e4810050893d03dee2e9c79ca4d033186128780548216831790557faed8192ffa7d7c7ee3efe16f7859cf42ec93824f115ff3bddb2458e16dc473ca80548216831790557f4e0100fa9cf77bca0f6b3ecc51bb5a8dc6738f7f5a9250acd1f268f2708782ca80548216831790557f79a9f17ffab2eeb9f45ffffb6dffec458499ae20ce1811f2811d866aad224b8280548216831790557f23d036d9475dec0d0aeae4736e53b0940d41d60e61e5afae2e629375c3b9ffbb80548216831790557f4eca8ae9885868e0712d486a0cbdcb4980e043112e8fbfd6ac12e10707e6412c80548216831790557fb5fa67c9b466dd4c85eacc3f7bedf27ccdf5d7898713470aa186ca98f221290480548216831790557f98ffef050e2345c05fba2b5c869b6bbc42064c283d911f15f0269da693ab420180548216831790557f2800c85600102c14807140b53909c0a9c191e38db8c553544f6c0f39592da4a380548216831790557fd2f980f42961293116eb34faa254feb31ca93afe3133f195613734af9184089f80548216831790557ffa80e5879c11dba347a4d42df49f1597108ae3285421e07b0aa64f668e3b40fc80548216831790557ff10b0283d5e932560aa879835519db1c6e81404ce58b3e6c1c680c17b1b7ac2580548216831790557f983944d93a1cfea3b6c52169dc84caea32b8779df2e4fabad87ad82b6637a06780548216831790557f6a24cfa9e1b85342f7c3ac0142f795ca504380e7f6f8af892a0fd3863d664a1b80548216831790557f1f0f1e40d7ea8621ed478ffa4a125e8d0ff73de3b3373777bd26a84879e99a2780548216831790557f2af6ce1c228c4a0713aa9a961e691720819e7da13df1a59b7a17331c1849374680548216831790557f57cc24b0e6643fe10ddd40bcabab337b7d52d2b1af316efcc9e2f33596bee96580548216831790557fd2fa66fc80d46d3e2fa390558ddc8826bd713ec434ef48c7bdf44074f0cde86d80548216831790557f0c4c8b3d87db4afb0bf3053c242be1567c10f3bae6ddcc8040ad7cdf43f704f280548216831790557fa2d7399e3237758413462fdc423834a3780bc18f3c51a51c90e95d383acce20e80548216831790557fed7aae9e467118304234ce655e75af7cd7a61e9ea95a6e65075182aaeb44753a80548216831790557f521b8de7c666b1bff6f539606232b492fedf8fffb5202d054bf0e70a23bc35fd80548216831790557f9e82b910cf2da03330240450aa9c134393a09e1f4d6869d5ed6fbef7c3f35f5a80548216831790557f014fe0fee51847ab064a9263be24dde034c045bbc5eb7bee1c8a78f3930d154d80548216831790557f345a12acfc5ba3e2e7fae9864e642d692c1dcf61afb5311c46072ec78d17422380548216831790557f8906139c0e05aa3554ae45cae5c7a794f6020f17ad977812576d39a9dd02abb780548216831790557fa47e007186fd50e241781588fa0e59e7e5e981b502d9a74074f7b2115dd0ea3080548216831790557f1380686007837a64de28c347c779dbd939135f88730150ba8e4d063f76bf03f580548216831790557f3af56ea08e941062a51347f2e87b6d2a06bc642852d37d6989fa9d5237c5946f80548216831790557f696aeb22848db7d317e21f42316113eab0ad963f8b6aad72f5e1a0069bdf3b9380548216831790557ff5abd2970f1719a61f47664ec5b0519ba9adf897e2ce1eac44defd2274ece6a280548216831790557fb1f80003bcbb9ecb76240d2f0d9a01f2ea7b5af81b9b3337b3761e018ecc19c380548216831790557f4c04969838cce633491f82205dd564dab68fb88d765735e0d48059edb06f677380548216831790557fa21263e8b8ab761ab2666b4808f5d590e2c76f4be5b58630f0334c458454deac80548216831790557fc4b76f05698d676ec3b3552370ecfc58b8a427d6e3f898fb1690a089e162752a80548216831790557fb34c2bf938d0c60c19e5ade3630dabceb5110705bccd9f91d9463ddee21b772780548216831790557f9523876ec7ff05b66939393c1e1982f4a8813d5281e5f2aefce6c227a4b2b1fb80548216831790557fd8507a47d4e9557b6dcf1fbd911d9c52208f4205c8884c83eedf52183bfb945380548216831790557fa16521191e4fa5915a1af203ddb63481d014119ac93e9c1bfff0ca796ce5ef8d80548216831790557f3410ba3085fc49962734b190b705149aa3c4e9ff418e17088c7a116e6602f92280548216831790557fb490b708e42b16293ca4c0cb8c09e74807f89719f58da626c6c0e5893d0ba19b80548216831790557f35bd3fa64ef12eafab7c3b7ab02c85eff0a81caec5705ed26d586dfa3390af4c80548216831790557f4398c352176b8f796b400dd455deb74f0437c4a312aa8c6fa8d752c0e99bdc3280548216831790557f7956fb9ff1d5fcfb550ee99976ef67dcd5f42505d713b3ce5d1857572d43a4f780548216831790557f74676f839b862686d77f8d6ab0779ac93d5aa2e3800c6af6ed7aa086a7e8048580548216831790557ff2213cef25b3fd2d63244919804490e3f1ffa3c1cd1e346acc5101d9318fb04680548216831790557f7fedb655a1904ebc8c072d83e5fc423b1fa857ac4d233a67aad1980e65b2aed180548216831790557fbde957ae40e1b522f9dec7459e1fda75b7bd0e71b4c9218617c5c14a604e202b80548216831790557f438d81dad715014e302ca3d78b3a55e5125b475a18520ea5fd06c2044f1cd39680548216831790557f3af26f091f856c79c5dba8637248bc416344a4b11cf919e50608c3fe108d815e80548216831790557f162b1ef6915323982a77057f178a676850e379658d17175fed57c255a6951e2e80548216831790557f34c8fee5ef1a7d4fcd54af49059d6e2a40fc884bbc304d3d51f85d11c2dc2b7e80548216831790557f27ac872363328eab36fb85afd991efc89367b76e0e32a211296924d7a749cae480548216831790557f416ffdbbfd52529f5e6a0dbe521d9c9f266a8b2e5059bbe3d5e5e335145f446780548216831790557ff1bb6478f8f48750fe7860619a4def3b922e5f6dc9139277b8908e11b53d79d980548216831790557fad937f0ab8a56cc182d74c6e548f448940a58539cf888e0721f3b4243182b7ca80548216831790557fbc785e418ed11f57be237d8dfde22d258a65e449135ec74ca38009291683e50a80548216831790557f024babc62cd7a2916769369141c9cb1d4fce8fa32777cdeac1ed5915e6858fc380548216831790557fc29a3ae3f19d637487e97a6b97302c050e313cffb24c38404bb8b0dfb7882f4c80548216831790557f5cf325fd6bc81055d25974ca8ebf9462857983459a0bac8f7bfc14d386f7dccf80548216831790557f32b21edc954401c0418d911ba24e69cad8fe25a96f4fb8dea9ae53fc38c2175a80548216831790557f99fb884be37655b70fac060e9a21bd8981745cc8d9edabf28be6f343c526e85b80548216831790557faee4ab2ae6fcfaf87b9a0abbe13801ed46754f965783faada2dee3d03ea4fd6a80548216831790557fb22592b38bc298031d9b74e253d341ca7afe8a9afc3e752d011ac8910b8f7a9d80548216831790557fd9ebd33152482253c7018c01ebfc65e666adb75ba629a92b0e73ce2b452a788880548216831790557e3f131fb44522de1450865b7a4be8b06324d225846c8912933ba4677a2c83fb80548216831790557f419f605c583de46f5d7222f3f3e0757e03407d859c0691f247a4195e43c1cd4880548216831790557fbcaeffeee092a0ed49bf004d804bf66fbb1319d0f694e214ff8e5d240b5ae20280548216831790557fce65a31eb0de2314f49996d35c07c2d9b1ed9310670729fc32305a28ff7221b980548216831790557f68e0b3e7d8dd172a3736c1c74a351ea7c8bbb6b38138e48c52f6b2be69dd3b1580548216831790557fe2f8785cc0297d9899f489280a1187be3b1dbb8897aa6a3a1eda124b6916b9bc80548216831790557f363badeb3fe896802a4a72eab594c34239a2c4af743081afc02ece5148e1616f80548216831790557fa1bed0ea5912144a0798eb9bd00c655fe3c3cac944f6675f30feed488b1d5e3080548216831790557f4579b838a6d4dd586d4636c7423f28509197e4ad79b72e537124b5a94073084e80548216831790557f1b262175ba03a89505cfbfdca6d5ba2fc35d363f798634149c63a4195944b41e80548216831790557f3b35cf4cdc6c353438e9176b279e1c6f961484a34c319ae8cb6c37822020120c80548216831790557f311e14d66e014a1cb7e5f331b07d84b83a0067c426666c71fb01055e5ef78cf680548216831790557fa2916bdf535bb82f76c7c2d62acc399ac3bd0e152957ae5958430f4783b0e09580548216831790557f11cc78c3397afcc2190ca31169a77885ee06e46aa76b534fa4f92d571e3dbbd680548216831790557fcf60bdc87ae311f7933cf1d34e25e7f4aee4d9a3d64b39027127dfb46299265b80548216831790557f0b62e5cd79cd92258e6bf216678c4815933c630140699544000c6cd5f12837e980548216831790557f7579aac9c8df8884dde425b8c8c8efc342ad4396c766f6f8d06c0458b8c82a0280548216831790557f66ed301db77384cc71a001d60fcd01cbeee634047aa02630e4e826cd98f1922480548216831790557fe6406d2efbbae00e3058ff4d8ae4283a269797d71545dc0980e98d0ff1512c1d80548216831790557fff7af25255c5dcbb13a0cad8601c58e971b5ddede6fca3e105dcad011dcbb50880548216831790557f9f3ea3a062ce1b573088a795b1eab218111a35d953b7972d4438492fe9deba3a80548216831790557ff7b57a18bb8c6b0c9f73277672f28910d59f702b4bc3bed179ec36d857e166df80548216831790557fed3d46abde55ac7a5ea48de1a14afaf069b50dfa08a970d7168cd316b506eb2780548216831790557f148f108d7ffcce5351131834102d7d326f04e58833fdc9cb439c05fd1aaa60a980548216831790557f027382c0e2adf4dea19162eae5fbfb7314bd5b08e94fc489d4bb289f5885ad3780548216831790557fb647c872733cab70f44f6105ef668b641877a740c75e2c615c27b3bf8879f51280548216831790557fc9635532dcbffff8c8316c5bf168f7917d9413a5464b707aca7d8c0ff28a3f4880548216831790557f497d3a0ae1ee7e19644dc3455f2401e331e8e5cd70eb3554e8b5b5ce9d38404f80548216831790557f8d6e63486f929c432f92005de85a0235be97c564172b5297b93b47f1645d6c4c80548216831790557fee00a8189a8838a5e7f2bf06a30196eb68a22207b892d1c5d59b69c5c18b73e680548216831790557fbaeec732a0a8d544b5aa2b6cd2874d2a5ba24830ee2a27353e8d9c2903f5eb5380548216831790557f2af253154bce9c234fa23b2a3ed9a38a63ff12fc99692351353785ce366a968080548216831790557f483c6af9031a16050f2e49588a0d0ad33637140e3076acb0dc8ecccdee0a12d580548216831790557fba437646767ad6ae5b4994a22f84645bfd84d9091b95d5d090a336c26579581980548216831790557f82b2ea37f2bc1ce25257e07f8e05dc4259ecfb5b7c9b184270d52ea10c9c012180548216831790557f91a0436ace58d2887bcdc88d90d46d24bd5bd044f81039595758acda8b8e84a880548216831790557ff710ab99ebf162d9d1095631f002eb1575db3cb2a2489ed29497f04f3299279a80548216831790557ff5ad0754926dd59c6a83cdd912b1e438b91a9ec803cbb5078c4167f1fd2d29df80548216831790557f20488d2e93c90f4a346f22455ebc0f9924dab5a6840d5ce5c427edae7857a66880548216831790557f0bb9a8653e2d2fb0cf0a258248515d61fe1d8089b12e4fc1ceab2207ef55d18e80548216831790557fae27abfedb3654e90b352f46a0e0d32400812a2fcbb1552dd2c66cfa5fa7041080548216831790557f1d62fc760ccb88e7f2241b4d26622cc9b8bad34b054562a185b5eb6a9493ddae80548216831790557fd98e777e048f887bf3ad7d05147f1c69928b1621c42435d9db6036e4e6d7fc7e80548216831790557f901974c4463cc6baa96187377b7537341c9f1c2d239461c76bda83c5aed5bef080548216831790557f64b8b235f4213d9fe1e637757f969cc7b5b45f90c7fbe5cc44b3c7877b59202480548216831790557f47bd979c16e55f2b1f8e28f72e3a2bce4c5ae5038559de0c10e89a4edb4531fc80548216831790557f6ebd421c701f2189375f4259a19499313e9073f83a61fd523d62e2e93d32a70c80548216831790557fb531e29d2688fbf10e9b69cabcea2f124b86162783f4a2a86cd95f4fcf56c56d80548216831790557f2b709a5683ade677a0c543c382c14cdd4ab90e8e6c34204d89c8cde2a61906af80548216831790557f5f8438d8fd9472f213412754c731d75eb542848803d728db4771daa53180aea680548216831790557f665b4e0b3eeb57e30f229bac77b256d4b8bd01535848813521e2d52b21c31d5a80548216831790557f8fc314261833e4badbeccf274f91f160b7e66eaa22969f8e86fabe6251d01b3a80548216831790557fa92f8db8c46dcb0ac9300e318b38502f07bf60c800e26dd0fa41cd0242631daf80548216831790557f0951344522257e7a4247bf1d78967922c2f598cb6718d680b12bf5d5d21faf9c80548216831790557f3bb509bfd2fce3efcb1e9593ca213c7798fc4c36ce9931f0999edeb18bb3c9a380548216831790557f2292bc9c7ae66fc24d5b86533e6962ca3f7fe0d5ff61986227b7d383d6d720eb80548216831790557fcbda458724998a584e1abec55602f3e6777661d4b4bdd855b4a2a5fbba62cb6a80548216831790557fdfb46c3fdb42bf6bd705651048b969138e439da831463811c7aa9c434d2aab7180548216831790557f322aa178e60619443d2cfebec3f1bb8a3d8a1b52c808468692792227d4a5162780548216831790557f1ece103d3e5be6f532621bd41e74bc2f57ea30549547121b7e79a8467897441780548216831790557f6d06e83aadacc24d4c2d891350f0846328d943085a820dab0fcd87242317b00780548216831790557fca24f73e7d10b74b73ad5b8a0d4c1f1cf93ce27911ba6722c71b7d7f91fab05280548216831790557fff3466ddd37f4710a2d25084e8085b93189e4c1d2a3db3cb3878aded7a8e525080548216831790557f2106389b2aa0a071115947b2f356961a53d2b32e8b2d08c36819f812912c662e80548216831790557fc9ba8419b8162c1b44a4439017a290242bfbb7212cc8a5f3b2493258d91bf0e980548216831790557f679dc61560cf3fa0e335c8884eaf1a3f6f80e61317f080732a5d28c6a894209780548216831790557f1558a932fad3905e152f153616149c8b4d122d132e56ac764b2857b251e3027080548216831790557f57b4b69463336a65ae31df57bb0ede90a1ba858e7929dc4099598adc76bd0dbe80548216831790557f5829f417008289ca1d784f15c897a2f2fb2ab1b4e693fab9d0cbf0ad3fd71a5a80548216831790557f9d00103c7ec60a61c23d9a98efcd2d6a6243338ad9a6f56f41a3eca602c2172d80548216831790557f2ac8a3e3c2849e19fdcfbf9ea97100133a2a4329a93437df5a8cac726b5a607180548216831790557fd37ef85f95570b06bf459f0068eca45e93b7630d0e393247ad393dc5abdf4c6180548216831790557fb64d1120f01c9b418839046fb3b575954b4d0dc310f1065e35910c11a8a0b9be80548216831790557f46650726481940e8f01d3f0527c3de6de9963318bb8b9325aa07b064f1fa82f180548216831790557f9b748361a756772334d7657475bf96bf35968a730ac4eaee4373a7b170c84e2780548216831790557f786df75693e6733e7dff508c950ca81c622c5302adac3b5b617c81ab8a730abf80548216831790557f3be1fee96e4e127690c855a3599709ad17ba45c337581ae71523cbd50466dd7a80548216831790557ff4fd6abc2eb71151c526a5fbfd4962f9666bd4f80c5d0f6cdbc0a4847128c13080548216831790557f033c92036f3f29a657c60cb9e1da204ea6e07cba5aca2c4e4a591356b72a257980548216831790557f64460e32c15b44cbcbf9705eb51e508ca3b2cf23bd1f2db9e4502caa2506e3bf80548216831790557f6848f9951e6a3b28da67351c5b9609931bf93717a216705f67b12c764fe6dca380548216831790557f942a911d89c848f8a158dd71ce4479435dac98dbe2bb2fa6615a52c96c9acc3d80548216831790557fd1aa6f42e3f567d695d0a1d5d6398d507dff4a1c33cf4958808beee37323577680548216831790557ffd0d64fbd3a381a9d5ac986f1aaa2fe5efcdb90d0ca6fb6e9da18ff42a05d9d080548216831790557f7558c764ba71cdd6c3914f3e731b326574e28b00781c4a82c34457b71142704780548216831790557f5b11dd01edae7aea61babc4fd7476cf8ee762093ba58b151c2a83a96cbe5d13880548216831790557f06ccec758e435d45b1c888246b0d4156ff2965d249bdb99797f834cd242dd4e980548216831790557f7b6fc6026d5f382a1188edda02fdb47fb1046d343c1a65ccf8a3d062835c337280548216831790557f40757ee7bebb0b31efd4cc2f916b40fa40cbbfe79f035fb8b296c42f00ab89cc80548216831790557f12fbe1493b531563cb5b3ccb71e66893b3f192a71f5e7a2fca9b41abf39f103380548216831790557f5e6859bc32d8ec48cd382b4d1885dfa6f416d8763056b0ed1eff75ad69fe11e480548216831790557ff504eabed70c1d7bb385418394dd6881ab4afe01b50491c87b9fc0a9c810dbd980548216831790557fa1861a2148940dc596c1b8372969d99f1e21f0e30d0828c2ba056b643550689c80548216831790557f677dd813f4f90b1d36acedc46c16ba43d347021ef1e08523d23305789c7840eb80548216831790557ffc6523a12ff391778fc1240c1c12b10ea0d4862fa9261b5926e51c6f625af0f680548216831790557f5160b714dfe12829fbe8ca7233449e9e1ecb074ed23dd07b55b850d18949c1e280548216831790557f7919c4ce83db5b6c2ae33088c982a8a9fb331c5b9bfe44d7f53d4ff5f8e28a9380548216831790557f8d488d1c2112c787520d34ed4a66348e44a2a0cb913a482cc78ee3f81730427180548216831790557f714a3805f1f3f2ef490be28e5504f8f75cf16b4cfda9b4eba4bf731d45c0d3e080548216831790557fe91c4236a7eb3aa40a175621b0d977fdc8a3b7596c4e4b6d0813bb2354b1cd4e80548216831790557f0814ed2d4a3215cc94da728ce18074315f62a8a2e60f2ef2cd3f128d1e3115dd80548216831790557f78c29c26ee6e1c3ecc8b5958f414cf9892b469ab3e641f91fa937ea173e36e4180548216831790557faea97fe05b6efd91eedd9aee9b5b389862f486c8e1c8c6ce5302d7c28b8926de80548216831790557f1be425e58211cf51e6d0e669cd35262f13d33d02d21660170dacd0c0bee6445d80548216831790557fe955e3eb52b60499cd930f3d66aafe223d51ec44cc550e5ff6b181976723265a80548216831790557f2fb128afaca46393d3b3048031857413a6d16c27f59e76d366e8d215b0c4b31180548216831790557fc8fa5d9d2713f306791f8036f3fc59df5e64b2c1da681d6d0a9af9b9b23d52f680548216831790557f36e50ead368ed4e87786715800d206977d2cfcd9bb84f8ccb390b718fc4067d280548216831790557f6c3d0811a0d0972304b28b2e2d624659e518d75980e12918131303d71cfa18c280548216831790557f97989e0a690c9a46cadd5c1ce9e818bac6d81530d59924a64355176ede362bec80548216831790557f3558bc459aa72aa12bac14cc3add79faeb7e9e7a6f3094cf1f97c8c0ba2babf580548216831790557f2bda4a0a1a48cfbd7f059164e2a26af0846211cd1367b831582b7167e37bf61780548216831790557fa1a3f06054fde6c7a98a78f0ec974dde6a40103c571a495ce17aa163bbba9c3c80548216831790557fe5e03c7b90790dcdad66ca6479df07bcc1d36637f3e639357183a328162ecf0f80548216831790557f28c5580fafd7e0bb06e665e06f08c086a2b4196935a1bd54afb3b32fc2a4b9ce80548216831790557ff9dc82c4bb39c9e2383f32d6b5c7d4c03d817cb6597b8dc030a22ee824cf1a6c80548216831790557f207e308fc75cfd85ed6b18c2fa4b8e6ff10e216877a1b13e66ab01b0f632914880548216831790557fc94cf190de6e2be9823ede8d8d2cb6c2e55194eb0276440afa6a2b2ed57b0e8380548216831790557f397ac91a6b6959cfce937604e902cb22b22cb5a9bf688f3cb87ec75bedb7003a80548216831790557ff282d4b1703ca9e1b52193514057286e9236c02c18ee198f5dd9fb48722a0f7e80548216831790557ff9784e12d125388cda7d743b4a8a0a8254e3686babf4231189ff982e12b1b36880548216831790557ff052756ea11ff076093637d356c766aadbbc73399a80f4d40058c763609d5db980548216831790557f1ca3896f1e20a961028f541ec7a0f20d9a22bbca708a33d063c80bd43b58fb1580548216831790557f55d5a189a96b2ac00b6c7106547f3134e8f08d4eff8265f4b0d6cce6cd47933780548216831790557f1ca8145c8e9b7628629f578237bd9ad49117078623efce1a8fa98bdd84af4ade80548216831790557f50a52006f4a1b0449a26dc30b1a3f6f4b086116807058205d15bce4f9e28352c80548216831790557f390060e9fad670b529a87985962240f856dfbf86aadceb44e3df102eb6676e3580548216831790557f0a0651dd87e1f72445502102b9f8f324c203da283365d8b160a8e15d1becef6980548216831790557fdfc74d5b5056832f1a156dd427d84490ec1ebd02d735bb41a4016fc6219a60ab80548216831790557f2961921e4f34c035510dd2fba7cb96b7bacad9b62406247bad63df1a1303b02e80548216831790557f4615992c30ce424d9cef5fbd68ac6766c41904e2fef12222df399f1f9cff1d5980548216831790557fdf2f7e43dbd2cd6b42ee2330135bf758ed2d684377263bdccf23066ed107f64280548216831790557f472911975f3c4b6b7704c66a31a090234bc5bbc8fd3b30ee284c4a9e8dec5c6d80548216831790557f4dcd3c194ef59206834c2a6809c2e64855a56514ec1459ccf28d9ecbb834fbf580548216831790557fb63ee15c3f74f9cb18b3fdefb3a949930ad598566465988c3d72e331caaea44b80548216831790557f4e70f7ddcb7b6db020b3e1e43ad549e740f09ca7854ac8c905ca7b2dbea6badf80548216831790557fafd2dfae6e50de74536f2c021d7a9ab676eb1ce61186a216cd8c2922647bd2b980548216831790557f0330ae13f4baa7f340b681e4d7e0ba9392ffa997516d4e308437c0699fe8cbf880548216831790557ff05754a10228102f561ff181961132a4633621b431159653a0e829f9d4c0304c80548216831790557f2570ab99b5dcb0afd93bf86cd91c2683cfc1789171f23e370ccdfdb07310b11e80548216831790557ff3fc87e20e3e002f52e3e5b59a589abf364246be81912896e7e9521f8ecd833380548216831790557fcadf71adc5d9cc5e2808f2c2f64a3bd4a461a797cf975547f4c678cf1d8805e080548216831790557f74e71d4a10a0f24f86ab30f5e706398742fa3f54aac809a9a9e71303d219fb4080548216831790557ff2a9b5346226beda11b29dfb57bc4c2854440c5d0f0adf3ddbd00e959ec2c3e280548216831790557ff203ea1373a5574c35364d37b49896fe8492515470bc1d6a27297fad4904f97b80548216831790557f6eada8473fec280558a4b301f541b11a5f5ac4e6a478dcc3f231450f454caf9a80548216831790557fac8f867571645c51ed290ca197d9f85fb2767b8ed9a4728159e0669b0ab5a5e680548216831790557fb6e910b5b883a06cc249e7f8834c9568e5ba97451138185e8a1b0550d49a057d80548216831790557f1b85923e3ec4de494ebad134488f4d7e23eda8b804dd117754091bd9c97d269880548216831790557f72303f5d78d6060b52a0447e6a2188c18612172a3aaff4c8cc2395dd5abacb8980548216831790557fe46e3d2484612ea7af049dc2164c639f7f41779a844390ab29319ab4b73b3a0a80548216831790557f245d75a983b0cda9b7c12cfa6cb6987bb80f2585a86c46dd761cca392831478480548216831790557fc101617d195181b843d2c66dfd2300bdf07f1321ce50c9dbfeca93d66b5d2d4e80548216831790557fc9d9f1e08c18b30c295b89be57ed6dc294a7df6a4cf48cee444c9d61df126b1380548216831790557f69ff825b7582ee999979fec492866f131f3d8cc18798a9f0697a37795f78911380548216831790557fa05a0c2a85e39f919c307b6c8e538ee432a3535c21384d6125ab5aac4030e46380548216831790557fdf415b4fcc2790a3b1c6f6a5e019d884e193fb1dad985abda32a14c857ea5d8780548216831790557f9cf7c3e0bd219062c924e732656710b7325b0e63f27e5b624e5c5bfd76d0a44a80548216831790557fb7fba814b7bf97193471841a6a303646fb4f475aebecc1bfe4782166a4d02f5880548216831790557f5f0ee4f0c0deddaa7746c81c57f59995d97283743b4f12410a62a28829ac103080548216831790557fcce1346b512efbfb26039091d8a3681f8cda60b32af7e0736051c71ac919014680548216831790557f4ebdb42acebef84511f4dda0b65d91854ac18320f3ee3bf7285e718650e8f16d80548216831790557fac63261a302ea201a7270c48559b9f91665e08da546f94a8e36d4d7bfd7f76c380548216831790557fb9e99b2e0f537dcc375dae0524cd9e9124e6b92cba523f5b513f2c01c85f759080548216831790557fd0c67bb2ea539a0402f51660c52212701ea029249fe1b97cb42d69359111a71880548216831790557fad8878f928732ec0c7699874d4f062a2b7070bb3b28f768bc769a083508b78f880548216831790557f872d4330acea8e788734e0f117f32804069cfcfb529c9b035ee703fa636d2cc380548216831790557faa68d44234f010cc16b972a44bfeb5f202c5885372c7d8f51d0c0bbd924b728380548216831790557f523985c4016403135daef6783281154b3b265216791846989d828a6322af31b880548216831790557fdc9b933cd62f214c110aa348c6d377288e1924387c63629916b62360a50df6bf80548216831790557f7ee57fe2c8fbbf0139bca31c5645174cc28198a925e80db190523eefe6b4d77b80548216831790557f4e026dd328c1f91e58693c71022d2f350c232708e5edd70cbc09a8e5f06a6c5380548216831790557f15633daa55020ba1716433eb9642a3273b78e9d86695c8f28adf25d2fff86dee80548216831790557ff31598e243e9cf4a9bd7ae00bb3738ed85bc17011d678fbe800765f28bfd894580548216831790557fbe3320313c8fd918ca7bb7a9ea80949dabd583602e1beb00ea1cad0050c433d880548216831790557f9ec8cf5a0074251005ed8a9b9652860426a3d07e8d8d78b9614a3acee924e4f480548216831790557fd1055b43fcbbc1200b723f2b3ae1638c945d0b01fc43b3e4993d4273b729b8ac80548216831790557ffb6726b50385c07d6d7d05c9c081a93c45b1126610eb17dfdfaf9dfaca3fc28980548216831790557fa05a0b42392fc3c0badbe9ac239cfad8d320b965d7f46edae532f89f0714a86580548216831790557f5f39dae66c6760d6bf8c65d7c5afd8e36a765b41ad4b424c2122410434cf046a80548216831790557f214f4cfdf369f5a12378fc65945982d5d8a272133cc4a67d3f20a8bf048947ea80548216831790557f40c431d6f856bca54a163141ca655e7fe0c1da095cb41314aeaa0c056794384a80548216831790557ff958763d6125586820f75c40e5bd1eaf780ddd148da4dc5b65e955fcc9db0bc780548216831790557fea1f25543cea6941b4e04d2b0de69ce37e6998eb1377ba591193af0ac2df0c7580548216831790557fa7bace196937a1f8ae0140221f2500f94e85eb1f96ddd502fad262165faa5d3c80548216831790557f483fc49425afa5f803d1ab5938fae20b2f31bad23b65040f977c0e0ee5bf6be080548216831790557f85c7f342ac804792255dcc0c64c6667f7e1ea5d4d9907178bf41fcb2bb0609fe80548216831790557f2c5b1483e331af1d064c25318fd76b67aecbe7e951c071ae8a59774b657a550080548216831790557f11a5620300e19e9bde412d9d6214277ccdc045821192ce06b00501d29f0eba1f80548216831790557f4540cca4ca860781b107e25a81eb2c09fed9f31ccd75a1e77b2ba235165f27fd80548216831790557fa9c733cfc8eac00efa083be94fda171fc2699cb65e4e54cd0f4aeb63e565ca4880548216831790557f24c476690870743ee084717a2608fd67b996a17d8e8db8c8a1e9ef4b40f01cb380548216831790557fb5ac97300b3d839f7833cde07ec311bb7090778f2e0bc5e711bf866ada3a3c2980548216831790557f54e9364c58bc32bd006f51dff83821b4f75620b2cdae25952a3d372893137c1f80548216831790557f5ab7c25089b76410f269a74c823ec860f1559f75709b30e77271615c9c87cbac80548216831790557f77c39a754136065899ac24784c5908be28677d539ce0824b480781bdf8e6ed3c80548216831790557f1490e47a2c94d6adf3f4aeada816c7bbe48141ab967473da22783548403cd05780548216831790557fe8465f071889caa9eaf48a0421615ef9b204abbae087b2151f44a0429c6e9b5f80548216831790557f7f40122e03cf98624af80420f3032b510de4a99f26d58afe2b2826af0ed6acf480548216831790557fd600f860a33807a897c8a940c79850764274bdfb0b79c77636be8212c7b9c4a480548216831790557fe3721d7f08e8433737872c1d7d31768576df41daace81e19819d6ec3a321bbbc80548216831790557f51dfd834b273dca17c906d137d09c4b0025c58946ff59cd37b7370169fe03c6a80548216831790557f904f7a7ddd74ddce67bcf8b553ab83f8af31e1935791b1f75c452fb27a94c6f280548216831790557f48d7bcc9c9f75d2d95ca5d9839cebb2ede945a9e7646d316e05e57cebab9307f80548216831790557fee125ab3e36da18aad93c09b26d04d2d9a17fd5352cfd0a80643e3169c2baf3780548216831790557f8b7a7ea2c23f38c2d23ae7c9d0b1977eaa7e58b13ea4f76288ba4b543e303eee80548216831790557f27f27cc61eefd17fce1c4879a4ca601f6570dc8c3907bb123042cc1fb7f35a1380548216831790557ff8ab4cbc5ba6effa0ea72de24e17fc86f76983645a2ffcf9d08b0d17fdb53fb980548216831790557ff6cbfb5e68246b272342adc2b19eb577472675536b88fbe5d91f4d338728cd9480548216831790557fc78448feccda1d3497640f9a66cbba685fedb93a2a5692d44bd24a2109c9938a80548216831790557ff3851fb5db70f90971583ac453b01a5486c9c6860e868a51d0dbfc6c158988a180548216831790557fade6ac48221f9998b825e19e35fbd739abd8db91e8c8a3ec1f4b2cf27caca3c180548216831790557fb621659d8e0c8aeef6b7d9ad3c1037de8ec94ea02099136c44fb79114949d2cc80548216831790557feccb3eb4ba66a4bb18312b6067a42302e0079d8e27ea68fa7906712fb48383f380548216831790557fd87ebb8743db78a926314f87e88eb421d54cbb77cb24340c5ea239965da7d9f580548216831790557f85d93f704b22000f83b43bd515048ef1b7e35c27b6b17b8c5ce0baeaaec9442f80548216831790557f1c5afa8120621cbb46f289053687d5a99e0b7816d89f5c5eba839024111916cc80548216831790557f29df7279c6c5421aaba03590a73c38550f6ec260601ea9bd46b605643a9846b280548216831790557f05363e3af267494e73bf1d950c8749e937d04cfd9df64b1604793ee471faf8db80548216831790557fef49dfdc5d9375e1079578a59e87ee5198d7b3ef461ced82972dc36e167e7eac80548216831790557fb195fa368faf88b06500a62e185b47c611ffb59b1ea4d0b4575ad8e81b8692f780548216831790557ff25ed9b6f1d1d2abd840ad4b8b50899820d021f1f522dab24381a24a1e487d8480548216831790557f77effb8bb57dcfa686545c5802f47b766321e792122017082048d8c2958ad0d780548216831790557ffe86c83215a672e4639b823251e198558eba82c20724dfb534ed7153436ac14b80548216831790557f1efb2222375266f4be91e8f4f810771a828a055f9fc1b07566961b21c07c5ddc80548216831790557f1695d20e0ed820a8f7e02dd15ea4e8490cfe02786a51abb5dd4f58f053f93f7480548216831790557f0324ca62178f41fcb2b92a47312151f5f0c44fca0cd6cf464def038fc1ea70f980548216831790557f4854821d804f1ead403d27b6a7e6c951f47646269ee3fb3a35731569bea4e5ff80548216831790557fb17188f00a28a0d574616e2fb60b6f67948c8ee4c196764696529ffe29511ef380548216831790557fc64fc8851f821311bf1e052cefae0eae53d08da1eaca191dc77da5389bd9b6ed80548216831790557f06739b9dfd8025a30e04471f3967dedaf131f2417ce9bbaa9c01fda8967934ab80548216831790557fda65407f4a05fa12986f8cf529ff546ea43cc8e03e5bb4c013e767be16d7c15980548216831790557f5005480bb09c8b4d964cfecd8ae5e8bf5893f9c484ddbed4947d4d32db7d99c180548216831790557fd597524eafbc0e363bbd8a502e7d43f813e5fe0abccaef29ee4471cca41039d080548216831790557f9cb1f044acc07b3c2c7f3f2ccbefc6da2dc8d4f978b26f1d189c77c32a83c9c380548216831790557f6d2e659411dc1ed46a11c875539c5f7397e1d9797179ef0f7491d09b8413937f80548216831790557f1a7e19d59c6032be44f18bd7b161fb46ec229e68281e2cb5e523eefa63633ce980548216831790557fd5a9241be31d7efb85f8e8e90dfcd258b61eb43f147cab655265797ce0ac9e6280548216831790557fed3ac2fe5952bedd6f7dacc3801a8e1622ba5c81a2fecaf99f3f837965295da880548216831790557f8ca1ff9e6a44f3c16b1eefd2f0785b73f6eb563eb19191021a187b110441b32680548216831790557fbe54d6fb076fea4617a607e8a169ba235559387bb2e75189f99a28d06195ebe180548216831790557f1007fa7d1231c11b32b75f6909bc013c253b1c99c9f5255744d1c0b7a4aa1a0e80548216831790557f1b83d2de65bca76713e237944ec7cc514e15130a974626eea83565a39de6b3a680548216831790557f157df70a5928b9c7d6b8af39c7e9b4d58297b58869e2d99c5b137b86209b892280548216831790557f2110ee3f55acda055f437298a9486a8a426cf96720eb474cac82e3bf3bcbd7ea80548216831790557fc5c6ca1e628ed86344dd631beab00716e2bf0f31fafd4520147dc5958e42f21d80548216831790557fefeacaec23ba81bec4dad0bc174d24e20891a7b7491deb21d1d2dc4459edc05980548216831790557f10321a66d1be7b596243760bc36add512bc13390321284d7f3fe71c570b5dbe180548216831790557fb308b59959e15b2a25a25672d323fbfd6b83da3a9c1a7a946d2b768e3631117080548216831790557f40b3392b27ffc9252c91ef2e75b20dd5e51346e4006fa982c489efc6a03eec0b80548216831790557fb843aaa268a55108559e7cb7104f8c7c2af83294af5e92a6feaff6af11f4665980548216831790557f78566167c4c005a062980a7a96aa9fccf1f495f4d3e53a28efbb4467f2b0ae5a80548216831790557f98194ed2708460ae9bf5b1f786b6ae3bea1a25a21bb409ac2721dd4301e4ce9d80548216831790557fdc3294adbf324849cdc585cbb0dc4b9ccce6688a1658d9defbdbd0209838654880548216831790557f927e9638fea371bf5ba668ff008657de65af641f1299788f4939e8678b9dd76480548216831790557fc6a18d1afbca9f9157c4a492e2b052f2cdf744768eed4744299a517048fc9de080548216831790557f5225bdd01536ed260a3a133384cbe6bc0997d1b164714b0887e8f4b3219dd89580548216831790557f3a47ee34e25fbe32d8118dbc59157d6550e4fd593783cfbf57b82886728fcefc80548216831790557f415b517b9bcc5247b953ec9d68b210e1e78db554a71a7f6b56953a6ef8e6b99f80548216831790557f9d0bde97752ad66e156ad97ab2fcf1d5581d701074a9470ea9fda09958ffcb8b80548216831790557f9947db2b227a63d6c83e6995341adae9c1f8dad75b221cd21e38979d47e35c8080548216831790557f5f1e22d27ca767a43d7fb503280b16fe1dd842a5ece4533dcfa35d348369405980548216831790557fd28c8c727983441c56c1e209bfe1585c772751ea1333a6df2e657c932814f90880548216831790557f1b01d8f4221dd64e20866e9787aac549682fe0431a90f6431da360bb30622d2280548216831790557f2a570bb7da2cfa5c1fb4132042e97750bcb81823a8fa2d780288815660d2955b80548216831790557f1fc8c63d62bc6571e6b7fe30b4a4e1af41ca3aac1eea4eb412e73a4bf36e65d480548216831790557f0605cbe04bcd6c0d5e496a42eca7b795adde91e7346c694ef18b86e2c2ae569f80548216831790557f6870861e2cc698e7a221e9c7f8f3a4e3521aa7913218ccd974c48452518a83ba80548216831790557f386c896387c20e4faba50c2a506e317648d36040337be8489c9d4f8d4d7ab12f80548216831790557f32a53ed3581d202304a5c7b3f74a80d1960132c1720c778bdb88d7438e6e045980548216831790557fc73a8409a27ae7ba8a00b5d5b513a80553da45e0610eb7e233e06374030471b180548216831790557f649df5678b86ebae88c267c4e16faddd05371dfe18bab68045f4dd2d0040209a80548216831790557fc2ed6935a8a83feacf84e4df34f1a215a9995358ce9e13019af93d75d6bc392c80548216831790557f6e19898ae2c7b114492312e01258b9b96dd593d686e7a2d83d1f5c0f5c80cf5c80548216831790557f8c5c3a4b46d2630fb5821661bc3f93d03037ef7c8a09992fb039e6aa104fd12080548216831790557f5457636e8163a3e13a23d14f5ba7bfe4772310953bde9c75b2be7e3af00fb96380548216831790557f230e50fbd6929644c3fa5113352a1de9312efd5fb9e645a8fc808affd40413b980548216831790557f0d97cdf8ce8b44effe2a17625229b7d0dd13203c3e17eec815210f637a73249d80548216831790557fa52a0c77666daacd6c62beba82e4338fcb57ec8d37e64c857503915b931015ed80548216831790557f8c444fed0b2471232dc8f1f3a54d687d75c5f956a2801956c5f2f3c0acd76ffe80548216831790557f083f0c805431069d878ee7752ddf33d7668dfb7658a012ce8d8e6232a18d5ddc80548216831790557f3f7cf3e6a49b908204a009a2c1c62580b8aa24c204c9ae1025c195159389e1cf80548216831790557f89076b8cd7b06c3cb5320adb8ec3626b9a37cee9585e120aadeffece11b6004580548216831790557f1adb2c1f5acbf57dda053d3ba8b595a85955ce967a6d4549c1592e3c657437f380548216831790557f1877dff72f8b827782e42308c4047b3f70bfb6308688b3e76d3fb16cbca7996b80548216831790557fb376ed36fe557cf74db1ab38a42cd7a5e7f41680e94c2c8d984402b9883503bb80548216831790557fc34e451b5ae357f72744d86ff000129bc7776f5583924b02987397cf0adf396980548216831790557f2df9354f18e026d6e55e840033084efcb40e145213a89c33e2fcfeaa2833a73b80548216831790557f62ad8eea7f432e8ba5e0062674642b676aac16647ba1dfbc0983f87c7e2713df80548216831790557ff1833484113d1799777272460033728533e1a2cdb1df202868cb1a0ae8b26b5c80548216831790557fae3de79ae479610f584bcc9e0050430df80cdee6b4098d328702f2b0741a644d80548216831790557f4f18f8c5b60e847a7bae5f5eeb0948f16cc4d52b2bb0924d2a94a948c176742880548216831790557f33525c409bfeebbba34c62d92f87162168712f6e15fac2cfdd85576eb920de2780548216831790557f4a60d7cce7ce61c3f9041e781c76b8bb45e80dde9b0f19dffeae8d0e0e55507280548216831790557fa7d3aeaa72061d39c8592f7d05701a1a563990dddc9f3f70c4b20c4e3863940480548216831790557fb34769f5a7954c7f61d39ef0910f08df38630aebac118b0dea6629e19a9f56ea80548216831790557f51e02cf0ed05bcd1dfea369d6b4320336d949601911a9183c3903afb69f4e69f80548216831790557feba0534b6efbe041a6711a056c0ce4b3cf8da1e607c336be13c129e7a301056880548216831790557febad3d3cf613b3df9a64aa80db9a9e1c4a8e5982b0cc4be34f6b6fd5e10419f180548216831790557f7f0d8687b88b4552bf3b3c3700c764035706156889f93966e0e1b2974c614c3c80548216831790557f59e10ec0088aced065072fd96169d37fb5fcd92a28585ce81116aadd70db933d80548216831790557f5bb75c0aff9e5c60bfcb89d69093bcbcb03bded70433dc921e51be06ebeb9a5880548216831790557f8f07c2c910e4104dc794e21625c8a350ddeae7d08e2ae23cc89643f3e61415e7805482168317905573f21e7af6777b9a8f1eb57a94b5f1501e68ebfb916000527f14c2434d2847cdbd9a7d8b3546ce8c7eb398a75e43f4a6897c08009aecf0c9f380549091169091179055620078d5565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600f5460ff1615620072145760405162461bcd60e51b815260206004820152601360248201527f416c726561647920696e697469616c697a65640000000000000000000000000060448201526064015b60405180910390fd5b6000825111620072765760405162461bcd60e51b815260206004820152602660248201527f4d7573742070726f76696465206174206c65617374206f6e652073686172656860448201526537b63232b91760d11b60648201526084016200720b565b6000815111620072c95760405162461bcd60e51b815260206004820152601460248201527f4d7573742070726f76696465207072696365732e00000000000000000000000060448201526064016200720b565b8051620072de90600e90602084019062007710565b506000805b8351811015620075e8576000848281518110620073045762007304620077d0565b6020026020010151602001511180156200733f57506064848281518110620073305762007330620077d0565b60200260200101516020015111155b6200738d5760405162461bcd60e51b815260206004820152601860248201527f50657263656e74616765206f7574206f662072616e67652e000000000000000060448201526064016200720b565b838181518110620073a257620073a2620077d0565b60200260200101516020015182620073bb9190620077fc565b9150600c848281518110620073d457620073d4620077d0565b6020908102919091018101515182546001808201855560009485529284200180546001600160a01b0319166001600160a01b03909216919091179055600d8054909101815581525b8351811015620075d25760648482815181106200743d576200743d620077d0565b60200260200101516000600281106200745a576200745a620077d0565b60200201516200746b91906200782d565b15620074cd5760405162461bcd60e51b815260206004820152602a60248201527f507269636573206d75737420656163682062652061206d756c7469706c65206f6044820152693310189818102bb2b49760b11b60648201526084016200720b565b6000858381518110620074e457620074e4620077d0565b6020026020010151602001516064868481518110620075075762007507620077d0565b6020026020010151600060028110620075245762007524620077d0565b602002015162007535919062007844565b6200754191906200785b565b9050600d8381548110620075595762007559620077d0565b90600052602060002001858381518110620075785762007578620077d0565b6020026020010151600160028110620075955762007595620077d0565b6020020151620075a690836200785b565b815460018101835560009283526020909220909101555080620075c9816200787d565b9150506200741c565b5080620075df816200787d565b915050620072e3565b5080606414620076515760405162461bcd60e51b815260206004820152602d60248201527f436f6d62696e65642073686172657320646f206e6f742061646420757020746f60448201526c10189818103832b931b2b73a1760991b60648201526084016200720b565b5050600f805460ff1916600117905550565b828054620076719062007899565b90600052602060002090601f016020900481019282620076955760008555620076e0565b82601f10620076b057805160ff1916838001178555620076e0565b82800160010185558215620076e0579182015b82811115620076e0578251825591602001919060010190620076c3565b50620076ee9291506200776d565b5090565b60405180604001604052806002906020820280368337509192915050565b8280548282559060005260206000209060020281019282156200775f579160200282015b828111156200775f5782516200774e908390600262007784565b509160200191906002019062007734565b50620076ee929150620077b4565b5b80821115620076ee57600081556001016200776e565b8260028101928215620076e05791602002820182811115620076e0578251825591602001919060010190620076c3565b80821115620076ee5760008082556001820155600201620077b4565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115620078125762007812620077e6565b500190565b634e487b7160e01b600052601260045260246000fd5b6000826200783f576200783f62007817565b500690565b60008262007856576200785662007817565b500490565b6000816000190483118215151615620078785762007878620077e6565b500290565b600060018201620078925762007892620077e6565b5060010190565b600181811c90821680620078ae57607f821691505b602082108103620078cf57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516129cc620078fb6000396000611b2c015260006103c801526129cc6000f3fe6080604052600436106101c25760003560e01c8063756f738d116100f7578063a22cb46511610095578063dad5229811610064578063dad5229814610502578063e3b2244614610515578063e985e9c514610535578063f2fde38b1461057e57600080fd5b8063a22cb46514610482578063b88d4fde146104a2578063c87b56dd146104c2578063cf453345146104e257600080fd5b8063938e3d7b116100d1578063938e3d7b1461040857806395d89b41146104285780639b19251a1461043d5780639d1a6be41461046d57600080fd5b8063756f738d146103a15780638cadda67146103b65780638da5cb5b146103ea57600080fd5b80632f745c591161016457806355f804b31161013e57806355f804b31461032c5780636352211e1461034c57806370a082311461036c578063715018a61461038c57600080fd5b80632f745c59146102cc57806342842e0e146102ec5780634f6ccce71461030c57600080fd5b8063095ea7b3116101a0578063095ea7b31461025657806318160ddd1461027857806321c2f3561461029757806323b872dd146102ac57600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e23660046123e0565b61059e565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102116105fa565b6040516101f39190612473565b34801561022a57600080fd5b5061023e610239366004612486565b61068c565b6040516001600160a01b0390911681526020016101f3565b34801561026257600080fd5b506102766102713660046124bb565b610737565b005b34801561028457600080fd5b506008545b6040519081526020016101f3565b3480156102a357600080fd5b50610276610868565b3480156102b857600080fd5b506102766102c73660046124e5565b61092d565b3480156102d857600080fd5b506102896102e73660046124bb565b6109b4565b3480156102f857600080fd5b506102766103073660046124e5565b610a5c565b34801561031857600080fd5b50610289610327366004612486565b610a77565b34801561033857600080fd5b506102766103473660046125e4565b610b1b565b34801561035857600080fd5b5061023e610367366004612486565b610b81565b34801561037857600080fd5b5061028961038736600461262d565b610c0c565b34801561039857600080fd5b50610276610ca6565b3480156103ad57600080fd5b50610276610d0c565b3480156103c257600080fd5b506102897f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f657600080fd5b50600a546001600160a01b031661023e565b34801561041457600080fd5b506102766104233660046125e4565b610d93565b34801561043457600080fd5b50610211610df6565b34801561044957600080fd5b506101e761045836600461262d565b60136020526000908152604090205460ff1681565b34801561047957600080fd5b50610276610e05565b34801561048e57600080fd5b5061027661049d366004612648565b610f2c565b3480156104ae57600080fd5b506102766104bd366004612684565b610f3b565b3480156104ce57600080fd5b506102116104dd366004612486565b610fc9565b3480156104ee57600080fd5b506102896104fd366004612486565b6110b2565b610276610510366004612486565b611126565b34801561052157600080fd5b50610289610530366004612486565b6111ad565b34801561054157600080fd5b506101e7610550366004612700565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561058a57600080fd5b5061027661059936600461262d565b6111f9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105f457506105f4826112d8565b92915050565b60606000805461060990612733565b80601f016020809104026020016040519081016040528092919081815260200182805461063590612733565b80156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661071b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074282610b81565b9050806001600160a01b0316836001600160a01b0316036107cb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610712565b336001600160a01b03821614806107e757506107e78133610550565b6108595760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610712565b61086383836113bb565b505050565b336000908152600b60205260409020546108ea5760405162461bcd60e51b815260206004820152602760248201527f4e6f2073686172657320666f722074686973206164647265737320746f20776960448201527f7468647261772e000000000000000000000000000000000000000000000000006064820152608401610712565b336000818152600b602052604080822080549083905590519091839183156108fc0291849190818181858888f19350505050158015610863573d6000803e3d6000fd5b6109373382611441565b6109a95760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610712565b610863838383611549565b60006109bf83610c0c565b8210610a335760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610712565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61086383838360405180602001604052806000815250610f3b565b6000610a8260085490565b8210610af65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610712565b60088281548110610b0957610b09612786565b90600052602060002001549050919050565b600a546001600160a01b03163314610b755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610b7e81611739565b50565b6000818152600260205260408120546001600160a01b0316806105f45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610712565b60006001600160a01b038216610c8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610712565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610d005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610d0a600061174c565b565b600a546001600160a01b03163314610d665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600a546001600160a01b03163314610ded5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610b7e816117b6565b60606001805461060990612733565b600a546001600160a01b03163314610e5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b60125460ff16610efe5760405162461bcd60e51b8152602060048201526044602482018190527f5374617274696e67206d696e7420776974686f7574207072656d696e74206669908201527f7273742c2064696420796f75207072657373207468652077726f6e672062757460648201527f746f6e3f00000000000000000000000000000000000000000000000000000000608482015260a401610712565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b610f373383836117c9565b5050565b610f453383611441565b610fb75760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610712565b610fc3848484846118b5565b50505050565b6000818152600260205260409020546060906001600160a01b03166110565760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610712565b600061106061193e565b9050600081511161108057604051806020016040528060008152506110ab565b8061108a8461194d565b60405160200161109b9291906127b5565b6040516020818303038152906040525b9392505050565b600e5460009082106110c357600080fd5b600e82815481106110d6576110d6612786565b90600052602060002090600202016001600281106110f6576110f6612786565b0154600e838154811061110b5761110b612786565b60009182526020822060029091020101546105f49190612813565b601254610100900460ff1680611158575060125460ff16801561115857503360009081526013602052604090205460ff165b6111a45760405162461bcd60e51b815260206004820152601e60248201527f596f75206d6179206e6f74206d696e7420617420746869732074696d652e00006044820152606401610712565b610b7e81611a82565b600e5460009082106111be57600080fd5b600e82815481106111d1576111d1612786565b90600052602060002090600202016001600281106111f1576111f1612786565b015492915050565b600a546001600160a01b031633146112535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b6001600160a01b0381166112cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610712565b610b7e8161174c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061136b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105f457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105f4565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061140882610b81565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610712565b60006114d683610b81565b9050806001600160a01b0316846001600160a01b031614806115115750836001600160a01b03166115068461068c565b6001600160a01b0316145b8061154157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661155c82610b81565b6001600160a01b0316146115d85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610712565b6001600160a01b0382166116535760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610712565b61165e838383611c60565b6116696000826113bb565b6001600160a01b0383166000908152600360205260408120805460019290611692908490612850565b90915550506001600160a01b03821660009081526003602052604081208054600192906116c0908490612867565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8051610f37906010906020840190612319565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610f37906011906020840190612319565b816001600160a01b0316836001600160a01b03160361182a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610712565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118c0848484611549565b6118cc84848484611d18565b610fc35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b60606010805461060990612733565b60608160000361199057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156119ba57806119a48161287f565b91506119b39050600a836128e6565b9150611994565b60008167ffffffffffffffff8111156119d5576119d5612521565b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b5090505b841561154157611a14600183612850565b9150611a21600a866128fa565b611a2c906030612867565b60f81b818381518110611a4157611a41612786565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a7b600a866128e6565b9450611a03565b600e548110611ad35760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e74206f7074696f6e2e0000000000000000000000006044820152606401610712565b611adc816110b2565b3414611b2a5760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742076616c756520706169642e00000000000000000000006044820152606401610712565b7f0000000000000000000000000000000000000000000000000000000000000000600e8281548110611b5e57611b5e612786565b9060005260206000209060020201600160028110611b7e57611b7e612786565b0154600854611b8d9190612867565b1115611bdb5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768206c6566742e000000000000000000000000000000006044820152606401610712565b611be481611ed7565b6000611bef60085490565b611bfa906001612867565b905060005b600e8381548110611c1257611c12612786565b9060005260206000209060020201600160028110611c3257611c32612786565b015481101561086357611c4e33611c498385612867565b611f80565b80611c588161287f565b915050611bff565b6001600160a01b038316611cbb57611cb681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cde565b816001600160a01b0316836001600160a01b031614611cde57611cde8382611f9a565b6001600160a01b038216611cf55761086381612037565b826001600160a01b0316826001600160a01b0316146108635761086382826120e6565b60006001600160a01b0384163b15611ecc576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611d7590339089908890889060040161290e565b6020604051808303816000875af1925050508015611dce575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611dcb9181019061294a565b60015b611e81573d808015611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b508051600003611e795760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611541565b506001949350505050565b60005b600c54811015610f3757600d8181548110611ef757611ef7612786565b906000526020600020018281548110611f1257611f12612786565b9060005260206000200154600b6000600c8481548110611f3457611f34612786565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909190611f68908490612867565b90915550819050611f788161287f565b915050611eda565b610f3782826040518060200160405280600081525061212a565b60006001611fa784610c0c565b611fb19190612850565b600083815260076020526040902054909150808214612004576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061204990600190612850565b6000838152600960205260408120546008805493945090928490811061207157612071612786565b90600052602060002001549050806008838154811061209257612092612786565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120ca576120ca612967565b6001900381819060005260206000200160009055905550505050565b60006120f183610c0c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61213483836121b3565b6121416000848484611d18565b6108635760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b6001600160a01b0382166122095760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610712565b6000818152600260205260409020546001600160a01b03161561226e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610712565b61227a60008383611c60565b6001600160a01b03821660009081526003602052604081208054600192906122a3908490612867565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461232590612733565b90600052602060002090601f016020900481019282612347576000855561238d565b82601f1061236057805160ff191683800117855561238d565b8280016001018555821561238d579182015b8281111561238d578251825591602001919060010190612372565b5061239992915061239d565b5090565b5b80821115612399576000815560010161239e565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b7e57600080fd5b6000602082840312156123f257600080fd5b81356110ab816123b2565b60005b83811015612418578181015183820152602001612400565b83811115610fc35750506000910152565b600081518084526124418160208601602086016123fd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110ab6020830184612429565b60006020828403121561249857600080fd5b5035919050565b80356001600160a01b03811681146124b657600080fd5b919050565b600080604083850312156124ce57600080fd5b6124d78361249f565b946020939093013593505050565b6000806000606084860312156124fa57600080fd5b6125038461249f565b92506125116020850161249f565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561256b5761256b612521565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125b1576125b1612521565b816040528093508581528686860111156125ca57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156125f657600080fd5b813567ffffffffffffffff81111561260d57600080fd5b8201601f8101841361261e57600080fd5b61154184823560208401612550565b60006020828403121561263f57600080fd5b6110ab8261249f565b6000806040838503121561265b57600080fd5b6126648361249f565b91506020830135801515811461267957600080fd5b809150509250929050565b6000806000806080858703121561269a57600080fd5b6126a38561249f565b93506126b16020860161249f565b925060408501359150606085013567ffffffffffffffff8111156126d457600080fd5b8501601f810187136126e557600080fd5b6126f487823560208401612550565b91505092959194509250565b6000806040838503121561271357600080fd5b61271c8361249f565b915061272a6020840161249f565b90509250929050565b600181811c9082168061274757607f821691505b602082108103612780577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516127c78184602088016123fd565b8351908301906127db8183602088016123fd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561284b5761284b6127e4565b500290565b600082821015612862576128626127e4565b500390565b6000821982111561287a5761287a6127e4565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128b0576128b06127e4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826128f5576128f56128b7565b500490565b600082612909576129096128b7565b500690565b60006001600160a01b038087168352808616602084015250836040830152608060608301526129406080830184612429565b9695505050505050565b60006020828403121561295c57600080fd5b81516110ab816123b2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212200e17435713f47d479f2b452635902eff4eed49dc80aa11eda6e10d295827c51e64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106101c25760003560e01c8063756f738d116100f7578063a22cb46511610095578063dad5229811610064578063dad5229814610502578063e3b2244614610515578063e985e9c514610535578063f2fde38b1461057e57600080fd5b8063a22cb46514610482578063b88d4fde146104a2578063c87b56dd146104c2578063cf453345146104e257600080fd5b8063938e3d7b116100d1578063938e3d7b1461040857806395d89b41146104285780639b19251a1461043d5780639d1a6be41461046d57600080fd5b8063756f738d146103a15780638cadda67146103b65780638da5cb5b146103ea57600080fd5b80632f745c591161016457806355f804b31161013e57806355f804b31461032c5780636352211e1461034c57806370a082311461036c578063715018a61461038c57600080fd5b80632f745c59146102cc57806342842e0e146102ec5780634f6ccce71461030c57600080fd5b8063095ea7b3116101a0578063095ea7b31461025657806318160ddd1461027857806321c2f3561461029757806323b872dd146102ac57600080fd5b806301ffc9a7146101c757806306fdde03146101fc578063081812fc1461021e575b600080fd5b3480156101d357600080fd5b506101e76101e23660046123e0565b61059e565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102116105fa565b6040516101f39190612473565b34801561022a57600080fd5b5061023e610239366004612486565b61068c565b6040516001600160a01b0390911681526020016101f3565b34801561026257600080fd5b506102766102713660046124bb565b610737565b005b34801561028457600080fd5b506008545b6040519081526020016101f3565b3480156102a357600080fd5b50610276610868565b3480156102b857600080fd5b506102766102c73660046124e5565b61092d565b3480156102d857600080fd5b506102896102e73660046124bb565b6109b4565b3480156102f857600080fd5b506102766103073660046124e5565b610a5c565b34801561031857600080fd5b50610289610327366004612486565b610a77565b34801561033857600080fd5b506102766103473660046125e4565b610b1b565b34801561035857600080fd5b5061023e610367366004612486565b610b81565b34801561037857600080fd5b5061028961038736600461262d565b610c0c565b34801561039857600080fd5b50610276610ca6565b3480156103ad57600080fd5b50610276610d0c565b3480156103c257600080fd5b506102897f000000000000000000000000000000000000000000000000000000000000000381565b3480156103f657600080fd5b50600a546001600160a01b031661023e565b34801561041457600080fd5b506102766104233660046125e4565b610d93565b34801561043457600080fd5b50610211610df6565b34801561044957600080fd5b506101e761045836600461262d565b60136020526000908152604090205460ff1681565b34801561047957600080fd5b50610276610e05565b34801561048e57600080fd5b5061027661049d366004612648565b610f2c565b3480156104ae57600080fd5b506102766104bd366004612684565b610f3b565b3480156104ce57600080fd5b506102116104dd366004612486565b610fc9565b3480156104ee57600080fd5b506102896104fd366004612486565b6110b2565b610276610510366004612486565b611126565b34801561052157600080fd5b50610289610530366004612486565b6111ad565b34801561054157600080fd5b506101e7610550366004612700565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561058a57600080fd5b5061027661059936600461262d565b6111f9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806105f457506105f4826112d8565b92915050565b60606000805461060990612733565b80601f016020809104026020016040519081016040528092919081815260200182805461063590612733565b80156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661071b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061074282610b81565b9050806001600160a01b0316836001600160a01b0316036107cb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610712565b336001600160a01b03821614806107e757506107e78133610550565b6108595760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610712565b61086383836113bb565b505050565b336000908152600b60205260409020546108ea5760405162461bcd60e51b815260206004820152602760248201527f4e6f2073686172657320666f722074686973206164647265737320746f20776960448201527f7468647261772e000000000000000000000000000000000000000000000000006064820152608401610712565b336000818152600b602052604080822080549083905590519091839183156108fc0291849190818181858888f19350505050158015610863573d6000803e3d6000fd5b6109373382611441565b6109a95760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610712565b610863838383611549565b60006109bf83610c0c565b8210610a335760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610712565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61086383838360405180602001604052806000815250610f3b565b6000610a8260085490565b8210610af65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610712565b60088281548110610b0957610b09612786565b90600052602060002001549050919050565b600a546001600160a01b03163314610b755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610b7e81611739565b50565b6000818152600260205260408120546001600160a01b0316806105f45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610712565b60006001600160a01b038216610c8a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610712565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610d005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610d0a600061174c565b565b600a546001600160a01b03163314610d665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600a546001600160a01b03163314610ded5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b610b7e816117b6565b60606001805461060990612733565b600a546001600160a01b03163314610e5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b60125460ff16610efe5760405162461bcd60e51b8152602060048201526044602482018190527f5374617274696e67206d696e7420776974686f7574207072656d696e74206669908201527f7273742c2064696420796f75207072657373207468652077726f6e672062757460648201527f746f6e3f00000000000000000000000000000000000000000000000000000000608482015260a401610712565b601280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b610f373383836117c9565b5050565b610f453383611441565b610fb75760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610712565b610fc3848484846118b5565b50505050565b6000818152600260205260409020546060906001600160a01b03166110565760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610712565b600061106061193e565b9050600081511161108057604051806020016040528060008152506110ab565b8061108a8461194d565b60405160200161109b9291906127b5565b6040516020818303038152906040525b9392505050565b600e5460009082106110c357600080fd5b600e82815481106110d6576110d6612786565b90600052602060002090600202016001600281106110f6576110f6612786565b0154600e838154811061110b5761110b612786565b60009182526020822060029091020101546105f49190612813565b601254610100900460ff1680611158575060125460ff16801561115857503360009081526013602052604090205460ff165b6111a45760405162461bcd60e51b815260206004820152601e60248201527f596f75206d6179206e6f74206d696e7420617420746869732074696d652e00006044820152606401610712565b610b7e81611a82565b600e5460009082106111be57600080fd5b600e82815481106111d1576111d1612786565b90600052602060002090600202016001600281106111f1576111f1612786565b015492915050565b600a546001600160a01b031633146112535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610712565b6001600160a01b0381166112cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610712565b610b7e8161174c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061136b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105f457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105f4565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061140882610b81565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166114cb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610712565b60006114d683610b81565b9050806001600160a01b0316846001600160a01b031614806115115750836001600160a01b03166115068461068c565b6001600160a01b0316145b8061154157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661155c82610b81565b6001600160a01b0316146115d85760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610712565b6001600160a01b0382166116535760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610712565b61165e838383611c60565b6116696000826113bb565b6001600160a01b0383166000908152600360205260408120805460019290611692908490612850565b90915550506001600160a01b03821660009081526003602052604081208054600192906116c0908490612867565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8051610f37906010906020840190612319565b600a80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051610f37906011906020840190612319565b816001600160a01b0316836001600160a01b03160361182a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610712565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118c0848484611549565b6118cc84848484611d18565b610fc35760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b60606010805461060990612733565b60608160000361199057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156119ba57806119a48161287f565b91506119b39050600a836128e6565b9150611994565b60008167ffffffffffffffff8111156119d5576119d5612521565b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b5090505b841561154157611a14600183612850565b9150611a21600a866128fa565b611a2c906030612867565b60f81b818381518110611a4157611a41612786565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611a7b600a866128e6565b9450611a03565b600e548110611ad35760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964206d696e74206f7074696f6e2e0000000000000000000000006044820152606401610712565b611adc816110b2565b3414611b2a5760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742076616c756520706169642e00000000000000000000006044820152606401610712565b7f0000000000000000000000000000000000000000000000000000000000000d05600e8281548110611b5e57611b5e612786565b9060005260206000209060020201600160028110611b7e57611b7e612786565b0154600854611b8d9190612867565b1115611bdb5760405162461bcd60e51b815260206004820152601060248201527f4e6f7420656e6f756768206c6566742e000000000000000000000000000000006044820152606401610712565b611be481611ed7565b6000611bef60085490565b611bfa906001612867565b905060005b600e8381548110611c1257611c12612786565b9060005260206000209060020201600160028110611c3257611c32612786565b015481101561086357611c4e33611c498385612867565b611f80565b80611c588161287f565b915050611bff565b6001600160a01b038316611cbb57611cb681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cde565b816001600160a01b0316836001600160a01b031614611cde57611cde8382611f9a565b6001600160a01b038216611cf55761086381612037565b826001600160a01b0316826001600160a01b0316146108635761086382826120e6565b60006001600160a01b0384163b15611ecc576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611d7590339089908890889060040161290e565b6020604051808303816000875af1925050508015611dce575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611dcb9181019061294a565b60015b611e81573d808015611dfc576040519150601f19603f3d011682016040523d82523d6000602084013e611e01565b606091505b508051600003611e795760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611541565b506001949350505050565b60005b600c54811015610f3757600d8181548110611ef757611ef7612786565b906000526020600020018281548110611f1257611f12612786565b9060005260206000200154600b6000600c8481548110611f3457611f34612786565b60009182526020808320909101546001600160a01b0316835282019290925260400181208054909190611f68908490612867565b90915550819050611f788161287f565b915050611eda565b610f3782826040518060200160405280600081525061212a565b60006001611fa784610c0c565b611fb19190612850565b600083815260076020526040902054909150808214612004576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061204990600190612850565b6000838152600960205260408120546008805493945090928490811061207157612071612786565b90600052602060002001549050806008838154811061209257612092612786565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120ca576120ca612967565b6001900381819060005260206000200160009055905550505050565b60006120f183610c0c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61213483836121b3565b6121416000848484611d18565b6108635760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610712565b6001600160a01b0382166122095760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610712565b6000818152600260205260409020546001600160a01b03161561226e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610712565b61227a60008383611c60565b6001600160a01b03821660009081526003602052604081208054600192906122a3908490612867565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461232590612733565b90600052602060002090601f016020900481019282612347576000855561238d565b82601f1061236057805160ff191683800117855561238d565b8280016001018555821561238d579182015b8281111561238d578251825591602001919060010190612372565b5061239992915061239d565b5090565b5b80821115612399576000815560010161239e565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610b7e57600080fd5b6000602082840312156123f257600080fd5b81356110ab816123b2565b60005b83811015612418578181015183820152602001612400565b83811115610fc35750506000910152565b600081518084526124418160208601602086016123fd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110ab6020830184612429565b60006020828403121561249857600080fd5b5035919050565b80356001600160a01b03811681146124b657600080fd5b919050565b600080604083850312156124ce57600080fd5b6124d78361249f565b946020939093013593505050565b6000806000606084860312156124fa57600080fd5b6125038461249f565b92506125116020850161249f565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561256b5761256b612521565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125b1576125b1612521565b816040528093508581528686860111156125ca57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156125f657600080fd5b813567ffffffffffffffff81111561260d57600080fd5b8201601f8101841361261e57600080fd5b61154184823560208401612550565b60006020828403121561263f57600080fd5b6110ab8261249f565b6000806040838503121561265b57600080fd5b6126648361249f565b91506020830135801515811461267957600080fd5b809150509250929050565b6000806000806080858703121561269a57600080fd5b6126a38561249f565b93506126b16020860161249f565b925060408501359150606085013567ffffffffffffffff8111156126d457600080fd5b8501601f810187136126e557600080fd5b6126f487823560208401612550565b91505092959194509250565b6000806040838503121561271357600080fd5b61271c8361249f565b915061272a6020840161249f565b90509250929050565b600181811c9082168061274757607f821691505b602082108103612780577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516127c78184602088016123fd565b8351908301906127db8183602088016123fd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561284b5761284b6127e4565b500290565b600082821015612862576128626127e4565b500390565b6000821982111561287a5761287a6127e4565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128b0576128b06127e4565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826128f5576128f56128b7565b500490565b600082612909576129096128b7565b500690565b60006001600160a01b038087168352808616602084015250836040830152608060608301526129406080830184612429565b9695505050505050565b60006020828403121561295c57600080fd5b81516110ab816123b2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212200e17435713f47d479f2b452635902eff4eed49dc80aa11eda6e10d295827c51e64736f6c634300080d0033

Deployed Bytecode Sourcemap

44433:54767:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38221:224;;;;;;;;;;-1:-1:-1;38221:224:0;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;38221:224:0;;;;;;;;25234:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26793:221::-;;;;;;;;;;-1:-1:-1;26793:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1797:55:1;;;1779:74;;1767:2;1752:18;26793:221:0;1633:226:1;26316:411:0;;;;;;;;;;-1:-1:-1;26316:411:0;;;;;:::i;:::-;;:::i;:::-;;38861:113;;;;;;;;;;-1:-1:-1;38949:10:0;:17;38861:113;;;2470:25:1;;;2458:2;2443:18;38861:113:0;2324:177:1;47104:270:0;;;;;;;;;;;;;:::i;27543:339::-;;;;;;;;;;-1:-1:-1;27543:339:0;;;;;:::i;:::-;;:::i;38529:256::-;;;;;;;;;;-1:-1:-1;38529:256:0;;;;;:::i;:::-;;:::i;27953:185::-;;;;;;;;;;-1:-1:-1;27953:185:0;;;;;:::i;:::-;;:::i;39051:233::-;;;;;;;;;;-1:-1:-1;39051:233:0;;;;;:::i;:::-;;:::i;47626:90::-;;;;;;;;;;-1:-1:-1;47626:90:0;;;;;:::i;:::-;;:::i;24928:239::-;;;;;;;;;;-1:-1:-1;24928:239:0;;;;;:::i;:::-;;:::i;24658:208::-;;;;;;;;;;-1:-1:-1;24658:208:0;;;;;:::i;:::-;;:::i;11006:103::-;;;;;;;;;;;;;:::i;48393:74::-;;;;;;;;;;;;;:::i;44776:35::-;;;;;;;;;;;;;;;10355:87;;;;;;;;;;-1:-1:-1;10428:6:0;;-1:-1:-1;;;;;10428:6:0;10355:87;;47967:106;;;;;;;;;;-1:-1:-1;47967:106:0;;;;;:::i;:::-;;:::i;25403:104::-;;;;;;;;;;;;;:::i;48143:41::-;;;;;;;;;;-1:-1:-1;48143:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48470:171;;;;;;;;;;;;;:::i;27086:155::-;;;;;;;;;;-1:-1:-1;27086:155:0;;;;;:::i;:::-;;:::i;28209:328::-;;;;;;;;;;-1:-1:-1;28209:328:0;;;;;:::i;:::-;;:::i;25578:334::-;;;;;;;;;;-1:-1:-1;25578:334:0;;;;;:::i;:::-;;:::i;44896:142::-;;;;;;;;;;-1:-1:-1;44896:142:0;;;;;:::i;:::-;;:::i;48190:198::-;;;;;;:::i;:::-;;:::i;45041:125::-;;;;;;;;;;-1:-1:-1;45041:125:0;;;;;:::i;:::-;;:::i;27312:164::-;;;;;;;;;;-1:-1:-1;27312:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27433:25:0;;;27409:4;27433:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27312:164;11264:201;;;;;;;;;;-1:-1:-1;11264:201:0;;;;;:::i;:::-;;:::i;38221:224::-;38323:4;38347:50;;;38362:35;38347:50;;:90;;;38401:36;38425:11;38401:23;:36::i;:::-;38340:97;38221:224;-1:-1:-1;;38221:224:0:o;25234:100::-;25288:13;25321:5;25314:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25234:100;:::o;26793:221::-;26869:7;30136:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30136:16:0;26889:73;;;;-1:-1:-1;;;26889:73:0;;6304:2:1;26889:73:0;;;6286:21:1;6343:2;6323:18;;;6316:30;6382:34;6362:18;;;6355:62;6453:14;6433:18;;;6426:42;6485:19;;26889:73:0;;;;;;;;;-1:-1:-1;26982:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26982:24:0;;26793:221::o;26316:411::-;26397:13;26413:23;26428:7;26413:14;:23::i;:::-;26397:39;;26461:5;-1:-1:-1;;;;;26455:11:0;:2;-1:-1:-1;;;;;26455:11:0;;26447:57;;;;-1:-1:-1;;;26447:57:0;;6717:2:1;26447:57:0;;;6699:21:1;6756:2;6736:18;;;6729:30;6795:34;6775:18;;;6768:62;6866:3;6846:18;;;6839:31;6887:19;;26447:57:0;6515:397:1;26447:57:0;3605:10;-1:-1:-1;;;;;26539:21:0;;;;:62;;-1:-1:-1;26564:37:0;26581:5;3605:10;27312:164;:::i;26564:37::-;26517:168;;;;-1:-1:-1;;;26517:168:0;;7119:2:1;26517:168:0;;;7101:21:1;7158:2;7138:18;;;7131:30;7197:34;7177:18;;;7170:62;7268:26;7248:18;;;7241:54;7312:19;;26517:168:0;6917:420:1;26517:168:0;26698:21;26707:2;26711:7;26698:8;:21::i;:::-;26386:341;26316:411;;:::o;47104:270::-;47161:10;47175:1;47150:22;;;:10;:22;;;;;;47142:79;;;;-1:-1:-1;;;47142:79:0;;7544:2:1;47142:79:0;;;7526:21:1;7583:2;7563:18;;;7556:30;7622:34;7602:18;;;7595:62;7693:9;7673:18;;;7666:37;7720:19;;47142:79:0;7342:403:1;47142:79:0;47257:10;47226:20;47290:22;;;:10;:22;;;;;;;;47317:26;;;;47348:21;;47290:22;;47257:10;;47348:21;;;;;47290:22;;47348:21;;47226:20;47348:21;47290:22;47257:10;47348:21;;;;;;;;;;;;;;;;;;;27543:339;27738:41;3605:10;27771:7;27738:18;:41::i;:::-;27730:103;;;;-1:-1:-1;;;27730:103:0;;7952:2:1;27730:103:0;;;7934:21:1;7991:2;7971:18;;;7964:30;8030:34;8010:18;;;8003:62;8101:19;8081:18;;;8074:47;8138:19;;27730:103:0;7750:413:1;27730:103:0;27846:28;27856:4;27862:2;27866:7;27846:9;:28::i;38529:256::-;38626:7;38662:23;38679:5;38662:16;:23::i;:::-;38654:5;:31;38646:87;;;;-1:-1:-1;;;38646:87:0;;8370:2:1;38646:87:0;;;8352:21:1;8409:2;8389:18;;;8382:30;8448:34;8428:18;;;8421:62;8519:13;8499:18;;;8492:41;8550:19;;38646:87:0;8168:407:1;38646:87:0;-1:-1:-1;;;;;;38751:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38529:256::o;27953:185::-;28091:39;28108:4;28114:2;28118:7;28091:39;;;;;;;;;;;;:16;:39::i;39051:233::-;39126:7;39162:30;38949:10;:17;;38861:113;39162:30;39154:5;:38;39146:95;;;;-1:-1:-1;;;39146:95:0;;8782:2:1;39146:95:0;;;8764:21:1;8821:2;8801:18;;;8794:30;8860:34;8840:18;;;8833:62;8931:14;8911:18;;;8904:42;8963:19;;39146:95:0;8580:408:1;39146:95:0;39259:10;39270:5;39259:17;;;;;;;;:::i;:::-;;;;;;;;;39252:24;;39051:233;;;:::o;47626:90::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;47691:20:::1;47703:7;47691:11;:20::i;:::-;47626:90:::0;:::o;24928:239::-;25000:7;25036:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25036:16:0;;25063:73;;;;-1:-1:-1;;;25063:73:0;;9745:2:1;25063:73:0;;;9727:21:1;9784:2;9764:18;;;9757:30;9823:34;9803:18;;;9796:62;9894:11;9874:18;;;9867:39;9923:19;;25063:73:0;9543:405:1;24658:208:0;24730:7;-1:-1:-1;;;;;24758:19:0;;24750:74;;;;-1:-1:-1;;;24750:74:0;;10155:2:1;24750:74:0;;;10137:21:1;10194:2;10174:18;;;10167:30;10233:34;10213:18;;;10206:62;10304:12;10284:18;;;10277:40;10334:19;;24750:74:0;9953:406:1;24750:74:0;-1:-1:-1;;;;;;24842:16:0;;;;;:9;:16;;;;;;;24658:208::o;11006:103::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;11071:30:::1;11098:1;11071:18;:30::i;:::-;11006:103::o:0;48393:74::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;48440:15:::1;:22:::0;;;::::1;48458:4;48440:22;::::0;;48393:74::o;47967:106::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;48040:28:::1;48056:11;48040:15;:28::i;25403:104::-:0;25459:13;25492:7;25485:14;;;;;:::i;48470:171::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;48523:15:::1;::::0;::::1;;48514:98;;;::::0;-1:-1:-1;;;48514:98:0;;10566:2:1;48514:98:0::1;::::0;::::1;10548:21:1::0;10605:2;10585:18;;;10578:30;;;10644:34;10624:18;;;10617:62;10715:34;10695:18;;;10688:62;10787:6;10766:19;;;10759:35;10811:19;;48514:98:0::1;10364:472:1::0;48514:98:0::1;48617:12;:19:::0;;;::::1;;;::::0;;48470:171::o;27086:155::-;27181:52;3605:10;27214:8;27224;27181:18;:52::i;:::-;27086:155;;:::o;28209:328::-;28384:41;3605:10;28417:7;28384:18;:41::i;:::-;28376:103;;;;-1:-1:-1;;;28376:103:0;;7952:2:1;28376:103:0;;;7934:21:1;7991:2;7971:18;;;7964:30;8030:34;8010:18;;;8003:62;8101:19;8081:18;;;8074:47;8138:19;;28376:103:0;7750:413:1;28376:103:0;28490:39;28504:4;28510:2;28514:7;28523:5;28490:13;:39::i;:::-;28209:328;;;;:::o;25578:334::-;30112:4;30136:16;;;:7;:16;;;;;;25651:13;;-1:-1:-1;;;;;30136:16:0;25677:76;;;;-1:-1:-1;;;25677:76:0;;11043:2:1;25677:76:0;;;11025:21:1;11082:2;11062:18;;;11055:30;11121:34;11101:18;;;11094:62;11192:17;11172:18;;;11165:45;11227:19;;25677:76:0;10841:411:1;25677:76:0;25766:21;25790:10;:8;:10::i;:::-;25766:34;;25842:1;25824:7;25818:21;:25;:86;;;;;;;;;;;;;;;;;25870:7;25879:18;:7;:16;:18::i;:::-;25853:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25818:86;25811:93;25578:334;-1:-1:-1;;;25578:334:0:o;44896:142::-;44974:8;:15;44948:7;;44970:19;;44962:28;;;;;;45019:8;45028:1;45019:11;;;;;;;;:::i;:::-;;;;;;;;;;;45031:1;45019:14;;;;;;;:::i;:::-;;;45002:8;45011:1;45002:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;:14;;:31;;;;:::i;48190:198::-;48257:12;;;;;;;;:60;;-1:-1:-1;48275:15:0;;;;:40;;;;-1:-1:-1;48304:10:0;48294:21;;;;:9;:21;;;;;;;;48275:40;48248:105;;;;-1:-1:-1;;;48248:105:0;;12356:2:1;48248:105:0;;;12338:21:1;12395:2;12375:18;;;12368:30;12434:32;12414:18;;;12407:60;12484:18;;48248:105:0;12154:354:1;48248:105:0;48358:25;48372:9;48358:12;:25::i;45041:125::-;45119:8;:15;45093:7;;45115:19;;45107:28;;;;;;45147:8;45156:1;45147:11;;;;;;;;:::i;:::-;;;;;;;;;;;45159:1;45147:14;;;;;;;:::i;:::-;;;;45041:125;-1:-1:-1;;45041:125:0:o;11264:201::-;10428:6;;-1:-1:-1;;;;;10428:6:0;3605:10;10575:23;10567:68;;;;-1:-1:-1;;;10567:68:0;;9384:2:1;10567:68:0;;;9366:21:1;;;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;9514:18;;10567:68:0;9182:356:1;10567:68:0;-1:-1:-1;;;;;11353:22:0;::::1;11345:73;;;::::0;-1:-1:-1;;;11345:73:0;;12715:2:1;11345:73:0::1;::::0;::::1;12697:21:1::0;12754:2;12734:18;;;12727:30;12793:34;12773:18;;;12766:62;12864:8;12844:18;;;12837:36;12890:19;;11345:73:0::1;12513:402:1::0;11345:73:0::1;11429:28;11448:8;11429:18;:28::i;24289:305::-:0;24391:4;24428:40;;;24443:25;24428:40;;:105;;-1:-1:-1;24485:48:0;;;24500:33;24485:48;24428:105;:158;;;-1:-1:-1;23020:25:0;23005:40;;;;24550:36;22896:157;34193:174;34268:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;34268:29:0;;;;;;;;:24;;34322:23;34268:24;34322:14;:23::i;:::-;-1:-1:-1;;;;;34313:46:0;;;;;;;;;;;34193:174;;:::o;30341:348::-;30434:4;30136:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30136:16:0;30451:73;;;;-1:-1:-1;;;30451:73:0;;13122:2:1;30451:73:0;;;13104:21:1;13161:2;13141:18;;;13134:30;13200:34;13180:18;;;13173:62;13271:14;13251:18;;;13244:42;13303:19;;30451:73:0;12920:408:1;30451:73:0;30535:13;30551:23;30566:7;30551:14;:23::i;:::-;30535:39;;30604:5;-1:-1:-1;;;;;30593:16:0;:7;-1:-1:-1;;;;;30593:16:0;;:51;;;;30637:7;-1:-1:-1;;;;;30613:31:0;:20;30625:7;30613:11;:20::i;:::-;-1:-1:-1;;;;;30613:31:0;;30593:51;:87;;;-1:-1:-1;;;;;;27433:25:0;;;27409:4;27433:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30648:32;30585:96;30341:348;-1:-1:-1;;;;30341:348:0:o;33450:625::-;33609:4;-1:-1:-1;;;;;33582:31:0;:23;33597:7;33582:14;:23::i;:::-;-1:-1:-1;;;;;33582:31:0;;33574:81;;;;-1:-1:-1;;;33574:81:0;;13535:2:1;33574:81:0;;;13517:21:1;13574:2;13554:18;;;13547:30;13613:34;13593:18;;;13586:62;13684:7;13664:18;;;13657:35;13709:19;;33574:81:0;13333:401:1;33574:81:0;-1:-1:-1;;;;;33674:16:0;;33666:65;;;;-1:-1:-1;;;33666:65:0;;13941:2:1;33666:65:0;;;13923:21:1;13980:2;13960:18;;;13953:30;14019:34;13999:18;;;13992:62;14090:6;14070:18;;;14063:34;14114:19;;33666:65:0;13739:400:1;33666:65:0;33744:39;33765:4;33771:2;33775:7;33744:20;:39::i;:::-;33848:29;33865:1;33869:7;33848:8;:29::i;:::-;-1:-1:-1;;;;;33890:15:0;;;;;;:9;:15;;;;;:20;;33909:1;;33890:15;:20;;33909:1;;33890:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33921:13:0;;;;;;:9;:13;;;;;:18;;33938:1;;33921:13;:18;;33938:1;;33921:18;:::i;:::-;;;;-1:-1:-1;;33950:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;33950:21:0;;;;;;;;;33989:27;;33950:16;;33989:27;;;;;;;26386:341;26316:411;;:::o;47531:92::-;47598:20;;;;:9;;:20;;;;;:::i;11625:191::-;11718:6;;;-1:-1:-1;;;;;11735:17:0;;;;;;;;;;;11768:40;;11718:6;;;11735:17;11718:6;;11768:40;;11699:16;;11768:40;11688:128;11625:191;:::o;47856:108::-;47931:28;;;;:13;;:28;;;;;:::i;34509:315::-;34664:8;-1:-1:-1;;;;;34655:17:0;:5;-1:-1:-1;;;;;34655:17:0;;34647:55;;;;-1:-1:-1;;;34647:55:0;;14609:2:1;34647:55:0;;;14591:21:1;14648:2;14628:18;;;14621:30;14687:27;14667:18;;;14660:55;14732:18;;34647:55:0;14407:349:1;34647:55:0;-1:-1:-1;;;;;34713:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;34775:41;;586::1;;;34775::0;;559:18:1;34775:41:0;;;;;;;34509:315;;;:::o;29419:::-;29576:28;29586:4;29592:2;29596:7;29576:9;:28::i;:::-;29623:48;29646:4;29652:2;29656:7;29665:5;29623:22;:48::i;:::-;29615:111;;;;-1:-1:-1;;;29615:111:0;;14963:2:1;29615:111:0;;;14945:21:1;15002:2;14982:18;;;14975:30;15041:34;15021:18;;;15014:62;15112:20;15092:18;;;15085:48;15150:19;;29615:111:0;14761:414:1;47427:101:0;47487:13;47514:9;47507:16;;;;;:::i;1166:723::-;1222:13;1443:5;1452:1;1443:10;1439:53;;-1:-1:-1;;1470:10:0;;;;;;;;;;;;;;;;;;1166:723::o;1439:53::-;1517:5;1502:12;1558:78;1565:9;;1558:78;;1591:8;;;;:::i;:::-;;-1:-1:-1;1614:10:0;;-1:-1:-1;1622:2:0;1614:10;;:::i;:::-;;;1558:78;;;1646:19;1678:6;1668:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1668:17:0;;1646:39;;1696:154;1703:10;;1696:154;;1730:11;1740:1;1730:11;;:::i;:::-;;-1:-1:-1;1799:10:0;1807:2;1799:5;:10;:::i;:::-;1786:24;;:2;:24;:::i;:::-;1773:39;;1756:6;1763;1756:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1827:11:0;1836:2;1827:11;;:::i;:::-;;;1696:154;;45169:392;45225:8;:15;45221:19;;45212:54;;;;-1:-1:-1;;;45212:54:0;;16013:2:1;45212:54:0;;;15995:21:1;16052:2;16032:18;;;16025:30;16091:22;16071:18;;;16064:50;16131:18;;45212:54:0;15811:344:1;45212:54:0;45292:17;45307:1;45292:14;:17::i;:::-;45279:9;:30;45271:64;;;;-1:-1:-1;;;45271:64:0;;16362:2:1;45271:64:0;;;16344:21:1;16401:2;16381:18;;;16374:30;16440:23;16420:18;;;16413:51;16481:18;;45271:64:0;16160:345:1;45271:64:0;45382:10;45364:8;45373:1;45364:11;;;;;;;;:::i;:::-;;;;;;;;;;;45376:1;45364:14;;;;;;;:::i;:::-;;;38949:10;:17;45348:30;;;;:::i;:::-;:44;;45340:73;;;;-1:-1:-1;;;45340:73:0;;16712:2:1;45340:73:0;;;16694:21:1;16751:2;16731:18;;;16724:30;16790:18;16770;;;16763:46;16826:18;;45340:73:0;16510:340:1;45340:73:0;45418:19;45435:1;45418:16;:19::i;:::-;45442:7;45452:13;38949:10;:17;;38861:113;45452:13;:17;;45468:1;45452:17;:::i;:::-;45442:27;;45479:6;45474:83;45495:8;45504:1;45495:11;;;;;;;;:::i;:::-;;;;;;;;;;;45507:1;45495:14;;;;;;;:::i;:::-;;;45491:1;:18;45474:83;;;45522:29;45532:10;45544:6;45549:1;45544:2;:6;:::i;:::-;45522:9;:29::i;:::-;45511:3;;;;:::i;:::-;;;;45474:83;;39897:589;-1:-1:-1;;;;;40103:18:0;;40099:187;;40138:40;40170:7;41313:10;:17;;41286:24;;;;:15;:24;;;;;:44;;;41341:24;;;;;;;;;;;;41209:164;40138:40;40099:187;;;40208:2;-1:-1:-1;;;;;40200:10:0;:4;-1:-1:-1;;;;;40200:10:0;;40196:90;;40227:47;40260:4;40266:7;40227:32;:47::i;:::-;-1:-1:-1;;;;;40300:16:0;;40296:183;;40333:45;40370:7;40333:36;:45::i;40296:183::-;40406:4;-1:-1:-1;;;;;40400:10:0;:2;-1:-1:-1;;;;;40400:10:0;;40396:83;;40427:40;40455:2;40459:7;40427:27;:40::i;35389:799::-;35544:4;-1:-1:-1;;;;;35565:13:0;;15140:19;:23;35561:620;;35601:72;;;;;-1:-1:-1;;;;;35601:36:0;;;;;:72;;3605:10;;35652:4;;35658:7;;35667:5;;35601:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35601:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35597:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35843:6;:13;35860:1;35843:18;35839:272;;35886:60;;-1:-1:-1;;;35886:60:0;;14963:2:1;35886:60:0;;;14945:21:1;15002:2;14982:18;;;14975:30;15041:34;15021:18;;;15014:62;15112:20;15092:18;;;15085:48;15150:19;;35886:60:0;14761:414:1;35839:272:0;36061:6;36055:13;36046:6;36042:2;36038:15;36031:38;35597:529;35724:51;;35734:41;35724:51;;-1:-1:-1;35717:58:0;;35561:620;-1:-1:-1;36165:4:0;35389:799;;;;;;:::o;45564:166::-;45620:6;45614:112;45636:10;:17;45632:21;;45614:112;;;45696:18;45715:1;45696:21;;;;;;;;:::i;:::-;;;;;;;;45718:1;45696:24;;;;;;;;:::i;:::-;;;;;;;;;45667:10;:25;45678:10;45689:1;45678:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;45678:13:0;45667:25;;;;;;;;;;;;:53;;:25;;45678:13;45667:53;;;;;:::i;:::-;;;;-1:-1:-1;45655:3:0;;-1:-1:-1;45655:3:0;;;:::i;:::-;;;;45614:112;;31031:110;31107:26;31117:2;31121:7;31107:26;;;;;;;;;;;;:9;:26::i;42000:988::-;42266:22;42316:1;42291:22;42308:4;42291:16;:22::i;:::-;:26;;;;:::i;:::-;42328:18;42349:26;;;:17;:26;;;;;;42266:51;;-1:-1:-1;42482:28:0;;;42478:328;;-1:-1:-1;;;;;42549:18:0;;42527:19;42549:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42600:30;;;;;;:44;;;42717:30;;:17;:30;;;;;:43;;;42478:328;-1:-1:-1;42902:26:0;;;;:17;:26;;;;;;;;42895:33;;;-1:-1:-1;;;;;42946:18:0;;;;;:12;:18;;;;;:34;;;;;;;42939:41;42000:988::o;43283:1079::-;43561:10;:17;43536:22;;43561:21;;43581:1;;43561:21;:::i;:::-;43593:18;43614:24;;;:15;:24;;;;;;43987:10;:26;;43536:46;;-1:-1:-1;43614:24:0;;43536:46;;43987:26;;;;;;:::i;:::-;;;;;;;;;43965:48;;44051:11;44026:10;44037;44026:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44131:28;;;:15;:28;;;;;;;:41;;;44303:24;;;;;44296:31;44338:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43354:1008;;;43283:1079;:::o;40787:221::-;40872:14;40889:20;40906:2;40889:16;:20::i;:::-;-1:-1:-1;;;;;40920:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40965:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40787:221:0:o;31368:321::-;31498:18;31504:2;31508:7;31498:5;:18::i;:::-;31549:54;31580:1;31584:2;31588:7;31597:5;31549:22;:54::i;:::-;31527:154;;;;-1:-1:-1;;;31527:154:0;;14963:2:1;31527:154:0;;;14945:21:1;15002:2;14982:18;;;14975:30;15041:34;15021:18;;;15014:62;15112:20;15092:18;;;15085:48;15150:19;;31527:154:0;14761:414:1;32025:439:0;-1:-1:-1;;;;;32105:16:0;;32097:61;;;;-1:-1:-1;;;32097:61:0;;18017:2:1;32097:61:0;;;17999:21:1;;;18036:18;;;18029:30;18095:34;18075:18;;;18068:62;18147:18;;32097:61:0;17815:356:1;32097:61:0;30112:4;30136:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30136:16:0;:30;32169:58;;;;-1:-1:-1;;;32169:58:0;;18378:2:1;32169:58:0;;;18360:21:1;18417:2;18397:18;;;18390:30;18456;18436:18;;;18429:58;18504:18;;32169:58:0;18176:352:1;32169:58:0;32240:45;32269:1;32273:2;32277:7;32240:20;:45::i;:::-;-1:-1:-1;;;;;32298:13:0;;;;;;:9;:13;;;;;:18;;32315:1;;32298:13;:18;;32315:1;;32298:18;:::i;:::-;;;;-1:-1:-1;;32327:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;32327:21:0;;;;;;;;32366:33;;32327:16;;;32366:33;;32327:16;;32366:33;27086:155;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:1;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;1137:66;1116:88;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:1:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:1;;1448:180;-1:-1:-1;1448:180:1:o;1864:196::-;1932:20;;-1:-1:-1;;;;;1981:54:1;;1971:65;;1961:93;;2050:1;2047;2040:12;1961:93;1864:196;;;:::o;2065:254::-;2133:6;2141;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2309:2;2294:18;;;;2281:32;;-1:-1:-1;;;2065:254:1:o;2506:328::-;2583:6;2591;2599;2652:2;2640:9;2631:7;2627:23;2623:32;2620:52;;;2668:1;2665;2658:12;2620:52;2691:29;2710:9;2691:29;:::i;:::-;2681:39;;2739:38;2773:2;2762:9;2758:18;2739:38;:::i;:::-;2729:48;;2824:2;2813:9;2809:18;2796:32;2786:42;;2506:328;;;;;:::o;2839:184::-;2891:77;2888:1;2881:88;2988:4;2985:1;2978:15;3012:4;3009:1;3002:15;3028:691;3093:5;3123:18;3164:2;3156:6;3153:14;3150:40;;;3170:18;;:::i;:::-;3304:2;3298:9;3370:2;3358:15;;3209:66;3354:24;;;3380:2;3350:33;3346:42;3334:55;;;3404:18;;;3424:22;;;3401:46;3398:72;;;3450:18;;:::i;:::-;3490:10;3486:2;3479:22;3519:6;3510:15;;3549:6;3541;3534:22;3589:3;3580:6;3575:3;3571:16;3568:25;3565:45;;;3606:1;3603;3596:12;3565:45;3656:6;3651:3;3644:4;3636:6;3632:17;3619:44;3711:1;3704:4;3695:6;3687;3683:19;3679:30;3672:41;;;;3028:691;;;;;:::o;3724:451::-;3793:6;3846:2;3834:9;3825:7;3821:23;3817:32;3814:52;;;3862:1;3859;3852:12;3814:52;3902:9;3889:23;3935:18;3927:6;3924:30;3921:50;;;3967:1;3964;3957:12;3921:50;3990:22;;4043:4;4035:13;;4031:27;-1:-1:-1;4021:55:1;;4072:1;4069;4062:12;4021:55;4095:74;4161:7;4156:2;4143:16;4138:2;4134;4130:11;4095:74;:::i;4180:186::-;4239:6;4292:2;4280:9;4271:7;4267:23;4263:32;4260:52;;;4308:1;4305;4298:12;4260:52;4331:29;4350:9;4331:29;:::i;4371:347::-;4436:6;4444;4497:2;4485:9;4476:7;4472:23;4468:32;4465:52;;;4513:1;4510;4503:12;4465:52;4536:29;4555:9;4536:29;:::i;:::-;4526:39;;4615:2;4604:9;4600:18;4587:32;4662:5;4655:13;4648:21;4641:5;4638:32;4628:60;;4684:1;4681;4674:12;4628:60;4707:5;4697:15;;;4371:347;;;;;:::o;4723:667::-;4818:6;4826;4834;4842;4895:3;4883:9;4874:7;4870:23;4866:33;4863:53;;;4912:1;4909;4902:12;4863:53;4935:29;4954:9;4935:29;:::i;:::-;4925:39;;4983:38;5017:2;5006:9;5002:18;4983:38;:::i;:::-;4973:48;;5068:2;5057:9;5053:18;5040:32;5030:42;;5123:2;5112:9;5108:18;5095:32;5150:18;5142:6;5139:30;5136:50;;;5182:1;5179;5172:12;5136:50;5205:22;;5258:4;5250:13;;5246:27;-1:-1:-1;5236:55:1;;5287:1;5284;5277:12;5236:55;5310:74;5376:7;5371:2;5358:16;5353:2;5349;5345:11;5310:74;:::i;:::-;5300:84;;;4723:667;;;;;;;:::o;5395:260::-;5463:6;5471;5524:2;5512:9;5503:7;5499:23;5495:32;5492:52;;;5540:1;5537;5530:12;5492:52;5563:29;5582:9;5563:29;:::i;:::-;5553:39;;5611:38;5645:2;5634:9;5630:18;5611:38;:::i;:::-;5601:48;;5395:260;;;;;:::o;5660:437::-;5739:1;5735:12;;;;5782;;;5803:61;;5857:4;5849:6;5845:17;5835:27;;5803:61;5910:2;5902:6;5899:14;5879:18;5876:38;5873:218;;5947:77;5944:1;5937:88;6048:4;6045:1;6038:15;6076:4;6073:1;6066:15;5873:218;;5660:437;;;:::o;8993:184::-;9045:77;9042:1;9035:88;9142:4;9139:1;9132:15;9166:4;9163:1;9156:15;11257:470;11436:3;11474:6;11468:13;11490:53;11536:6;11531:3;11524:4;11516:6;11512:17;11490:53;:::i;:::-;11606:13;;11565:16;;;;11628:57;11606:13;11565:16;11662:4;11650:17;;11628:57;:::i;:::-;11701:20;;11257:470;-1:-1:-1;;;;11257:470:1:o;11732:184::-;11784:77;11781:1;11774:88;11881:4;11878:1;11871:15;11905:4;11902:1;11895:15;11921:228;11961:7;12087:1;12019:66;12015:74;12012:1;12009:81;12004:1;11997:9;11990:17;11986:105;11983:131;;;12094:18;;:::i;:::-;-1:-1:-1;12134:9:1;;11921:228::o;14144:125::-;14184:4;14212:1;14209;14206:8;14203:34;;;14217:18;;:::i;:::-;-1:-1:-1;14254:9:1;;14144:125::o;14274:128::-;14314:3;14345:1;14341:6;14338:1;14335:13;14332:39;;;14351:18;;:::i;:::-;-1:-1:-1;14387:9:1;;14274:128::o;15180:195::-;15219:3;15250:66;15243:5;15240:77;15237:103;;15320:18;;:::i;:::-;-1:-1:-1;15367:1:1;15356:13;;15180:195::o;15380:184::-;15432:77;15429:1;15422:88;15529:4;15526:1;15519:15;15553:4;15550:1;15543:15;15569:120;15609:1;15635;15625:35;;15640:18;;:::i;:::-;-1:-1:-1;15674:9:1;;15569:120::o;15694:112::-;15726:1;15752;15742:35;;15757:18;;:::i;:::-;-1:-1:-1;15791:9:1;;15694:112::o;16855:512::-;17049:4;-1:-1:-1;;;;;17159:2:1;17151:6;17147:15;17136:9;17129:34;17211:2;17203:6;17199:15;17194:2;17183:9;17179:18;17172:43;;17251:6;17246:2;17235:9;17231:18;17224:34;17294:3;17289:2;17278:9;17274:18;17267:31;17315:46;17356:3;17345:9;17341:19;17333:6;17315:46;:::i;:::-;17307:54;16855:512;-1:-1:-1;;;;;;16855:512:1:o;17372:249::-;17441:6;17494:2;17482:9;17473:7;17469:23;17465:32;17462:52;;;17510:1;17507;17500:12;17462:52;17542:9;17536:16;17561:30;17585:5;17561:30;:::i;17626:184::-;17678:77;17675:1;17668:88;17775:4;17772:1;17765:15;17799:4;17796:1;17789:15

Swarm Source

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