ETH Price: $3,006.50 (-6.80%)
Gas: 10 Gwei

Token

 

Overview

Max Total Supply

69

Holders

18

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x454908004F88436F46eFAC5578b4984fE1375206
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MferInternsLeagueMembership

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/*
   _   _   _   _     _   _   _   _   _   _   _     _   _   _   _   _   _  
  / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ / \   / \ / \ / \ / \ / \ / \ 
 ( m | f | e | r ) ( i | n | t | e | r | n | s ) ( l | e | a | g | u | e )
  \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ \_/   \_/ \_/ \_/ \_/ \_/ \_/ 


 * Code of Conduct *

 A Mfer Interns League member must:

    1. Show respect for themselves, their mentors, their fellow Mfer Interns, and civilians. 
    2. Seek to abide by best practices when performing the duties of a Mfer Intern.
    3. Strive to be the best they can be, every day!

*/




// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


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

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/MferInternsLeagueMembership.sol

pragma solidity ^0.8.0;

contract MferInternsLeagueMembership is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
    constructor()
        ERC1155("ipfs://QmamFEp7yK4LXUrmucfcK9GGCAXfqpCZ6QhYArvUvnkFvW/data.json")
    {
        _mint(msg.sender, 0, 69, "");
    }

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060600160405280603f81526020016200263f603f913962000037816200006e565b50620000433362000087565b62000068336000604560405180602001604052806000815250620000d960201b60201c565b620008cf565b805162000083906002906020840190620005a7565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166200013f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b336200016581600087620001538862000200565b6200015e8862000200565b876200024e565b6000848152602081815260408083206001600160a01b038916845290915281208054859290620001979084906200072c565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4620001f98160008787878762000271565b5050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106200023d576200023d6200080d565b602090810291909101015292915050565b620002698686868686866200045760201b620007d61760201c565b505050505050565b62000290846001600160a01b03166200059860201b620008ec1760201c565b15620002695760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190620002cc9089908990889088908890600401620006d0565b602060405180830381600087803b158015620002e757600080fd5b505af19250505080156200031a575060408051601f3d908101601f1916820190925262000317918101906200064d565b60015b620003db576200032962000823565b806308c379a014156200036a57506200034162000840565b806200034e57506200036c565b8060405162461bcd60e51b815260040162000136919062000717565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e746572000000000000000000000000606482015260840162000136565b6001600160e01b0319811663f23a6e6160e01b146200044e5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b606482015260840162000136565b50505050505050565b620004728686868686866200026960201b620008e41760201c565b6001600160a01b038516620005065760005b83518110156200050457828181518110620004a357620004a36200080d565b602002602001015160046000868481518110620004c457620004c46200080d565b602002602001015181526020019081526020016000206000828254620004eb91906200072c565b90915550620004fc905081620007d9565b905062000484565b505b6001600160a01b038416620002695760005b83518110156200044e578281815181106200053757620005376200080d565b6020026020010151600460008684815181106200055857620005586200080d565b6020026020010151815260200190815260200160002060008282546200057f919062000747565b9091555062000590905081620007d9565b905062000518565b6001600160a01b03163b151590565b828054620005b59062000761565b90600052602060002090601f016020900481019282620005d9576000855562000624565b82601f10620005f457805160ff191683800117855562000624565b8280016001018555821562000624579182015b828111156200062457825182559160200191906001019062000607565b506200063292915062000636565b5090565b5b8082111562000632576000815560010162000637565b6000602082840312156200066057600080fd5b81516001600160e01b0319811681146200067957600080fd5b9392505050565b6000815180845260005b81811015620006a8576020818501810151868301820152016200068a565b81811115620006bb576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200070c9083018462000680565b979650505050505050565b60208152600062000679602083018462000680565b60008219821115620007425762000742620007f7565b500190565b6000828210156200075c576200075c620007f7565b500390565b600181811c908216806200077657607f821691505b602082108114156200079857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715620007d257634e487b7160e01b600052604160045260246000fd5b6040525050565b6000600019821415620007f057620007f0620007f7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060033d11156200083d5760046000803e5060005160e01c5b90565b600060443d10156200084f5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156200087f57505050505090565b8285019150815181811115620008985750505050505090565b843d8701016020828501011115620008b35750505050505090565b620008c4602082860101876200079e565b509095945050505050565b611d6080620008df6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610240578063f242432a1461027c578063f2fde38b1461028f578063f5298aca146102a257600080fd5b8063715018a6146101ea5780638da5cb5b146101f2578063a22cb4651461020d578063bd85b0391461022057600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101825780634e1273f4146101955780634f558e79146101b55780636b20c454146101d757600080fd5b8062fdd58e1461010457806301ffc9a71461012a57806302fe53051461014d5780630e89341c14610162575b600080fd5b6101176101123660046115e1565b6102b5565b6040519081526020015b60405180910390f35b61013d61013836600461170f565b61034c565b6040519015158152602001610121565b61016061015b366004611749565b61039e565b005b61017561017036600461179a565b6103d4565b604051610121919061191f565b610160610190366004611422565b610468565b6101a86101a336600461163e565b6104ff565b60405161012191906118de565b61013d6101c336600461179a565b600090815260046020526040902054151590565b6101606101e5366004611531565b610629565b610160610671565b6003546040516001600160a01b039091168152602001610121565b61016061021b3660046115a5565b6106a7565b61011761022e36600461179a565b60009081526004602052604090205490565b61013d61024e3660046113ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61016061028a3660046114cc565b6106b6565b61016061029d3660046113d4565b6106fb565b6101606102b036600461160b565b610793565b60006001600160a01b0383166103265760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037d57506001600160e01b031982166303a24d0760e21b145b8061039857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146103c85760405162461bcd60e51b815260040161031d90611ad9565b6103d1816108fb565b50565b6060600280546103e390611ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90611ba9565b801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806104845750610484853361024e565b6104eb5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031d565b6104f8858585858561090e565b5050505050565b606081518351146105645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031d565b6000835167ffffffffffffffff81111561058057610580611c58565b6040519080825280602002602001820160405280156105a9578160200160208202803683370190505b50905060005b8451811015610621576105f48582815181106105cd576105cd611c42565b60200260200101518583815181106105e7576105e7611c42565b60200260200101516102b5565b82828151811061060657610606611c42565b602090810291909101015261061a81611c11565b90506105af565b509392505050565b6001600160a01b0383163314806106455750610645833361024e565b6106615760405162461bcd60e51b815260040161031d906119be565b61066c838383610ab0565b505050565b6003546001600160a01b0316331461069b5760405162461bcd60e51b815260040161031d90611ad9565b6106a56000610c3e565b565b6106b2338383610c90565b5050565b6001600160a01b0385163314806106d257506106d2853361024e565b6106ee5760405162461bcd60e51b815260040161031d906119be565b6104f88585858585610d71565b6003546001600160a01b031633146107255760405162461bcd60e51b815260040161031d90611ad9565b6001600160a01b03811661078a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031d565b6103d181610c3e565b6001600160a01b0383163314806107af57506107af833361024e565b6107cb5760405162461bcd60e51b815260040161031d906119be565b61066c838383610e94565b6001600160a01b03851661085d5760005b835181101561085b5782818151811061080257610802611c42565b60200260200101516004600086848151811061082057610820611c42565b6020026020010151815260200190815260200160002060008282546108459190611b7a565b90915550610854905081611c11565b90506107e7565b505b6001600160a01b0384166108e45760005b83518110156108e25782818151811061088957610889611c42565b6020026020010151600460008684815181106108a7576108a7611c42565b6020026020010151815260200190815260200160002060008282546108cc9190611b92565b909155506108db905081611c11565b905061086e565b505b505050505050565b6001600160a01b03163b151590565b80516106b2906002906020840190611223565b815183511461092f5760405162461bcd60e51b815260040161031d90611b0e565b6001600160a01b0384166109555760405162461bcd60e51b815260040161031d90611a07565b33610964818787878787610f95565b60005b8451811015610a4a57600085828151811061098457610984611c42565b6020026020010151905060008583815181106109a2576109a2611c42565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156109f25760405162461bcd60e51b815260040161031d90611a8f565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610a2f908490611b7a565b9250508190555050505080610a4390611c11565b9050610967565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a9a9291906118f1565b60405180910390a46108e4818787878787610fa3565b6001600160a01b038316610ad65760405162461bcd60e51b815260040161031d90611a4c565b8051825114610af75760405162461bcd60e51b815260040161031d90611b0e565b6000339050610b1a81856000868660405180602001604052806000815250610f95565b60005b8351811015610bdf576000848281518110610b3a57610b3a611c42565b602002602001015190506000848381518110610b5857610b58611c42565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610ba85760405162461bcd60e51b815260040161031d9061197a565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610bd781611c11565b915050610b1d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610c309291906118f1565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610d045760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610d975760405162461bcd60e51b815260040161031d90611a07565b33610db6818787610da78861110e565b610db08861110e565b87610f95565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610df75760405162461bcd60e51b815260040161031d90611a8f565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610e34908490611b7a565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108e2828888888888611159565b6001600160a01b038316610eba5760405162461bcd60e51b815260040161031d90611a4c565b33610ee981856000610ecb8761110e565b610ed48761110e565b60405180602001604052806000815250610f95565b6000838152602081815260408083206001600160a01b038816845290915290205482811015610f2a5760405162461bcd60e51b815260040161031d9061197a565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6108e48686868686866107d6565b6001600160a01b0384163b156108e45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fe7908990899088908890889060040161183b565b602060405180830381600087803b15801561100157600080fd5b505af1925050508015611031575060408051601f3d908101601f1916820190925261102e9181019061172c565b60015b6110de5761103d611c6e565b806308c379a014156110775750611052611c8a565b8061105d5750611079565b8060405162461bcd60e51b815260040161031d919061191f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031d565b6001600160e01b0319811663bc197c8160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061114857611148611c42565b602090810291909101015292915050565b6001600160a01b0384163b156108e45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061119d9089908990889088908890600401611899565b602060405180830381600087803b1580156111b757600080fd5b505af19250505080156111e7575060408051601f3d908101601f191682019092526111e49181019061172c565b60015b6111f35761103d611c6e565b6001600160e01b0319811663f23a6e6160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b82805461122f90611ba9565b90600052602060002090601f0160209004810192826112515760008555611297565b82601f1061126a57805160ff1916838001178555611297565b82800160010185558215611297579182015b8281111561129757825182559160200191906001019061127c565b506112a39291506112a7565b5090565b5b808211156112a357600081556001016112a8565b600067ffffffffffffffff8311156112d6576112d6611c58565b6040516112ed601f8501601f191660200182611be4565b80915083815284848401111561130257600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461133157600080fd5b919050565b600082601f83011261134757600080fd5b8135602061135482611b56565b6040516113618282611be4565b8381528281019150858301600585901b8701840188101561138157600080fd5b60005b858110156113a057813584529284019290840190600101611384565b5090979650505050505050565b600082601f8301126113be57600080fd5b6113cd838335602085016112bc565b9392505050565b6000602082840312156113e657600080fd5b6113cd8261131a565b6000806040838503121561140257600080fd5b61140b8361131a565b91506114196020840161131a565b90509250929050565b600080600080600060a0868803121561143a57600080fd5b6114438661131a565b94506114516020870161131a565b9350604086013567ffffffffffffffff8082111561146e57600080fd5b61147a89838a01611336565b9450606088013591508082111561149057600080fd5b61149c89838a01611336565b935060808801359150808211156114b257600080fd5b506114bf888289016113ad565b9150509295509295909350565b600080600080600060a086880312156114e457600080fd5b6114ed8661131a565b94506114fb6020870161131a565b93506040860135925060608601359150608086013567ffffffffffffffff81111561152557600080fd5b6114bf888289016113ad565b60008060006060848603121561154657600080fd5b61154f8461131a565b9250602084013567ffffffffffffffff8082111561156c57600080fd5b61157887838801611336565b9350604086013591508082111561158e57600080fd5b5061159b86828701611336565b9150509250925092565b600080604083850312156115b857600080fd5b6115c18361131a565b9150602083013580151581146115d657600080fd5b809150509250929050565b600080604083850312156115f457600080fd5b6115fd8361131a565b946020939093013593505050565b60008060006060848603121561162057600080fd5b6116298461131a565b95602085013595506040909401359392505050565b6000806040838503121561165157600080fd5b823567ffffffffffffffff8082111561166957600080fd5b818501915085601f83011261167d57600080fd5b8135602061168a82611b56565b6040516116978282611be4565b8381528281019150858301600585901b870184018b10156116b757600080fd5b600096505b848710156116e1576116cd8161131a565b8352600196909601959183019183016116bc565b50965050860135925050808211156116f857600080fd5b5061170585828601611336565b9150509250929050565b60006020828403121561172157600080fd5b81356113cd81611d14565b60006020828403121561173e57600080fd5b81516113cd81611d14565b60006020828403121561175b57600080fd5b813567ffffffffffffffff81111561177257600080fd5b8201601f8101841361178357600080fd5b611792848235602084016112bc565b949350505050565b6000602082840312156117ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156117e3578151875295820195908201906001016117c7565b509495945050505050565b6000815180845260005b81811015611814576020818501810151868301820152016117f8565b81811115611826576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611867908301866117b3565b828103606084015261187981866117b3565b9050828103608084015261188d81856117ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118d3908301846117ee565b979650505050505050565b6020815260006113cd60208301846117b3565b60408152600061190460408301856117b3565b828103602084015261191681856117b3565b95945050505050565b6020815260006113cd60208301846117ee565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115611b7057611b70611c58565b5060051b60200190565b60008219821115611b8d57611b8d611c2c565b500190565b600082821015611ba457611ba4611c2c565b500390565b600181811c90821680611bbd57607f821691505b60208210811415611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611c0a57611c0a611c58565b6040525050565b6000600019821415611c2557611c25611c2c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611c875760046000803e5060005160e01c5b90565b600060443d1015611c985790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611cc857505050505090565b8285019150815181811115611ce05750505050505090565b843d8701016020828501011115611cfa5750505050505090565b611d0960208286010187611be4565b509095945050505050565b6001600160e01b0319811681146103d157600080fdfea264697066735822122002450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e57664736f6c63430008070033697066733a2f2f516d616d46457037794b344c5855726d756366634b394747434158667170435a3651685941727655766e6b4676572f646174612e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610240578063f242432a1461027c578063f2fde38b1461028f578063f5298aca146102a257600080fd5b8063715018a6146101ea5780638da5cb5b146101f2578063a22cb4651461020d578063bd85b0391461022057600080fd5b80632eb2c2d6116100d35780632eb2c2d6146101825780634e1273f4146101955780634f558e79146101b55780636b20c454146101d757600080fd5b8062fdd58e1461010457806301ffc9a71461012a57806302fe53051461014d5780630e89341c14610162575b600080fd5b6101176101123660046115e1565b6102b5565b6040519081526020015b60405180910390f35b61013d61013836600461170f565b61034c565b6040519015158152602001610121565b61016061015b366004611749565b61039e565b005b61017561017036600461179a565b6103d4565b604051610121919061191f565b610160610190366004611422565b610468565b6101a86101a336600461163e565b6104ff565b60405161012191906118de565b61013d6101c336600461179a565b600090815260046020526040902054151590565b6101606101e5366004611531565b610629565b610160610671565b6003546040516001600160a01b039091168152602001610121565b61016061021b3660046115a5565b6106a7565b61011761022e36600461179a565b60009081526004602052604090205490565b61013d61024e3660046113ef565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61016061028a3660046114cc565b6106b6565b61016061029d3660046113d4565b6106fb565b6101606102b036600461160b565b610793565b60006001600160a01b0383166103265760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061037d57506001600160e01b031982166303a24d0760e21b145b8061039857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146103c85760405162461bcd60e51b815260040161031d90611ad9565b6103d1816108fb565b50565b6060600280546103e390611ba9565b80601f016020809104026020016040519081016040528092919081815260200182805461040f90611ba9565b801561045c5780601f106104315761010080835404028352916020019161045c565b820191906000526020600020905b81548152906001019060200180831161043f57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806104845750610484853361024e565b6104eb5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161031d565b6104f8858585858561090e565b5050505050565b606081518351146105645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161031d565b6000835167ffffffffffffffff81111561058057610580611c58565b6040519080825280602002602001820160405280156105a9578160200160208202803683370190505b50905060005b8451811015610621576105f48582815181106105cd576105cd611c42565b60200260200101518583815181106105e7576105e7611c42565b60200260200101516102b5565b82828151811061060657610606611c42565b602090810291909101015261061a81611c11565b90506105af565b509392505050565b6001600160a01b0383163314806106455750610645833361024e565b6106615760405162461bcd60e51b815260040161031d906119be565b61066c838383610ab0565b505050565b6003546001600160a01b0316331461069b5760405162461bcd60e51b815260040161031d90611ad9565b6106a56000610c3e565b565b6106b2338383610c90565b5050565b6001600160a01b0385163314806106d257506106d2853361024e565b6106ee5760405162461bcd60e51b815260040161031d906119be565b6104f88585858585610d71565b6003546001600160a01b031633146107255760405162461bcd60e51b815260040161031d90611ad9565b6001600160a01b03811661078a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161031d565b6103d181610c3e565b6001600160a01b0383163314806107af57506107af833361024e565b6107cb5760405162461bcd60e51b815260040161031d906119be565b61066c838383610e94565b6001600160a01b03851661085d5760005b835181101561085b5782818151811061080257610802611c42565b60200260200101516004600086848151811061082057610820611c42565b6020026020010151815260200190815260200160002060008282546108459190611b7a565b90915550610854905081611c11565b90506107e7565b505b6001600160a01b0384166108e45760005b83518110156108e25782818151811061088957610889611c42565b6020026020010151600460008684815181106108a7576108a7611c42565b6020026020010151815260200190815260200160002060008282546108cc9190611b92565b909155506108db905081611c11565b905061086e565b505b505050505050565b6001600160a01b03163b151590565b80516106b2906002906020840190611223565b815183511461092f5760405162461bcd60e51b815260040161031d90611b0e565b6001600160a01b0384166109555760405162461bcd60e51b815260040161031d90611a07565b33610964818787878787610f95565b60005b8451811015610a4a57600085828151811061098457610984611c42565b6020026020010151905060008583815181106109a2576109a2611c42565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156109f25760405162461bcd60e51b815260040161031d90611a8f565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610a2f908490611b7a565b9250508190555050505080610a4390611c11565b9050610967565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610a9a9291906118f1565b60405180910390a46108e4818787878787610fa3565b6001600160a01b038316610ad65760405162461bcd60e51b815260040161031d90611a4c565b8051825114610af75760405162461bcd60e51b815260040161031d90611b0e565b6000339050610b1a81856000868660405180602001604052806000815250610f95565b60005b8351811015610bdf576000848281518110610b3a57610b3a611c42565b602002602001015190506000848381518110610b5857610b58611c42565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610ba85760405162461bcd60e51b815260040161031d9061197a565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610bd781611c11565b915050610b1d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610c309291906118f1565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610d045760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161031d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416610d975760405162461bcd60e51b815260040161031d90611a07565b33610db6818787610da78861110e565b610db08861110e565b87610f95565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015610df75760405162461bcd60e51b815260040161031d90611a8f565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290610e34908490611b7a565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108e2828888888888611159565b6001600160a01b038316610eba5760405162461bcd60e51b815260040161031d90611a4c565b33610ee981856000610ecb8761110e565b610ed48761110e565b60405180602001604052806000815250610f95565b6000838152602081815260408083206001600160a01b038816845290915290205482811015610f2a5760405162461bcd60e51b815260040161031d9061197a565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6108e48686868686866107d6565b6001600160a01b0384163b156108e45760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190610fe7908990899088908890889060040161183b565b602060405180830381600087803b15801561100157600080fd5b505af1925050508015611031575060408051601f3d908101601f1916820190925261102e9181019061172c565b60015b6110de5761103d611c6e565b806308c379a014156110775750611052611c8a565b8061105d5750611079565b8060405162461bcd60e51b815260040161031d919061191f565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161031d565b6001600160e01b0319811663bc197c8160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061114857611148611c42565b602090810291909101015292915050565b6001600160a01b0384163b156108e45760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061119d9089908990889088908890600401611899565b602060405180830381600087803b1580156111b757600080fd5b505af19250505080156111e7575060408051601f3d908101601f191682019092526111e49181019061172c565b60015b6111f35761103d611c6e565b6001600160e01b0319811663f23a6e6160e01b146108e25760405162461bcd60e51b815260040161031d90611932565b82805461122f90611ba9565b90600052602060002090601f0160209004810192826112515760008555611297565b82601f1061126a57805160ff1916838001178555611297565b82800160010185558215611297579182015b8281111561129757825182559160200191906001019061127c565b506112a39291506112a7565b5090565b5b808211156112a357600081556001016112a8565b600067ffffffffffffffff8311156112d6576112d6611c58565b6040516112ed601f8501601f191660200182611be4565b80915083815284848401111561130257600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461133157600080fd5b919050565b600082601f83011261134757600080fd5b8135602061135482611b56565b6040516113618282611be4565b8381528281019150858301600585901b8701840188101561138157600080fd5b60005b858110156113a057813584529284019290840190600101611384565b5090979650505050505050565b600082601f8301126113be57600080fd5b6113cd838335602085016112bc565b9392505050565b6000602082840312156113e657600080fd5b6113cd8261131a565b6000806040838503121561140257600080fd5b61140b8361131a565b91506114196020840161131a565b90509250929050565b600080600080600060a0868803121561143a57600080fd5b6114438661131a565b94506114516020870161131a565b9350604086013567ffffffffffffffff8082111561146e57600080fd5b61147a89838a01611336565b9450606088013591508082111561149057600080fd5b61149c89838a01611336565b935060808801359150808211156114b257600080fd5b506114bf888289016113ad565b9150509295509295909350565b600080600080600060a086880312156114e457600080fd5b6114ed8661131a565b94506114fb6020870161131a565b93506040860135925060608601359150608086013567ffffffffffffffff81111561152557600080fd5b6114bf888289016113ad565b60008060006060848603121561154657600080fd5b61154f8461131a565b9250602084013567ffffffffffffffff8082111561156c57600080fd5b61157887838801611336565b9350604086013591508082111561158e57600080fd5b5061159b86828701611336565b9150509250925092565b600080604083850312156115b857600080fd5b6115c18361131a565b9150602083013580151581146115d657600080fd5b809150509250929050565b600080604083850312156115f457600080fd5b6115fd8361131a565b946020939093013593505050565b60008060006060848603121561162057600080fd5b6116298461131a565b95602085013595506040909401359392505050565b6000806040838503121561165157600080fd5b823567ffffffffffffffff8082111561166957600080fd5b818501915085601f83011261167d57600080fd5b8135602061168a82611b56565b6040516116978282611be4565b8381528281019150858301600585901b870184018b10156116b757600080fd5b600096505b848710156116e1576116cd8161131a565b8352600196909601959183019183016116bc565b50965050860135925050808211156116f857600080fd5b5061170585828601611336565b9150509250929050565b60006020828403121561172157600080fd5b81356113cd81611d14565b60006020828403121561173e57600080fd5b81516113cd81611d14565b60006020828403121561175b57600080fd5b813567ffffffffffffffff81111561177257600080fd5b8201601f8101841361178357600080fd5b611792848235602084016112bc565b949350505050565b6000602082840312156117ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156117e3578151875295820195908201906001016117c7565b509495945050505050565b6000815180845260005b81811015611814576020818501810151868301820152016117f8565b81811115611826576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611867908301866117b3565b828103606084015261187981866117b3565b9050828103608084015261188d81856117ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906118d3908301846117ee565b979650505050505050565b6020815260006113cd60208301846117b3565b60408152600061190460408301856117b3565b828103602084015261191681856117b3565b95945050505050565b6020815260006113cd60208301846117ee565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115611b7057611b70611c58565b5060051b60200190565b60008219821115611b8d57611b8d611c2c565b500190565b600082821015611ba457611ba4611c2c565b500390565b600181811c90821680611bbd57607f821691505b60208210811415611bde57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611c0a57611c0a611c58565b6040525050565b6000600019821415611c2557611c25611c2c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611c875760046000803e5060005160e01c5b90565b600060443d1015611c985790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611cc857505050505090565b8285019150815181811115611ce05750505050505090565b843d8701016020828501011115611cfa5750505050505090565b611d0960208286010187611be4565b509095945050505050565b6001600160e01b0319811681146103d157600080fdfea264697066735822122002450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e57664736f6c63430008070033

