ETH Price: $2,654.98 (+7.86%)
 

Overview

Max Total Supply

40 bannermfer

Holders

34

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
vault.heresmy.eth
Balance
1 bannermfer
0x9054bcff5e34326f8ad48ea1b8821734ab345acf
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:
bannermfers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-06
*/

// File: openzeppelin-solidity/contracts/utils/introspection/IERC165.sol

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol

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

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;







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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

// File: openzeppelin-solidity/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: bannermfers.sol

pragma solidity ^0.8.4;


contract bannermfers is ERC721, Ownable {

    address public MFERS_ADDRESS;
    address payable public payments;
    IERC721 private _mfersContract;

    uint private _totalSupply;

    string private _metadataBaseURI;
    string private _metadataExtension;

    uint public cost = 0.0169 ether;

    /* events */
    event Received(address,  uint);

    /* metadata */

    constructor(address mfersAddress, address _payments) ERC721("banner mfers", "bannermfer") Ownable() {
        setMfersAddress(mfersAddress);
        setMetadataBaseURI("https://gateway.pinata.cloud/ipfs/QmQoBpkMvrpuegnUvmp6jGg1xschRnvyMAi4YjMKrw9fn4/");
        setMetadataExtenstion(".json");
        payments = payable(_payments);
    }

    receive() external payable {
        emit Received(msg.sender, msg.value);
    }

    /* owner's functions */

    function setMfersAddress(address newAddress) public onlyOwner {
        MFERS_ADDRESS = newAddress;
        _mfersContract = IERC721(MFERS_ADDRESS);
    }

    function setMetadataBaseURI(string memory uri) public onlyOwner {
        _metadataBaseURI = uri;
    }

    function setMetadataExtenstion(string memory extension) public onlyOwner {
        _metadataExtension = extension;
    }

    function withdraw() public onlyOwner {
        (bool sent,) = payable(payments).call{value: address(this).balance}("");
        require(sent, "Failed to send Ether");
    }

    /* Public functions */

    function _mint(uint256 token) private {
        require(msg.value >= cost, "Price is 0.0169 Eth");
        require(_mfersContract.ownerOf(token) == msg.sender, "You need to own the mfer");

        _safeMint(msg.sender, token);

        _totalSupply += 1;
    }

    function mint(uint256 token) payable public {
        emit Received(msg.sender, msg.value);

        _mint(token);
    }

    function massMint(uint256[] memory tokens) payable public {
        require(msg.value >= (cost * tokens.length), "Price is 0.0169 Eth per banner");
        for (uint i = 0; i < tokens.length; ++i)
        {
            require(_mfersContract.ownerOf(tokens[i]) == msg.sender, "You need to own the mfer");
            _mint(tokens[i]);
        }
    }

    function totalSupply() public view returns(uint supply)
    {
        supply = _totalSupply;
    }

    function tokenURI(uint256 token) public view override(ERC721) returns(string memory)
    {
        return string(abi.encodePacked(_metadataBaseURI, Strings.toString(token), _metadataExtension));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"mfersAddress","type":"address"},{"internalType":"address","name":"_payments","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MFERS_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"massMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payments","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setMetadataBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"extension","type":"string"}],"name":"setMetadataExtenstion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMfersAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052663c0a75e0b44000600d553480156200001c57600080fd5b50604051620042ad380380620042ad833981810160405281019062000042919062000617565b6040518060400160405280600c81526020017f62616e6e6572206d6665727300000000000000000000000000000000000000008152506040518060400160405280600a81526020017f62616e6e65726d666572000000000000000000000000000000000000000000008152508160009080519060200190620000c692919062000550565b508060019080519060200190620000df92919062000550565b50505062000102620000f6620001cc60201b60201c565b620001d460201b60201c565b62000113826200029a60201b60201c565b6200013d6040518060800160405280605181526020016200425c60519139620003d060201b60201c565b620001836040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506200047b60201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000799565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002aa620001cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d06200052660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003209062000685565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620003e0620001cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004066200052660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200045f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004569062000685565b60405180910390fd5b80600b90805190602001906200047792919062000550565b5050565b6200048b620001cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004b16200052660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200050a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005019062000685565b60405180910390fd5b80600c90805190602001906200052292919062000550565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200055e90620006ec565b90600052602060002090601f016020900481019282620005825760008555620005ce565b82601f106200059d57805160ff1916838001178555620005ce565b82800160010185558215620005ce579182015b82811115620005cd578251825591602001919060010190620005b0565b5b509050620005dd9190620005e1565b5090565b5b80821115620005fc576000816000905550600101620005e2565b5090565b60008151905062000611816200077f565b92915050565b6000806040838503121562000631576200063062000751565b5b6000620006418582860162000600565b9250506020620006548582860162000600565b9150509250929050565b60006200066d602083620006a7565b91506200067a8262000756565b602082019050919050565b60006020820190508181036000830152620006a0816200065e565b9050919050565b600082825260208201905092915050565b6000620006c582620006cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200070557607f821691505b602082108114156200071c576200071b62000722565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200078a81620006b8565b81146200079657600080fd5b50565b613ab380620007a96000396000f3fe6080604052600436106101855760003560e01c8063715018a6116100d1578063a6d23e101161008a578063c87b56dd11610064578063c87b56dd14610570578063e985e9c5146105ad578063f2fde38b146105ea578063fb94bd8a14610613576101c5565b8063a6d23e1014610500578063b88d4fde1461052b578063c0fd9dfd14610554576101c5565b8063715018a61461042557806389d65e0c1461043c5780638da5cb5b1461046557806395d89b4114610490578063a0712d68146104bb578063a22cb465146104d7576101c5565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103575780634c3a6b77146103805780636352211e146103ab57806370a08231146103e8576101c5565b806323b872dd146102ee5780633ccfd60b146103175780633d1a62f71461032e576101c5565b806301ffc9a7146101ca57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806313faede61461029857806318160ddd146102c3576101c5565b366101c5577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101bb929190612dab565b60405180910390a1005b600080fd5b3480156101d657600080fd5b506101f160048036038101906101ec91906127f9565b61063c565b6040516101fe9190612dd4565b60405180910390f35b34801561021357600080fd5b5061021c61071e565b6040516102299190612def565b60405180910390f35b34801561023e57600080fd5b506102596004803603810190610254919061289c565b6107b0565b6040516102669190612d29565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612770565b610835565b005b3480156102a457600080fd5b506102ad61094d565b6040516102ba9190613071565b60405180910390f35b3480156102cf57600080fd5b506102d8610953565b6040516102e59190613071565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061265a565b61095d565b005b34801561032357600080fd5b5061032c6109bd565b005b34801561033a57600080fd5b5061035560048036038101906103509190612853565b610b0a565b005b34801561036357600080fd5b5061037e6004803603810190610379919061265a565b610ba0565b005b34801561038c57600080fd5b50610395610bc0565b6040516103a29190612d29565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd919061289c565b610be6565b6040516103df9190612d29565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906125c0565b610c98565b60405161041c9190613071565b60405180910390f35b34801561043157600080fd5b5061043a610d50565b005b34801561044857600080fd5b50610463600480360381019061045e91906125c0565b610dd8565b005b34801561047157600080fd5b5061047a610efb565b6040516104879190612d29565b60405180910390f35b34801561049c57600080fd5b506104a5610f25565b6040516104b29190612def565b60405180910390f35b6104d560048036038101906104d0919061289c565b610fb7565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190612730565b610ffc565b005b34801561050c57600080fd5b50610515611012565b6040516105229190612d44565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906126ad565b611038565b005b61056e600480360381019061056991906127b0565b61109a565b005b34801561057c57600080fd5b506105976004803603810190610592919061289c565b611261565b6040516105a49190612def565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061261a565b611298565b6040516105e19190612dd4565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906125c0565b61132c565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612853565b611424565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107175750610716826114ba565b5b9050919050565b60606000805461072d9061337f565b80601f01602080910402602001604051908101604052809291908181526020018280546107599061337f565b80156107a65780601f1061077b576101008083540402835291602001916107a6565b820191906000526020600020905b81548152906001019060200180831161078957829003601f168201915b5050505050905090565b60006107bb82611524565b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612ff1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061084082610be6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890613031565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108d0611590565b73ffffffffffffffffffffffffffffffffffffffff1614806108ff57506108fe816108f9611590565b611298565b5b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612f71565b60405180910390fd5b6109488383611598565b505050565b600d5481565b6000600a54905090565b61096e610968611590565b82611651565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490613051565b60405180910390fd5b6109b883838361172f565b505050565b6109c5611590565b73ffffffffffffffffffffffffffffffffffffffff166109e3610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613011565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a8190612d14565b60006040518083038185875af1925050503d8060008114610abe576040519150601f19603f3d011682016040523d82523d6000602084013e610ac3565b606091505b5050905080610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612ef1565b60405180910390fd5b50565b610b12611590565b73ffffffffffffffffffffffffffffffffffffffff16610b30610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613011565b60405180910390fd5b80600c9080519060200190610b9c929190612321565b5050565b610bbb83838360405180602001604052806000815250611038565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690612fb1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612f91565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d58611590565b73ffffffffffffffffffffffffffffffffffffffff16610d76610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613011565b60405180910390fd5b610dd66000611996565b565b610de0611590565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613011565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f349061337f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f609061337f565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b5050505050905090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051610fe8929190612dab565b60405180910390a1610ff981611a5c565b50565b61100e611007611590565b8383611be0565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611049611043611590565b83611651565b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613051565b60405180910390fd5b61109484848484611d4d565b50505050565b8051600d546110a99190613229565b3410156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612e11565b60405180910390fd5b60005b815181101561125d573373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e84848151811061115f5761115e6134e9565b5b60200260200101516040518263ffffffff1660e01b81526004016111839190613071565b60206040518083038186803b15801561119b57600080fd5b505afa1580156111af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d391906125ed565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612e31565b60405180910390fd5b61124c82828151811061123f5761123e6134e9565b5b6020026020010151611a5c565b80611256906133e2565b90506110ee565b5050565b6060600b61126e83611da9565b600c60405160200161128293929190612ce3565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611334611590565b73ffffffffffffffffffffffffffffffffffffffff16611352610efb565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90612e71565b60405180910390fd5b61142181611996565b50565b61142c611590565b73ffffffffffffffffffffffffffffffffffffffff1661144a610efb565b73ffffffffffffffffffffffffffffffffffffffff16146114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613011565b60405180910390fd5b80600b90805190602001906114b6929190612321565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160b83610be6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061165c82611524565b61169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290612f51565b60405180910390fd5b60006116a683610be6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171557508373ffffffffffffffffffffffffffffffffffffffff166116fd846107b0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061172657506117258185611298565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661174f82610be6565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90612e91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612f11565b60405180910390fd5b611820838383611f0a565b61182b600082611598565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187b9190613283565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d291906131a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611991838383611f0f565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d54341015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890612ed1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611b139190613071565b60206040518083038186803b158015611b2b57600080fd5b505afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906125ed565b73ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090612e31565b60405180910390fd5b611bc33382611f14565b6001600a6000828254611bd691906131a2565b9250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690612f31565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d409190612dd4565b60405180910390a3505050565b611d5884848461172f565b611d6484848484611f32565b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90612e51565b60405180910390fd5b50505050565b60606000821415611df1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f05565b600082905060005b60008214611e23578080611e0c906133e2565b915050600a82611e1c91906131f8565b9150611df9565b60008167ffffffffffffffff811115611e3f57611e3e613518565b5b6040519080825280601f01601f191660200182016040528015611e715781602001600182028036833780820191505090505b5090505b60008514611efe57600182611e8a9190613283565b9150600a85611e99919061342b565b6030611ea591906131a2565b60f81b818381518110611ebb57611eba6134e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ef791906131f8565b9450611e75565b8093505050505b919050565b505050565b505050565b611f2e8282604051806020016040528060008152506120c9565b5050565b6000611f538473ffffffffffffffffffffffffffffffffffffffff16612124565b156120bc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f7c611590565b8786866040518563ffffffff1660e01b8152600401611f9e9493929190612d5f565b602060405180830381600087803b158015611fb857600080fd5b505af1925050508015611fe957506040513d601f19601f82011682018060405250810190611fe69190612826565b60015b61206c573d8060008114612019576040519150601f19603f3d011682016040523d82523d6000602084013e61201e565b606091505b50600081511415612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90612e51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120c1565b600190505b949350505050565b6120d38383612147565b6120e06000848484611f32565b61211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690612e51565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90612fd1565b60405180910390fd5b6121c081611524565b15612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790612eb1565b60405180910390fd5b61220c60008383611f0a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225c91906131a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461231d60008383611f0f565b5050565b82805461232d9061337f565b90600052602060002090601f01602090048101928261234f5760008555612396565b82601f1061236857805160ff1916838001178555612396565b82800160010185558215612396579182015b8281111561239557825182559160200191906001019061237a565b5b5090506123a391906123a7565b5090565b5b808211156123c05760008160009055506001016123a8565b5090565b60006123d76123d2846130b1565b61308c565b905080838252602082019050828560208602820111156123fa576123f961354c565b5b60005b8581101561242a578161241088826125ab565b8452602084019350602083019250506001810190506123fd565b5050509392505050565b6000612447612442846130dd565b61308c565b90508281526020810184848401111561246357612462613551565b5b61246e84828561333d565b509392505050565b60006124896124848461310e565b61308c565b9050828152602081018484840111156124a5576124a4613551565b5b6124b084828561333d565b509392505050565b6000813590506124c781613a21565b92915050565b6000815190506124dc81613a21565b92915050565b600082601f8301126124f7576124f6613547565b5b81356125078482602086016123c4565b91505092915050565b60008135905061251f81613a38565b92915050565b60008135905061253481613a4f565b92915050565b60008151905061254981613a4f565b92915050565b600082601f83011261256457612563613547565b5b8135612574848260208601612434565b91505092915050565b600082601f83011261259257612591613547565b5b81356125a2848260208601612476565b91505092915050565b6000813590506125ba81613a66565b92915050565b6000602082840312156125d6576125d561355b565b5b60006125e4848285016124b8565b91505092915050565b6000602082840312156126035761260261355b565b5b6000612611848285016124cd565b91505092915050565b600080604083850312156126315761263061355b565b5b600061263f858286016124b8565b9250506020612650858286016124b8565b9150509250929050565b6000806000606084860312156126735761267261355b565b5b6000612681868287016124b8565b9350506020612692868287016124b8565b92505060406126a3868287016125ab565b9150509250925092565b600080600080608085870312156126c7576126c661355b565b5b60006126d5878288016124b8565b94505060206126e6878288016124b8565b93505060406126f7878288016125ab565b925050606085013567ffffffffffffffff81111561271857612717613556565b5b6127248782880161254f565b91505092959194509250565b600080604083850312156127475761274661355b565b5b6000612755858286016124b8565b925050602061276685828601612510565b9150509250929050565b600080604083850312156127875761278661355b565b5b6000612795858286016124b8565b92505060206127a6858286016125ab565b9150509250929050565b6000602082840312156127c6576127c561355b565b5b600082013567ffffffffffffffff8111156127e4576127e3613556565b5b6127f0848285016124e2565b91505092915050565b60006020828403121561280f5761280e61355b565b5b600061281d84828501612525565b91505092915050565b60006020828403121561283c5761283b61355b565b5b600061284a8482850161253a565b91505092915050565b6000602082840312156128695761286861355b565b5b600082013567ffffffffffffffff81111561288757612886613556565b5b6128938482850161257d565b91505092915050565b6000602082840312156128b2576128b161355b565b5b60006128c0848285016125ab565b91505092915050565b6128d2816132c9565b82525050565b6128e1816132b7565b82525050565b6128f0816132db565b82525050565b600061290182613154565b61290b818561316a565b935061291b81856020860161334c565b61292481613560565b840191505092915050565b600061293a8261315f565b6129448185613186565b935061295481856020860161334c565b61295d81613560565b840191505092915050565b60006129738261315f565b61297d8185613197565b935061298d81856020860161334c565b80840191505092915050565b600081546129a68161337f565b6129b08186613197565b945060018216600081146129cb57600181146129dc57612a0f565b60ff19831686528186019350612a0f565b6129e58561313f565b60005b83811015612a07578154818901526001820191506020810190506129e8565b838801955050505b50505092915050565b6000612a25601e83613186565b9150612a3082613571565b602082019050919050565b6000612a48601883613186565b9150612a538261359a565b602082019050919050565b6000612a6b603283613186565b9150612a76826135c3565b604082019050919050565b6000612a8e602683613186565b9150612a9982613612565b604082019050919050565b6000612ab1602583613186565b9150612abc82613661565b604082019050919050565b6000612ad4601c83613186565b9150612adf826136b0565b602082019050919050565b6000612af7601383613186565b9150612b02826136d9565b602082019050919050565b6000612b1a601483613186565b9150612b2582613702565b602082019050919050565b6000612b3d602483613186565b9150612b488261372b565b604082019050919050565b6000612b60601983613186565b9150612b6b8261377a565b602082019050919050565b6000612b83602c83613186565b9150612b8e826137a3565b604082019050919050565b6000612ba6603883613186565b9150612bb1826137f2565b604082019050919050565b6000612bc9602a83613186565b9150612bd482613841565b604082019050919050565b6000612bec602983613186565b9150612bf782613890565b604082019050919050565b6000612c0f602083613186565b9150612c1a826138df565b602082019050919050565b6000612c32602c83613186565b9150612c3d82613908565b604082019050919050565b6000612c55602083613186565b9150612c6082613957565b602082019050919050565b6000612c78602183613186565b9150612c8382613980565b604082019050919050565b6000612c9b60008361317b565b9150612ca6826139cf565b600082019050919050565b6000612cbe603183613186565b9150612cc9826139d2565b604082019050919050565b612cdd81613333565b82525050565b6000612cef8286612999565b9150612cfb8285612968565b9150612d078284612999565b9150819050949350505050565b6000612d1f82612c8e565b9150819050919050565b6000602082019050612d3e60008301846128d8565b92915050565b6000602082019050612d5960008301846128c9565b92915050565b6000608082019050612d7460008301876128d8565b612d8160208301866128d8565b612d8e6040830185612cd4565b8181036060830152612da081846128f6565b905095945050505050565b6000604082019050612dc060008301856128d8565b612dcd6020830184612cd4565b9392505050565b6000602082019050612de960008301846128e7565b92915050565b60006020820190508181036000830152612e09818461292f565b905092915050565b60006020820190508181036000830152612e2a81612a18565b9050919050565b60006020820190508181036000830152612e4a81612a3b565b9050919050565b60006020820190508181036000830152612e6a81612a5e565b9050919050565b60006020820190508181036000830152612e8a81612a81565b9050919050565b60006020820190508181036000830152612eaa81612aa4565b9050919050565b60006020820190508181036000830152612eca81612ac7565b9050919050565b60006020820190508181036000830152612eea81612aea565b9050919050565b60006020820190508181036000830152612f0a81612b0d565b9050919050565b60006020820190508181036000830152612f2a81612b30565b9050919050565b60006020820190508181036000830152612f4a81612b53565b9050919050565b60006020820190508181036000830152612f6a81612b76565b9050919050565b60006020820190508181036000830152612f8a81612b99565b9050919050565b60006020820190508181036000830152612faa81612bbc565b9050919050565b60006020820190508181036000830152612fca81612bdf565b9050919050565b60006020820190508181036000830152612fea81612c02565b9050919050565b6000602082019050818103600083015261300a81612c25565b9050919050565b6000602082019050818103600083015261302a81612c48565b9050919050565b6000602082019050818103600083015261304a81612c6b565b9050919050565b6000602082019050818103600083015261306a81612cb1565b9050919050565b60006020820190506130866000830184612cd4565b92915050565b60006130966130a7565b90506130a282826133b1565b919050565b6000604051905090565b600067ffffffffffffffff8211156130cc576130cb613518565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130f8576130f7613518565b5b61310182613560565b9050602081019050919050565b600067ffffffffffffffff82111561312957613128613518565b5b61313282613560565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131ad82613333565b91506131b883613333565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ed576131ec61345c565b5b828201905092915050565b600061320382613333565b915061320e83613333565b92508261321e5761321d61348b565b5b828204905092915050565b600061323482613333565b915061323f83613333565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132785761327761345c565b5b828202905092915050565b600061328e82613333565b915061329983613333565b9250828210156132ac576132ab61345c565b5b828203905092915050565b60006132c282613313565b9050919050565b60006132d482613313565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561336a57808201518184015260208101905061334f565b83811115613379576000848401525b50505050565b6000600282049050600182168061339757607f821691505b602082108114156133ab576133aa6134ba565b5b50919050565b6133ba82613560565b810181811067ffffffffffffffff821117156133d9576133d8613518565b5b80604052505050565b60006133ed82613333565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134205761341f61345c565b5b600182019050919050565b600061343682613333565b915061344183613333565b9250826134515761345061348b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507269636520697320302e3031363920457468207065722062616e6e65720000600082015250565b7f596f75206e65656420746f206f776e20746865206d6665720000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f507269636520697320302e303136392045746800000000000000000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a2a816132b7565b8114613a3557600080fd5b50565b613a41816132db565b8114613a4c57600080fd5b50565b613a58816132e7565b8114613a6357600080fd5b50565b613a6f81613333565b8114613a7a57600080fd5b5056fea2646970667358221220742b42ad2671b5cf48cb3485f1a50ee4acb90a206e24522b73833494d313969664736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d516f42706b4d7672707565676e55766d70366a47673178736368526e76794d416934596a4d4b727739666e342f00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f000000000000000000000000d026da6aa32cd12325a05939a2358b3318eff158

