Contract 0xafe2bc549251abae81b461e6c939ca0dda01a4f1

Contract Overview

Balance:
0.139 MATIC
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x3314dd90aabdc80a05dd15c20039e4f78c202999edf513ad82ad81f64a7a5cb4Buy316625962023-02-02 14:43:11232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10.023 MATIC0.000418210002 2.500000016
0x7cd08a8e95d07727c5c5c198b43d7d739211e0842969c38b199f2974860c3cafCancel Sell316625912023-02-02 14:42:49232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0xdcff410905f1b42c33a1d6cb3f5b13708bc111a5091c7256f5dfe51da36d87faBuy316625802023-02-02 14:42:27232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10.001 MATIC0.000430210002 2.500000017
0xe24588bc916cc15b1ab9ab0792305b938432a74cf7cc24986c31c10e7d81a50cCancel Sell316625632023-02-02 14:41:27232 days 14 hrs ago0xc6ef8a96f20d50e347ed9a1c84142d02b1efedc0 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000128626501 1.500000016
0x350065df617cdd6bb48ee15ffb6bc6938f953231392d07145d7d3a9e92d96bddCancel Sell316624802023-02-02 14:37:19232 days 14 hrs ago0xc6ef8a96f20d50e347ed9a1c84142d02b1efedc0 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000128626501 1.500000016
0x3cb11b39c018f50584d337f496eae57d77de3f63f221fc1d22a3388cb62fdc08Cancel Sell316624642023-02-02 14:36:15232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x7099816aa5e5f89236e0b3c2580436bc9018be82bfa9b3f30a201bc9032f8d1fCancel Sell316624612023-02-02 14:36:01232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x2aa6d2fd1c1efc90af6a5c5edf32fe9c19761259cacecf581342dc84e31cf34bCancel Sell316624582023-02-02 14:35:49232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0xa77049b0c46c71887afb2e3e1f1755620d47e73d0556b977a2747ada425db871Cancel Sell316624532023-02-02 14:35:29232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x0bde39ce00b84a0617f72cd4aa2e4446687d47cd83e714679fff105be509f731Cancel Sell316624412023-02-02 14:34:51232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000017
0xe6d4028fe077e398303573e77ba14333f366f8dc2f88a785992ba4cec4fd0ec8Cancel Sell316624322023-02-02 14:34:33232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000017
0x7290716c5e7c626f3262916069a76e34d319530036e8df6ff1dc94ba12293ffdCancel Sell316624272023-02-02 14:34:13232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x18970d1a081f4636c529ca7d8e0f678e9b95bc385a391ee3f7a62fdde9a67356Cancel Sell316624222023-02-02 14:33:53232 days 14 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x42825f6a0d596de6ca92060569c0ec351c91bd00f999a28e2e6c63af405118fcCancel Sell316624122023-02-02 14:33:17232 days 14 hrs ago0xc6ef8a96f20d50e347ed9a1c84142d02b1efedc0 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000128626501 1.500000016
0xaf008b9286a7fe2f05455007161f6cadc2d2c5d97cd68594b40a40cae4cd2452Cancel Sell316623932023-02-02 14:32:25232 days 14 hrs ago0xc6ef8a96f20d50e347ed9a1c84142d02b1efedc0 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000128626501 1.500000016
0x3d176ace568893d7179b0861f93debdc6acd43a2ed365f126146d6eb5af9a061Sell315967232023-01-31 10:32:01234 days 18 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000268387501 2.500000016
0xf0536ee82f3556e38f05e954481392f905519380964c65643fc40088968209c6Buy315949972023-01-31 9:19:41234 days 20 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10.005 MATIC0.000472960003 2.500000016
0xc616ddfebd420ddf73035556549c1d8eaf2b6906e8432ae9b91157068bf8ac2dCancel Sell315949492023-01-31 9:17:27234 days 20 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0x7fe02a5d481f00a4ac09c780e15c26758e342ada7eb713691d35748894a47710Sell315949342023-01-31 9:16:55234 days 20 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000274847501 2.500000016
0x542c9a46e9abb6959cecfbcc863e6c3705fc6a3dc90ed7c49967a92a877aa4a8Cancel Sell315939832023-01-31 8:36:57234 days 20 hrs ago0xfcdf05159a3585f78c8e328f25c74472e7d627ae IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000214377501 2.500000016
0xa17d2b33cd3d8b375331e377744ecfa44e6982c15e9426b5e0dbe92ad9d32a93Sell315939372023-01-31 8:35:21234 days 20 hrs ago0x6b429aa9718fba72c892962f82b512ea38f95c80 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000598637503 2.500000016
0xc1e5b6b66f2a68cf932c1a0733318884e4aa577ae411d8cb4c51562e50356b10Sell315939202023-01-31 8:34:45234 days 20 hrs ago0x6b429aa9718fba72c892962f82b512ea38f95c80 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000598637504 2.500000017
0x84c746d2890450332c54c00db614c82139a661bfe83a39d571d3a44680932886Sell315937462023-01-31 8:27:31234 days 20 hrs ago0x6b429aa9718fba72c892962f82b512ea38f95c80 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.000586637503 2.500000015
0x44538007e3410500f2c2c488f7a5d18fedcbfcad6ae740c00a49bc1270a07656Sell315937062023-01-31 8:25:33234 days 21 hrs ago0x6b429aa9718fba72c892962f82b512ea38f95c80 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.0001184875 2.500000015
0xae5bb5c1697b2af19bbff4bd635df665eb70c2485312587ac5e985fd859bf5c5Sell315936572023-01-31 8:23:17234 days 21 hrs ago0x6b429aa9718fba72c892962f82b512ea38f95c80 IN  0xafe2bc549251abae81b461e6c939ca0dda01a4f10 MATIC0.0001184875 2.500000015
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NftMarket

Compiler Version
v0.6.7+commit.b8d736ae

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at PolygonScan.com on 2023-01-11
*/

// File: contracts/openzeppelin/contracts/security/ReentrancyGuard.sol

// File: contracts/library/ReentrancyGuard.sol

pragma solidity ^0.6.7;

contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    function initReentrancyStatus() internal {
        _status = _NOT_ENTERED;
    }
}

// File: contracts/openzeppelin/contracts/GSN/Context.sol



pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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



pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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



pragma solidity ^0.6.0;

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

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



pragma solidity ^0.6.0;

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

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



pragma solidity ^0.6.2;


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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/openzeppelin/contracts/math/SafeMath.sol



pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/openzeppelin/contracts/token/ERC20/IERC20.sol



pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/openzeppelin/contracts/token/ERC20/SafeERC20.sol



pragma solidity ^0.6.0;




/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/marketplace/ScapeStore.sol

pragma solidity ^0.6.7;
pragma experimental ABIEncoderV2;