Deployed Bytecode Sourcemap

40528:715:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24029:231;;;;;;:::i;:::-;;:::i;:::-;;;17137:25:1;;;17125:2;17110:18;24029:231:0;;;;;;;;23052:310;;;;;;:::i;:::-;;:::i;:::-;;;11046:14:1;;11039:22;11021:41;;11009:2;10994:18;23052:310:0;10881:187:1;40782:89:0;;;;;;:::i;:::-;;:::i;:::-;;23773:105;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25968:442::-;;;;;;:::i;:::-;;:::i;24426:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38468:122::-;;;;;;:::i;:::-;38525:4;38346:16;;;:12;:16;;;;;;-1:-1:-1;;;38468:122:0;40087:353;;;;;;:::i;:::-;;:::i;3258:103::-;;;:::i;2607:87::-;2680:6;;2607:87;;-1:-1:-1;;;;;2680:6:0;;;8687:51:1;;8675:2;8660:18;2607:87:0;8541:203:1;25023:155:0;;;;;;:::i;:::-;;:::i;38257:113::-;;;;;;:::i;:::-;38319:7;38346:16;;;:12;:16;;;;;;;38257:113;25250:168;;;;;;:::i;:::-;-1:-1:-1;;;;;25373:27:0;;;25349:4;25373:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;25250:168;25490:401;;;;;;:::i;:::-;;:::i;3516:201::-;;;;;;:::i;:::-;;:::i;39758:321::-;;;;;;:::i;:::-;;:::i;24029:231::-;24115:7;-1:-1:-1;;;;;24143:21:0;;24135:77;;;;-1:-1:-1;;;24135:77:0;;12329:2:1;24135:77:0;;;12311:21:1;12368:2;12348:18;;;12341:30;12407:34;12387:18;;;12380:62;-1:-1:-1;;;12458:18:1;;;12451:41;12509:19;;24135:77:0;;;;;;;;;-1:-1:-1;24230:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;24230:22:0;;;;;;;;;;;;24029:231::o;23052:310::-;23154:4;-1:-1:-1;;;;;;23191:41:0;;-1:-1:-1;;;23191:41:0;;:110;;-1:-1:-1;;;;;;;23249:52:0;;-1:-1:-1;;;23249:52:0;23191:110;:163;;;-1:-1:-1;;;;;;;;;;14469:40:0;;;23318:36;23171:183;23052:310;-1:-1:-1;;23052:310:0:o;40782:89::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;40848:15:::1;40856:6;40848:7;:15::i;:::-;40782:89:::0;:::o;23773:105::-;23833:13;23866:4;23859:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23773:105;;;:::o;25968:442::-;-1:-1:-1;;;;;26201:20:0;;1411:10;26201:20;;:60;;-1:-1:-1;26225:36:0;26242:4;1411:10;25250:168;:::i;26225:36::-;26179:160;;;;-1:-1:-1;;;26179:160:0;;14369:2:1;26179:160:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:48;14556:19;;26179:160:0;14167:414:1;26179:160:0;26350:52;26373:4;26379:2;26383:3;26388:7;26397:4;26350:22;:52::i;:::-;25968:442;;;;;:::o;24426:524::-;24582:16;24643:3;:10;24624:8;:15;:29;24616:83;;;;-1:-1:-1;;;24616:83:0;;16374:2:1;24616:83:0;;;16356:21:1;16413:2;16393:18;;;16386:30;16452:34;16432:18;;;16425:62;-1:-1:-1;;;16503:18:1;;;16496:39;16552:19;;24616:83:0;16172:405:1;24616:83:0;24712:30;24759:8;:15;24745:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24745:30:0;;24712:63;;24793:9;24788:122;24812:8;:15;24808:1;:19;24788:122;;;24868:30;24878:8;24887:1;24878:11;;;;;;;;:::i;:::-;;;;;;;24891:3;24895:1;24891:6;;;;;;;;:::i;:::-;;;;;;;24868:9;:30::i;:::-;24849:13;24863:1;24849:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24829:3;;;:::i;:::-;;;24788:122;;;-1:-1:-1;24929:13:0;24426:524;-1:-1:-1;;;24426:524:0:o;40087:353::-;-1:-1:-1;;;;;40252:23:0;;1411:10;40252:23;;:66;;-1:-1:-1;40279:39:0;40296:7;1411:10;25250:168;:::i;40279:39::-;40230:157;;;;-1:-1:-1;;;40230:157:0;;;;;;;:::i;:::-;40400:32;40411:7;40420:3;40425:6;40400:10;:32::i;:::-;40087:353;;;:::o;3258:103::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;3323:30:::1;3350:1;3323:18;:30::i;:::-;3258:103::o:0;25023:155::-;25118:52;1411:10;25151:8;25161;25118:18;:52::i;:::-;25023:155;;:::o;25490:401::-;-1:-1:-1;;;;;25698:20:0;;1411:10;25698:20;;:60;;-1:-1:-1;25722:36:0;25739:4;1411:10;25250:168;:::i;25722:36::-;25676:151;;;;-1:-1:-1;;;25676:151:0;;;;;;;:::i;:::-;25838:45;25856:4;25862:2;25866;25870:6;25878:4;25838:17;:45::i;3516:201::-;2680:6;;-1:-1:-1;;;;;2680:6:0;1411:10;2827:23;2819:68;;;;-1:-1:-1;;;2819:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3605:22:0;::::1;3597:73;;;::::0;-1:-1:-1;;;3597:73:0;;12741:2:1;3597:73:0::1;::::0;::::1;12723:21:1::0;12780:2;12760:18;;;12753:30;12819:34;12799:18;;;12792:62;-1:-1:-1;;;12870:18:1;;;12863:36;12916:19;;3597:73:0::1;12539:402:1::0;3597:73:0::1;3681:28;3700:8;3681:18;:28::i;39758:321::-:0;-1:-1:-1;;;;;39898:23:0;;1411:10;39898:23;;:66;;-1:-1:-1;39925:39:0;39942:7;1411:10;25250:168;:::i;39925:39::-;39876:157;;;;-1:-1:-1;;;39876:157:0;;;;;;;:::i;:::-;40046:25;40052:7;40061:2;40065:5;40046;:25::i;38665:655::-;-1:-1:-1;;;;;38987:18:0;;38983:160;;39027:9;39022:110;39046:3;:10;39042:1;:14;39022:110;;;39106:7;39114:1;39106:10;;;;;;;;:::i;:::-;;;;;;;39082:12;:20;39095:3;39099:1;39095:6;;;;;;;;:::i;:::-;;;;;;;39082:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;39058:3:0;;-1:-1:-1;39058:3:0;;:::i;:::-;;;39022:110;;;;38983:160;-1:-1:-1;;;;;39159:16:0;;39155:158;;39197:9;39192:110;39216:3;:10;39212:1;:14;39192:110;;;39276:7;39284:1;39276:10;;;;;;;;:::i;:::-;;;;;;;39252:12;:20;39265:3;39269:1;39265:6;;;;;;;;:::i;:::-;;;;;;;39252:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;39228:3:0;;-1:-1:-1;39228:3:0;;:::i;:::-;;;39192:110;;;;39155:158;38665:655;;;;;;:::o;5308:326::-;-1:-1:-1;;;;;5603:19:0;;:23;;;5308:326::o;29970:88::-;30037:13;;;;:4;;:13;;;;;:::i;28052:1074::-;28279:7;:14;28265:3;:10;:28;28257:81;;;;-1:-1:-1;;;28257:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28357:16:0;;28349:66;;;;-1:-1:-1;;;28349:66:0;;;;;;;:::i;:::-;1411:10;28472:60;1411:10;28503:4;28509:2;28513:3;28518:7;28527:4;28472:20;:60::i;:::-;28550:9;28545:421;28569:3;:10;28565:1;:14;28545:421;;;28601:10;28614:3;28618:1;28614:6;;;;;;;;:::i;:::-;;;;;;;28601:19;;28635:14;28652:7;28660:1;28652:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28679:19;28701:13;;;;;;;;;;-1:-1:-1;;;;;28701:19:0;;;;;;;;;;;;28652:10;;-1:-1:-1;28743:21:0;;;;28735:76;;;;-1:-1:-1;;;28735:76:0;;;;;;;:::i;:::-;28855:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28855:19:0;;;;;;;;;;28877:20;;;28855:42;;28927:17;;;;;;;:27;;28877:20;;28855:9;28927:27;;28877:20;;28927:27;:::i;:::-;;;;;;;;28586:380;;;28581:3;;;;:::i;:::-;;;28545:421;;;;29013:2;-1:-1:-1;;;;;28983:47:0;29007:4;-1:-1:-1;;;;;28983:47:0;28997:8;-1:-1:-1;;;;;28983:47:0;;29017:3;29022:7;28983:47;;;;;;;:::i;:::-;;;;;;;;29043:75;29079:8;29089:4;29095:2;29099:3;29104:7;29113:4;29043:35;:75::i;33205:891::-;-1:-1:-1;;;;;33357:18:0;;33349:66;;;;-1:-1:-1;;;33349:66:0;;;;;;;:::i;:::-;33448:7;:14;33434:3;:10;:28;33426:81;;;;-1:-1:-1;;;33426:81:0;;;;;;;:::i;:::-;33520:16;1411:10;33520:31;;33564:66;33585:8;33595:4;33609:1;33613:3;33618:7;33564:66;;;;;;;;;;;;:20;:66::i;:::-;33648:9;33643:373;33667:3;:10;33663:1;:14;33643:373;;;33699:10;33712:3;33716:1;33712:6;;;;;;;;:::i;:::-;;;;;;;33699:19;;33733:14;33750:7;33758:1;33750:10;;;;;;;;:::i;:::-;;;;;;;;;;;;33777:19;33799:13;;;;;;;;;;-1:-1:-1;;;;;33799:19:0;;;;;;;;;;;;33750:10;;-1:-1:-1;33841:21:0;;;;33833:70;;;;-1:-1:-1;;;33833:70:0;;;;;;;:::i;:::-;33947:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33947:19:0;;;;;;;;;;33969:20;;33947:42;;33679:3;;;;:::i;:::-;;;;33643:373;;;;34071:1;-1:-1:-1;;;;;34033:55:0;34057:4;-1:-1:-1;;;;;34033:55:0;34047:8;-1:-1:-1;;;;;34033:55:0;;34075:3;34080:7;34033:55;;;;;;;:::i;:::-;;;;;;;;33338:758;33205:891;;;:::o;3877:191::-;3970:6;;;-1:-1:-1;;;;;3987:17:0;;;-1:-1:-1;;;;;;3987:17:0;;;;;;;4020:40;;3970:6;;;3987:17;3970:6;;4020:40;;3951:16;;4020:40;3940:128;3877:191;:::o;34238:331::-;34393:8;-1:-1:-1;;;;;34384:17:0;:5;-1:-1:-1;;;;;34384:17:0;;;34376:71;;;;-1:-1:-1;;;34376:71:0;;15964:2:1;34376:71:0;;;15946:21:1;16003:2;15983:18;;;15976:30;16042:34;16022:18;;;16015:62;-1:-1:-1;;;16093:18:1;;;16086:39;16142:19;;34376:71:0;15762:405:1;34376:71:0;-1:-1:-1;;;;;34458:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34458:46:0;;;;;;;;;;34520:41;;11021::1;;;34520::0;;10994:18:1;34520:41:0;;;;;;;34238:331;;;:::o;26874:820::-;-1:-1:-1;;;;;27062:16:0;;27054:66;;;;-1:-1:-1;;;27054:66:0;;;;;;;:::i;:::-;1411:10;27177:96;1411:10;27208:4;27214:2;27218:21;27236:2;27218:17;:21::i;:::-;27241:25;27259:6;27241:17;:25::i;:::-;27268:4;27177:20;:96::i;:::-;27286:19;27308:13;;;;;;;;;;;-1:-1:-1;;;;;27308:19:0;;;;;;;;;;27346:21;;;;27338:76;;;;-1:-1:-1;;;27338:76:0;;;;;;;:::i;:::-;27450:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27450:19:0;;;;;;;;;;27472:20;;;27450:42;;27514:17;;;;;;;:27;;27472:20;;27450:9;27514:27;;27472:20;;27514:27;:::i;:::-;;;;-1:-1:-1;;27559:46:0;;;17347:25:1;;;17403:2;17388:18;;17381:34;;;-1:-1:-1;;;;;27559:46:0;;;;;;;;;;;;;;17320:18:1;27559:46:0;;;;;;;27618:68;27649:8;27659:4;27665:2;27669;27673:6;27681:4;27618:30;:68::i;32354:648::-;-1:-1:-1;;;;;32481:18:0;;32473:66;;;;-1:-1:-1;;;32473:66:0;;;;;;;:::i;:::-;1411:10;32596:102;1411:10;32627:4;32552:16;32645:21;32663:2;32645:17;:21::i;:::-;32668:25;32686:6;32668:17;:25::i;:::-;32596:102;;;;;;;;;;;;:20;:102::i;:::-;32711:19;32733:13;;;;;;;;;;;-1:-1:-1;;;;;32733:19:0;;;;;;;;;;32771:21;;;;32763:70;;;;-1:-1:-1;;;32763:70:0;;;;;;;:::i;:::-;32869:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32869:19:0;;;;;;;;;;;;32891:20;;;32869:42;;32940:54;;17347:25:1;;;17388:18;;;17381:34;;;32869:19:0;;32940:54;;;;;;17320:18:1;32940:54:0;;;;;;;32462:540;;32354:648;;;:::o;40949:291::-;41166:66;41193:8;41203:4;41209:2;41213:3;41218:7;41227:4;41166:26;:66::i;36506:813::-;-1:-1:-1;;;;;36746:13:0;;5603:19;:23;36742:570;;36782:79;;-1:-1:-1;;;36782:79:0;;-1:-1:-1;;;;;36782:43:0;;;;;:79;;36826:8;;36836:4;;36842:3;;36847:7;;36856:4;;36782:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36782:79:0;;;;;;;;-1:-1:-1;;36782:79:0;;;;;;;;;;;;:::i;:::-;;;36778:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37174:6;37167:14;;-1:-1:-1;;;37167:14:0;;;;;;;;:::i;36778:523::-;;;37223:62;;-1:-1:-1;;;37223:62:0;;11499:2:1;37223:62:0;;;11481:21:1;11538:2;11518:18;;;11511:30;11577:34;11557:18;;;11550:62;-1:-1:-1;;;11628:18:1;;;11621:50;11688:19;;37223:62:0;11297:416:1;36778:523:0;-1:-1:-1;;;;;;36943:60:0;;-1:-1:-1;;;36943:60:0;36939:159;;37028:50;;-1:-1:-1;;;37028:50:0;;;;;;;:::i;37327:198::-;37447:16;;;37461:1;37447:16;;;;;;;;;37393;;37422:22;;37447:16;;;;;;;;;;;;-1:-1:-1;37447:16:0;37422:41;;37485:7;37474:5;37480:1;37474:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;37512:5;37327:198;-1:-1:-1;;37327:198:0:o;35754:744::-;-1:-1:-1;;;;;35969:13:0;;5603:19;:23;35965:526;;36005:72;;-1:-1:-1;;;36005:72:0;;-1:-1:-1;;;;;36005:38:0;;;;;:72;;36044:8;;36054:4;;36060:2;;36064:6;;36072:4;;36005:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36005:72:0;;;;;;;;-1:-1:-1;;36005:72:0;;;;;;;;;;;;:::i;:::-;;;36001:479;;;;:::i;:::-;-1:-1:-1;;;;;;36127:55:0;;-1:-1:-1;;;36127:55:0;36123:154;;36207:50;;-1:-1:-1;;;36207:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:220::-;1447:5;1500:3;1493:4;1485:6;1481:17;1477:27;1467:55;;1518:1;1515;1508:12;1467:55;1540:79;1615:3;1606:6;1593:20;1586:4;1578:6;1574:17;1540:79;:::i;:::-;1531:88;1405:220;-1:-1:-1;;;1405:220:1:o;1630:186::-;1689:6;1742:2;1730:9;1721:7;1717:23;1713:32;1710:52;;;1758:1;1755;1748:12;1710:52;1781:29;1800:9;1781:29;:::i;1821:260::-;1889:6;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:52;;;1966:1;1963;1956:12;1918:52;1989:29;2008:9;1989:29;:::i;:::-;1979:39;;2037:38;2071:2;2060:9;2056:18;2037:38;:::i;:::-;2027:48;;1821:260;;;;;:::o;2086:943::-;2240:6;2248;2256;2264;2272;2325:3;2313:9;2304:7;2300:23;2296:33;2293:53;;;2342:1;2339;2332:12;2293:53;2365:29;2384:9;2365:29;:::i;:::-;2355:39;;2413:38;2447:2;2436:9;2432:18;2413:38;:::i;:::-;2403:48;;2502:2;2491:9;2487:18;2474:32;2525:18;2566:2;2558:6;2555:14;2552:34;;;2582:1;2579;2572:12;2552:34;2605:61;2658:7;2649:6;2638:9;2634:22;2605:61;:::i;:::-;2595:71;;2719:2;2708:9;2704:18;2691:32;2675:48;;2748:2;2738:8;2735:16;2732:36;;;2764:1;2761;2754:12;2732:36;2787:63;2842:7;2831:8;2820:9;2816:24;2787:63;:::i;:::-;2777:73;;2903:3;2892:9;2888:19;2875:33;2859:49;;2933:2;2923:8;2920:16;2917:36;;;2949:1;2946;2939:12;2917:36;;2972:51;3015:7;3004:8;2993:9;2989:24;2972:51;:::i;:::-;2962:61;;;2086:943;;;;;;;;:::o;3034:606::-;3138:6;3146;3154;3162;3170;3223:3;3211:9;3202:7;3198:23;3194:33;3191:53;;;3240:1;3237;3230:12;3191:53;3263:29;3282:9;3263:29;:::i;:::-;3253:39;;3311:38;3345:2;3334:9;3330:18;3311:38;:::i;:::-;3301:48;;3396:2;3385:9;3381:18;3368:32;3358:42;;3447:2;3436:9;3432:18;3419:32;3409:42;;3502:3;3491:9;3487:19;3474:33;3530:18;3522:6;3519:30;3516:50;;;3562:1;3559;3552:12;3516:50;3585:49;3626:7;3617:6;3606:9;3602:22;3585:49;:::i;3645:669::-;3772:6;3780;3788;3841:2;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3880:29;3899:9;3880:29;:::i;:::-;3870:39;;3960:2;3949:9;3945:18;3932:32;3983:18;4024:2;4016:6;4013:14;4010:34;;;4040:1;4037;4030:12;4010:34;4063:61;4116:7;4107:6;4096:9;4092:22;4063:61;:::i;:::-;4053:71;;4177:2;4166:9;4162:18;4149:32;4133:48;;4206:2;4196:8;4193:16;4190:36;;;4222:1;4219;4212:12;4190:36;;4245:63;4300:7;4289:8;4278:9;4274:24;4245:63;:::i;:::-;4235:73;;;3645:669;;;;;:::o;4319:347::-;4384:6;4392;4445:2;4433:9;4424:7;4420:23;4416:32;4413:52;;;4461:1;4458;4451:12;4413:52;4484:29;4503:9;4484:29;:::i;:::-;4474:39;;4563:2;4552:9;4548:18;4535:32;4610:5;4603:13;4596:21;4589:5;4586:32;4576:60;;4632:1;4629;4622:12;4576:60;4655:5;4645:15;;;4319:347;;;;;:::o;4671:254::-;4739:6;4747;4800:2;4788:9;4779:7;4775:23;4771:32;4768:52;;;4816:1;4813;4806:12;4768:52;4839:29;4858:9;4839:29;:::i;:::-;4829:39;4915:2;4900:18;;;;4887:32;;-1:-1:-1;;;4671:254:1:o;4930:322::-;5007:6;5015;5023;5076:2;5064:9;5055:7;5051:23;5047:32;5044:52;;;5092:1;5089;5082:12;5044:52;5115:29;5134:9;5115:29;:::i;:::-;5105:39;5191:2;5176:18;;5163:32;;-1:-1:-1;5242:2:1;5227:18;;;5214:32;;4930:322;-1:-1:-1;;;4930:322:1:o;5257:1219::-;5375:6;5383;5436:2;5424:9;5415:7;5411:23;5407:32;5404:52;;;5452:1;5449;5442:12;5404:52;5492:9;5479:23;5521:18;5562:2;5554:6;5551:14;5548:34;;;5578:1;5575;5568:12;5548:34;5616:6;5605:9;5601:22;5591:32;;5661:7;5654:4;5650:2;5646:13;5642:27;5632:55;;5683:1;5680;5673:12;5632:55;5719:2;5706:16;5741:4;5764:43;5804:2;5764:43;:::i;:::-;5836:2;5830:9;5848:31;5876:2;5868:6;5848:31;:::i;:::-;5914:18;;;5948:15;;;;-1:-1:-1;5983:11:1;;;6025:1;6021:10;;;6013:19;;6009:28;;6006:41;-1:-1:-1;6003:61:1;;;6060:1;6057;6050:12;6003:61;6082:1;6073:10;;6092:169;6106:2;6103:1;6100:9;6092:169;;;6163:23;6182:3;6163:23;:::i;:::-;6151:36;;6124:1;6117:9;;;;;6207:12;;;;6239;;6092:169;;;-1:-1:-1;6280:6:1;-1:-1:-1;;6324:18:1;;6311:32;;-1:-1:-1;;6355:16:1;;;6352:36;;;6384:1;6381;6374:12;6352:36;;6407:63;6462:7;6451:8;6440:9;6436:24;6407:63;:::i;:::-;6397:73;;;5257:1219;;;;;:::o;6481:245::-;6539:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:52;;;6608:1;6605;6598:12;6560:52;6647:9;6634:23;6666:30;6690:5;6666:30;:::i;6731:249::-;6800:6;6853:2;6841:9;6832:7;6828:23;6824:32;6821:52;;;6869:1;6866;6859:12;6821:52;6901:9;6895:16;6920:30;6944:5;6920:30;:::i;6985:450::-;7054:6;7107:2;7095:9;7086:7;7082:23;7078:32;7075:52;;;7123:1;7120;7113:12;7075:52;7163:9;7150:23;7196:18;7188:6;7185:30;7182:50;;;7228:1;7225;7218:12;7182:50;7251:22;;7304:4;7296:13;;7292:27;-1:-1:-1;7282:55:1;;7333:1;7330;7323:12;7282:55;7356:73;7421:7;7416:2;7403:16;7398:2;7394;7390:11;7356:73;:::i;:::-;7346:83;6985:450;-1:-1:-1;;;;6985:450:1:o;7440:180::-;7499:6;7552:2;7540:9;7531:7;7527:23;7523:32;7520:52;;;7568:1;7565;7558:12;7520:52;-1:-1:-1;7591:23:1;;7440:180;-1:-1:-1;7440:180:1:o;7625:435::-;7678:3;7716:5;7710:12;7743:6;7738:3;7731:19;7769:4;7798:2;7793:3;7789:12;7782:19;;7835:2;7828:5;7824:14;7856:1;7866:169;7880:6;7877:1;7874:13;7866:169;;;7941:13;;7929:26;;7975:12;;;;8010:15;;;;7902:1;7895:9;7866:169;;;-1:-1:-1;8051:3:1;;7625:435;-1:-1:-1;;;;;7625:435:1:o;8065:471::-;8106:3;8144:5;8138:12;8171:6;8166:3;8159:19;8196:1;8206:162;8220:6;8217:1;8214:13;8206:162;;;8282:4;8338:13;;;8334:22;;8328:29;8310:11;;;8306:20;;8299:59;8235:12;8206:162;;;8386:6;8383:1;8380:13;8377:87;;;8452:1;8445:4;8436:6;8431:3;8427:16;8423:27;8416:38;8377:87;-1:-1:-1;8518:2:1;8497:15;-1:-1:-1;;8493:29:1;8484:39;;;;8525:4;8480:50;;8065:471;-1:-1:-1;;8065:471:1:o;8749:826::-;-1:-1:-1;;;;;9146:15:1;;;9128:34;;9198:15;;9193:2;9178:18;;9171:43;9108:3;9245:2;9230:18;;9223:31;;;9071:4;;9277:57;;9314:19;;9306:6;9277:57;:::i;:::-;9382:9;9374:6;9370:22;9365:2;9354:9;9350:18;9343:50;9416:44;9453:6;9445;9416:44;:::i;:::-;9402:58;;9509:9;9501:6;9497:22;9491:3;9480:9;9476:19;9469:51;9537:32;9562:6;9554;9537:32;:::i;:::-;9529:40;8749:826;-1:-1:-1;;;;;;;;8749:826:1:o;9580:560::-;-1:-1:-1;;;;;9877:15:1;;;9859:34;;9929:15;;9924:2;9909:18;;9902:43;9976:2;9961:18;;9954:34;;;10019:2;10004:18;;9997:34;;;9839:3;10062;10047:19;;10040:32;;;9802:4;;10089:45;;10114:19;;10106:6;10089:45;:::i;:::-;10081:53;9580:560;-1:-1:-1;;;;;;;9580:560:1:o;10145:261::-;10324:2;10313:9;10306:21;10287:4;10344:56;10396:2;10385:9;10381:18;10373:6;10344:56;:::i;10411:465::-;10668:2;10657:9;10650:21;10631:4;10694:56;10746:2;10735:9;10731:18;10723:6;10694:56;:::i;:::-;10798:9;10790:6;10786:22;10781:2;10770:9;10766:18;10759:50;10826:44;10863:6;10855;10826:44;:::i;:::-;10818:52;10411:465;-1:-1:-1;;;;;10411:465:1:o;11073:219::-;11222:2;11211:9;11204:21;11185:4;11242:44;11282:2;11271:9;11267:18;11259:6;11242:44;:::i;11718:404::-;11920:2;11902:21;;;11959:2;11939:18;;;11932:30;11998:34;11993:2;11978:18;;11971:62;-1:-1:-1;;;12064:2:1;12049:18;;12042:38;12112:3;12097:19;;11718:404::o;12946:400::-;13148:2;13130:21;;;13187:2;13167:18;;;13160:30;13226:34;13221:2;13206:18;;13199:62;-1:-1:-1;;;13292:2:1;13277:18;;13270:34;13336:3;13321:19;;12946:400::o;13351:405::-;13553:2;13535:21;;;13592:2;13572:18;;;13565:30;13631:34;13626:2;13611:18;;13604:62;-1:-1:-1;;;13697:2:1;13682:18;;13675:39;13746:3;13731:19;;13351:405::o;13761:401::-;13963:2;13945:21;;;14002:2;13982:18;;;13975:30;14041:34;14036:2;14021:18;;14014:62;-1:-1:-1;;;14107:2:1;14092:18;;14085:35;14152:3;14137:19;;13761:401::o;14586:399::-;14788:2;14770:21;;;14827:2;14807:18;;;14800:30;14866:34;14861:2;14846:18;;14839:62;-1:-1:-1;;;14932:2:1;14917:18;;14910:33;14975:3;14960:19;;14586:399::o;14990:406::-;15192:2;15174:21;;;15231:2;15211:18;;;15204:30;15270:34;15265:2;15250:18;;15243:62;-1:-1:-1;;;15336:2:1;15321:18;;15314:40;15386:3;15371:19;;14990:406::o;15401:356::-;15603:2;15585:21;;;15622:18;;;15615:30;15681:34;15676:2;15661:18;;15654:62;15748:2;15733:18;;15401:356::o;16582:404::-;16784:2;16766:21;;;16823:2;16803:18;;;16796:30;16862:34;16857:2;16842:18;;16835:62;-1:-1:-1;;;16928:2:1;16913:18;;16906:38;16976:3;16961:19;;16582:404::o;17426:183::-;17486:4;17519:18;17511:6;17508:30;17505:56;;;17541:18;;:::i;:::-;-1:-1:-1;17586:1:1;17582:14;17598:4;17578:25;;17426:183::o;17614:128::-;17654:3;17685:1;17681:6;17678:1;17675:13;17672:39;;;17691:18;;:::i;:::-;-1:-1:-1;17727:9:1;;17614:128::o;17747:125::-;17787:4;17815:1;17812;17809:8;17806:34;;;17820:18;;:::i;:::-;-1:-1:-1;17857:9:1;;17747:125::o;17877:380::-;17956:1;17952:12;;;;17999;;;18020:61;;18074:4;18066:6;18062:17;18052:27;;18020:61;18127:2;18119:6;18116:14;18096:18;18093:38;18090:161;;;18173:10;18168:3;18164:20;18161:1;18154:31;18208:4;18205:1;18198:15;18236:4;18233:1;18226:15;18090:161;;17877:380;;;:::o;18262:249::-;18372:2;18353:13;;-1:-1:-1;;18349:27:1;18337:40;;18407:18;18392:34;;18428:22;;;18389:62;18386:88;;;18454:18;;:::i;:::-;18490:2;18483:22;-1:-1:-1;;18262:249:1:o;18516:135::-;18555:3;-1:-1:-1;;18576:17:1;;18573:43;;;18596:18;;:::i;:::-;-1:-1:-1;18643:1:1;18632:13;;18516:135::o;18656:127::-;18717:10;18712:3;18708:20;18705:1;18698:31;18748:4;18745:1;18738:15;18772:4;18769:1;18762:15;18788:127;18849:10;18844:3;18840:20;18837:1;18830:31;18880:4;18877:1;18870:15;18904:4;18901:1;18894:15;18920:127;18981:10;18976:3;18972:20;18969:1;18962:31;19012:4;19009:1;19002:15;19036:4;19033:1;19026:15;19052:179;19087:3;19129:1;19111:16;19108:23;19105:120;;;19175:1;19172;19169;19154:23;-1:-1:-1;19212:1:1;19206:8;19201:3;19197:18;19105:120;19052:179;:::o;19236:671::-;19275:3;19317:4;19299:16;19296:26;19293:39;;;19236:671;:::o;19293:39::-;19359:2;19353:9;-1:-1:-1;;19424:16:1;19420:25;;19417:1;19353:9;19396:50;19475:4;19469:11;19499:16;19534:18;19605:2;19598:4;19590:6;19586:17;19583:25;19578:2;19570:6;19567:14;19564:45;19561:58;;;19612:5;;;;;19236:671;:::o;19561:58::-;19649:6;19643:4;19639:17;19628:28;;19685:3;19679:10;19712:2;19704:6;19701:14;19698:27;;;19718:5;;;;;;19236:671;:::o;19698:27::-;19802:2;19783:16;19777:4;19773:27;19769:36;19762:4;19753:6;19748:3;19744:16;19740:27;19737:69;19734:82;;;19809:5;;;;;;19236:671;:::o;19734:82::-;19825:57;19876:4;19867:6;19859;19855:19;19851:30;19845:4;19825:57;:::i;:::-;-1:-1:-1;19898:3:1;;19236:671;-1:-1:-1;;;;;19236:671:1:o;19912:131::-;-1:-1:-1;;;;;;19986:32:1;;19976:43;;19966:71;;20033:1;20030;20023:12

Swarm Source

ipfs://02450a17e99aef8d4ad58c61c7f29132f30d78c4008201e5a22be467a814e576
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.