Deployed Bytecode

0x6080604052600436106101855760003560e01c8063715018a6116100d1578063a6d23e101161008a578063c87b56dd11610064578063c87b56dd14610570578063e985e9c5146105ad578063f2fde38b146105ea578063fb94bd8a14610613576101c5565b8063a6d23e1014610500578063b88d4fde1461052b578063c0fd9dfd14610554576101c5565b8063715018a61461042557806389d65e0c1461043c5780638da5cb5b1461046557806395d89b4114610490578063a0712d68146104bb578063a22cb465146104d7576101c5565b806323b872dd1161013e57806342842e0e1161011857806342842e0e146103575780634c3a6b77146103805780636352211e146103ab57806370a08231146103e8576101c5565b806323b872dd146102ee5780633ccfd60b146103175780633d1a62f71461032e576101c5565b806301ffc9a7146101ca57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806313faede61461029857806318160ddd146102c3576101c5565b366101c5577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101bb929190612dab565b60405180910390a1005b600080fd5b3480156101d657600080fd5b506101f160048036038101906101ec91906127f9565b61063c565b6040516101fe9190612dd4565b60405180910390f35b34801561021357600080fd5b5061021c61071e565b6040516102299190612def565b60405180910390f35b34801561023e57600080fd5b506102596004803603810190610254919061289c565b6107b0565b6040516102669190612d29565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612770565b610835565b005b3480156102a457600080fd5b506102ad61094d565b6040516102ba9190613071565b60405180910390f35b3480156102cf57600080fd5b506102d8610953565b6040516102e59190613071565b60405180910390f35b3480156102fa57600080fd5b506103156004803603810190610310919061265a565b61095d565b005b34801561032357600080fd5b5061032c6109bd565b005b34801561033a57600080fd5b5061035560048036038101906103509190612853565b610b0a565b005b34801561036357600080fd5b5061037e6004803603810190610379919061265a565b610ba0565b005b34801561038c57600080fd5b50610395610bc0565b6040516103a29190612d29565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd919061289c565b610be6565b6040516103df9190612d29565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906125c0565b610c98565b60405161041c9190613071565b60405180910390f35b34801561043157600080fd5b5061043a610d50565b005b34801561044857600080fd5b50610463600480360381019061045e91906125c0565b610dd8565b005b34801561047157600080fd5b5061047a610efb565b6040516104879190612d29565b60405180910390f35b34801561049c57600080fd5b506104a5610f25565b6040516104b29190612def565b60405180910390f35b6104d560048036038101906104d0919061289c565b610fb7565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190612730565b610ffc565b005b34801561050c57600080fd5b50610515611012565b6040516105229190612d44565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906126ad565b611038565b005b61056e600480360381019061056991906127b0565b61109a565b005b34801561057c57600080fd5b506105976004803603810190610592919061289c565b611261565b6040516105a49190612def565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061261a565b611298565b6040516105e19190612dd4565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c91906125c0565b61132c565b005b34801561061f57600080fd5b5061063a60048036038101906106359190612853565b611424565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107175750610716826114ba565b5b9050919050565b60606000805461072d9061337f565b80601f01602080910402602001604051908101604052809291908181526020018280546107599061337f565b80156107a65780601f1061077b576101008083540402835291602001916107a6565b820191906000526020600020905b81548152906001019060200180831161078957829003601f168201915b5050505050905090565b60006107bb82611524565b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612ff1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061084082610be6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890613031565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108d0611590565b73ffffffffffffffffffffffffffffffffffffffff1614806108ff57506108fe816108f9611590565b611298565b5b61093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590612f71565b60405180910390fd5b6109488383611598565b505050565b600d5481565b6000600a54905090565b61096e610968611590565b82611651565b6109ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a490613051565b60405180910390fd5b6109b883838361172f565b505050565b6109c5611590565b73ffffffffffffffffffffffffffffffffffffffff166109e3610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613011565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610a8190612d14565b60006040518083038185875af1925050503d8060008114610abe576040519150601f19603f3d011682016040523d82523d6000602084013e610ac3565b606091505b5050905080610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612ef1565b60405180910390fd5b50565b610b12611590565b73ffffffffffffffffffffffffffffffffffffffff16610b30610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613011565b60405180910390fd5b80600c9080519060200190610b9c929190612321565b5050565b610bbb83838360405180602001604052806000815250611038565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690612fb1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612f91565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d58611590565b73ffffffffffffffffffffffffffffffffffffffff16610d76610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613011565b60405180910390fd5b610dd66000611996565b565b610de0611590565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610efb565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613011565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f349061337f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f609061337f565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b5050505050905090565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051610fe8929190612dab565b60405180910390a1610ff981611a5c565b50565b61100e611007611590565b8383611be0565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611049611043611590565b83611651565b611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613051565b60405180910390fd5b61109484848484611d4d565b50505050565b8051600d546110a99190613229565b3410156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290612e11565b60405180910390fd5b60005b815181101561125d573373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e84848151811061115f5761115e6134e9565b5b60200260200101516040518263ffffffff1660e01b81526004016111839190613071565b60206040518083038186803b15801561119b57600080fd5b505afa1580156111af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d391906125ed565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612e31565b60405180910390fd5b61124c82828151811061123f5761123e6134e9565b5b6020026020010151611a5c565b80611256906133e2565b90506110ee565b5050565b6060600b61126e83611da9565b600c60405160200161128293929190612ce3565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611334611590565b73ffffffffffffffffffffffffffffffffffffffff16611352610efb565b73ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90613011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90612e71565b60405180910390fd5b61142181611996565b50565b61142c611590565b73ffffffffffffffffffffffffffffffffffffffff1661144a610efb565b73ffffffffffffffffffffffffffffffffffffffff16146114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613011565b60405180910390fd5b80600b90805190602001906114b6929190612321565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661160b83610be6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061165c82611524565b61169b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169290612f51565b60405180910390fd5b60006116a683610be6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061171557508373ffffffffffffffffffffffffffffffffffffffff166116fd846107b0565b73ffffffffffffffffffffffffffffffffffffffff16145b8061172657506117258185611298565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661174f82610be6565b73ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90612e91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612f11565b60405180910390fd5b611820838383611f0a565b61182b600082611598565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461187b9190613283565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d291906131a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611991838383611f0f565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d54341015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9890612ed1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611b139190613071565b60206040518083038186803b158015611b2b57600080fd5b505afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6391906125ed565b73ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090612e31565b60405180910390fd5b611bc33382611f14565b6001600a6000828254611bd691906131a2565b9250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690612f31565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d409190612dd4565b60405180910390a3505050565b611d5884848461172f565b611d6484848484611f32565b611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9a90612e51565b60405180910390fd5b50505050565b60606000821415611df1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f05565b600082905060005b60008214611e23578080611e0c906133e2565b915050600a82611e1c91906131f8565b9150611df9565b60008167ffffffffffffffff811115611e3f57611e3e613518565b5b6040519080825280601f01601f191660200182016040528015611e715781602001600182028036833780820191505090505b5090505b60008514611efe57600182611e8a9190613283565b9150600a85611e99919061342b565b6030611ea591906131a2565b60f81b818381518110611ebb57611eba6134e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ef791906131f8565b9450611e75565b8093505050505b919050565b505050565b505050565b611f2e8282604051806020016040528060008152506120c9565b5050565b6000611f538473ffffffffffffffffffffffffffffffffffffffff16612124565b156120bc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f7c611590565b8786866040518563ffffffff1660e01b8152600401611f9e9493929190612d5f565b602060405180830381600087803b158015611fb857600080fd5b505af1925050508015611fe957506040513d601f19601f82011682018060405250810190611fe69190612826565b60015b61206c573d8060008114612019576040519150601f19603f3d011682016040523d82523d6000602084013e61201e565b606091505b50600081511415612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90612e51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120c1565b600190505b949350505050565b6120d38383612147565b6120e06000848484611f32565b61211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690612e51565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90612fd1565b60405180910390fd5b6121c081611524565b15612200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f790612eb1565b60405180910390fd5b61220c60008383611f0a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461225c91906131a2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461231d60008383611f0f565b5050565b82805461232d9061337f565b90600052602060002090601f01602090048101928261234f5760008555612396565b82601f1061236857805160ff1916838001178555612396565b82800160010185558215612396579182015b8281111561239557825182559160200191906001019061237a565b5b5090506123a391906123a7565b5090565b5b808211156123c05760008160009055506001016123a8565b5090565b60006123d76123d2846130b1565b61308c565b905080838252602082019050828560208602820111156123fa576123f961354c565b5b60005b8581101561242a578161241088826125ab565b8452602084019350602083019250506001810190506123fd565b5050509392505050565b6000612447612442846130dd565b61308c565b90508281526020810184848401111561246357612462613551565b5b61246e84828561333d565b509392505050565b60006124896124848461310e565b61308c565b9050828152602081018484840111156124a5576124a4613551565b5b6124b084828561333d565b509392505050565b6000813590506124c781613a21565b92915050565b6000815190506124dc81613a21565b92915050565b600082601f8301126124f7576124f6613547565b5b81356125078482602086016123c4565b91505092915050565b60008135905061251f81613a38565b92915050565b60008135905061253481613a4f565b92915050565b60008151905061254981613a4f565b92915050565b600082601f83011261256457612563613547565b5b8135612574848260208601612434565b91505092915050565b600082601f83011261259257612591613547565b5b81356125a2848260208601612476565b91505092915050565b6000813590506125ba81613a66565b92915050565b6000602082840312156125d6576125d561355b565b5b60006125e4848285016124b8565b91505092915050565b6000602082840312156126035761260261355b565b5b6000612611848285016124cd565b91505092915050565b600080604083850312156126315761263061355b565b5b600061263f858286016124b8565b9250506020612650858286016124b8565b9150509250929050565b6000806000606084860312156126735761267261355b565b5b6000612681868287016124b8565b9350506020612692868287016124b8565b92505060406126a3868287016125ab565b9150509250925092565b600080600080608085870312156126c7576126c661355b565b5b60006126d5878288016124b8565b94505060206126e6878288016124b8565b93505060406126f7878288016125ab565b925050606085013567ffffffffffffffff81111561271857612717613556565b5b6127248782880161254f565b91505092959194509250565b600080604083850312156127475761274661355b565b5b6000612755858286016124b8565b925050602061276685828601612510565b9150509250929050565b600080604083850312156127875761278661355b565b5b6000612795858286016124b8565b92505060206127a6858286016125ab565b9150509250929050565b6000602082840312156127c6576127c561355b565b5b600082013567ffffffffffffffff8111156127e4576127e3613556565b5b6127f0848285016124e2565b91505092915050565b60006020828403121561280f5761280e61355b565b5b600061281d84828501612525565b91505092915050565b60006020828403121561283c5761283b61355b565b5b600061284a8482850161253a565b91505092915050565b6000602082840312156128695761286861355b565b5b600082013567ffffffffffffffff81111561288757612886613556565b5b6128938482850161257d565b91505092915050565b6000602082840312156128b2576128b161355b565b5b60006128c0848285016125ab565b91505092915050565b6128d2816132c9565b82525050565b6128e1816132b7565b82525050565b6128f0816132db565b82525050565b600061290182613154565b61290b818561316a565b935061291b81856020860161334c565b61292481613560565b840191505092915050565b600061293a8261315f565b6129448185613186565b935061295481856020860161334c565b61295d81613560565b840191505092915050565b60006129738261315f565b61297d8185613197565b935061298d81856020860161334c565b80840191505092915050565b600081546129a68161337f565b6129b08186613197565b945060018216600081146129cb57600181146129dc57612a0f565b60ff19831686528186019350612a0f565b6129e58561313f565b60005b83811015612a07578154818901526001820191506020810190506129e8565b838801955050505b50505092915050565b6000612a25601e83613186565b9150612a3082613571565b602082019050919050565b6000612a48601883613186565b9150612a538261359a565b602082019050919050565b6000612a6b603283613186565b9150612a76826135c3565b604082019050919050565b6000612a8e602683613186565b9150612a9982613612565b604082019050919050565b6000612ab1602583613186565b9150612abc82613661565b604082019050919050565b6000612ad4601c83613186565b9150612adf826136b0565b602082019050919050565b6000612af7601383613186565b9150612b02826136d9565b602082019050919050565b6000612b1a601483613186565b9150612b2582613702565b602082019050919050565b6000612b3d602483613186565b9150612b488261372b565b604082019050919050565b6000612b60601983613186565b9150612b6b8261377a565b602082019050919050565b6000612b83602c83613186565b9150612b8e826137a3565b604082019050919050565b6000612ba6603883613186565b9150612bb1826137f2565b604082019050919050565b6000612bc9602a83613186565b9150612bd482613841565b604082019050919050565b6000612bec602983613186565b9150612bf782613890565b604082019050919050565b6000612c0f602083613186565b9150612c1a826138df565b602082019050919050565b6000612c32602c83613186565b9150612c3d82613908565b604082019050919050565b6000612c55602083613186565b9150612c6082613957565b602082019050919050565b6000612c78602183613186565b9150612c8382613980565b604082019050919050565b6000612c9b60008361317b565b9150612ca6826139cf565b600082019050919050565b6000612cbe603183613186565b9150612cc9826139d2565b604082019050919050565b612cdd81613333565b82525050565b6000612cef8286612999565b9150612cfb8285612968565b9150612d078284612999565b9150819050949350505050565b6000612d1f82612c8e565b9150819050919050565b6000602082019050612d3e60008301846128d8565b92915050565b6000602082019050612d5960008301846128c9565b92915050565b6000608082019050612d7460008301876128d8565b612d8160208301866128d8565b612d8e6040830185612cd4565b8181036060830152612da081846128f6565b905095945050505050565b6000604082019050612dc060008301856128d8565b612dcd6020830184612cd4565b9392505050565b6000602082019050612de960008301846128e7565b92915050565b60006020820190508181036000830152612e09818461292f565b905092915050565b60006020820190508181036000830152612e2a81612a18565b9050919050565b60006020820190508181036000830152612e4a81612a3b565b9050919050565b60006020820190508181036000830152612e6a81612a5e565b9050919050565b60006020820190508181036000830152612e8a81612a81565b9050919050565b60006020820190508181036000830152612eaa81612aa4565b9050919050565b60006020820190508181036000830152612eca81612ac7565b9050919050565b60006020820190508181036000830152612eea81612aea565b9050919050565b60006020820190508181036000830152612f0a81612b0d565b9050919050565b60006020820190508181036000830152612f2a81612b30565b9050919050565b60006020820190508181036000830152612f4a81612b53565b9050919050565b60006020820190508181036000830152612f6a81612b76565b9050919050565b60006020820190508181036000830152612f8a81612b99565b9050919050565b60006020820190508181036000830152612faa81612bbc565b9050919050565b60006020820190508181036000830152612fca81612bdf565b9050919050565b60006020820190508181036000830152612fea81612c02565b9050919050565b6000602082019050818103600083015261300a81612c25565b9050919050565b6000602082019050818103600083015261302a81612c48565b9050919050565b6000602082019050818103600083015261304a81612c6b565b9050919050565b6000602082019050818103600083015261306a81612cb1565b9050919050565b60006020820190506130866000830184612cd4565b92915050565b60006130966130a7565b90506130a282826133b1565b919050565b6000604051905090565b600067ffffffffffffffff8211156130cc576130cb613518565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130f8576130f7613518565b5b61310182613560565b9050602081019050919050565b600067ffffffffffffffff82111561312957613128613518565b5b61313282613560565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131ad82613333565b91506131b883613333565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ed576131ec61345c565b5b828201905092915050565b600061320382613333565b915061320e83613333565b92508261321e5761321d61348b565b5b828204905092915050565b600061323482613333565b915061323f83613333565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156132785761327761345c565b5b828202905092915050565b600061328e82613333565b915061329983613333565b9250828210156132ac576132ab61345c565b5b828203905092915050565b60006132c282613313565b9050919050565b60006132d482613313565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561336a57808201518184015260208101905061334f565b83811115613379576000848401525b50505050565b6000600282049050600182168061339757607f821691505b602082108114156133ab576133aa6134ba565b5b50919050565b6133ba82613560565b810181811067ffffffffffffffff821117156133d9576133d8613518565b5b80604052505050565b60006133ed82613333565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134205761341f61345c565b5b600182019050919050565b600061343682613333565b915061344183613333565b9250826134515761345061348b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f507269636520697320302e3031363920457468207065722062616e6e65720000600082015250565b7f596f75206e65656420746f206f776e20746865206d6665720000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f507269636520697320302e303136392045746800000000000000000000000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a2a816132b7565b8114613a3557600080fd5b50565b613a41816132db565b8114613a4c57600080fd5b50565b613a58816132e7565b8114613a6357600080fd5b50565b613a6f81613333565b8114613a7a57600080fd5b5056fea2646970667358221220742b42ad2671b5cf48cb3485f1a50ee4acb90a206e24522b73833494d313969664736f6c63430008070033

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