/// @title Nft Market is a trading platform on seascape network allowing to buy and sell Nfts
/// @author Nejc Schneider
contract NftMarket is IERC721Receiver, ReentrancyGuard, Ownable {
    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    /// @dev keep count of SalesObject amount
    uint256 public salesAmount;
    /// @notice enable/disable trading
    bool public salesEnabled;
    /// @dev fee rate and fee reciever. feeAmount = (feeRate / 1000) * price
    uint256 public feeRate;
    address payable feeReceiver;

    /// @notice individual sale related data
    struct SalesObject {
        uint256 id;               // sales ID
        uint256 tokenId;          // token unique id
        address nft;              // nft address
        address currency;         // currency address
        address payable seller;   // seller address
        address payable buyer;    // buyer address
        uint256 startTime;        // timestamp when the sale starts
        uint256 price;            // nft price
        uint8 status;             // 2 = sale canceled, 1 = sold, 0 = for sale
    }

    /// @dev store sales objects.
    /// @param nft token address => (nft id => salesObject)
    mapping(address => mapping(uint256 => SalesObject)) salesObjects; // store sales in a mapping
    /// @dev supported ERC721 and ERC20 contracts
    mapping(address => bool) public supportedNft;
    mapping(address => bool) public supportedCurrency;


    event Buy(
        uint256 indexed saleId,
        uint256 tokenId,
        address buyer,
        uint256 price,
        uint256 tipsFee,
        address currency
    );

    event Sell(
        uint256 indexed saleId,
        uint256 tokenId,
        address nft,
        address currency,
        address seller,
        address buyer,
        uint256 startTime,
        uint256 price
    );

    event CancelSell(uint256 indexed saleId, uint256 tokenId);
    event NftReceived(address operator, address from, uint256 tokenId, bytes data);

    /// @dev set fee reciever address and fee rate
    /// @param _feeReceiver fee receiving address
    /// @param _feeRate fee amount
    constructor(address payable _feeReceiver, uint256 _feeRate) public {
        feeReceiver = _feeReceiver;
        feeRate = _feeRate;
        initReentrancyStatus();
    }

    //--------------------------------------------------
    // External methods
    //--------------------------------------------------

    /// @notice enable/disable sales
    /// @param _salesEnabled set sales to true/false
    function enableSales(bool _salesEnabled) external onlyOwner { salesEnabled = _salesEnabled; }

    /// @notice add supported nft token
    /// @param _nftAddress ERC721 contract address
    function addSupportedNft(address _nftAddress) external onlyOwner {
        require(_nftAddress != address(0x0), "invalid address");
        supportedNft[_nftAddress] = true;
    }

    /// @notice disable supported nft token
    /// @param _nftAddress ERC721 contract address
    function removeSupportedNft(address _nftAddress) external onlyOwner {
        require(_nftAddress != address(0x0), "invalid address");
        supportedNft[_nftAddress] = false;
    }

    /// @notice add supported currency token
    /// @param _currencyAddress ERC20 contract address
    function addSupportedCurrency(address _currencyAddress) external onlyOwner {
        require(!supportedCurrency[_currencyAddress], "currency already supported");
        supportedCurrency[_currencyAddress] = true;
    }

    /// @notice disable supported currency token
    /// @param _currencyAddress ERC20 contract address
    function removeSupportedCurrency(address _currencyAddress) external onlyOwner {
        require(supportedCurrency[_currencyAddress], "currency already removed");
        supportedCurrency[_currencyAddress] = false;
    }

    /// @notice change fee receiver address
    /// @param _walletAddress address of the new fee receiver
    function setFeeReceiver(address payable _walletAddress) external onlyOwner {
        require(_walletAddress != address(0x0), "invalid address");
        feeReceiver = _walletAddress;
    }

    /// @notice change fee rate
    /// @param _rate amount value. Actual rate in percent = _rate / 10
    function setFeeRate(uint256 _rate) external onlyOwner {
        require(_rate <= 100, "Rate should be bellow 100 (10%)");
        feeRate = _rate;
    }

    /// @notice returns sales amount
    /// @return total amount of sales objects
    function getSalesAmount() external view returns(uint) { return salesAmount; }

    //--------------------------------------------------
    // Public methods
    //--------------------------------------------------

    /// @notice cancel nft sale
    /// @param _tokenId nft unique ID
    /// @param _nftAddress nft token address
    function cancelSell(uint _tokenId, address _nftAddress) public nonReentrant {
        SalesObject storage obj = salesObjects[_nftAddress][_tokenId];
        require(obj.status == 0, "status: sold or canceled");
        require(obj.seller == msg.sender, "seller not nft owner");

        obj.status = 2;
        IERC721 nft = IERC721(obj.nft);
        nft.safeTransferFrom(address(this), obj.seller, obj.tokenId);

        emit CancelSell(obj.id, obj.tokenId);
    }

    /// @notice put nft for sale
    /// @param _tokenId nft unique ID
    /// @param _price required price to pay by buyer. Seller receives less: price - fees
    /// @param _nftAddress nft token address
    /// @param _currency currency token address
    /// @return salesAmount total amount of sales
    function sell(uint256 _tokenId, uint256 _price, address _nftAddress, address _currency)
        public
        nonReentrant
        returns(uint)
    {
        require(_nftAddress != address(0x0), "invalid nft address");
        require(_tokenId != 0, "invalid nft token");
        require(salesEnabled, "sales are closed");
        require(supportedNft[_nftAddress], "nft address unsupported");
        require(supportedCurrency[_currency], "currency not supported");
        IERC721(_nftAddress).safeTransferFrom(msg.sender, address(this), _tokenId);

        salesAmount++;

        salesObjects[_nftAddress][_tokenId] = SalesObject(
            salesAmount,
            _tokenId,
            _nftAddress,
            _currency,
            msg.sender,
            address(0x0),
            now,
            _price,
            0
        );

        emit Sell(
            salesAmount,
            _tokenId,
            _nftAddress,
            _currency,
            msg.sender,
            address(0x0),
            now,
            _price
        );

        return salesAmount;
    }

    /// @dev encrypt token data
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes memory data
    )
        public
        override
        returns (bytes4)
    {
        //only receive the _nft staff
        if (address(this) != operator) {
            //invalid from nft
            return 0;
        }

        //success
        emit NftReceived(operator, from, tokenId, data);
        return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
    }

    /// @notice buy nft
    /// @param _tokenId nft unique ID
    /// @param _nftAddress nft token address
    /// @param _currency currency token address
    function buy(uint _tokenId, address _nftAddress, address _currency, uint _price)
        public
        nonReentrant
        payable
    {
        SalesObject storage obj = salesObjects[_nftAddress][_tokenId];
        require(obj.status == 0, "status: sold or canceled");
        require(obj.startTime <= now, "not yet for sale");
        require(salesEnabled, "sales are closed");
        require(msg.sender != obj.seller, "cant buy from yourself");

        require(obj.currency == _currency, "must pay same currency as sold");
        uint256 price = this.getSalesPrice(_tokenId, _nftAddress);
        require(price == _price, "invalid price");
        uint256 tipsFee = price.mul(feeRate).div(1000);
        uint256 purchase = price.sub(tipsFee);

        if (obj.currency == address(0x0)) {
            require (msg.value >= price, "your price is too low");
            uint256 returnBack = msg.value.sub(price);
            if (returnBack > 0)
                msg.sender.transfer(returnBack);
            if (tipsFee > 0)
                feeReceiver.transfer(tipsFee);
            obj.seller.transfer(purchase);
        } else {
            IERC20(obj.currency).safeTransferFrom(msg.sender, feeReceiver, tipsFee);
            IERC20(obj.currency).safeTransferFrom(msg.sender, obj.seller, purchase);
        }

        IERC721 nft = IERC721(obj.nft);
        nft.safeTransferFrom(address(this), msg.sender, obj.tokenId);
        obj.buyer = msg.sender;

        obj.status = 1;
        emit Buy(obj.id, obj.tokenId, msg.sender, price, tipsFee, obj.currency);
    }

    /// @dev fetch sale object at nftId and nftAddress
    /// @param _tokenId unique nft ID
    /// @param _nftAddress nft token address
    /// @return SalesObject at given index
    function getSales(uint _tokenId, address _nftAddress)
        public
        view
        returns(SalesObject memory)
    {
        return salesObjects[_nftAddress][_tokenId];
    }

    /// @dev returns the price of sale
    /// @param _tokenId nft unique ID
    /// @param _nftAddress nft token address
    /// @return obj.price price of corresponding sale
    function getSalesPrice(uint _tokenId, address _nftAddress) public view returns (uint256) {
        SalesObject storage obj = salesObjects[_nftAddress][_tokenId];
        return obj.price;
    }

}

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_feeReceiver","type":"address"},{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tipsFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"currency","type":"address"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"NftReceived","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":"uint256","name":"saleId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nft","type":"address"},{"indexed":false,"internalType":"address","name":"currency","type":"address"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Sell","type":"event"},{"inputs":[{"internalType":"address","name":"_currencyAddress","type":"address"}],"name":"addSupportedCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"addSupportedNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_currency","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"cancelSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_salesEnabled","type":"bool"}],"name":"enableSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"getSales","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"address","name":"currency","type":"address"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address payable","name":"buyer","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct NftMarket.SalesObject","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"getSalesPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_currencyAddress","type":"address"}],"name":"removeSupportedCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"}],"name":"removeSupportedNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salesAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_currency","type":"address"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_walletAddress","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedCurrency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedNft","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003fcd38038062003fcd833981810160405281019062000037919062000190565b60016000819055506000620000516200015060201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600481905550620001486200015860201b60201c565b505062000243565b600033905090565b6001600081905550565b60008151905062000173816200020f565b92915050565b6000815190506200018a8162000229565b92915050565b60008060408385031215620001a457600080fd5b6000620001b48582860162000162565b9250506020620001c78582860162000179565b9150509250929050565b6000620001de82620001e5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6200021a81620001d1565b81146200022657600080fd5b50565b620002348162000205565b81146200024057600080fd5b50565b613d7a80620002536000396000f3fe6080604052600436106101355760003560e01c8063715018a6116100ab578063c84ad9a51161006f578063c84ad9a514610403578063efdcd9741461042e578063f2fde38b14610457578063f8f2d60e14610480578063ff2a047a146104a9578063ffa1a44b146104e657610135565b8063715018a6146103445780638b4c3d791461035b5780638da5cb5b14610384578063978bbdb9146103af578063adbfdd70146103da57610135565b80632eab0374116100fd5780632eab0374146102105780633d0cc799146102395780633fe893d61461027657806345596e2e146102b35780634f8f0218146102dc5780635748966c1461031957610135565b8063044cc4261461013a5780630afc7bf4146101635780630b3cbb441461017f5780630d9262e1146101a8578063150b7a02146101d3575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b07565b610523565b005b61017d60048036038101906101789190612cb4565b6106a2565b005b34801561018b57600080fd5b506101a660048036038101906101a19190612bd4565b610eb8565b005b3480156101b457600080fd5b506101bd610f6c565b6040516101ca9190613a1f565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612b59565b610f76565b6040516102079190613706565b60405180910390f35b34801561021c57600080fd5b5061023760048036038101906102329190612b07565b611013565b005b34801561024557600080fd5b50610260600480360381019061025b9190612b07565b611175565b60405161026d91906136eb565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612c78565b611195565b6040516102aa9190613a1f565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c26565b6111f8565b005b3480156102e857600080fd5b5061030360048036038101906102fe9190612d17565b6112dd565b6040516103109190613a1f565b60405180910390f35b34801561032557600080fd5b5061032e61187d565b60405161033b9190613a1f565b60405180910390f35b34801561035057600080fd5b50610359611883565b005b34801561036757600080fd5b50610382600480360381019061037d9190612b07565b6119db565b005b34801561039057600080fd5b50610399611b3d565b6040516103a691906135df565b60405180910390f35b3480156103bb57600080fd5b506103c4611b67565b6040516103d19190613a1f565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc9190612c78565b611b6d565b005b34801561040f57600080fd5b50610418611e24565b60405161042591906136eb565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190612b30565b611e37565b005b34801561046357600080fd5b5061047e60048036038101906104799190612b07565b611f82565b005b34801561048c57600080fd5b506104a760048036038101906104a29190612b07565b612149565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612b07565b6122c7565b6040516104dd91906136eb565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190612c78565b6122e7565b60405161051a9190613a03565b60405180910390f35b61052b6124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b1906138e3565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063e90613863565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260005414156106e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106df906139c3565b60405180910390fd5b60026000819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020905060008160080160009054906101000a900460ff1660ff161461079b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079290613903565b60405180910390fd5b42816006015411156107e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d9906139e3565b60405180910390fd5b600360009054906101000a900460ff16610831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082890613803565b60405180910390fd5b8060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bb90613943565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613883565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff16633fe893d687876040518363ffffffff1660e01b8152600401610993929190613a3a565b60206040518083038186803b1580156109ab57600080fd5b505afa1580156109bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e39190612c4f565b9050828114610a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1e90613823565b60405180910390fd5b6000610a526103e8610a44600454856124f890919063ffffffff16565b61256890919063ffffffff16565b90506000610a6982846125b290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168460030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c535782341015610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe906137a3565b60405180910390fd5b6000610b1c84346125b290919063ffffffff16565b90506000811115610b6f573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b6d573d6000803e3d6000fd5b505b6000831115610be257600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610be0573d6000803e3d6000fd5b505b8460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610c4c573d6000803e3d6000fd5b5050610d3c565b610cc633600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166125fc909392919063ffffffff16565b610d3b338560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166125fc909392919063ffffffff16565b5b60008460020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166342842e0e303388600101546040518463ffffffff1660e01b8152600401610da693929190613631565b600060405180830381600087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b50505050338560050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018560080160006101000a81548160ff021916908360ff16021790555084600001547f34b043e0e9e31d679baae1d9bb0ef92f0306c1b72cceef34737a29742f22609d86600101543387878a60030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610e9d959493929190613a63565b60405180910390a25050505050600160008190555050505050565b610ec06124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906138e3565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6000600254905090565b60008473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610fb757600060e01b905061100b565b7f0895c277367ff99b8c0dec875f3149fc2c82df592f63ca6f0747ac209516908785858585604051610fec949392919061369f565b60405180910390a1604051611000906135ca565b604051809103902090505b949350505050565b61101b6124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a1906138e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613843565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000209050806007015491505092915050565b6112006124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906138e3565b60405180910390fd5b60648111156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906137c3565b60405180910390fd5b8060048190555050565b600060026000541415611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c906139c3565b60405180910390fd5b6002600081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490613763565b60405180910390fd5b60008514156113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890613983565b60405180910390fd5b600360009054906101000a900460ff16611430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142790613803565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906138a3565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90613923565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3330886040518463ffffffff1660e01b8152600401611585939291906135fa565b600060405180830381600087803b15801561159f57600080fd5b505af11580156115b3573d6000803e3d6000fd5b5050505060026000815480929190600101919050555060405180610120016040528060025481526020018681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001428152602001858152602001600060ff16815250600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff021916908360ff1602179055509050506002547f478275d8b67a791d16edb57e0de694972e1bc0bf837e363b432bd73fa1cfcee9868585336000428b6040516118609796959493929190613ab6565b60405180910390a260025490506001600081905550949350505050565b60025481565b61188b6124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906138e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119e36124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a69906138e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613843565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b60026000541415611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa906139c3565b60405180910390fd5b60026000819055506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020905060008160080160009054906101000a900460ff1660ff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613903565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef906137e3565b60405180910390fd5b60028160080160006101000a81548160ff021916908360ff16021790555060008160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166342842e0e308460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685600101546040518463ffffffff1660e01b8152600401611da493929190613631565b600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b5050505081600001547f6da7243e8c7c719f32cb07e82d4ab33d9dbe147ea975c53b7d43a31fc745b14c8360010154604051611e0e9190613a1f565b60405180910390a2505060016000819055505050565b600360009054906101000a900460ff1681565b611e3f6124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec5906138e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590613843565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611f8a6124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612019576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612010906138e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090613783565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121516124f0565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d7906138e3565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661226c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226390613743565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b6122ef61298e565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518061012001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160068201548152602001600782015481526020016008820160009054906101000a900460ff1660ff1660ff1681525050905092915050565b600033905090565b60008083141561250b5760009050612562565b600082840290508284828161251c57fe5b041461255d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612554906138c3565b60405180910390fd5b809150505b92915050565b60006125aa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612685565b905092915050565b60006125f483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126e6565b905092915050565b61267f846323b872dd60e01b85858560405160240161261d93929190613668565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612741565b50505050565b600080831182906126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c39190613721565b60405180910390fd5b5060008385816126d857fe5b049050809150509392505050565b600083831115829061272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127259190613721565b60405180910390fd5b5060008385039050809150509392505050565b60606127a3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128089092919063ffffffff16565b905060008151111561280357808060200190518101906127c39190612bfd565b612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f9906139a3565b60405180910390fd5b5b505050565b60606128178484600085612820565b90509392505050565b606061282b85612943565b61286a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286190613963565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405161289491906135b3565b60006040518083038185875af1925050503d80600081146128d1576040519150601f19603f3d011682016040523d82523d6000602084013e6128d6565b606091505b509150915081156128eb57809250505061293b565b6000815111156128fe5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129329190613721565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561298557506000801b8214155b92505050919050565b6040518061012001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600060ff1681525090565b600081359050612a4481613ce8565b92915050565b600081359050612a5981613cff565b92915050565b600081359050612a6e81613d16565b92915050565b600081519050612a8381613d16565b92915050565b600082601f830112612a9a57600080fd5b8135612aad612aa882613b52565b613b25565b91508082526020830160208301858383011115612ac957600080fd5b612ad4838284613c95565b50505092915050565b600081359050612aec81613d2d565b92915050565b600081519050612b0181613d2d565b92915050565b600060208284031215612b1957600080fd5b6000612b2784828501612a35565b91505092915050565b600060208284031215612b4257600080fd5b6000612b5084828501612a4a565b91505092915050565b60008060008060808587031215612b6f57600080fd5b6000612b7d87828801612a35565b9450506020612b8e87828801612a35565b9350506040612b9f87828801612add565b925050606085013567ffffffffffffffff811115612bbc57600080fd5b612bc887828801612a89565b91505092959194509250565b600060208284031215612be657600080fd5b6000612bf484828501612a5f565b91505092915050565b600060208284031215612c0f57600080fd5b6000612c1d84828501612a74565b91505092915050565b600060208284031215612c3857600080fd5b6000612c4684828501612add565b91505092915050565b600060208284031215612c6157600080fd5b6000612c6f84828501612af2565b91505092915050565b60008060408385031215612c8b57600080fd5b6000612c9985828601612add565b9250506020612caa85828601612a35565b9150509250929050565b60008060008060808587031215612cca57600080fd5b6000612cd887828801612add565b9450506020612ce987828801612a35565b9350506040612cfa87828801612a35565b9250506060612d0b87828801612add565b91505092959194509250565b60008060008060808587031215612d2d57600080fd5b6000612d3b87828801612add565b9450506020612d4c87828801612add565b9350506040612d5d87828801612a35565b9250506060612d6e87828801612a35565b91505092959194509250565b612d8381613c5f565b82525050565b612d9281613bde565b82525050565b612da181613bcc565b82525050565b612db081613bcc565b82525050565b612dbf81613bf0565b82525050565b612dce81613bfc565b82525050565b6000612ddf82613b7e565b612de98185613b94565b9350612df9818560208601613ca4565b612e0281613cd7565b840191505092915050565b6000612e1882613b7e565b612e228185613ba5565b9350612e32818560208601613ca4565b80840191505092915050565b6000612e4982613b89565b612e538185613bb0565b9350612e63818560208601613ca4565b612e6c81613cd7565b840191505092915050565b6000612e84602f83613bc1565b91507f6f6e455243373231526563656976656428616464726573732c6164647265737360008301527f2c75696e743235362c62797465732900000000000000000000000000000000006020830152602f82019050919050565b6000612eea601883613bb0565b91507f63757272656e637920616c72656164792072656d6f76656400000000000000006000830152602082019050919050565b6000612f2a601383613bb0565b91507f696e76616c6964206e66742061646472657373000000000000000000000000006000830152602082019050919050565b6000612f6a602683613bb0565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fd0601583613bb0565b91507f796f757220707269636520697320746f6f206c6f7700000000000000000000006000830152602082019050919050565b6000613010601f83613bb0565b91507f526174652073686f756c642062652062656c6c6f7720313030202831302529006000830152602082019050919050565b6000613050601483613bb0565b91507f73656c6c6572206e6f74206e6674206f776e65720000000000000000000000006000830152602082019050919050565b6000613090601083613bb0565b91507f73616c65732061726520636c6f736564000000000000000000000000000000006000830152602082019050919050565b60006130d0600d83613bb0565b91507f696e76616c6964207072696365000000000000000000000000000000000000006000830152602082019050919050565b6000613110600f83613bb0565b91507f696e76616c6964206164647265737300000000000000000000000000000000006000830152602082019050919050565b6000613150601a83613bb0565b91507f63757272656e637920616c726561647920737570706f727465640000000000006000830152602082019050919050565b6000613190601e83613bb0565b91507f6d757374207061792073616d652063757272656e637920617320736f6c6400006000830152602082019050919050565b60006131d0601783613bb0565b91507f6e6674206164647265737320756e737570706f727465640000000000000000006000830152602082019050919050565b6000613210602183613bb0565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613276602083613bb0565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006132b6601883613bb0565b91507f7374617475733a20736f6c64206f722063616e63656c656400000000000000006000830152602082019050919050565b60006132f6601683613bb0565b91507f63757272656e6379206e6f7420737570706f72746564000000000000000000006000830152602082019050919050565b6000613336601683613bb0565b91507f63616e74206275792066726f6d20796f757273656c66000000000000000000006000830152602082019050919050565b6000613376601d83613bb0565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006133b6601183613bb0565b91507f696e76616c6964206e667420746f6b656e0000000000000000000000000000006000830152602082019050919050565b60006133f6602a83613bb0565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061345c601f83613bb0565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b600061349c601083613bb0565b91507f6e6f742079657420666f722073616c65000000000000000000000000000000006000830152602082019050919050565b610120820160008201516134e66000850182613586565b5060208201516134f96020850182613586565b50604082015161350c6040850182612d98565b50606082015161351f6060850182612d98565b5060808201516135326080850182612d89565b5060a082015161354560a0850182612d89565b5060c082015161355860c0850182613586565b5060e082015161356b60e0850182613586565b506101008201516135806101008501826135a4565b50505050565b61358f81613c48565b82525050565b61359e81613c48565b82525050565b6135ad81613c52565b82525050565b60006135bf8284612e0d565b915081905092915050565b60006135d582612e77565b9150819050919050565b60006020820190506135f46000830184612da7565b92915050565b600060608201905061360f6000830186612d7a565b61361c6020830185612da7565b6136296040830184613595565b949350505050565b60006060820190506136466000830186612da7565b6136536020830185612d7a565b6136606040830184613595565b949350505050565b600060608201905061367d6000830186612da7565b61368a6020830185612da7565b6136976040830184613595565b949350505050565b60006080820190506136b46000830187612da7565b6136c16020830186612da7565b6136ce6040830185613595565b81810360608301526136e08184612dd4565b905095945050505050565b60006020820190506137006000830184612db6565b92915050565b600060208201905061371b6000830184612dc5565b92915050565b6000602082019050818103600083015261373b8184612e3e565b905092915050565b6000602082019050818103600083015261375c81612edd565b9050919050565b6000602082019050818103600083015261377c81612f1d565b9050919050565b6000602082019050818103600083015261379c81612f5d565b9050919050565b600060208201905081810360008301526137bc81612fc3565b9050919050565b600060208201905081810360008301526137dc81613003565b9050919050565b600060208201905081810360008301526137fc81613043565b9050919050565b6000602082019050818103600083015261381c81613083565b9050919050565b6000602082019050818103600083015261383c816130c3565b9050919050565b6000602082019050818103600083015261385c81613103565b9050919050565b6000602082019050818103600083015261387c81613143565b9050919050565b6000602082019050818103600083015261389c81613183565b9050919050565b600060208201905081810360008301526138bc816131c3565b9050919050565b600060208201905081810360008301526138dc81613203565b9050919050565b600060208201905081810360008301526138fc81613269565b9050919050565b6000602082019050818103600083015261391c816132a9565b9050919050565b6000602082019050818103600083015261393c816132e9565b9050919050565b6000602082019050818103600083015261395c81613329565b9050919050565b6000602082019050818103600083015261397c81613369565b9050919050565b6000602082019050818103600083015261399c816133a9565b9050919050565b600060208201905081810360008301526139bc816133e9565b9050919050565b600060208201905081810360008301526139dc8161344f565b9050919050565b600060208201905081810360008301526139fc8161348f565b9050919050565b600061012082019050613a1960008301846134cf565b92915050565b6000602082019050613a346000830184613595565b92915050565b6000604082019050613a4f6000830185613595565b613a5c6020830184612da7565b9392505050565b600060a082019050613a786000830188613595565b613a856020830187612d7a565b613a926040830186613595565b613a9f6060830185613595565b613aac6080830184612da7565b9695505050505050565b600060e082019050613acb600083018a613595565b613ad86020830189612da7565b613ae56040830188612da7565b613af26060830187612d7a565b613aff6080830186612d7a565b613b0c60a0830185613595565b613b1960c0830184613595565b98975050505050505050565b6000604051905081810181811067ffffffffffffffff82111715613b4857600080fd5b8060405250919050565b600067ffffffffffffffff821115613b6957600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bd782613c28565b9050919050565b6000613be982613c28565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613c6a82613c71565b9050919050565b6000613c7c82613c83565b9050919050565b6000613c8e82613c28565b9050919050565b82818337600083830152505050565b60005b83811015613cc2578082015181840152602081019050613ca7565b83811115613cd1576000848401525b50505050565b6000601f19601f8301169050919050565b613cf181613bcc565b8114613cfc57600080fd5b50565b613d0881613bde565b8114613d1357600080fd5b50565b613d1f81613bf0565b8114613d2a57600080fd5b50565b613d3681613c48565b8114613d4157600080fd5b5056fea264697066735822122087b5853dfa5f2aa660e7d127227086ff7e5f8be9a1602d9775d94e4e29411de364736f6c63430006070033000000000000000000000000c6ef8a96f20d50e347ed9a1c84142d02b1efedc0000000000000000000000000000000000000000000000000000000000000000a

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