00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f000000000000000000000000d026da6aa32cd12325a05939a2358b3318eff158

-----Decoded View---------------
Arg [0] : mfersAddress (address): 0x79FCDEF22feeD20eDDacbB2587640e45491b757f
Arg [1] : _payments (address): 0xD026da6AA32Cd12325a05939a2358b3318eff158

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000079fcdef22feed20eddacbb2587640e45491b757f
Arg [1] : 000000000000000000000000d026da6aa32cd12325a05939a2358b3318eff158


Deployed Bytecode Sourcemap

37363:2575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38151:31;38160:10;38172:9;38151:31;;;;;;;:::i;:::-;;;;;;;;37363:2575;;;;;21658:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22603:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24162:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23685:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37638:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39623:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24912:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38637:175;;;;;;;;;;;;;:::i;:::-;;38507:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25322:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37412:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22297:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36489:103;;;;;;;;;;;;;:::i;:::-;;38229:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35838:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22772:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39126:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24455:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37447:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25578:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39258:357;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39732:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24681:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36747:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38394:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21658:305;21760:4;21812:25;21797:40;;;:11;:40;;;;:105;;;;21869:33;21854:48;;;:11;:48;;;;21797:105;:158;;;;21919:36;21943:11;21919:23;:36::i;:::-;21797:158;21777:178;;21658:305;;;:::o;22603:100::-;22657:13;22690:5;22683:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22603:100;:::o;24162:221::-;24238:7;24266:16;24274:7;24266;:16::i;:::-;24258:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24351:15;:24;24367:7;24351:24;;;;;;;;;;;;;;;;;;;;;24344:31;;24162:221;;;:::o;23685:411::-;23766:13;23782:23;23797:7;23782:14;:23::i;:::-;23766:39;;23830:5;23824:11;;:2;:11;;;;23816:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23924:5;23908:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23933:37;23950:5;23957:12;:10;:12::i;:::-;23933:16;:37::i;:::-;23908:62;23886:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24067:21;24076:2;24080:7;24067:8;:21::i;:::-;23755:341;23685:411;;:::o;37638:31::-;;;;:::o;39623:101::-;39666:11;39704:12;;39695:21;;39623:101;:::o;24912:339::-;25107:41;25126:12;:10;:12::i;:::-;25140:7;25107:18;:41::i;:::-;25099:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25215:28;25225:4;25231:2;25235:7;25215:9;:28::i;:::-;24912:339;;;:::o;38637:175::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38686:9:::1;38708:8;;;;;;;;;;;38700:22;;38730:21;38700:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38685:71;;;38775:4;38767:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;38674:138;38637:175::o:0;38507:122::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38612:9:::1;38591:18;:30;;;;;;;;;;;;:::i;:::-;;38507:122:::0;:::o;25322:185::-;25460:39;25477:4;25483:2;25487:7;25460:39;;;;;;;;;;;;:16;:39::i;:::-;25322:185;;;:::o;37412:28::-;;;;;;;;;;;;;:::o;22297:239::-;22369:7;22389:13;22405:7;:16;22413:7;22405:16;;;;;;;;;;;;;;;;;;;;;22389:32;;22457:1;22440:19;;:5;:19;;;;22432:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22523:5;22516:12;;;22297:239;;;:::o;22027:208::-;22099:7;22144:1;22127:19;;:5;:19;;;;22119:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22211:9;:16;22221:5;22211:16;;;;;;;;;;;;;;;;22204:23;;22027:208;;;:::o;36489:103::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:30:::1;36581:1;36554:18;:30::i;:::-;36489:103::o:0;38229:157::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38318:10:::1;38302:13;;:26;;;;;;;;;;;;;;;;;;38364:13;;;;;;;;;;;38339:14;;:39;;;;;;;;;;;;;;;;;;38229:157:::0;:::o;35838:87::-;35884:7;35911:6;;;;;;;;;;;35904:13;;35838:87;:::o;22772:104::-;22828:13;22861:7;22854:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22772:104;:::o;39126:124::-;39186:31;39195:10;39207:9;39186:31;;;;;;;:::i;:::-;;;;;;;;39230:12;39236:5;39230;:12::i;:::-;39126:124;:::o;24455:155::-;24550:52;24569:12;:10;:12::i;:::-;24583:8;24593;24550:18;:52::i;:::-;24455:155;;:::o;37447:31::-;;;;;;;;;;;;;:::o;25578:328::-;25753:41;25772:12;:10;:12::i;:::-;25786:7;25753:18;:41::i;:::-;25745:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25859:39;25873:4;25879:2;25883:7;25892:5;25859:13;:39::i;:::-;25578:328;;;;:::o;39258:357::-;39356:6;:13;39349:4;;:20;;;;:::i;:::-;39335:9;:35;;39327:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39421:6;39416:192;39437:6;:13;39433:1;:17;39416:192;;;39526:10;39489:47;;:14;;;;;;;;;;;:22;;;39512:6;39519:1;39512:9;;;;;;;;:::i;:::-;;;;;;;;39489:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;39481:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39580:16;39586:6;39593:1;39586:9;;;;;;;;:::i;:::-;;;;;;;;39580:5;:16::i;:::-;39452:3;;;;:::i;:::-;;;39416:192;;;;39258:357;:::o;39732:203::-;39802:13;39864:16;39882:23;39899:5;39882:16;:23::i;:::-;39907:18;39847:79;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39833:94;;39732:203;;;:::o;24681:164::-;24778:4;24802:18;:25;24821:5;24802:25;;;;;;;;;;;;;;;:35;24828:8;24802:35;;;;;;;;;;;;;;;;;;;;;;;;;24795:42;;24681:164;;;;:::o;36747:201::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:1:::1;36836:22;;:8;:22;;;;36828:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36912:28;36931:8;36912:18;:28::i;:::-;36747:201:::0;:::o;38394:105::-;36069:12;:10;:12::i;:::-;36058:23;;:7;:5;:7::i;:::-;:23;;;36050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38488:3:::1;38469:16;:22;;;;;;;;;;;;:::i;:::-;;38394:105:::0;:::o;20083:157::-;20168:4;20207:25;20192:40;;;:11;:40;;;;20185:47;;20083:157;;;:::o;27416:127::-;27481:4;27533:1;27505:30;;:7;:16;27513:7;27505:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27498:37;;27416:127;;;:::o;16870:98::-;16923:7;16950:10;16943:17;;16870:98;:::o;31562:174::-;31664:2;31637:15;:24;31653:7;31637:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31720:7;31716:2;31682:46;;31691:23;31706:7;31691:14;:23::i;:::-;31682:46;;;;;;;;;;;;31562:174;;:::o;27710:348::-;27803:4;27828:16;27836:7;27828;:16::i;:::-;27820:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27904:13;27920:23;27935:7;27920:14;:23::i;:::-;27904:39;;27973:5;27962:16;;:7;:16;;;:51;;;;28006:7;27982:31;;:20;27994:7;27982:11;:20::i;:::-;:31;;;27962:51;:87;;;;28017:32;28034:5;28041:7;28017:16;:32::i;:::-;27962:87;27954:96;;;27710:348;;;;:::o;30819:625::-;30978:4;30951:31;;:23;30966:7;30951:14;:23::i;:::-;:31;;;30943:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31057:1;31043:16;;:2;:16;;;;31035:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31113:39;31134:4;31140:2;31144:7;31113:20;:39::i;:::-;31217:29;31234:1;31238:7;31217:8;:29::i;:::-;31278:1;31259:9;:15;31269:4;31259:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31307:1;31290:9;:13;31300:2;31290:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31338:2;31319:7;:16;31327:7;31319:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31377:7;31373:2;31358:27;;31367:4;31358:27;;;;;;;;;;;;31398:38;31418:4;31424:2;31428:7;31398:19;:38::i;:::-;30819:625;;;:::o;37108:191::-;37182:16;37201:6;;;;;;;;;;;37182:25;;37227:8;37218:6;;:17;;;;;;;;;;;;;;;;;;37282:8;37251:40;;37272:8;37251:40;;;;;;;;;;;;37171:128;37108:191;:::o;38850:268::-;38920:4;;38907:9;:17;;38899:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;39000:10;38967:43;;:14;;;;;;;;;;;:22;;;38990:5;38967:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;38959:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39052:28;39062:10;39074:5;39052:9;:28::i;:::-;39109:1;39093:12;;:17;;;;;;;:::i;:::-;;;;;;;;38850:268;:::o;31878:315::-;32033:8;32024:17;;:5;:17;;;;32016:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32120:8;32082:18;:25;32101:5;32082:25;;;;;;;;;;;;;;;:35;32108:8;32082:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32166:8;32144:41;;32159:5;32144:41;;;32176:8;32144:41;;;;;;:::i;:::-;;;;;;;;31878:315;;;:::o;26788:::-;26945:28;26955:4;26961:2;26965:7;26945:9;:28::i;:::-;26992:48;27015:4;27021:2;27025:7;27034:5;26992:22;:48::i;:::-;26984:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26788:315;;;;:::o;17455:723::-;17511:13;17741:1;17732:5;:10;17728:53;;;17759:10;;;;;;;;;;;;;;;;;;;;;17728:53;17791:12;17806:5;17791:20;;17822:14;17847:78;17862:1;17854:4;:9;17847:78;;17880:8;;;;;:::i;:::-;;;;17911:2;17903:10;;;;;:::i;:::-;;;17847:78;;;17935:19;17967:6;17957:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17935:39;;17985:154;18001:1;17992:5;:10;17985:154;;18029:1;18019:11;;;;;:::i;:::-;;;18096:2;18088:5;:10;;;;:::i;:::-;18075:2;:24;;;;:::i;:::-;18062:39;;18045:6;18052;18045:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18125:2;18116:11;;;;;:::i;:::-;;;17985:154;;;18163:6;18149:21;;;;;17455:723;;;;:::o;34129:126::-;;;;:::o;34640:125::-;;;;:::o;28400:110::-;28476:26;28486:2;28490:7;28476:26;;;;;;;;;;;;:9;:26::i;:::-;28400:110;;:::o;32758:799::-;32913:4;32934:15;:2;:13;;;:15::i;:::-;32930:620;;;32986:2;32970:36;;;33007:12;:10;:12::i;:::-;33021:4;33027:7;33036:5;32970:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32966:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33229:1;33212:6;:13;:18;33208:272;;;33255:60;;;;;;;;;;:::i;:::-;;;;;;;;33208:272;33430:6;33424:13;33415:6;33411:2;33407:15;33400:38;32966:529;33103:41;;;33093:51;;;:6;:51;;;;33086:58;;;;;32930:620;33534:4;33527:11;;32758:799;;;;;;;:::o;28737:321::-;28867:18;28873:2;28877:7;28867:5;:18::i;:::-;28918:54;28949:1;28953:2;28957:7;28966:5;28918:22;:54::i;:::-;28896:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28737:321;;;:::o;8915:326::-;8975:4;9232:1;9210:7;:19;;;:23;9203:30;;8915:326;;;:::o;29394:439::-;29488:1;29474:16;;:2;:16;;;;29466:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29547:16;29555:7;29547;:16::i;:::-;29546:17;29538:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29609:45;29638:1;29642:2;29646:7;29609:20;:45::i;:::-;29684:1;29667:9;:13;29677:2;29667:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29715:2;29696:7;:16;29704:7;29696:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29760:7;29756:2;29735:33;;29752:1;29735:33;;;;;;;;;;;;29781:44;29809:1;29813:2;29817:7;29781:19;:44::i;:::-;29394:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:370::-;1968:5;2017:3;2010:4;2002:6;1998:17;1994:27;1984:122;;2025:79;;:::i;:::-;1984:122;2142:6;2129:20;2167:94;2257:3;2249:6;2242:4;2234:6;2230:17;2167:94;:::i;:::-;2158:103;;1974:293;1897:370;;;;:::o;2273:133::-;2316:5;2354:6;2341:20;2332:29;;2370:30;2394:5;2370:30;:::i;:::-;2273:133;;;;:::o;2412:137::-;2457:5;2495:6;2482:20;2473:29;;2511:32;2537:5;2511:32;:::i;:::-;2412:137;;;;:::o;2555:141::-;2611:5;2642:6;2636:13;2627:22;;2658:32;2684:5;2658:32;:::i;:::-;2555:141;;;;:::o;2715:338::-;2770:5;2819:3;2812:4;2804:6;2800:17;2796:27;2786:122;;2827:79;;:::i;:::-;2786:122;2944:6;2931:20;2969:78;3043:3;3035:6;3028:4;3020:6;3016:17;2969:78;:::i;:::-;2960:87;;2776:277;2715:338;;;;:::o;3073:340::-;3129:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:122;;3186:79;;:::i;:::-;3145:122;3303:6;3290:20;3328:79;3403:3;3395:6;3388:4;3380:6;3376:17;3328:79;:::i;:::-;3319:88;;3135:278;3073:340;;;;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:351::-;3969:6;4018:2;4006:9;3997:7;3993:23;3989:32;3986:119;;;4024:79;;:::i;:::-;3986:119;4144:1;4169:64;4225:7;4216:6;4205:9;4201:22;4169:64;:::i;:::-;4159:74;;4115:128;3899:351;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:619::-;4813:6;4821;4829;4878:2;4866:9;4857:7;4853:23;4849:32;4846:119;;;4884:79;;:::i;:::-;4846:119;5004:1;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4975:117;5131:2;5157:53;5202:7;5193:6;5182:9;5178:22;5157:53;:::i;:::-;5147:63;;5102:118;5259:2;5285:53;5330:7;5321:6;5310:9;5306:22;5285:53;:::i;:::-;5275:63;;5230:118;4736:619;;;;;:::o;5361:943::-;5456:6;5464;5472;5480;5529:3;5517:9;5508:7;5504:23;5500:33;5497:120;;;5536:79;;:::i;:::-;5497:120;5656:1;5681:53;5726:7;5717:6;5706:9;5702:22;5681:53;:::i;:::-;5671:63;;5627:117;5783:2;5809:53;5854:7;5845:6;5834:9;5830:22;5809:53;:::i;:::-;5799:63;;5754:118;5911:2;5937:53;5982:7;5973:6;5962:9;5958:22;5937:53;:::i;:::-;5927:63;;5882:118;6067:2;6056:9;6052:18;6039:32;6098:18;6090:6;6087:30;6084:117;;;6120:79;;:::i;:::-;6084:117;6225:62;6279:7;6270:6;6259:9;6255:22;6225:62;:::i;:::-;6215:72;;6010:287;5361:943;;;;;;;:::o;6310:468::-;6375:6;6383;6432:2;6420:9;6411:7;6407:23;6403:32;6400:119;;;6438:79;;:::i;:::-;6400:119;6558:1;6583:53;6628:7;6619:6;6608:9;6604:22;6583:53;:::i;:::-;6573:63;;6529:117;6685:2;6711:50;6753:7;6744:6;6733:9;6729:22;6711:50;:::i;:::-;6701:60;;6656:115;6310:468;;;;;:::o;6784:474::-;6852:6;6860;6909:2;6897:9;6888:7;6884:23;6880:32;6877:119;;;6915:79;;:::i;:::-;6877:119;7035:1;7060:53;7105:7;7096:6;7085:9;7081:22;7060:53;:::i;:::-;7050:63;;7006:117;7162:2;7188:53;7233:7;7224:6;7213:9;7209:22;7188:53;:::i;:::-;7178:63;;7133:118;6784:474;;;;;:::o;7264:539::-;7348:6;7397:2;7385:9;7376:7;7372:23;7368:32;7365:119;;;7403:79;;:::i;:::-;7365:119;7551:1;7540:9;7536:17;7523:31;7581:18;7573:6;7570:30;7567:117;;;7603:79;;:::i;:::-;7567:117;7708:78;7778:7;7769:6;7758:9;7754:22;7708:78;:::i;:::-;7698:88;;7494:302;7264:539;;;;:::o;7809:327::-;7867:6;7916:2;7904:9;7895:7;7891:23;7887:32;7884:119;;;7922:79;;:::i;:::-;7884:119;8042:1;8067:52;8111:7;8102:6;8091:9;8087:22;8067:52;:::i;:::-;8057:62;;8013:116;7809:327;;;;:::o;8142:349::-;8211:6;8260:2;8248:9;8239:7;8235:23;8231:32;8228:119;;;8266:79;;:::i;:::-;8228:119;8386:1;8411:63;8466:7;8457:6;8446:9;8442:22;8411:63;:::i;:::-;8401:73;;8357:127;8142:349;;;;:::o;8497:509::-;8566:6;8615:2;8603:9;8594:7;8590:23;8586:32;8583:119;;;8621:79;;:::i;:::-;8583:119;8769:1;8758:9;8754:17;8741:31;8799:18;8791:6;8788:30;8785:117;;;8821:79;;:::i;:::-;8785:117;8926:63;8981:7;8972:6;8961:9;8957:22;8926:63;:::i;:::-;8916:73;;8712:287;8497:509;;;;:::o;9012:329::-;9071:6;9120:2;9108:9;9099:7;9095:23;9091:32;9088:119;;;9126:79;;:::i;:::-;9088:119;9246:1;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9217:117;9012:329;;;;:::o;9347:142::-;9450:32;9476:5;9450:32;:::i;:::-;9445:3;9438:45;9347:142;;:::o;9495:118::-;9582:24;9600:5;9582:24;:::i;:::-;9577:3;9570:37;9495:118;;:::o;9619:109::-;9700:21;9715:5;9700:21;:::i;:::-;9695:3;9688:34;9619:109;;:::o;9734:360::-;9820:3;9848:38;9880:5;9848:38;:::i;:::-;9902:70;9965:6;9960:3;9902:70;:::i;:::-;9895:77;;9981:52;10026:6;10021:3;10014:4;10007:5;10003:16;9981:52;:::i;:::-;10058:29;10080:6;10058:29;:::i;:::-;10053:3;10049:39;10042:46;;9824:270;9734:360;;;;:::o;10100:364::-;10188:3;10216:39;10249:5;10216:39;:::i;:::-;10271:71;10335:6;10330:3;10271:71;:::i;:::-;10264:78;;10351:52;10396:6;10391:3;10384:4;10377:5;10373:16;10351:52;:::i;:::-;10428:29;10450:6;10428:29;:::i;:::-;10423:3;10419:39;10412:46;;10192:272;10100:364;;;;:::o;10470:377::-;10576:3;10604:39;10637:5;10604:39;:::i;:::-;10659:89;10741:6;10736:3;10659:89;:::i;:::-;10652:96;;10757:52;10802:6;10797:3;10790:4;10783:5;10779:16;10757:52;:::i;:::-;10834:6;10829:3;10825:16;10818:23;;10580:267;10470:377;;;;:::o;10877:845::-;10980:3;11017:5;11011:12;11046:36;11072:9;11046:36;:::i;:::-;11098:89;11180:6;11175:3;11098:89;:::i;:::-;11091:96;;11218:1;11207:9;11203:17;11234:1;11229:137;;;;11380:1;11375:341;;;;11196:520;;11229:137;11313:4;11309:9;11298;11294:25;11289:3;11282:38;11349:6;11344:3;11340:16;11333:23;;11229:137;;11375:341;11442:38;11474:5;11442:38;:::i;:::-;11502:1;11516:154;11530:6;11527:1;11524:13;11516:154;;;11604:7;11598:14;11594:1;11589:3;11585:11;11578:35;11654:1;11645:7;11641:15;11630:26;;11552:4;11549:1;11545:12;11540:17;;11516:154;;;11699:6;11694:3;11690:16;11683:23;;11382:334;;11196:520;;10984:738;;10877:845;;;;:::o;11728:366::-;11870:3;11891:67;11955:2;11950:3;11891:67;:::i;:::-;11884:74;;11967:93;12056:3;11967:93;:::i;:::-;12085:2;12080:3;12076:12;12069:19;;11728:366;;;:::o;12100:::-;12242:3;12263:67;12327:2;12322:3;12263:67;:::i;:::-;12256:74;;12339:93;12428:3;12339:93;:::i;:::-;12457:2;12452:3;12448:12;12441:19;;12100:366;;;:::o;12472:::-;12614:3;12635:67;12699:2;12694:3;12635:67;:::i;:::-;12628:74;;12711:93;12800:3;12711:93;:::i;:::-;12829:2;12824:3;12820:12;12813:19;;12472:366;;;:::o;12844:::-;12986:3;13007:67;13071:2;13066:3;13007:67;:::i;:::-;13000:74;;13083:93;13172:3;13083:93;:::i;:::-;13201:2;13196:3;13192:12;13185:19;;12844:366;;;:::o;13216:::-;13358:3;13379:67;13443:2;13438:3;13379:67;:::i;:::-;13372:74;;13455:93;13544:3;13455:93;:::i;:::-;13573:2;13568:3;13564:12;13557:19;;13216:366;;;:::o;13588:::-;13730:3;13751:67;13815:2;13810:3;13751:67;:::i;:::-;13744:74;;13827:93;13916:3;13827:93;:::i;:::-;13945:2;13940:3;13936:12;13929:19;;13588:366;;;:::o;13960:::-;14102:3;14123:67;14187:2;14182:3;14123:67;:::i;:::-;14116:74;;14199:93;14288:3;14199:93;:::i;:::-;14317:2;14312:3;14308:12;14301:19;;13960:366;;;:::o;14332:::-;14474:3;14495:67;14559:2;14554:3;14495:67;:::i;:::-;14488:74;;14571:93;14660:3;14571:93;:::i;:::-;14689:2;14684:3;14680:12;14673:19;;14332:366;;;:::o;14704:::-;14846:3;14867:67;14931:2;14926:3;14867:67;:::i;:::-;14860:74;;14943:93;15032:3;14943:93;:::i;:::-;15061:2;15056:3;15052:12;15045:19;;14704:366;;;:::o;15076:::-;15218:3;15239:67;15303:2;15298:3;15239:67;:::i;:::-;15232:74;;15315:93;15404:3;15315:93;:::i;:::-;15433:2;15428:3;15424:12;15417:19;;15076:366;;;:::o;15448:::-;15590:3;15611:67;15675:2;15670:3;15611:67;:::i;:::-;15604:74;;15687:93;15776:3;15687:93;:::i;:::-;15805:2;15800:3;15796:12;15789:19;;15448:366;;;:::o;15820:::-;15962:3;15983:67;16047:2;16042:3;15983:67;:::i;:::-;15976:74;;16059:93;16148:3;16059:93;:::i;:::-;16177:2;16172:3;16168:12;16161:19;;15820:366;;;:::o;16192:::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:::-;16706:3;16727:67;16791:2;16786:3;16727:67;:::i;:::-;16720:74;;16803:93;16892:3;16803:93;:::i;:::-;16921:2;16916:3;16912:12;16905:19;;16564:366;;;:::o;16936:::-;17078:3;17099:67;17163:2;17158:3;17099:67;:::i;:::-;17092:74;;17175:93;17264:3;17175:93;:::i;:::-;17293:2;17288:3;17284:12;17277:19;;16936:366;;;:::o;17308:::-;17450:3;17471:67;17535:2;17530:3;17471:67;:::i;:::-;17464:74;;17547:93;17636:3;17547:93;:::i;:::-;17665:2;17660:3;17656:12;17649:19;;17308:366;;;:::o;17680:::-;17822:3;17843:67;17907:2;17902:3;17843:67;:::i;:::-;17836:74;;17919:93;18008:3;17919:93;:::i;:::-;18037:2;18032:3;18028:12;18021:19;;17680:366;;;:::o;18052:::-;18194:3;18215:67;18279:2;18274:3;18215:67;:::i;:::-;18208:74;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18052:366;;;:::o;18424:398::-;18583:3;18604:83;18685:1;18680:3;18604:83;:::i;:::-;18597:90;;18696:93;18785:3;18696:93;:::i;:::-;18814:1;18809:3;18805:11;18798:18;;18424:398;;;:::o;18828:366::-;18970:3;18991:67;19055:2;19050:3;18991:67;:::i;:::-;18984:74;;19067:93;19156:3;19067:93;:::i;:::-;19185:2;19180:3;19176:12;19169:19;;18828:366;;;:::o;19200:118::-;19287:24;19305:5;19287:24;:::i;:::-;19282:3;19275:37;19200:118;;:::o;19324:583::-;19546:3;19568:92;19656:3;19647:6;19568:92;:::i;:::-;19561:99;;19677:95;19768:3;19759:6;19677:95;:::i;:::-;19670:102;;19789:92;19877:3;19868:6;19789:92;:::i;:::-;19782:99;;19898:3;19891:10;;19324:583;;;;;;:::o;19913:379::-;20097:3;20119:147;20262:3;20119:147;:::i;:::-;20112:154;;20283:3;20276:10;;19913:379;;;:::o;20298:222::-;20391:4;20429:2;20418:9;20414:18;20406:26;;20442:71;20510:1;20499:9;20495:17;20486:6;20442:71;:::i;:::-;20298:222;;;;:::o;20526:254::-;20635:4;20673:2;20662:9;20658:18;20650:26;;20686:87;20770:1;20759:9;20755:17;20746:6;20686:87;:::i;:::-;20526:254;;;;:::o;20786:640::-;20981:4;21019:3;21008:9;21004:19;20996:27;;21033:71;21101:1;21090:9;21086:17;21077:6;21033:71;:::i;:::-;21114:72;21182:2;21171:9;21167:18;21158:6;21114:72;:::i;:::-;21196;21264:2;21253:9;21249:18;21240:6;21196:72;:::i;:::-;21315:9;21309:4;21305:20;21300:2;21289:9;21285:18;21278:48;21343:76;21414:4;21405:6;21343:76;:::i;:::-;21335:84;;20786:640;;;;;;;:::o;21432:332::-;21553:4;21591:2;21580:9;21576:18;21568:26;;21604:71;21672:1;21661:9;21657:17;21648:6;21604:71;:::i;:::-;21685:72;21753:2;21742:9;21738:18;21729:6;21685:72;:::i;:::-;21432:332;;;;;:::o;21770:210::-;21857:4;21895:2;21884:9;21880:18;21872:26;;21908:65;21970:1;21959:9;21955:17;21946:6;21908:65;:::i;:::-;21770:210;;;;:::o;21986:313::-;22099:4;22137:2;22126:9;22122:18;22114:26;;22186:9;22180:4;22176:20;22172:1;22161:9;22157:17;22150:47;22214:78;22287:4;22278:6;22214:78;:::i;:::-;22206:86;;21986:313;;;;:::o;22305:419::-;22471:4;22509:2;22498:9;22494:18;22486:26;;22558:9;22552:4;22548:20;22544:1;22533:9;22529:17;22522:47;22586:131;22712:4;22586:131;:::i;:::-;22578:139;;22305:419;;;:::o;22730:::-;22896:4;22934:2;22923:9;22919:18;22911:26;;22983:9;22977:4;22973:20;22969:1;22958:9;22954:17;22947:47;23011:131;23137:4;23011:131;:::i;:::-;23003:139;;22730:419;;;:::o;23155:::-;23321:4;23359:2;23348:9;23344:18;23336:26;;23408:9;23402:4;23398:20;23394:1;23383:9;23379:17;23372:47;23436:131;23562:4;23436:131;:::i;:::-;23428:139;;23155:419;;;:::o;23580:::-;23746:4;23784:2;23773:9;23769:18;23761:26;;23833:9;23827:4;23823:20;23819:1;23808:9;23804:17;23797:47;23861:131;23987:4;23861:131;:::i;:::-;23853:139;;23580:419;;;:::o;24005:::-;24171:4;24209:2;24198:9;24194:18;24186:26;;24258:9;24252:4;24248:20;24244:1;24233:9;24229:17;24222:47;24286:131;24412:4;24286:131;:::i;:::-;24278:139;;24005:419;;;:::o;24430:::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:131;24837:4;24711:131;:::i;:::-;24703:139;;24430:419;;;:::o;24855:::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:131;25262:4;25136:131;:::i;:::-;25128:139;;24855:419;;;:::o;25280:::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25280:419;;;:::o;25705:::-;25871:4;25909:2;25898:9;25894:18;25886:26;;25958:9;25952:4;25948:20;25944:1;25933:9;25929:17;25922:47;25986:131;26112:4;25986:131;:::i;:::-;25978:139;;25705:419;;;:::o;26130:::-;26296:4;26334:2;26323:9;26319:18;26311:26;;26383:9;26377:4;26373:20;26369:1;26358:9;26354:17;26347:47;26411:131;26537:4;26411:131;:::i;:::-;26403:139;;26130:419;;;:::o;26555:::-;26721:4;26759:2;26748:9;26744:18;26736:26;;26808:9;26802:4;26798:20;26794:1;26783:9;26779:17;26772:47;26836:131;26962:4;26836:131;:::i;:::-;26828:139;;26555:419;;;:::o;26980:::-;27146:4;27184:2;27173:9;27169:18;27161:26;;27233:9;27227:4;27223:20;27219:1;27208:9;27204:17;27197:47;27261:131;27387:4;27261:131;:::i;:::-;27253:139;;26980:419;;;:::o;27405:::-;27571:4;27609:2;27598:9;27594:18;27586:26;;27658:9;27652:4;27648:20;27644:1;27633:9;27629:17;27622:47;27686:131;27812:4;27686:131;:::i;:::-;27678:139;;27405:419;;;:::o;27830:::-;27996:4;28034:2;28023:9;28019:18;28011:26;;28083:9;28077:4;28073:20;28069:1;28058:9;28054:17;28047:47;28111:131;28237:4;28111:131;:::i;:::-;28103:139;;27830:419;;;:::o;28255:::-;28421:4;28459:2;28448:9;28444:18;28436:26;;28508:9;28502:4;28498:20;28494:1;28483:9;28479:17;28472:47;28536:131;28662:4;28536:131;:::i;:::-;28528:139;;28255:419;;;:::o;28680:::-;28846:4;28884:2;28873:9;28869:18;28861:26;;28933:9;28927:4;28923:20;28919:1;28908:9;28904:17;28897:47;28961:131;29087:4;28961:131;:::i;:::-;28953:139;;28680:419;;;:::o;29105:::-;29271:4;29309:2;29298:9;29294:18;29286:26;;29358:9;29352:4;29348:20;29344:1;29333:9;29329:17;29322:47;29386:131;29512:4;29386:131;:::i;:::-;29378:139;;29105:419;;;:::o;29530:::-;29696:4;29734:2;29723:9;29719:18;29711:26;;29783:9;29777:4;29773:20;29769:1;29758:9;29754:17;29747:47;29811:131;29937:4;29811:131;:::i;:::-;29803:139;;29530:419;;;:::o;29955:::-;30121:4;30159:2;30148:9;30144:18;30136:26;;30208:9;30202:4;30198:20;30194:1;30183:9;30179:17;30172:47;30236:131;30362:4;30236:131;:::i;:::-;30228:139;;29955:419;;;:::o;30380:222::-;30473:4;30511:2;30500:9;30496:18;30488:26;;30524:71;30592:1;30581:9;30577:17;30568:6;30524:71;:::i;:::-;30380:222;;;;:::o;30608:129::-;30642:6;30669:20;;:::i;:::-;30659:30;;30698:33;30726:4;30718:6;30698:33;:::i;:::-;30608:129;;;:::o;30743:75::-;30776:6;30809:2;30803:9;30793:19;;30743:75;:::o;30824:311::-;30901:4;30991:18;30983:6;30980:30;30977:56;;;31013:18;;:::i;:::-;30977:56;31063:4;31055:6;31051:17;31043:25;;31123:4;31117;31113:15;31105:23;;30824:311;;;:::o;31141:307::-;31202:4;31292:18;31284:6;31281:30;31278:56;;;31314:18;;:::i;:::-;31278:56;31352:29;31374:6;31352:29;:::i;:::-;31344:37;;31436:4;31430;31426:15;31418:23;;31141:307;;;:::o;31454:308::-;31516:4;31606:18;31598:6;31595:30;31592:56;;;31628:18;;:::i;:::-;31592:56;31666:29;31688:6;31666:29;:::i;:::-;31658:37;;31750:4;31744;31740:15;31732:23;;31454:308;;;:::o;31768:141::-;31817:4;31840:3;31832:11;;31863:3;31860:1;31853:14;31897:4;31894:1;31884:18;31876:26;;31768:141;;;:::o;31915:98::-;31966:6;32000:5;31994:12;31984:22;;31915:98;;;:::o;32019:99::-;32071:6;32105:5;32099:12;32089:22;;32019:99;;;:::o;32124:168::-;32207:11;32241:6;32236:3;32229:19;32281:4;32276:3;32272:14;32257:29;;32124:168;;;;:::o;32298:147::-;32399:11;32436:3;32421:18;;32298:147;;;;:::o;32451:169::-;32535:11;32569:6;32564:3;32557:19;32609:4;32604:3;32600:14;32585:29;;32451:169;;;;:::o;32626:148::-;32728:11;32765:3;32750:18;;32626:148;;;;:::o;32780:305::-;32820:3;32839:20;32857:1;32839:20;:::i;:::-;32834:25;;32873:20;32891:1;32873:20;:::i;:::-;32868:25;;33027:1;32959:66;32955:74;32952:1;32949:81;32946:107;;;33033:18;;:::i;:::-;32946:107;33077:1;33074;33070:9;33063:16;;32780:305;;;;:::o;33091:185::-;33131:1;33148:20;33166:1;33148:20;:::i;:::-;33143:25;;33182:20;33200:1;33182:20;:::i;:::-;33177:25;;33221:1;33211:35;;33226:18;;:::i;:::-;33211:35;33268:1;33265;33261:9;33256:14;;33091:185;;;;:::o;33282:348::-;33322:7;33345:20;33363:1;33345:20;:::i;:::-;33340:25;;33379:20;33397:1;33379:20;:::i;:::-;33374:25;;33567:1;33499:66;33495:74;33492:1;33489:81;33484:1;33477:9;33470:17;33466:105;33463:131;;;33574:18;;:::i;:::-;33463:131;33622:1;33619;33615:9;33604:20;;33282:348;;;;:::o;33636:191::-;33676:4;33696:20;33714:1;33696:20;:::i;:::-;33691:25;;33730:20;33748:1;33730:20;:::i;:::-;33725:25;;33769:1;33766;33763:8;33760:34;;;33774:18;;:::i;:::-;33760:34;33819:1;33816;33812:9;33804:17;;33636:191;;;;:::o;33833:96::-;33870:7;33899:24;33917:5;33899:24;:::i;:::-;33888:35;;33833:96;;;:::o;33935:104::-;33980:7;34009:24;34027:5;34009:24;:::i;:::-;33998:35;;33935:104;;;:::o;34045:90::-;34079:7;34122:5;34115:13;34108:21;34097:32;;34045:90;;;:::o;34141:149::-;34177:7;34217:66;34210:5;34206:78;34195:89;;34141:149;;;:::o;34296:126::-;34333:7;34373:42;34366:5;34362:54;34351:65;;34296:126;;;:::o;34428:77::-;34465:7;34494:5;34483:16;;34428:77;;;:::o;34511:154::-;34595:6;34590:3;34585;34572:30;34657:1;34648:6;34643:3;34639:16;34632:27;34511:154;;;:::o;34671:307::-;34739:1;34749:113;34763:6;34760:1;34757:13;34749:113;;;34848:1;34843:3;34839:11;34833:18;34829:1;34824:3;34820:11;34813:39;34785:2;34782:1;34778:10;34773:15;;34749:113;;;34880:6;34877:1;34874:13;34871:101;;;34960:1;34951:6;34946:3;34942:16;34935:27;34871:101;34720:258;34671:307;;;:::o;34984:320::-;35028:6;35065:1;35059:4;35055:12;35045:22;;35112:1;35106:4;35102:12;35133:18;35123:81;;35189:4;35181:6;35177:17;35167:27;;35123:81;35251:2;35243:6;35240:14;35220:18;35217:38;35214:84;;;35270:18;;:::i;:::-;35214:84;35035:269;34984:320;;;:::o;35310:281::-;35393:27;35415:4;35393:27;:::i;:::-;35385:6;35381:40;35523:6;35511:10;35508:22;35487:18;35475:10;35472:34;35469:62;35466:88;;;35534:18;;:::i;:::-;35466:88;35574:10;35570:2;35563:22;35353:238;35310:281;;:::o;35597:233::-;35636:3;35659:24;35677:5;35659:24;:::i;:::-;35650:33;;35705:66;35698:5;35695:77;35692:103;;;35775:18;;:::i;:::-;35692:103;35822:1;35815:5;35811:13;35804:20;;35597:233;;;:::o;35836:176::-;35868:1;35885:20;35903:1;35885:20;:::i;:::-;35880:25;;35919:20;35937:1;35919:20;:::i;:::-;35914:25;;35958:1;35948:35;;35963:18;;:::i;:::-;35948:35;36004:1;36001;35997:9;35992:14;;35836:176;;;;:::o;36018:180::-;36066:77;36063:1;36056:88;36163:4;36160:1;36153:15;36187:4;36184:1;36177:15;36204:180;36252:77;36249:1;36242:88;36349:4;36346:1;36339:15;36373:4;36370:1;36363:15;36390:180;36438:77;36435:1;36428:88;36535:4;36532:1;36525:15;36559:4;36556:1;36549:15;36576:180;36624:77;36621:1;36614:88;36721:4;36718:1;36711:15;36745:4;36742:1;36735:15;36762:180;36810:77;36807:1;36800:88;36907:4;36904:1;36897:15;36931:4;36928:1;36921:15;36948:117;37057:1;37054;37047:12;37071:117;37180:1;37177;37170:12;37194:117;37303:1;37300;37293:12;37317:117;37426:1;37423;37416:12;37440:117;37549:1;37546;37539:12;37563:102;37604:6;37655:2;37651:7;37646:2;37639:5;37635:14;37631:28;37621:38;;37563:102;;;:::o;37671:180::-;37811:32;37807:1;37799:6;37795:14;37788:56;37671:180;:::o;37857:174::-;37997:26;37993:1;37985:6;37981:14;37974:50;37857:174;:::o;38037:237::-;38177:34;38173:1;38165:6;38161:14;38154:58;38246:20;38241:2;38233:6;38229:15;38222:45;38037:237;:::o;38280:225::-;38420:34;38416:1;38408:6;38404:14;38397:58;38489:8;38484:2;38476:6;38472:15;38465:33;38280:225;:::o;38511:224::-;38651:34;38647:1;38639:6;38635:14;38628:58;38720:7;38715:2;38707:6;38703:15;38696:32;38511:224;:::o;38741:178::-;38881:30;38877:1;38869:6;38865:14;38858:54;38741:178;:::o;38925:169::-;39065:21;39061:1;39053:6;39049:14;39042:45;38925:169;:::o;39100:170::-;39240:22;39236:1;39228:6;39224:14;39217:46;39100:170;:::o;39276:223::-;39416:34;39412:1;39404:6;39400:14;39393:58;39485:6;39480:2;39472:6;39468:15;39461:31;39276:223;:::o;39505:175::-;39645:27;39641:1;39633:6;39629:14;39622:51;39505:175;:::o;39686:231::-;39826:34;39822:1;39814:6;39810:14;39803:58;39895:14;39890:2;39882:6;39878:15;39871:39;39686:231;:::o;39923:243::-;40063:34;40059:1;40051:6;40047:14;40040:58;40132:26;40127:2;40119:6;40115:15;40108:51;39923:243;:::o;40172:229::-;40312:34;40308:1;40300:6;40296:14;40289:58;40381:12;40376:2;40368:6;40364:15;40357:37;40172:229;:::o;40407:228::-;40547:34;40543:1;40535:6;40531:14;40524:58;40616:11;40611:2;40603:6;40599:15;40592:36;40407:228;:::o;40641:182::-;40781:34;40777:1;40769:6;40765:14;40758:58;40641:182;:::o;40829:231::-;40969:34;40965:1;40957:6;40953:14;40946:58;41038:14;41033:2;41025:6;41021:15;41014:39;40829:231;:::o;41066:182::-;41206:34;41202:1;41194:6;41190:14;41183:58;41066:182;:::o;41254:220::-;41394:34;41390:1;41382:6;41378:14;41371:58;41463:3;41458:2;41450:6;41446:15;41439:28;41254:220;:::o;41480:114::-;;:::o;41600:236::-;41740:34;41736:1;41728:6;41724:14;41717:58;41809:19;41804:2;41796:6;41792:15;41785:44;41600:236;:::o;41842:122::-;41915:24;41933:5;41915:24;:::i;:::-;41908:5;41905:35;41895:63;;41954:1;41951;41944:12;41895:63;41842:122;:::o;41970:116::-;42040:21;42055:5;42040:21;:::i;:::-;42033:5;42030:32;42020:60;;42076:1;42073;42066:12;42020:60;41970:116;:::o;42092:120::-;42164:23;42181:5;42164:23;:::i;:::-;42157:5;42154:34;42144:62;;42202:1;42199;42192:12;42144:62;42092:120;:::o;42218:122::-;42291:24;42309:5;42291:24;:::i;:::-;42284:5;42281:35;42271:63;;42330:1;42327;42320:12;42271:63;42218:122;:::o

Swarm Source

ipfs://742b42ad2671b5cf48cb3485f1a50ee4acb90a206e24522b73833494d3139696
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.