000000000000000000000000c6ef8a96f20d50e347ed9a1c84142d02b1efedc0000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : _feeReceiver (address): 0xc6ef8a96f20d50e347ed9a1c84142d02b1efedc0
Arg [1] : _feeRate (uint256): 10

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6ef8a96f20d50e347ed9a1c84142d02b1efedc0
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000a


Deployed ByteCode Sourcemap

30356:9878:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;33639:222:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33639:222:0;;;;;;;;;;;;;;;;:::i;:::-;;37860:1605;;;;;;;;;;;;;;;;:::i;:::-;;32862:93;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32862:93:0;;;;;;;;;;;;;;;;:::i;:::-;;34866:77;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34866:77:0;;;:::i;:::-;;;;;;;;;;;;;;;;37171:522;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37171:522:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33056:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33056:182:0;;;;;;;;;;;;;;;;:::i;:::-;;31675:49;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31675:49:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;40033:196;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40033:196:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34618:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34618:155:0;;;;;;;;;;;;;;;;:::i;:::-;;36002:1128;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36002:1128:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30542:26;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30542:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;4804:148;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4804:148:0;;;:::i;:::-;;33343:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33343:186:0;;;;;;;;;;;;;;;;:::i;:::-;;4162:79;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4162:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;30724:22;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30724:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;35210:475;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35210:475:0;;;;;;;;;;;;;;;;:::i;:::-;;30615:24;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30615:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;34314:191;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34314:191:0;;;;;;;;;;;;;;;;:::i;:::-;;5107:244;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5107:244:0;;;;;;;;;;;;;;;;:::i;:::-;;33975:223;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33975:223:0;;;;;;;;;;;;;;;;:::i;:::-;;31624:44;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31624:44:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39658:187;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39658:187:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33639:222;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;33734:17:::1;:35;33752:16;33734:35;;;;;;;;;;;;;;;;;;;;;;;;;33733:36;33725:75;;;;;;;;;;;;;;;;;;;;;;33849:4;33811:17;:35;33829:16;33811:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;33639:222:::0;:::o;37860:1605::-;1026:1;1631:7;;:19;;1623:63;;;;;;;;;;;;;;;;;;;;;;1026:1;1764:7;:18;;;;38012:23:::1;38038:12;:25;38051:11;38038:25;;;;;;;;;;;;;;;:35;38064:8;38038:35;;;;;;;;;;;38012:61;;38106:1;38092:3;:10;;;;;;;;;;;;:15;;;38084:52;;;;;;;;;;;;;;;;;;;;;;38172:3;38155;:13;;;:20;;38147:49;;;;;;;;;;;;;;;;;;;;;;38215:12;;;;;;;;;;;38207:41;;;;;;;;;;;;;;;;;;;;;;38281:3;:10;;;;;;;;;;;;38267:24;;:10;:24;;;;38259:59;;;;;;;;;;;;;;;;;;;;;;38355:9;38339:25;;:3;:12;;;;;;;;;;;;:25;;;38331:68;;;;;;;;;;;;;;;;;;;;;;38410:13;38426:4;:18;;;38445:8;38455:11;38426:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38426:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38426:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38426:41:0;;;;;;;;;38410:57;;38495:6;38486:5;:15;38478:41;;;;;;;;;;;;;;;;;;;;;;38530:15;38548:28;38571:4;38548:18;38558:7;;38548:5;:9;;:18;;;;:::i;:::-;:22;;:28;;;;:::i;:::-;38530:46;;38587:16;38606:18;38616:7;38606:5;:9;;:18;;;;:::i;:::-;38587:37;;38665:3;38641:28;;:3;:12;;;;;;;;;;;;:28;;;38637:565;;;38708:5;38695:9;:18;;38686:53;;;;;;;;;;;;;;;;;;;;;;38754:18;38775:20;38789:5;38775:9;:13;;:20;;;;:::i;:::-;38754:41;;38827:1;38814:10;:14;38810:68;;;38847:10;:19;;:31;38867:10;38847:31;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38847:31:0;38810:68;38907:1;38897:7;:11;38893:63;;;38927:11;;;;;;;;;;;:20;;:29;38948:7;38927:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38927:29:0;38893:63;38971:3;:10;;;;;;;;;;;;:19;;:29;38991:8;38971:29;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38971:29:0;38637:565;;;;39033:71;39071:10;39083:11;;;;;;;;;;;39096:7;39040:3;:12;;;;;;;;;;;;39033:37;;;;:71;;;;;;:::i;:::-;39119;39157:10;39169:3;:10;;;;;;;;;;;;39181:8;39126:3;:12;;;;;;;;;;;;39119:37;;;;:71;;;;;;:::i;:::-;38637:565;39214:11;39236:3;:7;;;;;;;;;;;;39214:30;;39255:3;:20;;;39284:4;39291:10;39303:3;:11;;;39255:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39255:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39255:60:0;;;;39338:10;39326:3;:9;;;:22;;;;;;;;;;;;;;;;;;39374:1;39361:3;:10;;;:14;;;;;;;;;;;;;;;;;;39395:3;:6;;;39391:66;39403:3;:11;;;39416:10;39428:5;39435:7;39444:3;:12;;;;;;;;;;;;39391:66;;;;;;;;;;;;;;;;;;;1795:1;;;;;982::::0;1943:7;:22;;;;37860:1605;;;;:::o;32862:93::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;32939:13:::1;32924:12;;:28;;;;;;;;;;;;;;;;;;32862:93:::0;:::o;34866:77::-;34914:4;34929:11;;34922:18;;34866:77;:::o;37171:522::-;37360:6;37444:8;37427:25;;37435:4;37427:25;;;37423:98;;37508:1;37501:8;;;;;;37423:98;37557:42;37569:8;37579:4;37585:7;37594:4;37557:42;;;;;;;;;;;;;;;;;;37624:60;;;;;;;;;;;;;;37610:75;;37171:522;;;;;;;:::o;33056:182::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;33163:3:::1;33140:27;;:11;:27;;;;33132:55;;;;;;;;;;;;;;;;;;;;;;33226:4;33198:12;:25;33211:11;33198:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33056:182:::0;:::o;31675:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;40033:196::-;40113:7;40133:23;40159:12;:25;40172:11;40159:25;;;;;;;;;;;;;;;:35;40185:8;40159:35;;;;;;;;;;;40133:61;;40212:3;:9;;;40205:16;;;40033:196;;;;:::o;34618:155::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;34700:3:::1;34691:5;:12;;34683:56;;;;;;;;;;;;;;;;;;;;;;34760:5;34750:7;:15;;;;34618:155:::0;:::o;36002:1128::-;36145:4;1026:1;1631:7;;:19;;1623:63;;;;;;;;;;;;;;;;;;;;;;1026:1;1764:7;:18;;;;36198:3:::1;36175:27;;:11;:27;;;;36167:59;;;;;;;;;;;;;;;;;;;;;;36257:1;36245:8;:13;;36237:43;;;;;;;;;;;;;;;;;;;;;;36299:12;;;;;;;;;;;36291:41;;;;;;;;;;;;;;;;;;;;;;36351:12;:25;36364:11;36351:25;;;;;;;;;;;;;;;;;;;;;;;;;36343:61;;;;;;;;;;;;;;;;;;;;;;36423:17;:28;36441:9;36423:28;;;;;;;;;;;;;;;;;;;;;;;;;36415:63;;;;;;;;;;;;;;;;;;;;;;36497:11;36489:37;;;36527:10;36547:4;36554:8;36489:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36489:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36489:74:0;;;;36576:11;;:13;;;;;;;;;;;;;36640:228;;;;;;;;36666:11;;36640:228;;;;36692:8;36640:228;;;;36715:11;36640:228;;;;;;36741:9;36640:228;;;;;;36765:10;36640:228;;;;;;36798:3;36640:228;;;;;;36817:3;36640:228;;;;36835:6;36640:228;;;;36856:1;36640:228;;;;::::0;36602:12:::1;:25;36615:11;36602:25;;;;;;;;;;;;;;;:35;36628:8;36602:35;;;;;;;;;;;:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36905:11;;36886:205;36931:8;36954:11;36980:9;37004:10;37037:3;37056;37074:6;36886:205;;;;;;;;;;;;;;;;;;;;;37111:11;;37104:18;;982:1:::0;1943:7;:22;;;;36002:1128;;;;;;:::o;30542:26::-;;;;:::o;4804:148::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;4911:1:::1;4874:40;;4895:6;;;;;;;;;;;4874:40;;;;;;;;;;;;4942:1;4925:6;;:19;;;;;;;;;;;;;;;;;;4804:148::o:0;33343:186::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;33453:3:::1;33430:27;;:11;:27;;;;33422:55;;;;;;;;;;;;;;;;;;;;;;33516:5;33488:12;:25;33501:11;33488:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33343:186:::0;:::o;4162:79::-;4200:7;4227:6;;;;;;;;;;;4220:13;;4162:79;:::o;30724:22::-;;;;:::o;35210:475::-;1026:1;1631:7;;:19;;1623:63;;;;;;;;;;;;;;;;;;;;;;1026:1;1764:7;:18;;;;35297:23:::1;35323:12;:25;35336:11;35323:25;;;;;;;;;;;;;;;:35;35349:8;35323:35;;;;;;;;;;;35297:61;;35391:1;35377:3;:10;;;;;;;;;;;;:15;;;35369:52;;;;;;;;;;;;;;;;;;;;;;35454:10;35440:24;;:3;:10;;;;;;;;;;;;:24;;;35432:57;;;;;;;;;;;;;;;;;;;;;;35515:1;35502:3;:10;;;:14;;;;;;;;;;;;;;;;;;35527:11;35549:3;:7;;;;;;;;;;;;35527:30;;35568:3;:20;;;35597:4;35604:3;:10;;;;;;;;;;;;35616:3;:11;;;35568:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;35568:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;35568:60:0;;;;35657:3;:6;;;35646:31;35665:3;:11;;;35646:31;;;;;;;;;;;;;;;1795:1;;982::::0;1943:7;:22;;;;35210:475;;:::o;30615:24::-;;;;;;;;;;;;;:::o;34314:191::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;34434:3:::1;34408:30;;:14;:30;;;;34400:58;;;;;;;;;;;;;;;;;;;;;;34483:14;34469:11;;:28;;;;;;;;;;;;;;;;;;34314:191:::0;:::o;5107:244::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;5216:1:::1;5196:22;;:8;:22;;;;5188:73;;;;;;;;;;;;;;;;;;;;;;5306:8;5277:38;;5298:6;;;;;;;;;;;5277:38;;;;;;;;;;;;5335:8;5326:6;;:17;;;;;;;;;;;;;;;;;;5107:244:::0;:::o;33975:223::-;4384:12;:10;:12::i;:::-;4374:22;;:6;;;;;;;;;;;:22;;;4366:67;;;;;;;;;;;;;;;;;;;;;;34072:17:::1;:35;34090:16;34072:35;;;;;;;;;;;;;;;;;;;;;;;;;34064:72;;;;;;;;;;;;;;;;;;;;;;34185:5;34147:17;:35;34165:16;34147:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;33975:223:::0;:::o;31624:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;39658:187::-;39759:18;;:::i;:::-;39802:12;:25;39815:11;39802:25;;;;;;;;;;;;;;;:35;39828:8;39802:35;;;;;;;;;;;39795:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39658:187;;;;:::o;2705:106::-;2758:15;2793:10;2786:17;;2705:106;:::o;20392:471::-;20450:7;20700:1;20695;:6;20691:47;;;20725:1;20718:8;;;;20691:47;20750:9;20766:1;20762;:5;20750:17;;20795:1;20790;20786;:5;;;;;;:10;20778:56;;;;;;;;;;;;;;;;;;;;;;20854:1;20847:8;;;20392:471;;;;;:::o;21339:132::-;21397:7;21424:39;21428:1;21431;21424:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;21417:46;;21339:132;;;;:::o;19502:136::-;19560:7;19587:43;19591:1;19594;19587:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;19580:50;;19502:136;;;;:::o;27220:205::-;27321:96;27341:5;27371:27;;;27400:4;27406:2;27410:5;27348:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27348:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27348:68:0;27321:19;:96::i;:::-;27220:205;;;;:::o;21967:278::-;22053:7;22085:1;22081;:5;22088:12;22073:28;;;;;;;;;;;;;;;;;;;;;;;;;22112:9;22128:1;22124;:5;;;;;;22112:17;;22236:1;22229:8;;;21967:278;;;;;:::o;19941:192::-;20027:7;20060:1;20055;:6;;20063:12;20047:29;;;;;;;;;;;;;;;;;;;;;;;;;20087:9;20103:1;20099;:5;20087:17;;20124:1;20117:8;;;19941:192;;;;;:::o;29340:761::-;29764:23;29790:69;29818:4;29790:69;;;;;;;;;;;;;;;;;29798:5;29790:27;;;;:69;;;;;:::i;:::-;29764:95;;29894:1;29874:10;:17;:21;29870:224;;;30016:10;30005:30;;;;;;;;;;;;;;29997:85;;;;;;;;;;;;;;;;;;;;;;29870:224;29340:761;;;:::o;9248:196::-;9351:12;9383:53;9406:6;9414:4;9420:1;9423:12;9383:22;:53::i;:::-;9376:60;;9248:196;;;;;:::o;10625:979::-;10755:12;10788:18;10799:6;10788:10;:18::i;:::-;10780:60;;;;;;;;;;;;;;;;;;;;;;10914:12;10928:23;10955:6;:11;;10975:8;10986:4;10955:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;10913:78:0;;;;11006:7;11002:595;;;11037:10;11030:17;;;;;;11002:595;11171:1;11151:10;:17;:21;11147:439;;;11414:10;11408:17;11475:15;11462:10;11458:2;11454:19;11447:44;11362:148;11557:12;11550:20;;;;;;;;;;;;;;;;;;;;10625:979;;;;;;;:::o;6133:619::-;6193:4;6455:16;6482:19;6504:66;6482:88;;;;6673:7;6661:20;6649:32;;6713:11;6701:8;:23;;:42;;;;;6740:3;6728:15;;:8;:15;;6701:42;6693:51;;;;6133:619;;;:::o;30356:9878::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:146;;230:6;217:20;208:29;;242:41;277:5;242:41;;;202:86;;;;;295:124;;372:6;359:20;350:29;;384:30;408:5;384:30;;;344:75;;;;;426:128;;507:6;501:13;492:22;;519:30;543:5;519:30;;;486:68;;;;;562:440;;663:3;656:4;648:6;644:17;640:27;630:2;;681:1;678;671:12;630:2;718:6;705:20;740:64;755:48;796:6;755:48;;;740:64;;;731:73;;824:6;817:5;810:21;860:4;852:6;848:17;893:4;886:5;882:16;928:3;919:6;914:3;910:16;907:25;904:2;;;945:1;942;935:12;904:2;955:41;989:6;984:3;979;955:41;;;623:379;;;;;;;;1010:130;;1090:6;1077:20;1068:29;;1102:33;1129:5;1102:33;;;1062:78;;;;;1147:134;;1231:6;1225:13;1216:22;;1243:33;1270:5;1243:33;;;1210:71;;;;;1288:241;;1392:2;1380:9;1371:7;1367:23;1363:32;1360:2;;;1408:1;1405;1398:12;1360:2;1443:1;1460:53;1505:7;1496:6;1485:9;1481:22;1460:53;;;1450:63;;1422:97;1354:175;;;;;1536:257;;1648:2;1636:9;1627:7;1623:23;1619:32;1616:2;;;1664:1;1661;1654:12;1616:2;1699:1;1716:61;1769:7;1760:6;1749:9;1745:22;1716:61;;;1706:71;;1678:105;1610:183;;;;;1800:721;;;;;1964:3;1952:9;1943:7;1939:23;1935:33;1932:2;;;1981:1;1978;1971:12;1932:2;2016:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;;;2023:63;;1995:97;2123:2;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;;;2131:63;;2102:98;2231:2;2249:53;2294:7;2285:6;2274:9;2270:22;2249:53;;;2239:63;;2210:98;2367:2;2356:9;2352:18;2339:32;2391:18;2383:6;2380:30;2377:2;;;2423:1;2420;2413:12;2377:2;2443:62;2497:7;2488:6;2477:9;2473:22;2443:62;;;2433:72;;2318:193;1926:595;;;;;;;;2528:235;;2629:2;2617:9;2608:7;2604:23;2600:32;2597:2;;;2645:1;2642;2635:12;2597:2;2680:1;2697:50;2739:7;2730:6;2719:9;2715:22;2697:50;;;2687:60;;2659:94;2591:172;;;;;2770:257;;2882:2;2870:9;2861:7;2857:23;2853:32;2850:2;;;2898:1;2895;2888:12;2850:2;2933:1;2950:61;3003:7;2994:6;2983:9;2979:22;2950:61;;;2940:71;;2912:105;2844:183;;;;;3034:241;;3138:2;3126:9;3117:7;3113:23;3109:32;3106:2;;;3154:1;3151;3144:12;3106:2;3189:1;3206:53;3251:7;3242:6;3231:9;3227:22;3206:53;;;3196:63;;3168:97;3100:175;;;;;3282:263;;3397:2;3385:9;3376:7;3372:23;3368:32;3365:2;;;3413:1;3410;3403:12;3365:2;3448:1;3465:64;3521:7;3512:6;3501:9;3497:22;3465:64;;;3455:74;;3427:108;3359:186;;;;;3552:366;;;3673:2;3661:9;3652:7;3648:23;3644:32;3641:2;;;3689:1;3686;3679:12;3641:2;3724:1;3741:53;3786:7;3777:6;3766:9;3762:22;3741:53;;;3731:63;;3703:97;3831:2;3849:53;3894:7;3885:6;3874:9;3870:22;3849:53;;;3839:63;;3810:98;3635:283;;;;;;3925:617;;;;;4080:3;4068:9;4059:7;4055:23;4051:33;4048:2;;;4097:1;4094;4087:12;4048:2;4132:1;4149:53;4194:7;4185:6;4174:9;4170:22;4149:53;;;4139:63;;4111:97;4239:2;4257:53;4302:7;4293:6;4282:9;4278:22;4257:53;;;4247:63;;4218:98;4347:2;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;;;4355:63;;4326:98;4455:2;4473:53;4518:7;4509:6;4498:9;4494:22;4473:53;;;4463:63;;4434:98;4042:500;;;;;;;;4549:617;;;;;4704:3;4692:9;4683:7;4679:23;4675:33;4672:2;;;4721:1;4718;4711:12;4672:2;4756:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;;;4763:63;;4735:97;4863:2;4881:53;4926:7;4917:6;4906:9;4902:22;4881:53;;;4871:63;;4842:98;4971:2;4989:53;5034:7;5025:6;5014:9;5010:22;4989:53;;;4979:63;;4950:98;5079:2;5097:53;5142:7;5133:6;5122:9;5118:22;5097:53;;;5087:63;;5058:98;4666:500;;;;;;;;5173:142;5264:45;5303:5;5264:45;;;5259:3;5252:58;5246:69;;;5322:127;5411:32;5437:5;5411:32;;;5406:3;5399:45;5393:56;;;5456:103;5529:24;5547:5;5529:24;;;5524:3;5517:37;5511:48;;;5566:113;5649:24;5667:5;5649:24;;;5644:3;5637:37;5631:48;;;5686:104;5763:21;5778:5;5763:21;;;5758:3;5751:34;5745:45;;;5797:110;5878:23;5895:5;5878:23;;;5873:3;5866:36;5860:47;;;5914:343;;6024:38;6056:5;6024:38;;;6074:70;6137:6;6132:3;6074:70;;;6067:77;;6149:52;6194:6;6189:3;6182:4;6175:5;6171:16;6149:52;;;6222:29;6244:6;6222:29;;;6217:3;6213:39;6206:46;;6004:253;;;;;;6264:356;;6392:38;6424:5;6392:38;;;6442:88;6523:6;6518:3;6442:88;;;6435:95;;6535:52;6580:6;6575:3;6568:4;6561:5;6557:16;6535:52;;;6608:6;6603:3;6599:16;6592:23;;6372:248;;;;;;6627:347;;6739:39;6772:5;6739:39;;;6790:71;6854:6;6849:3;6790:71;;;6783:78;;6866:52;6911:6;6906:3;6899:4;6892:5;6888:16;6866:52;;;6939:29;6961:6;6939:29;;;6934:3;6930:39;6923:46;;6719:255;;;;;;6982:420;;7160:85;7242:2;7237:3;7160:85;;;7153:92;;7278:34;7274:1;7269:3;7265:11;7258:55;7347:17;7342:2;7337:3;7333:12;7326:39;7393:2;7388:3;7384:12;7377:19;;7146:256;;;;7411:324;;7571:67;7635:2;7630:3;7571:67;;;7564:74;;7671:26;7667:1;7662:3;7658:11;7651:47;7726:2;7721:3;7717:12;7710:19;;7557:178;;;;7744:319;;7904:67;7968:2;7963:3;7904:67;;;7897:74;;8004:21;8000:1;7995:3;7991:11;7984:42;8054:2;8049:3;8045:12;8038:19;;7890:173;;;;8072:375;;8232:67;8296:2;8291:3;8232:67;;;8225:74;;8332:34;8328:1;8323:3;8319:11;8312:55;8401:8;8396:2;8391:3;8387:12;8380:30;8438:2;8433:3;8429:12;8422:19;;8218:229;;;;8456:321;;8616:67;8680:2;8675:3;8616:67;;;8609:74;;8716:23;8712:1;8707:3;8703:11;8696:44;8768:2;8763:3;8759:12;8752:19;;8602:175;;;;8786:331;;8946:67;9010:2;9005:3;8946:67;;;8939:74;;9046:33;9042:1;9037:3;9033:11;9026:54;9108:2;9103:3;9099:12;9092:19;;8932:185;;;;9126:320;;9286:67;9350:2;9345:3;9286:67;;;9279:74;;9386:22;9382:1;9377:3;9373:11;9366:43;9437:2;9432:3;9428:12;9421:19;;9272:174;;;;9455:316;;9615:67;9679:2;9674:3;9615:67;;;9608:74;;9715:18;9711:1;9706:3;9702:11;9695:39;9762:2;9757:3;9753:12;9746:19;;9601:170;;;;9780:313;;9940:67;10004:2;9999:3;9940:67;;;9933:74;;10040:15;10036:1;10031:3;10027:11;10020:36;10084:2;10079:3;10075:12;10068:19;;9926:167;;;;10102:315;;10262:67;10326:2;10321:3;10262:67;;;10255:74;;10362:17;10358:1;10353:3;10349:11;10342:38;10408:2;10403:3;10399:12;10392:19;;10248:169;;;;10426:326;;10586:67;10650:2;10645:3;10586:67;;;10579:74;;10686:28;10682:1;10677:3;10673:11;10666:49;10743:2;10738:3;10734:12;10727:19;;10572:180;;;;10761:330;;10921:67;10985:2;10980:3;10921:67;;;10914:74;;11021:32;11017:1;11012:3;11008:11;11001:53;11082:2;11077:3;11073:12;11066:19;;10907:184;;;;11100:323;;11260:67;11324:2;11319:3;11260:67;;;11253:74;;11360:25;11356:1;11351:3;11347:11;11340:46;11414:2;11409:3;11405:12;11398:19;;11246:177;;;;11432:370;;11592:67;11656:2;11651:3;11592:67;;;11585:74;;11692:34;11688:1;11683:3;11679:11;11672:55;11761:3;11756:2;11751:3;11747:12;11740:25;11793:2;11788:3;11784:12;11777:19;;11578:224;;;;11811:332;;11971:67;12035:2;12030:3;11971:67;;;11964:74;;12071:34;12067:1;12062:3;12058:11;12051:55;12134:2;12129:3;12125:12;12118:19;;11957:186;;;;12152:324;;12312:67;12376:2;12371:3;12312:67;;;12305:74;;12412:26;12408:1;12403:3;12399:11;12392:47;12467:2;12462:3;12458:12;12451:19;;12298:178;;;;12485:322;;12645:67;12709:2;12704:3;12645:67;;;12638:74;;12745:24;12741:1;12736:3;12732:11;12725:45;12798:2;12793:3;12789:12;12782:19;;12631:176;;;;12816:322;;12976:67;13040:2;13035:3;12976:67;;;12969:74;;13076:24;13072:1;13067:3;13063:11;13056:45;13129:2;13124:3;13120:12;13113:19;;12962:176;;;;13147:329;;13307:67;13371:2;13366:3;13307:67;;;13300:74;;13407:31;13403:1;13398:3;13394:11;13387:52;13467:2;13462:3;13458:12;13451:19;;13293:183;;;;13485:317;;13645:67;13709:2;13704:3;13645:67;;;13638:74;;13745:19;13741:1;13736:3;13732:11;13725:40;13793:2;13788:3;13784:12;13777:19;;13631:171;;;;13811:379;;13971:67;14035:2;14030:3;13971:67;;;13964:74;;14071:34;14067:1;14062:3;14058:11;14051:55;14140:12;14135:2;14130:3;14126:12;14119:34;14181:2;14176:3;14172:12;14165:19;;13957:233;;;;14199:331;;14359:67;14423:2;14418:3;14359:67;;;14352:74;;14459:33;14455:1;14450:3;14446:11;14439:54;14521:2;14516:3;14512:12;14505:19;;14345:185;;;;14539:316;;14699:67;14763:2;14758:3;14699:67;;;14692:74;;14799:18;14795:1;14790:3;14786:11;14779:39;14846:2;14841:3;14837:12;14830:19;;14685:170;;;;14930:1611;15081:6;15076:3;15072:16;15164:4;15157:5;15153:16;15147:23;15176:63;15233:4;15228:3;15224:14;15210:12;15176:63;;;15103:142;15321:4;15314:5;15310:16;15304:23;15333:63;15390:4;15385:3;15381:14;15367:12;15333:63;;;15255:147;15474:4;15467:5;15463:16;15457:23;15486:63;15543:4;15538:3;15534:14;15520:12;15486:63;;;15412:143;15632:4;15625:5;15621:16;15615:23;15644:63;15701:4;15696:3;15692:14;15678:12;15644:63;;;15565:148;15788:4;15781:5;15777:16;15771:23;15800:79;15873:4;15868:3;15864:14;15850:12;15800:79;;;15723:162;15959:4;15952:5;15948:16;15942:23;15971:79;16044:4;16039:3;16035:14;16021:12;15971:79;;;15895:161;16134:4;16127:5;16123:16;16117:23;16146:63;16203:4;16198:3;16194:14;16180:12;16146:63;;;16066:149;16289:4;16282:5;16278:16;16272:23;16301:63;16358:4;16353:3;16349:14;16335:12;16301:63;;;16225:145;16445:6;16438:5;16434:18;16428:25;16459:61;16512:6;16507:3;16503:16;16489:12;16459:61;;;16380:146;15054:1487;;;;16548:103;16621:24;16639:5;16621:24;;;16616:3;16609:37;16603:48;;;16658:113;16741:24;16759:5;16741:24;;;16736:3;16729:37;16723:48;;;16778:97;16847:22;16863:5;16847:22;;;16842:3;16835:35;16829:46;;;16882:262;;17026:93;17115:3;17106:6;17026:93;;;17019:100;;17136:3;17129:10;;17007:137;;;;;17151:372;;17350:148;17494:3;17350:148;;;17343:155;;17515:3;17508:10;;17331:192;;;;17530:213;;17648:2;17637:9;17633:18;17625:26;;17662:71;17730:1;17719:9;17715:17;17706:6;17662:71;;;17619:124;;;;;17750:451;;17932:2;17921:9;17917:18;17909:26;;17946:79;18022:1;18011:9;18007:17;17998:6;17946:79;;;18036:72;18104:2;18093:9;18089:18;18080:6;18036:72;;;18119;18187:2;18176:9;18172:18;18163:6;18119:72;;;17903:298;;;;;;;18208:451;;18390:2;18379:9;18375:18;18367:26;;18404:71;18472:1;18461:9;18457:17;18448:6;18404:71;;;18486:80;18562:2;18551:9;18547:18;18538:6;18486:80;;;18577:72;18645:2;18634:9;18630:18;18621:6;18577:72;;;18361:298;;;;;;;18666:435;;18840:2;18829:9;18825:18;18817:26;;18854:71;18922:1;18911:9;18907:17;18898:6;18854:71;;;18936:72;19004:2;18993:9;18989:18;18980:6;18936:72;;;19019;19087:2;19076:9;19072:18;19063:6;19019:72;;;18811:290;;;;;;;19108:631;;19328:3;19317:9;19313:19;19305:27;;19343:71;19411:1;19400:9;19396:17;19387:6;19343:71;;;19425:72;19493:2;19482:9;19478:18;19469:6;19425:72;;;19508;19576:2;19565:9;19561:18;19552:6;19508:72;;;19628:9;19622:4;19618:20;19613:2;19602:9;19598:18;19591:48;19653:76;19724:4;19715:6;19653:76;;;19645:84;;19299:440;;;;;;;;19746:201;;19858:2;19847:9;19843:18;19835:26;;19872:65;19934:1;19923:9;19919:17;19910:6;19872:65;;;19829:118;;;;;19954:209;;20070:2;20059:9;20055:18;20047:26;;20084:69;20150:1;20139:9;20135:17;20126:6;20084:69;;;20041:122;;;;;20170:301;;20308:2;20297:9;20293:18;20285:26;;20358:9;20352:4;20348:20;20344:1;20333:9;20329:17;20322:47;20383:78;20456:4;20447:6;20383:78;;;20375:86;;20279:192;;;;;20478:407;;20669:2;20658:9;20654:18;20646:26;;20719:9;20713:4;20709:20;20705:1;20694:9;20690:17;20683:47;20744:131;20870:4;20744:131;;;20736:139;;20640:245;;;;20892:407;;21083:2;21072:9;21068:18;21060:26;;21133:9;21127:4;21123:20;21119:1;21108:9;21104:17;21097:47;21158:131;21284:4;21158:131;;;21150:139;;21054:245;;;;21306:407;;21497:2;21486:9;21482:18;21474:26;;21547:9;21541:4;21537:20;21533:1;21522:9;21518:17;21511:47;21572:131;21698:4;21572:131;;;21564:139;;21468:245;;;;21720:407;;21911:2;21900:9;21896:18;21888:26;;21961:9;21955:4;21951:20;21947:1;21936:9;21932:17;21925:47;21986:131;22112:4;21986:131;;;21978:139;;21882:245;;;;22134:407;;22325:2;22314:9;22310:18;22302:26;;22375:9;22369:4;22365:20;22361:1;22350:9;22346:17;22339:47;22400:131;22526:4;22400:131;;;22392:139;;22296:245;;;;22548:407;;22739:2;22728:9;22724:18;22716:26;;22789:9;22783:4;22779:20;22775:1;22764:9;22760:17;22753:47;22814:131;22940:4;22814:131;;;22806:139;;22710:245;;;;22962:407;;23153:2;23142:9;23138:18;23130:26;;23203:9;23197:4;23193:20;23189:1;23178:9;23174:17;23167:47;23228:131;23354:4;23228:131;;;23220:139;;23124:245;;;;23376:407;;23567:2;23556:9;23552:18;23544:26;;23617:9;23611:4;23607:20;23603:1;23592:9;23588:17;23581:47;23642:131;23768:4;23642:131;;;23634:139;;23538:245;;;;23790:407;;23981:2;23970:9;23966:18;23958:26;;24031:9;24025:4;24021:20;24017:1;24006:9;24002:17;23995:47;24056:131;24182:4;24056:131;;;24048:139;;23952:245;;;;24204:407;;24395:2;24384:9;24380:18;24372:26;;24445:9;24439:4;24435:20;24431:1;24420:9;24416:17;24409:47;24470:131;24596:4;24470:131;;;24462:139;;24366:245;;;;24618:407;;24809:2;24798:9;24794:18;24786:26;;24859:9;24853:4;24849:20;24845:1;24834:9;24830:17;24823:47;24884:131;25010:4;24884:131;;;24876:139;;24780:245;;;;25032:407;;25223:2;25212:9;25208:18;25200:26;;25273:9;25267:4;25263:20;25259:1;25248:9;25244:17;25237:47;25298:131;25424:4;25298:131;;;25290:139;;25194:245;;;;25446:407;;25637:2;25626:9;25622:18;25614:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25712:131;25838:4;25712:131;;;25704:139;;25608:245;;;;25860:407;;26051:2;26040:9;26036:18;26028:26;;26101:9;26095:4;26091:20;26087:1;26076:9;26072:17;26065:47;26126:131;26252:4;26126:131;;;26118:139;;26022:245;;;;26274:407;;26465:2;26454:9;26450:18;26442:26;;26515:9;26509:4;26505:20;26501:1;26490:9;26486:17;26479:47;26540:131;26666:4;26540:131;;;26532:139;;26436:245;;;;26688:407;;26879:2;26868:9;26864:18;26856:26;;26929:9;26923:4;26919:20;26915:1;26904:9;26900:17;26893:47;26954:131;27080:4;26954:131;;;26946:139;;26850:245;;;;27102:407;;27293:2;27282:9;27278:18;27270:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27368:131;27494:4;27368:131;;;27360:139;;27264:245;;;;27516:407;;27707:2;27696:9;27692:18;27684:26;;27757:9;27751:4;27747:20;27743:1;27732:9;27728:17;27721:47;27782:131;27908:4;27782:131;;;27774:139;;27678:245;;;;27930:407;;28121:2;28110:9;28106:18;28098:26;;28171:9;28165:4;28161:20;28157:1;28146:9;28142:17;28135:47;28196:131;28322:4;28196:131;;;28188:139;;28092:245;;;;28344:407;;28535:2;28524:9;28520:18;28512:26;;28585:9;28579:4;28575:20;28571:1;28560:9;28556:17;28549:47;28610:131;28736:4;28610:131;;;28602:139;;28506:245;;;;28758:407;;28949:2;28938:9;28934:18;28926:26;;28999:9;28993:4;28989:20;28985:1;28974:9;28970:17;28963:47;29024:131;29150:4;29024:131;;;29016:139;;28920:245;;;;29172:407;;29363:2;29352:9;29348:18;29340:26;;29413:9;29407:4;29403:20;29399:1;29388:9;29384:17;29377:47;29438:131;29564:4;29438:131;;;29430:139;;29334:245;;;;29586:330;;29762:3;29751:9;29747:19;29739:27;;29777:129;29903:1;29892:9;29888:17;29879:6;29777:129;;;29733:183;;;;;29923:213;;30041:2;30030:9;30026:18;30018:26;;30055:71;30123:1;30112:9;30108:17;30099:6;30055:71;;;30012:124;;;;;30143:324;;30289:2;30278:9;30274:18;30266:26;;30303:71;30371:1;30360:9;30356:17;30347:6;30303:71;;;30385:72;30453:2;30442:9;30438:18;30429:6;30385:72;;;30260:207;;;;;;30474:675;;30712:3;30701:9;30697:19;30689:27;;30727:71;30795:1;30784:9;30780:17;30771:6;30727:71;;;30809:80;30885:2;30874:9;30870:18;30861:6;30809:80;;;30900:72;30968:2;30957:9;30953:18;30944:6;30900:72;;;30983;31051:2;31040:9;31036:18;31027:6;30983:72;;;31066:73;31134:3;31123:9;31119:19;31110:6;31066:73;;;30683:466;;;;;;;;;31156:915;;31458:3;31447:9;31443:19;31435:27;;31473:71;31541:1;31530:9;31526:17;31517:6;31473:71;;;31555:72;31623:2;31612:9;31608:18;31599:6;31555:72;;;31638;31706:2;31695:9;31691:18;31682:6;31638:72;;;31721:80;31797:2;31786:9;31782:18;31773:6;31721:80;;;31812:81;31888:3;31877:9;31873:19;31864:6;31812:81;;;31904:73;31972:3;31961:9;31957:19;31948:6;31904:73;;;31988;32056:3;32045:9;32041:19;32032:6;31988:73;;;31429:642;;;;;;;;;;;32078:256;;32140:2;32134:9;32124:19;;32178:4;32170:6;32166:17;32277:6;32265:10;32262:22;32241:18;32229:10;32226:34;32223:62;32220:2;;;32298:1;32295;32288:12;32220:2;32318:10;32314:2;32307:22;32118:216;;;;;32341:321;;32484:18;32476:6;32473:30;32470:2;;;32516:1;32513;32506:12;32470:2;32583:4;32579:9;32572:4;32564:6;32560:17;32556:33;32548:41;;32647:4;32641;32637:15;32629:23;;32407:255;;;;32669:121;;32762:5;32756:12;32746:22;;32727:63;;;;32797:122;;32891:5;32885:12;32875:22;;32856:63;;;;32927:162;;33041:6;33036:3;33029:19;33078:4;33073:3;33069:14;33054:29;;33022:67;;;;;33098:144;;33233:3;33218:18;;33211:31;;;;;33251:163;;33366:6;33361:3;33354:19;33403:4;33398:3;33394:14;33379:29;;33347:67;;;;;33423:145;;33559:3;33544:18;;33537:31;;;;;33576:91;;33638:24;33656:5;33638:24;;;33627:35;;33621:46;;;;33674:99;;33744:24;33762:5;33744:24;;;33733:35;;33727:46;;;;33780:85;;33853:5;33846:13;33839:21;33828:32;;33822:43;;;;33872:144;;33944:66;33937:5;33933:78;33922:89;;33916:100;;;;34023:121;;34096:42;34089:5;34085:54;34074:65;;34068:76;;;;34151:72;;34213:5;34202:16;;34196:27;;;;34230:81;;34301:4;34294:5;34290:16;34279:27;;34273:38;;;;34318:129;;34405:37;34436:5;34405:37;;;34392:50;;34386:61;;;;34454:121;;34533:37;34564:5;34533:37;;;34520:50;;34514:61;;;;34582:108;;34661:24;34679:5;34661:24;;;34648:37;;34642:48;;;;34698:145;34779:6;34774:3;34769;34756:30;34835:1;34826:6;34821:3;34817:16;34810:27;34749:94;;;;34852:268;34917:1;34924:101;34938:6;34935:1;34932:13;34924:101;;;35014:1;35009:3;35005:11;34999:18;34995:1;34990:3;34986:11;34979:39;34960:2;34957:1;34953:10;34948:15;;34924:101;;;35040:6;35037:1;35034:13;35031:2;;;35105:1;35096:6;35091:3;35087:16;35080:27;35031:2;34901:219;;;;;35128:97;;35216:2;35212:7;35207:2;35200:5;35196:14;35192:28;35182:38;;35176:49;;;;35233:117;35302:24;35320:5;35302:24;;;35295:5;35292:35;35282:2;;35341:1;35338;35331:12;35282:2;35276:74;;35357:133;35434:32;35460:5;35434:32;;;35427:5;35424:43;35414:2;;35481:1;35478;35471:12;35414:2;35408:82;;35497:111;35563:21;35578:5;35563:21;;;35556:5;35553:32;35543:2;;35599:1;35596;35589:12;35543:2;35537:71;;35615:117;35684:24;35702:5;35684:24;;;35677:5;35674:35;35664:2;;35723:1;35720;35713:12;35664:2;35658:74;

Swarm Source

ipfs://87b5853dfa5f2aa660e7d127227086ff7e5f8be9a1602d9775d94e4e29411de3
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading