ETH Price: $2,591.32 (-2.51%)

Token

The Mambas Official (Mambas)
 

Overview

Max Total Supply

74 Mambas

Holders

40

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xed9492c29839e42464b21ac78396bb39e1aebb11
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:
TheMambasOfficial

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-01
*/

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/TheMambasOfficial.sol


//**THEMAMBAS OFFICIAL NFT - THEMAMBAS.IO **//
//** ART BY @8Sided **//


pragma solidity ^0.8.0;





contract TheMambasOfficial is ERC1155, Ownable {
    string public constant name = "The Mambas Official";
    string public constant symbol = "Mambas";

    uint32 public totalSupply = 0;

    uint32 public preSaleStartTimestamp = 1636668000;
    uint32 public constant preSaleMaxSupply = 2000;
    uint256 public constant preSalePrice = 0.065 ether;
    
    uint32 public publicSaleStartTimestamp = 1638334800;
    uint32 public constant publicSaleMaxSupply =8888;
    uint256 public constant publicSalePrice = 0.07 ether;

    address private signerAddress = 0x2BA2e8a52700F2eDdD27F1D611704940Cf3D36F0;

    constructor(string memory uri) ERC1155(uri) {}

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

    function setSignerAddress(address addr) external onlyOwner {
        signerAddress = addr;
    }

    function setPreSaleStartTimestamp(uint32 timestamp) public onlyOwner {
        preSaleStartTimestamp = timestamp;
    }

    function setPublicSaleStartTimestamp(uint32 timestamp) public onlyOwner {
        publicSaleStartTimestamp = timestamp;
    }

    function preSaleIsActive() public view returns (bool) {
        return preSaleStartTimestamp <= block.timestamp && publicSaleStartTimestamp > block.timestamp;
    }
    
    function publicSaleIsActive() public view returns (bool) {
        return publicSaleStartTimestamp <= block.timestamp;
    }

    function isValidAccessMessage(uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked(msg.sender));
        return signerAddress == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), v, r, s);
    }

    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
            totalSupply += count;
        } else {
            _mint(to, totalSupply, 1, "");
            totalSupply += 1;
        }
    }
    
    function preSaleMint(uint8 v, bytes32 r, bytes32 s, uint32 count) external payable {
        require(preSaleIsActive(), "Pre-sale is not active.");
        require(isValidAccessMessage(v, r, s), "Not whitelisted.");
        require(count > 0, "Count must be greater than 0.");
        require(totalSupply + count <= preSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        require(msg.value >= preSalePrice * count, "Not enough ether.");

        mint(msg.sender, count);
    }
    
    function publicSaleMint(uint32 count) external payable {
        require(publicSaleIsActive(), "Public sale is not active.");
        require(count > 0, "Count must be greater than 0.");
        require(totalSupply + count <= publicSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        require(msg.value >= publicSalePrice * count, "Not enough ether.");

        mint(msg.sender, count);
    }

    function batchMint(address[] memory addresses) external onlyOwner {
        require(totalSupply + addresses.length < publicSaleMaxSupply, "Count exceeds the maximum allowed supply.");
        
        for (uint i = 0; i < addresses.length; i++) {
            mint(addresses[i], 1);
        }
 }

    function withdraw() external onlyOwner {
        address[4] memory addresses = [
            0x2BA2e8a52700F2eDdD27F1D611704940Cf3D36F0,
            0xc87583D49D1228FC830959416cC23359B70c8a3F,
            0x4e7C2298ebA71277B7Ef474aFc5188108c4ed04d,
            0x1024e7AdA1631F4C47e9fcA5967b5A0F16b4a51D
        ];

        uint32[4] memory shares = [
            uint32(3500),
            uint32(3000),
            uint32(2500),
            uint32(1000)

        ];

        uint256 balance = address(this).balance;

        for (uint32 i = 0; i < addresses.length; i++) {
            uint256 amount = i == addresses.length - 1 ? address(this).balance : balance * shares[i] / 10000;
            payable(addresses[i]).transfer(amount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleStartTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStartTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526003805467030d380a830c6c9360c51b6001600160a01b03909116179055600480546001600160a01b031916732ba2e8a52700f2eddd27f1d611704940cf3d36f01790553480156200005557600080fd5b5060405162002b6138038062002b618339810160408190526200007891620001a8565b80620000848162000097565b506200009033620000b0565b50620002d7565b8051620000ac90600290602084019062000102565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001109062000284565b90600052602060002090601f0160209004810192826200013457600085556200017f565b82601f106200014f57805160ff19168380011785556200017f565b828001600101855582156200017f579182015b828111156200017f57825182559160200191906001019062000162565b506200018d92915062000191565b5090565b5b808211156200018d576000815560010162000192565b60006020808385031215620001bc57600080fd5b82516001600160401b0380821115620001d457600080fd5b818501915085601f830112620001e957600080fd5b815181811115620001fe57620001fe620002c1565b604051601f8201601f19908116603f01168101908382118183101715620002295762000229620002c1565b8160405282815288868487010111156200024257600080fd5b600093505b8284101562000266578484018601518185018701529285019262000247565b82841115620002785760008684830101525b98975050505050505050565b600181811c908216806200029957607f821691505b60208210811415620002bb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61287a80620002e76000396000f3fe6080604052600436106101cc5760003560e01c8063892f5f6f116100f7578063a96d3e5911610095578063e757c17d11610064578063e757c17d1461055c578063e985e9c514610577578063f242432a146105c0578063f2fde38b146105e057600080fd5b8063a96d3e59146104e1578063cc21f48514610505578063d67b06c114610518578063d7822c991461053857600080fd5b80639b6860c8116100d15780639b6860c81461047a578063a18116f114610495578063a1dd2c07146104ab578063a22cb465146104c157600080fd5b8063892f5f6f1461040d5780638da5cb5b1461042057806395d89b411461044857600080fd5b806318160ddd1161016f57806344ef7ba61161013e57806344ef7ba61461038b5780634e1273f4146103ab578063715018a6146103d857806382ef300f146103ed57600080fd5b806318160ddd146103085780631f0234d8146103415780632eb2c2d6146103565780633ccfd60b1461037657600080fd5b8063046dc166116101ab578063046dc1661461025657806306fdde03146102765780630e89341c146102c25780630fcf2e75146102e257600080fd5b8062fdd58e146101d157806301ffc9a71461020457806302fe530514610234575b600080fd5b3480156101dd57600080fd5b506101f16101ec3660046120b6565b610600565b6040519081526020015b60405180910390f35b34801561021057600080fd5b5061022461021f366004612181565b610697565b60405190151581526020016101fb565b34801561024057600080fd5b5061025461024f3660046121bb565b6106e9565b005b34801561026257600080fd5b50610254610271366004611f1d565b61071f565b34801561028257600080fd5b506102b560405180604001604052806013815260200172151a194813585b58985cc813d9999a58da585b606a1b81525081565b6040516101fb91906123f2565b3480156102ce57600080fd5b506102b56102dd366004612204565b61076b565b3480156102ee57600080fd5b5060035442600160e01b90910463ffffffff161115610224565b34801561031457600080fd5b5060035461032c90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101fb565b34801561034d57600080fd5b506102246107ff565b34801561036257600080fd5b50610254610371366004611f6b565b610836565b34801561038257600080fd5b506102546108cd565b34801561039757600080fd5b506102546103a636600461221d565b610a79565b3480156103b757600080fd5b506103cb6103c636600461211d565b610ac9565b6040516101fb91906123b1565b3480156103e457600080fd5b50610254610bf3565b3480156103f957600080fd5b5061025461040836600461221d565b610c29565b61025461041b36600461221d565b610c78565b34801561042c57600080fd5b506003546040516001600160a01b0390911681526020016101fb565b34801561045457600080fd5b506102b5604051806040016040528060068152602001654d616d62617360d01b81525081565b34801561048657600080fd5b506101f166f8b0a10e47000081565b3480156104a157600080fd5b5061032c6107d081565b3480156104b757600080fd5b5061032c6122b881565b3480156104cd57600080fd5b506102546104dc36600461207a565b610dd5565b3480156104ed57600080fd5b5060035461032c90600160c01b900463ffffffff1681565b610254610513366004612238565b610de4565b34801561052457600080fd5b506102546105333660046120e0565b610f7f565b34801561054457600080fd5b5060035461032c90600160e01b900463ffffffff1681565b34801561056857600080fd5b506101f166e6ed27d666800081565b34801561058357600080fd5b50610224610592366004611f38565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105cc57600080fd5b506102546105db366004612015565b611027565b3480156105ec57600080fd5b506102546105fb366004611f1d565b6110ae565b60006001600160a01b0383166106715760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806106c857506001600160e01b031982166303a24d0760e21b145b806106e357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146107135760405162461bcd60e51b815260040161066890612525565b61071c81611146565b50565b6003546001600160a01b031633146107495760405162461bcd60e51b815260040161066890612525565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60606002805461077a9061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546107a69061269f565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b50505050509050919050565b60035460009042600160c01b90910463ffffffff1611801590610831575060035442600160e01b90910463ffffffff16115b905090565b6001600160a01b03851633148061085257506108528533610592565b6108b95760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610668565b6108c68585858585611159565b5050505050565b6003546001600160a01b031633146108f75760405162461bcd60e51b815260040161066890612525565b6040805160808082018352732ba2e8a52700f2eddd27f1d611704940cf3d36f0825273c87583d49d1228fc830959416cc23359b70c8a3f602080840191909152734e7c2298eba71277b7ef474afc5188108c4ed04d83850152731024e7ada1631f4c47e9fca5967b5a0f16b4a51d60608085019190915284519283018552610dac8352610bb8918301919091526109c4938201939093526103e892810192909252904760005b60048163ffffffff161015610a735760006109ba60016004612688565b8263ffffffff1614610a0557612710848363ffffffff16600481106109e1576109e161275c565b60200201516109f69063ffffffff1685612669565b610a009190612647565b610a07565b475b9050848263ffffffff1660048110610a2157610a2161275c565b60200201516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610a5e573d6000803e3d6000fd5b50508080610a6b90612722565b91505061099d565b50505050565b6003546001600160a01b03163314610aa35760405162461bcd60e51b815260040161066890612525565b6003805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b60608151835114610b2e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610668565b6000835167ffffffffffffffff811115610b4a57610b4a612772565b604051908082528060200260200182016040528015610b73578160200160208202803683370190505b50905060005b8451811015610beb57610bbe858281518110610b9757610b9761275c565b6020026020010151858381518110610bb157610bb161275c565b6020026020010151610600565b828281518110610bd057610bd061275c565b6020908102919091010152610be481612707565b9050610b79565b509392505050565b6003546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161066890612525565b610c2760006112f5565b565b6003546001600160a01b03163314610c535760405162461bcd60e51b815260040161066890612525565b6003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60035442600160e01b90910463ffffffff161115610cd85760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206973206e6f74206163746976652e0000000000006044820152606401610668565b60008163ffffffff1611610d2e5760405162461bcd60e51b815260206004820152601d60248201527f436f756e74206d7573742062652067726561746572207468616e20302e0000006044820152606401610668565b6003546122b890610d4d908390600160a01b900463ffffffff1661261f565b63ffffffff161115610d715760405162461bcd60e51b8152600401610668906124dc565b610d8863ffffffff821666f8b0a10e470000612669565b341015610dcb5760405162461bcd60e51b81526020600482015260116024820152702737ba1032b737bab3b41032ba3432b91760791b6044820152606401610668565b61071c3382611347565b610de033838361155c565b5050565b610dec6107ff565b610e385760405162461bcd60e51b815260206004820152601760248201527f5072652d73616c65206973206e6f74206163746976652e0000000000000000006044820152606401610668565b610e4384848461163d565b610e825760405162461bcd60e51b815260206004820152601060248201526f2737ba103bb434ba32b634b9ba32b21760811b6044820152606401610668565b60008163ffffffff1611610ed85760405162461bcd60e51b815260206004820152601d60248201527f436f756e74206d7573742062652067726561746572207468616e20302e0000006044820152606401610668565b6003546107d090610ef7908390600160a01b900463ffffffff1661261f565b63ffffffff161115610f1b5760405162461bcd60e51b8152600401610668906124dc565b610f3263ffffffff821666e6ed27d6668000612669565b341015610f755760405162461bcd60e51b81526020600482015260116024820152702737ba1032b737bab3b41032ba3432b91760791b6044820152606401610668565b610a733382611347565b6003546001600160a01b03163314610fa95760405162461bcd60e51b815260040161066890612525565b80516003546122b891610fc891600160a01b900463ffffffff16612607565b10610fe55760405162461bcd60e51b8152600401610668906124dc565b60005b8151811015610de0576110158282815181106110065761100661275c565b60200260200101516001611347565b8061101f81612707565b915050610fe8565b6001600160a01b03851633148061104357506110438533610592565b6110a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610668565b6108c6858585858561172f565b6003546001600160a01b031633146110d85760405162461bcd60e51b815260040161066890612525565b6001600160a01b03811661113d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610668565b61071c816112f5565b8051610de0906002906020840190611ce7565b815183511461117a5760405162461bcd60e51b81526004016106689061255a565b6001600160a01b0384166111a05760405162461bcd60e51b81526004016106689061244d565b3360005b84518110156112875760008582815181106111c1576111c161275c565b6020026020010151905060008583815181106111df576111df61275c565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561122f5760405162461bcd60e51b815260040161066890612492565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061126c908490612607565b925050819055505050508061128090612707565b90506111a4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112d79291906123c4565b60405180910390a46112ed818787878787611855565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff1611156114e45760008163ffffffff1667ffffffffffffffff81111561137757611377612772565b6040519080825280602002602001820160405280156113a0578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff8111156113c4576113c4612772565b6040519080825280602002602001820160405280156113ed578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff16101561148357600354611422908290600160a01b900463ffffffff1661261f565b63ffffffff16838263ffffffff16815181106114405761144061275c565b6020026020010181815250506001828263ffffffff16815181106114665761146661275c565b60209081029190910101528061147b81612722565b9150506113f3565b5061149f848383604051806020016040528060008152506119c0565b82600360148282829054906101000a900463ffffffff166114c0919061261f565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61151882600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250611b0b565b6001600360148282829054906101000a900463ffffffff1661153a919061261f565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b816001600160a01b0316836001600160a01b031614156115d05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610668565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034830190935282519201919091207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060548301526070820181905260009160019060900160408051601f198184030181528282528051602091820120600084529083018083525260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa15801561170a573d6000803e3d6000fd5b5050604051601f1901516004546001600160a01b039182169116149695505050505050565b6001600160a01b0384166117555760405162461bcd60e51b81526004016106689061244d565b3361176e81878761176588611bd2565b6108c688611bd2565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156117af5760405162461bcd60e51b815260040161066890612492565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906117ec908490612607565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461184c828888888888611c1d565b50505050505050565b6001600160a01b0384163b156112ed5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611899908990899088908890889060040161230e565b602060405180830381600087803b1580156118b357600080fd5b505af19250505080156118e3575060408051601f3d908101601f191682019092526118e09181019061219e565b60015b611990576118ef612788565b806308c379a0141561192957506119046127a4565b8061190f575061192b565b8060405162461bcd60e51b815260040161066891906123f2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610668565b6001600160e01b0319811663bc197c8160e01b1461184c5760405162461bcd60e51b815260040161066890612405565b6001600160a01b0384166119e65760405162461bcd60e51b8152600401610668906125a2565b8151835114611a075760405162461bcd60e51b81526004016106689061255a565b3360005b8451811015611aa357838181518110611a2657611a2661275c565b6020026020010151600080878481518110611a4357611a4361275c565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611a8b9190612607565b90915550819050611a9b81612707565b915050611a0b565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611af49291906123c4565b60405180910390a46108c681600087878787611855565b6001600160a01b038416611b315760405162461bcd60e51b8152600401610668906125a2565b33611b428160008761176588611bd2565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611b72908490612607565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108c681600087878787611c1d565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c0c57611c0c61275c565b602090810291909101015292915050565b6001600160a01b0384163b156112ed5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c61908990899088908890889060040161236c565b602060405180830381600087803b158015611c7b57600080fd5b505af1925050508015611cab575060408051601f3d908101601f19168201909252611ca89181019061219e565b60015b611cb7576118ef612788565b6001600160e01b0319811663f23a6e6160e01b1461184c5760405162461bcd60e51b815260040161066890612405565b828054611cf39061269f565b90600052602060002090601f016020900481019282611d155760008555611d5b565b82601f10611d2e57805160ff1916838001178555611d5b565b82800160010185558215611d5b579182015b82811115611d5b578251825591602001919060010190611d40565b50611d67929150611d6b565b5090565b5b80821115611d675760008155600101611d6c565b600067ffffffffffffffff831115611d9a57611d9a612772565b604051611db1601f8501601f1916602001826126da565b809150838152848484011115611dc657600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611df557600080fd5b919050565b600082601f830112611e0b57600080fd5b81356020611e18826125e3565b604051611e2582826126da565b8381528281019150858301600585901b87018401881015611e4557600080fd5b60005b85811015611e6b57611e5982611dde565b84529284019290840190600101611e48565b5090979650505050505050565b600082601f830112611e8957600080fd5b81356020611e96826125e3565b604051611ea382826126da565b8381528281019150858301600585901b87018401881015611ec357600080fd5b60005b85811015611e6b57813584529284019290840190600101611ec6565b600082601f830112611ef357600080fd5b611f0283833560208501611d80565b9392505050565b803563ffffffff81168114611df557600080fd5b600060208284031215611f2f57600080fd5b611f0282611dde565b60008060408385031215611f4b57600080fd5b611f5483611dde565b9150611f6260208401611dde565b90509250929050565b600080600080600060a08688031215611f8357600080fd5b611f8c86611dde565b9450611f9a60208701611dde565b9350604086013567ffffffffffffffff80821115611fb757600080fd5b611fc389838a01611e78565b94506060880135915080821115611fd957600080fd5b611fe589838a01611e78565b93506080880135915080821115611ffb57600080fd5b5061200888828901611ee2565b9150509295509295909350565b600080600080600060a0868803121561202d57600080fd5b61203686611dde565b945061204460208701611dde565b93506040860135925060608601359150608086013567ffffffffffffffff81111561206e57600080fd5b61200888828901611ee2565b6000806040838503121561208d57600080fd5b61209683611dde565b9150602083013580151581146120ab57600080fd5b809150509250929050565b600080604083850312156120c957600080fd5b6120d283611dde565b946020939093013593505050565b6000602082840312156120f257600080fd5b813567ffffffffffffffff81111561210957600080fd5b61211584828501611dfa565b949350505050565b6000806040838503121561213057600080fd5b823567ffffffffffffffff8082111561214857600080fd5b61215486838701611dfa565b9350602085013591508082111561216a57600080fd5b5061217785828601611e78565b9150509250929050565b60006020828403121561219357600080fd5b8135611f028161282e565b6000602082840312156121b057600080fd5b8151611f028161282e565b6000602082840312156121cd57600080fd5b813567ffffffffffffffff8111156121e457600080fd5b8201601f810184136121f557600080fd5b61211584823560208401611d80565b60006020828403121561221657600080fd5b5035919050565b60006020828403121561222f57600080fd5b611f0282611f09565b6000806000806080858703121561224e57600080fd5b843560ff8116811461225f57600080fd5b9350602085013592506040850135915061227b60608601611f09565b905092959194509250565b600081518084526020808501945080840160005b838110156122b65781518752958201959082019060010161229a565b509495945050505050565b6000815180845260005b818110156122e7576020818501810151868301820152016122cb565b818111156122f9576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061233a90830186612286565b828103606084015261234c8186612286565b9050828103608084015261236081856122c1565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906123a6908301846122c1565b979650505050505050565b602081526000611f026020830184612286565b6040815260006123d76040830185612286565b82810360208401526123e98185612286565b95945050505050565b602081526000611f0260208301846122c1565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526029908201527f436f756e74206578636565647320746865206d6178696d756d20616c6c6f7765604082015268321039bab838363c9760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156125fd576125fd612772565b5060051b60200190565b6000821982111561261a5761261a612746565b500190565b600063ffffffff80831681851680830382111561263e5761263e612746565b01949350505050565b60008261266457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561268357612683612746565b500290565b60008282101561269a5761269a612746565b500390565b600181811c908216806126b357607f821691505b602082108114156126d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561270057612700612772565b6040525050565b600060001982141561271b5761271b612746565b5060010190565b600063ffffffff8083168181141561273c5761273c612746565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127a15760046000803e5060005160e01c5b90565b600060443d10156127b25790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156127e257505050505090565b82850191508151818111156127fa5750505050505090565b843d87010160208285010111156128145750505050505090565b612823602082860101876126da565b509095945050505050565b6001600160e01b03198116811461071c57600080fdfea264697066735822122077ccb0680f562b0f2350026138a06a5ba3b9855c5206a7d4918f1af62022350b64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e5964686155536d675a4e6f6e796a4a79377057676b3874434a397266664d43746a766561466464396969592f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c8063892f5f6f116100f7578063a96d3e5911610095578063e757c17d11610064578063e757c17d1461055c578063e985e9c514610577578063f242432a146105c0578063f2fde38b146105e057600080fd5b8063a96d3e59146104e1578063cc21f48514610505578063d67b06c114610518578063d7822c991461053857600080fd5b80639b6860c8116100d15780639b6860c81461047a578063a18116f114610495578063a1dd2c07146104ab578063a22cb465146104c157600080fd5b8063892f5f6f1461040d5780638da5cb5b1461042057806395d89b411461044857600080fd5b806318160ddd1161016f57806344ef7ba61161013e57806344ef7ba61461038b5780634e1273f4146103ab578063715018a6146103d857806382ef300f146103ed57600080fd5b806318160ddd146103085780631f0234d8146103415780632eb2c2d6146103565780633ccfd60b1461037657600080fd5b8063046dc166116101ab578063046dc1661461025657806306fdde03146102765780630e89341c146102c25780630fcf2e75146102e257600080fd5b8062fdd58e146101d157806301ffc9a71461020457806302fe530514610234575b600080fd5b3480156101dd57600080fd5b506101f16101ec3660046120b6565b610600565b6040519081526020015b60405180910390f35b34801561021057600080fd5b5061022461021f366004612181565b610697565b60405190151581526020016101fb565b34801561024057600080fd5b5061025461024f3660046121bb565b6106e9565b005b34801561026257600080fd5b50610254610271366004611f1d565b61071f565b34801561028257600080fd5b506102b560405180604001604052806013815260200172151a194813585b58985cc813d9999a58da585b606a1b81525081565b6040516101fb91906123f2565b3480156102ce57600080fd5b506102b56102dd366004612204565b61076b565b3480156102ee57600080fd5b5060035442600160e01b90910463ffffffff161115610224565b34801561031457600080fd5b5060035461032c90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101fb565b34801561034d57600080fd5b506102246107ff565b34801561036257600080fd5b50610254610371366004611f6b565b610836565b34801561038257600080fd5b506102546108cd565b34801561039757600080fd5b506102546103a636600461221d565b610a79565b3480156103b757600080fd5b506103cb6103c636600461211d565b610ac9565b6040516101fb91906123b1565b3480156103e457600080fd5b50610254610bf3565b3480156103f957600080fd5b5061025461040836600461221d565b610c29565b61025461041b36600461221d565b610c78565b34801561042c57600080fd5b506003546040516001600160a01b0390911681526020016101fb565b34801561045457600080fd5b506102b5604051806040016040528060068152602001654d616d62617360d01b81525081565b34801561048657600080fd5b506101f166f8b0a10e47000081565b3480156104a157600080fd5b5061032c6107d081565b3480156104b757600080fd5b5061032c6122b881565b3480156104cd57600080fd5b506102546104dc36600461207a565b610dd5565b3480156104ed57600080fd5b5060035461032c90600160c01b900463ffffffff1681565b610254610513366004612238565b610de4565b34801561052457600080fd5b506102546105333660046120e0565b610f7f565b34801561054457600080fd5b5060035461032c90600160e01b900463ffffffff1681565b34801561056857600080fd5b506101f166e6ed27d666800081565b34801561058357600080fd5b50610224610592366004611f38565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156105cc57600080fd5b506102546105db366004612015565b611027565b3480156105ec57600080fd5b506102546105fb366004611f1d565b6110ae565b60006001600160a01b0383166106715760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806106c857506001600160e01b031982166303a24d0760e21b145b806106e357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146107135760405162461bcd60e51b815260040161066890612525565b61071c81611146565b50565b6003546001600160a01b031633146107495760405162461bcd60e51b815260040161066890612525565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60606002805461077a9061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546107a69061269f565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b50505050509050919050565b60035460009042600160c01b90910463ffffffff1611801590610831575060035442600160e01b90910463ffffffff16115b905090565b6001600160a01b03851633148061085257506108528533610592565b6108b95760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610668565b6108c68585858585611159565b5050505050565b6003546001600160a01b031633146108f75760405162461bcd60e51b815260040161066890612525565b6040805160808082018352732ba2e8a52700f2eddd27f1d611704940cf3d36f0825273c87583d49d1228fc830959416cc23359b70c8a3f602080840191909152734e7c2298eba71277b7ef474afc5188108c4ed04d83850152731024e7ada1631f4c47e9fca5967b5a0f16b4a51d60608085019190915284519283018552610dac8352610bb8918301919091526109c4938201939093526103e892810192909252904760005b60048163ffffffff161015610a735760006109ba60016004612688565b8263ffffffff1614610a0557612710848363ffffffff16600481106109e1576109e161275c565b60200201516109f69063ffffffff1685612669565b610a009190612647565b610a07565b475b9050848263ffffffff1660048110610a2157610a2161275c565b60200201516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610a5e573d6000803e3d6000fd5b50508080610a6b90612722565b91505061099d565b50505050565b6003546001600160a01b03163314610aa35760405162461bcd60e51b815260040161066890612525565b6003805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b60608151835114610b2e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610668565b6000835167ffffffffffffffff811115610b4a57610b4a612772565b604051908082528060200260200182016040528015610b73578160200160208202803683370190505b50905060005b8451811015610beb57610bbe858281518110610b9757610b9761275c565b6020026020010151858381518110610bb157610bb161275c565b6020026020010151610600565b828281518110610bd057610bd061275c565b6020908102919091010152610be481612707565b9050610b79565b509392505050565b6003546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161066890612525565b610c2760006112f5565b565b6003546001600160a01b03163314610c535760405162461bcd60e51b815260040161066890612525565b6003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60035442600160e01b90910463ffffffff161115610cd85760405162461bcd60e51b815260206004820152601a60248201527f5075626c69632073616c65206973206e6f74206163746976652e0000000000006044820152606401610668565b60008163ffffffff1611610d2e5760405162461bcd60e51b815260206004820152601d60248201527f436f756e74206d7573742062652067726561746572207468616e20302e0000006044820152606401610668565b6003546122b890610d4d908390600160a01b900463ffffffff1661261f565b63ffffffff161115610d715760405162461bcd60e51b8152600401610668906124dc565b610d8863ffffffff821666f8b0a10e470000612669565b341015610dcb5760405162461bcd60e51b81526020600482015260116024820152702737ba1032b737bab3b41032ba3432b91760791b6044820152606401610668565b61071c3382611347565b610de033838361155c565b5050565b610dec6107ff565b610e385760405162461bcd60e51b815260206004820152601760248201527f5072652d73616c65206973206e6f74206163746976652e0000000000000000006044820152606401610668565b610e4384848461163d565b610e825760405162461bcd60e51b815260206004820152601060248201526f2737ba103bb434ba32b634b9ba32b21760811b6044820152606401610668565b60008163ffffffff1611610ed85760405162461bcd60e51b815260206004820152601d60248201527f436f756e74206d7573742062652067726561746572207468616e20302e0000006044820152606401610668565b6003546107d090610ef7908390600160a01b900463ffffffff1661261f565b63ffffffff161115610f1b5760405162461bcd60e51b8152600401610668906124dc565b610f3263ffffffff821666e6ed27d6668000612669565b341015610f755760405162461bcd60e51b81526020600482015260116024820152702737ba1032b737bab3b41032ba3432b91760791b6044820152606401610668565b610a733382611347565b6003546001600160a01b03163314610fa95760405162461bcd60e51b815260040161066890612525565b80516003546122b891610fc891600160a01b900463ffffffff16612607565b10610fe55760405162461bcd60e51b8152600401610668906124dc565b60005b8151811015610de0576110158282815181106110065761100661275c565b60200260200101516001611347565b8061101f81612707565b915050610fe8565b6001600160a01b03851633148061104357506110438533610592565b6110a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610668565b6108c6858585858561172f565b6003546001600160a01b031633146110d85760405162461bcd60e51b815260040161066890612525565b6001600160a01b03811661113d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610668565b61071c816112f5565b8051610de0906002906020840190611ce7565b815183511461117a5760405162461bcd60e51b81526004016106689061255a565b6001600160a01b0384166111a05760405162461bcd60e51b81526004016106689061244d565b3360005b84518110156112875760008582815181106111c1576111c161275c565b6020026020010151905060008583815181106111df576111df61275c565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561122f5760405162461bcd60e51b815260040161066890612492565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061126c908490612607565b925050819055505050508061128090612707565b90506111a4565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112d79291906123c4565b60405180910390a46112ed818787878787611855565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff1611156114e45760008163ffffffff1667ffffffffffffffff81111561137757611377612772565b6040519080825280602002602001820160405280156113a0578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff8111156113c4576113c4612772565b6040519080825280602002602001820160405280156113ed578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff16101561148357600354611422908290600160a01b900463ffffffff1661261f565b63ffffffff16838263ffffffff16815181106114405761144061275c565b6020026020010181815250506001828263ffffffff16815181106114665761146661275c565b60209081029190910101528061147b81612722565b9150506113f3565b5061149f848383604051806020016040528060008152506119c0565b82600360148282829054906101000a900463ffffffff166114c0919061261f565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61151882600360149054906101000a900463ffffffff1663ffffffff16600160405180602001604052806000815250611b0b565b6001600360148282829054906101000a900463ffffffff1661153a919061261f565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b816001600160a01b0316836001600160a01b031614156115d05760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610668565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b604080513360601b6bffffffffffffffffffffffff1916602080830191909152825160148184030181526034830190935282519201919091207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060548301526070820181905260009160019060900160408051601f198184030181528282528051602091820120600084529083018083525260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa15801561170a573d6000803e3d6000fd5b5050604051601f1901516004546001600160a01b039182169116149695505050505050565b6001600160a01b0384166117555760405162461bcd60e51b81526004016106689061244d565b3361176e81878761176588611bd2565b6108c688611bd2565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156117af5760405162461bcd60e51b815260040161066890612492565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906117ec908490612607565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461184c828888888888611c1d565b50505050505050565b6001600160a01b0384163b156112ed5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611899908990899088908890889060040161230e565b602060405180830381600087803b1580156118b357600080fd5b505af19250505080156118e3575060408051601f3d908101601f191682019092526118e09181019061219e565b60015b611990576118ef612788565b806308c379a0141561192957506119046127a4565b8061190f575061192b565b8060405162461bcd60e51b815260040161066891906123f2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610668565b6001600160e01b0319811663bc197c8160e01b1461184c5760405162461bcd60e51b815260040161066890612405565b6001600160a01b0384166119e65760405162461bcd60e51b8152600401610668906125a2565b8151835114611a075760405162461bcd60e51b81526004016106689061255a565b3360005b8451811015611aa357838181518110611a2657611a2661275c565b6020026020010151600080878481518110611a4357611a4361275c565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611a8b9190612607565b90915550819050611a9b81612707565b915050611a0b565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611af49291906123c4565b60405180910390a46108c681600087878787611855565b6001600160a01b038416611b315760405162461bcd60e51b8152600401610668906125a2565b33611b428160008761176588611bd2565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611b72908490612607565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46108c681600087878787611c1d565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c0c57611c0c61275c565b602090810291909101015292915050565b6001600160a01b0384163b156112ed5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c61908990899088908890889060040161236c565b602060405180830381600087803b158015611c7b57600080fd5b505af1925050508015611cab575060408051601f3d908101601f19168201909252611ca89181019061219e565b60015b611cb7576118ef612788565b6001600160e01b0319811663f23a6e6160e01b1461184c5760405162461bcd60e51b815260040161066890612405565b828054611cf39061269f565b90600052602060002090601f016020900481019282611d155760008555611d5b565b82601f10611d2e57805160ff1916838001178555611d5b565b82800160010185558215611d5b579182015b82811115611d5b578251825591602001919060010190611d40565b50611d67929150611d6b565b5090565b5b80821115611d675760008155600101611d6c565b600067ffffffffffffffff831115611d9a57611d9a612772565b604051611db1601f8501601f1916602001826126da565b809150838152848484011115611dc657600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611df557600080fd5b919050565b600082601f830112611e0b57600080fd5b81356020611e18826125e3565b604051611e2582826126da565b8381528281019150858301600585901b87018401881015611e4557600080fd5b60005b85811015611e6b57611e5982611dde565b84529284019290840190600101611e48565b5090979650505050505050565b600082601f830112611e8957600080fd5b81356020611e96826125e3565b604051611ea382826126da565b8381528281019150858301600585901b87018401881015611ec357600080fd5b60005b85811015611e6b57813584529284019290840190600101611ec6565b600082601f830112611ef357600080fd5b611f0283833560208501611d80565b9392505050565b803563ffffffff81168114611df557600080fd5b600060208284031215611f2f57600080fd5b611f0282611dde565b60008060408385031215611f4b57600080fd5b611f5483611dde565b9150611f6260208401611dde565b90509250929050565b600080600080600060a08688031215611f8357600080fd5b611f8c86611dde565b9450611f9a60208701611dde565b9350604086013567ffffffffffffffff80821115611fb757600080fd5b611fc389838a01611e78565b94506060880135915080821115611fd957600080fd5b611fe589838a01611e78565b93506080880135915080821115611ffb57600080fd5b5061200888828901611ee2565b9150509295509295909350565b600080600080600060a0868803121561202d57600080fd5b61203686611dde565b945061204460208701611dde565b93506040860135925060608601359150608086013567ffffffffffffffff81111561206e57600080fd5b61200888828901611ee2565b6000806040838503121561208d57600080fd5b61209683611dde565b9150602083013580151581146120ab57600080fd5b809150509250929050565b600080604083850312156120c957600080fd5b6120d283611dde565b946020939093013593505050565b6000602082840312156120f257600080fd5b813567ffffffffffffffff81111561210957600080fd5b61211584828501611dfa565b949350505050565b6000806040838503121561213057600080fd5b823567ffffffffffffffff8082111561214857600080fd5b61215486838701611dfa565b9350602085013591508082111561216a57600080fd5b5061217785828601611e78565b9150509250929050565b60006020828403121561219357600080fd5b8135611f028161282e565b6000602082840312156121b057600080fd5b8151611f028161282e565b6000602082840312156121cd57600080fd5b813567ffffffffffffffff8111156121e457600080fd5b8201601f810184136121f557600080fd5b61211584823560208401611d80565b60006020828403121561221657600080fd5b5035919050565b60006020828403121561222f57600080fd5b611f0282611f09565b6000806000806080858703121561224e57600080fd5b843560ff8116811461225f57600080fd5b9350602085013592506040850135915061227b60608601611f09565b905092959194509250565b600081518084526020808501945080840160005b838110156122b65781518752958201959082019060010161229a565b509495945050505050565b6000815180845260005b818110156122e7576020818501810151868301820152016122cb565b818111156122f9576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061233a90830186612286565b828103606084015261234c8186612286565b9050828103608084015261236081856122c1565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906123a6908301846122c1565b979650505050505050565b602081526000611f026020830184612286565b6040815260006123d76040830185612286565b82810360208401526123e98185612286565b95945050505050565b602081526000611f0260208301846122c1565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526029908201527f436f756e74206578636565647320746865206d6178696d756d20616c6c6f7765604082015268321039bab838363c9760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156125fd576125fd612772565b5060051b60200190565b6000821982111561261a5761261a612746565b500190565b600063ffffffff80831681851680830382111561263e5761263e612746565b01949350505050565b60008261266457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561268357612683612746565b500290565b60008282101561269a5761269a612746565b500390565b600181811c908216806126b357607f821691505b602082108114156126d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561270057612700612772565b6040525050565b600060001982141561271b5761271b612746565b5060010190565b600063ffffffff8083168181141561273c5761273c612746565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127a15760046000803e5060005160e01c5b90565b600060443d10156127b25790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156127e257505050505090565b82850191508151818111156127fa5750505050505090565b843d87010160208285010111156128145750505050505090565b612823602082860101876126da565b509095945050505050565b6001600160e01b03198116811461071c57600080fdfea264697066735822122077ccb0680f562b0f2350026138a06a5ba3b9855c5206a7d4918f1af62022350b64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d4e5964686155536d675a4e6f6e796a4a79377057676b3874434a397266664d43746a766561466464396969592f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uri (string): https://ipfs.io/ipfs/QmNYdhaUSmgZNonyjJy7pWgk8tCJ9rffMCtjveaFdd9iiY/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [2] : 68747470733a2f2f697066732e696f2f697066732f516d4e5964686155536d67
Arg [3] : 5a4e6f6e796a4a79377057676b3874434a397266664d43746a76656146646439
Arg [4] : 6969592f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36640:4332:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;-1:-1:-1;22978:231:0;;;;;:::i;:::-;;:::i;:::-;;;20232:25:1;;;20220:2;20205:18;22978:231:0;;;;;;;;22001:310;;;;;;;;;;-1:-1:-1;22001:310:0;;;;;:::i;:::-;;:::i;:::-;;;11979:14:1;;11972:22;11954:41;;11942:2;11927:18;22001:310:0;11814:187:1;37321:83:0;;;;;;;;;;-1:-1:-1;37321:83:0;;;;;:::i;:::-;;:::i;:::-;;37412:98;;;;;;;;;;-1:-1:-1;37412:98:0;;;;;:::i;:::-;;:::i;36694:51::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36694:51:0;;;;;;;;;;;;:::i;22722:105::-;;;;;;;;;;-1:-1:-1;22722:105:0;;;;;:::i;:::-;;:::i;37960:126::-;;;;;;;;;;-1:-1:-1;38035:24:0;;38063:15;-1:-1:-1;;;38035:24:0;;;;;:43;;37960:126;;36801:29;;;;;;;;;;-1:-1:-1;36801:29:0;;;;-1:-1:-1;;;36801:29:0;;;;;;;;;20695:10:1;20683:23;;;20665:42;;20653:2;20638:18;36801:29:0;20521:192:1;37782:166:0;;;;;;;;;;;;;:::i;24917:442::-;;;;;;;;;;-1:-1:-1;24917:442:0;;;;;:::i;:::-;;:::i;40196:773::-;;;;;;;;;;;;;:::i;37518:121::-;;;;;;;;;;-1:-1:-1;37518:121:0;;;;;:::i;:::-;;:::i;23375:524::-;;;;;;;;;;-1:-1:-1;23375:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2606:103::-;;;;;;;;;;;;;:::i;37647:127::-;;;;;;;;;;-1:-1:-1;37647:127:0;;;;;:::i;:::-;;:::i;39465:415::-;;;;;;:::i;:::-;;:::i;1955:87::-;;;;;;;;;;-1:-1:-1;2028:6:0;;1955:87;;-1:-1:-1;;;;;2028:6:0;;;9620:51:1;;9608:2;9593:18;1955:87:0;9474:203:1;36752:40:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36752:40:0;;;;;37123:52;;;;;;;;;;;;37165:10;37123:52;;36894:46;;;;;;;;;;;;36936:4;36894:46;;37068:48;;;;;;;;;;;;37112:4;37068:48;;23972:155;;;;;;;;;;-1:-1:-1;23972:155:0;;;;;:::i;:::-;;:::i;36839:48::-;;;;;;;;;;-1:-1:-1;36839:48:0;;;;-1:-1:-1;;;36839:48:0;;;;;;38953:500;;;;;;:::i;:::-;;:::i;39888:300::-;;;;;;;;;;-1:-1:-1;39888:300:0;;;;;:::i;:::-;;:::i;37010:51::-;;;;;;;;;;-1:-1:-1;37010:51:0;;;;-1:-1:-1;;;37010:51:0;;;;;;36947:50;;;;;;;;;;;;36986:11;36947:50;;24199:168;;;;;;;;;;-1:-1:-1;24199:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;24322:27:0;;;24298:4;24322:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24199:168;24439:401;;;;;;;;;;-1:-1:-1;24439:401:0;;;;;:::i;:::-;;:::i;2864:201::-;;;;;;;;;;-1:-1:-1;2864:201:0;;;;;:::i;:::-;;:::i;22978:231::-;23064:7;-1:-1:-1;;;;;23092:21:0;;23084:77;;;;-1:-1:-1;;;23084:77:0;;13665:2:1;23084:77:0;;;13647:21:1;13704:2;13684:18;;;13677:30;13743:34;13723:18;;;13716:62;-1:-1:-1;;;13794:18:1;;;13787:41;13845:19;;23084:77:0;;;;;;;;;-1:-1:-1;23179:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23179:22:0;;;;;;;;;;;;22978:231::o;22001:310::-;22103:4;-1:-1:-1;;;;;;22140:41:0;;-1:-1:-1;;;22140:41:0;;:110;;-1:-1:-1;;;;;;;22198:52:0;;-1:-1:-1;;;22198:52:0;22140:110;:163;;;-1:-1:-1;;;;;;;;;;13465:40:0;;;22267:36;22120:183;22001:310;-1:-1:-1;;22001:310:0:o;37321:83::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;37384:12:::1;37392:3;37384:7;:12::i;:::-;37321:83:::0;:::o;37412:98::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;37482:13:::1;:20:::0;;-1:-1:-1;;;;;;37482:20:0::1;-1:-1:-1::0;;;;;37482:20:0;;;::::1;::::0;;;::::1;::::0;;37412:98::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;37782:166::-;37854:21;;37830:4;;37879:15;-1:-1:-1;;;37854:21:0;;;;;:40;;;;:86;;-1:-1:-1;37898:24:0;;37925:15;-1:-1:-1;;;37898:24:0;;;;;:42;37854:86;37847:93;;37782:166;:::o;24917:442::-;-1:-1:-1;;;;;25150:20:0;;759:10;25150:20;;:60;;-1:-1:-1;25174:36:0;25191:4;759:10;24199:168;:::i;25174:36::-;25128:160;;;;-1:-1:-1;;;25128:160:0;;16359:2:1;25128:160:0;;;16341:21:1;16398:2;16378:18;;;16371:30;16437:34;16417:18;;;16410:62;-1:-1:-1;;;16488:18:1;;;16481:48;16546:19;;25128:160:0;16157:414:1;25128:160:0;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;40196:773::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40246:269:::1;::::0;;::::1;::::0;;::::1;::::0;;40291:42:::1;40246:269:::0;;40348:42:::1;40246:269;::::0;;::::1;::::0;;;;40405:42:::1;40246:269:::0;;;;40462:42:::1;40246:269:::0;;;;;;;;40528:147;;;;::::1;::::0;;40576:4:::1;40528:147:::0;;40603:4:::1;40528:147:::0;;::::1;::::0;;;;40630:4:::1;40528:147:::0;;;;;;;40657:4:::1;40528:147:::0;;;;;;;40246:269;40706:21:::1;40246:27;40740:222;40763:16;40759:1;:20;;;40740:222;;;40801:14;40823:20;40842:1;40823:16;:20;:::i;:::-;40818:1;:25;;;:79;;40892:5;40880:6;40887:1;40880:9;;;;;;;;;:::i;:::-;;;;::::0;40870:19:::1;::::0;::::1;;:7:::0;:19:::1;:::i;:::-;:27;;;;:::i;:::-;40818:79;;;40846:21;40818:79;40801:96;;40920:9;40930:1;40920:12;;;;;;;;;:::i;:::-;;;;;-1:-1:-1::0;;;;;40912:30:0::1;:38;40943:6;40912:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40786:176;40781:3;;;;;:::i;:::-;;;;40740:222;;;;40235:734;;;40196:773::o:0;37518:121::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;37598:21:::1;:33:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;37598:33:0::1;-1:-1:-1::0;;;;37598:33:0;;::::1;::::0;;;::::1;::::0;;37518:121::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;-1:-1:-1;;;23565:83:0;;19067:2:1;23565:83:0;;;19049:21:1;19106:2;19086:18;;;19079:30;19145:34;19125:18;;;19118:62;-1:-1:-1;;;19196:18:1;;;19189:39;19245:19;;23565:83:0;18865:405:1;23565:83:0;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23694:30:0;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23778:3;;;:::i;:::-;;;23737:122;;;-1:-1:-1;23878:13:0;23375:524;-1:-1:-1;;;23375:524:0:o;2606:103::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;37647:127::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;37730:24:::1;:36:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;37730:36:0::1;-1:-1:-1::0;;;;;37730:36:0;;::::1;::::0;;;::::1;::::0;;37647:127::o;39465:415::-;38035:24;;38063:15;-1:-1:-1;;;38035:24:0;;;;;:43;;39531:59;;;;-1:-1:-1;;;39531:59:0;;14894:2:1;39531:59:0;;;14876:21:1;14933:2;14913:18;;;14906:30;14972:28;14952:18;;;14945:56;15018:18;;39531:59:0;14692:350:1;39531:59:0;39617:1;39609:5;:9;;;39601:51;;;;-1:-1:-1;;;39601:51:0;;15249:2:1;39601:51:0;;;15231:21:1;15288:2;15268:18;;;15261:30;15327:31;15307:18;;;15300:59;15376:18;;39601:51:0;15047:353:1;39601:51:0;39671:11;;37112:4;;39671:19;;39685:5;;-1:-1:-1;;;39671:11:0;;:42;:11;:19;:::i;:::-;:42;;;;39663:96;;;;-1:-1:-1;;;39663:96:0;;;;;;;:::i;:::-;39791:23;;;;37165:10;39791:23;:::i;:::-;39778:9;:36;;39770:66;;;;-1:-1:-1;;;39770:66:0;;15607:2:1;39770:66:0;;;15589:21:1;15646:2;15626:18;;;15619:30;-1:-1:-1;;;15665:18:1;;;15658:47;15722:18;;39770:66:0;15405:341:1;39770:66:0;39849:23;39854:10;39866:5;39849:4;:23::i;23972:155::-;24067:52;759:10;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;38953:500::-;39055:17;:15;:17::i;:::-;39047:53;;;;-1:-1:-1;;;39047:53:0;;16778:2:1;39047:53:0;;;16760:21:1;16817:2;16797:18;;;16790:30;16856:25;16836:18;;;16829:53;16899:18;;39047:53:0;16576:347:1;39047:53:0;39119:29;39140:1;39143;39146;39119:20;:29::i;:::-;39111:58;;;;-1:-1:-1;;;39111:58:0;;18312:2:1;39111:58:0;;;18294:21:1;18351:2;18331:18;;;18324:30;-1:-1:-1;;;18370:18:1;;;18363:46;18426:18;;39111:58:0;18110:340:1;39111:58:0;39196:1;39188:5;:9;;;39180:51;;;;-1:-1:-1;;;39180:51:0;;15249:2:1;39180:51:0;;;15231:21:1;15288:2;15268:18;;;15261:30;15327:31;15307:18;;;15300:59;15376:18;;39180:51:0;15047:353:1;39180:51:0;39250:11;;36936:4;;39250:19;;39264:5;;-1:-1:-1;;;39250:11:0;;:39;:11;:19;:::i;:::-;:39;;;;39242:93;;;;-1:-1:-1;;;39242:93:0;;;;;;;:::i;:::-;39367:20;;;;36986:11;39367:20;:::i;:::-;39354:9;:33;;39346:63;;;;-1:-1:-1;;;39346:63:0;;15607:2:1;39346:63:0;;;15589:21:1;15646:2;15626:18;;;15619:30;-1:-1:-1;;;15665:18:1;;;15658:47;15722:18;;39346:63:0;15405:341:1;39346:63:0;39422:23;39427:10;39439:5;39422:4;:23::i;39888:300::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;39987:16;;39973:11:::1;::::0;37112:4:::1;::::0;39973:30:::1;::::0;-1:-1:-1;;;39973:11:0;::::1;:52;:11;:30;:::i;:::-;:52;39965:106;;;;-1:-1:-1::0;;;39965:106:0::1;;;;;;;:::i;:::-;40097:6;40092:92;40113:9;:16;40109:1;:20;40092:92;;;40151:21;40156:9;40166:1;40156:12;;;;;;;;:::i;:::-;;;;;;;40170:1;40151:4;:21::i;:::-;40131:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40092:92;;24439:401:::0;-1:-1:-1;;;;;24647:20:0;;759:10;24647:20;;:60;;-1:-1:-1;24671:36:0;24688:4;759:10;24199:168;:::i;24671:36::-;24625:151;;;;-1:-1:-1;;;24625:151:0;;14484:2:1;24625:151:0;;;14466:21:1;14523:2;14503:18;;;14496:30;14562:34;14542:18;;;14535:62;-1:-1:-1;;;14613:18:1;;;14606:39;14662:19;;24625:151:0;14282:405:1;24625:151:0;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;2864:201::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;::::0;-1:-1:-1;;;2945:73:0;;14077:2:1;2945:73:0::1;::::0;::::1;14059:21:1::0;14116:2;14096:18;;;14089:30;14155:34;14135:18;;;14128:62;-1:-1:-1;;;14206:18:1;;;14199:36;14252:19;;2945:73:0::1;13875:402:1::0;2945:73:0::1;3029:28;3048:8;3029:18;:28::i;28919:88::-:0;28986:13;;;;:4;;:13;;;;;:::i;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;-1:-1:-1;;;27206:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27306:16:0;;27298:66;;;;-1:-1:-1;;;27298:66:0;;;;;;;:::i;:::-;759:10;27377:16;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27628:19;27650:13;;;;;;;;;;-1:-1:-1;;;;;27650:19:0;;;;;;;;;;;;27601:10;;-1:-1:-1;27692:21:0;;;;27684:76;;;;-1:-1:-1;;;27684:76:0;;;;;;;:::i;:::-;27804:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27804:19:0;;;;;;;;;;27826:20;;;27804:42;;27876:17;;;;;;;:27;;27826:20;;27804:9;27876:27;;27826:20;;27876:27;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;-1:-1:-1;;;;;27932:47:0;27956:4;-1:-1:-1;;;;;27932:47:0;27946:8;-1:-1:-1;;;;;27932:47:0;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3318:6;;;-1:-1:-1;;;;;3335:17:0;;;-1:-1:-1;;;;;;3335:17:0;;;;;;;3368:40;;3318:6;;;3335:17;3318:6;;3368:40;;3299:16;;3368:40;3288:128;3225:191;:::o;38389:552::-;38461:1;38453:5;:9;;;38449:485;;;38479:20;38524:5;38516:14;;38502:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38502:29:0;;38479:52;;38546:24;38595:5;38587:14;;38573:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38573:29:0;;38546:56;;38624:8;38619:127;38642:5;38638:9;;:1;:9;;;38619:127;;;38682:11;;:15;;38696:1;;-1:-1:-1;;;38682:11:0;;;;:15;:::i;:::-;38673:24;;:3;38677:1;38673:6;;;;;;;;;;:::i;:::-;;;;;;:24;;;;;38729:1;38716:7;38724:1;38716:10;;;;;;;;;;:::i;:::-;;;;;;;;;;:14;38649:3;;;;:::i;:::-;;;;38619:127;;;;38762:32;38773:2;38777:3;38782:7;38762:32;;;;;;;;;;;;:10;:32::i;:::-;38824:5;38809:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38464:377;;23972:155;;:::o;38449:485::-;38862:29;38868:2;38872:11;;;;;;;;;;;38862:29;;38885:1;38862:29;;;;;;;;;;;;:5;:29::i;:::-;38921:1;38906:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38389:552;;:::o;33187:331::-;33342:8;-1:-1:-1;;;;;33333:17:0;:5;-1:-1:-1;;;;;33333:17:0;;;33325:71;;;;-1:-1:-1;;;33325:71:0;;18657:2:1;33325:71:0;;;18639:21:1;18696:2;18676:18;;;18669:30;18735:34;18715:18;;;18708:62;-1:-1:-1;;;18786:18:1;;;18779:39;18835:19;;33325:71:0;18455:405:1;33325:71:0;-1:-1:-1;;;;;33407:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33407:46:0;;;;;;;;;;33469:41;;11954::1;;;33469::0;;11927:18:1;33469:41:0;;;;;;;33187:331;;;:::o;38094:287::-;38220:28;;;38237:10;9004:2:1;9000:15;-1:-1:-1;;8996:53:1;38220:28:0;;;;8984:66:1;;;;38220:28:0;;;;;;;;;9066:12:1;;;38220:28:0;;;38210:39;;;;;;;;9331:66:1;38304:58:0;;;9319:79:1;9414:12;;;9407:28;;;38178:4:0;;38284:89;;9451:12:1;;38304:58:0;;;-1:-1:-1;;38304:58:0;;;;;;;;;38294:69;;38304:58;38294:69;;;;38284:89;;;;;;;;;12233:25:1;12306:4;12294:17;;12274:18;;;12267:45;12328:18;;;12321:34;;;12371:18;;;12364:34;;;12205:19;;38284:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38284:89:0;;-1:-1:-1;;38284:89:0;;38267:13;;-1:-1:-1;;;;;38267:106:0;;;:13;;:106;;38094:287;-1:-1:-1;;;;;;38094:287:0:o;25823:820::-;-1:-1:-1;;;;;26011:16:0;;26003:66;;;;-1:-1:-1;;;26003:66:0;;;;;;;:::i;:::-;759:10;26126:96;759:10;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;26126:96::-;26235:19;26257:13;;;;;;;;;;;-1:-1:-1;;;;;26257:19:0;;;;;;;;;;26295:21;;;;26287:76;;;;-1:-1:-1;;;26287:76:0;;;;;;;:::i;:::-;26399:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26399:19:0;;;;;;;;;;26421:20;;;26399:42;;26463:17;;;;;;;:27;;26421:20;;26399:9;26463:27;;26421:20;;26463:27;:::i;:::-;;;;-1:-1:-1;;26508:46:0;;;20442:25:1;;;20498:2;20483:18;;20476:34;;;-1:-1:-1;;;;;26508:46:0;;;;;;;;;;;;;;20415:18:1;26508:46:0;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;35455:813::-;-1:-1:-1;;;;;35695:13:0;;4566:20;4614:8;35691:570;;35731:79;;-1:-1:-1;;;35731:79:0;;-1:-1:-1;;;;;35731:43:0;;;;;:79;;35775:8;;35785:4;;35791:3;;35796:7;;35805:4;;35731:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35731:79:0;;;;;;;;-1:-1:-1;;35731:79:0;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;-1:-1:-1;;;36116:14:0;;;;;;;;:::i;35727:523::-;;;36172:62;;-1:-1:-1;;;36172:62:0;;12835:2:1;36172:62:0;;;12817:21:1;12874:2;12854:18;;;12847:30;12913:34;12893:18;;;12886:62;-1:-1:-1;;;12964:18:1;;;12957:50;13024:19;;36172:62:0;12633:416:1;35727:523:0;-1:-1:-1;;;;;;35892:60:0;;-1:-1:-1;;;35892:60:0;35888:159;;35977:50;;-1:-1:-1;;;35977:50:0;;;;;;;:::i;30318:735::-;-1:-1:-1;;;;;30496:16:0;;30488:62;;;;-1:-1:-1;;;30488:62:0;;;;;;;:::i;:::-;30583:7;:14;30569:3;:10;:28;30561:81;;;;-1:-1:-1;;;30561:81:0;;;;;;;:::i;:::-;759:10;30655:16;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;-1:-1:-1;;;;;30834:21:0;-1:-1:-1;;;;;30834:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30814:3:0;;-1:-1:-1;30814:3:0;;;:::i;:::-;;;;30778:103;;;;30934:2;-1:-1:-1;;;;;30898:53:0;30930:1;-1:-1:-1;;;;;30898:53:0;30912:8;-1:-1:-1;;;;;30898:53:0;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;29393:569::-;-1:-1:-1;;;;;29546:16:0;;29538:62;;;;-1:-1:-1;;;29538:62:0;;;;;;;:::i;:::-;759:10;29657:102;759:10;29613:16;29700:2;29704:21;29722:2;29704:17;:21::i;29657:102::-;29772:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29772:17:0;;;;;;;;;:27;;29793:6;;29772:9;:27;;29793:6;;29772:27;:::i;:::-;;;;-1:-1:-1;;29815:52:0;;;20442:25:1;;;20498:2;20483:18;;20476:34;;;-1:-1:-1;;;;;29815:52:0;;;;29848:1;;29815:52;;;;;;20415:18:1;29815:52:0;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;36276:198::-;36396:16;;;36410:1;36396:16;;;;;;;;;36342;;36371:22;;36396:16;;;;;;;;;;;;-1:-1:-1;36396:16:0;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36461:5;36276:198;-1:-1:-1;;36276:198:0:o;34703:744::-;-1:-1:-1;;;;;34918:13:0;;4566:20;4614:8;34914:526;;34954:72;;-1:-1:-1;;;34954:72:0;;-1:-1:-1;;;;;34954:38:0;;;;;:72;;34993:8;;35003:4;;35009:2;;35013:6;;35021:4;;34954:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34954:72:0;;;;;;;;-1:-1:-1;;34954:72:0;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;-1:-1:-1;;;;;;35076:55:0;;-1:-1:-1;;;35076:55:0;35072:154;;35156:50;;-1:-1:-1;;;35156:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:741::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:169;1221:2;1218:1;1215:9;1207:169;;;1278:23;1297:3;1278:23;:::i;:::-;1266:36;;1322:12;;;;1354;;;;1239:1;1232:9;1207:169;;;-1:-1:-1;1394:6:1;;665:741;-1:-1:-1;;;;;;;665:741:1:o;1411:735::-;1465:5;1518:3;1511:4;1503:6;1499:17;1495:27;1485:55;;1536:1;1533;1526:12;1485:55;1572:6;1559:20;1598:4;1621:43;1661:2;1621:43;:::i;:::-;1693:2;1687:9;1705:31;1733:2;1725:6;1705:31;:::i;:::-;1771:18;;;1805:15;;;;-1:-1:-1;1840:15:1;;;1890:1;1886:10;;;1874:23;;1870:32;;1867:41;-1:-1:-1;1864:61:1;;;1921:1;1918;1911:12;1864:61;1943:1;1953:163;1967:2;1964:1;1961:9;1953:163;;;2024:17;;2012:30;;2062:12;;;;2094;;;;1985:1;1978:9;1953:163;;2151:220;2193:5;2246:3;2239:4;2231:6;2227:17;2223:27;2213:55;;2264:1;2261;2254:12;2213:55;2286:79;2361:3;2352:6;2339:20;2332:4;2324:6;2320:17;2286:79;:::i;:::-;2277:88;2151:220;-1:-1:-1;;;2151:220:1:o;2376:163::-;2443:20;;2503:10;2492:22;;2482:33;;2472:61;;2529:1;2526;2519:12;2544:186;2603:6;2656:2;2644:9;2635:7;2631:23;2627:32;2624:52;;;2672:1;2669;2662:12;2624:52;2695:29;2714:9;2695:29;:::i;2735:260::-;2803:6;2811;2864:2;2852:9;2843:7;2839:23;2835:32;2832:52;;;2880:1;2877;2870:12;2832:52;2903:29;2922:9;2903:29;:::i;:::-;2893:39;;2951:38;2985:2;2974:9;2970:18;2951:38;:::i;:::-;2941:48;;2735:260;;;;;:::o;3000:943::-;3154:6;3162;3170;3178;3186;3239:3;3227:9;3218:7;3214:23;3210:33;3207:53;;;3256:1;3253;3246:12;3207:53;3279:29;3298:9;3279:29;:::i;:::-;3269:39;;3327:38;3361:2;3350:9;3346:18;3327:38;:::i;:::-;3317:48;;3416:2;3405:9;3401:18;3388:32;3439:18;3480:2;3472:6;3469:14;3466:34;;;3496:1;3493;3486:12;3466:34;3519:61;3572:7;3563:6;3552:9;3548:22;3519:61;:::i;:::-;3509:71;;3633:2;3622:9;3618:18;3605:32;3589:48;;3662:2;3652:8;3649:16;3646:36;;;3678:1;3675;3668:12;3646:36;3701:63;3756:7;3745:8;3734:9;3730:24;3701:63;:::i;:::-;3691:73;;3817:3;3806:9;3802:19;3789:33;3773:49;;3847:2;3837:8;3834:16;3831:36;;;3863:1;3860;3853:12;3831:36;;3886:51;3929:7;3918:8;3907:9;3903:24;3886:51;:::i;:::-;3876:61;;;3000:943;;;;;;;;:::o;3948:606::-;4052:6;4060;4068;4076;4084;4137:3;4125:9;4116:7;4112:23;4108:33;4105:53;;;4154:1;4151;4144:12;4105:53;4177:29;4196:9;4177:29;:::i;:::-;4167:39;;4225:38;4259:2;4248:9;4244:18;4225:38;:::i;:::-;4215:48;;4310:2;4299:9;4295:18;4282:32;4272:42;;4361:2;4350:9;4346:18;4333:32;4323:42;;4416:3;4405:9;4401:19;4388:33;4444:18;4436:6;4433:30;4430:50;;;4476:1;4473;4466:12;4430:50;4499:49;4540:7;4531:6;4520:9;4516:22;4499:49;:::i;4559:347::-;4624:6;4632;4685:2;4673:9;4664:7;4660:23;4656:32;4653:52;;;4701:1;4698;4691:12;4653:52;4724:29;4743:9;4724:29;:::i;:::-;4714:39;;4803:2;4792:9;4788:18;4775:32;4850:5;4843:13;4836:21;4829:5;4826:32;4816:60;;4872:1;4869;4862:12;4816:60;4895:5;4885:15;;;4559:347;;;;;:::o;4911:254::-;4979:6;4987;5040:2;5028:9;5019:7;5015:23;5011:32;5008:52;;;5056:1;5053;5046:12;5008:52;5079:29;5098:9;5079:29;:::i;:::-;5069:39;5155:2;5140:18;;;;5127:32;;-1:-1:-1;;;4911:254:1:o;5170:348::-;5254:6;5307:2;5295:9;5286:7;5282:23;5278:32;5275:52;;;5323:1;5320;5313:12;5275:52;5363:9;5350:23;5396:18;5388:6;5385:30;5382:50;;;5428:1;5425;5418:12;5382:50;5451:61;5504:7;5495:6;5484:9;5480:22;5451:61;:::i;:::-;5441:71;5170:348;-1:-1:-1;;;;5170:348:1:o;5523:595::-;5641:6;5649;5702:2;5690:9;5681:7;5677:23;5673:32;5670:52;;;5718:1;5715;5708:12;5670:52;5758:9;5745:23;5787:18;5828:2;5820:6;5817:14;5814:34;;;5844:1;5841;5834:12;5814:34;5867:61;5920:7;5911:6;5900:9;5896:22;5867:61;:::i;:::-;5857:71;;5981:2;5970:9;5966:18;5953:32;5937:48;;6010:2;6000:8;5997:16;5994:36;;;6026:1;6023;6016:12;5994:36;;6049:63;6104:7;6093:8;6082:9;6078:24;6049:63;:::i;:::-;6039:73;;;5523:595;;;;;:::o;6123:245::-;6181:6;6234:2;6222:9;6213:7;6209:23;6205:32;6202:52;;;6250:1;6247;6240:12;6202:52;6289:9;6276:23;6308:30;6332:5;6308:30;:::i;6373:249::-;6442:6;6495:2;6483:9;6474:7;6470:23;6466:32;6463:52;;;6511:1;6508;6501:12;6463:52;6543:9;6537:16;6562:30;6586:5;6562:30;:::i;6627:450::-;6696:6;6749:2;6737:9;6728:7;6724:23;6720:32;6717:52;;;6765:1;6762;6755:12;6717:52;6805:9;6792:23;6838:18;6830:6;6827:30;6824:50;;;6870:1;6867;6860:12;6824:50;6893:22;;6946:4;6938:13;;6934:27;-1:-1:-1;6924:55:1;;6975:1;6972;6965:12;6924:55;6998:73;7063:7;7058:2;7045:16;7040:2;7036;7032:11;6998:73;:::i;7082:180::-;7141:6;7194:2;7182:9;7173:7;7169:23;7165:32;7162:52;;;7210:1;7207;7200:12;7162:52;-1:-1:-1;7233:23:1;;7082:180;-1:-1:-1;7082:180:1:o;7267:184::-;7325:6;7378:2;7366:9;7357:7;7353:23;7349:32;7346:52;;;7394:1;7391;7384:12;7346:52;7417:28;7435:9;7417:28;:::i;7456:478::-;7539:6;7547;7555;7563;7616:3;7604:9;7595:7;7591:23;7587:33;7584:53;;;7633:1;7630;7623:12;7584:53;7672:9;7659:23;7722:4;7715:5;7711:16;7704:5;7701:27;7691:55;;7742:1;7739;7732:12;7691:55;7765:5;-1:-1:-1;7817:2:1;7802:18;;7789:32;;-1:-1:-1;7868:2:1;7853:18;;7840:32;;-1:-1:-1;7891:37:1;7924:2;7909:18;;7891:37;:::i;:::-;7881:47;;7456:478;;;;;;;:::o;7939:435::-;7992:3;8030:5;8024:12;8057:6;8052:3;8045:19;8083:4;8112:2;8107:3;8103:12;8096:19;;8149:2;8142:5;8138:14;8170:1;8180:169;8194:6;8191:1;8188:13;8180:169;;;8255:13;;8243:26;;8289:12;;;;8324:15;;;;8216:1;8209:9;8180:169;;;-1:-1:-1;8365:3:1;;7939:435;-1:-1:-1;;;;;7939:435:1:o;8379:471::-;8420:3;8458:5;8452:12;8485:6;8480:3;8473:19;8510:1;8520:162;8534:6;8531:1;8528:13;8520:162;;;8596:4;8652:13;;;8648:22;;8642:29;8624:11;;;8620:20;;8613:59;8549:12;8520:162;;;8700:6;8697:1;8694:13;8691:87;;;8766:1;8759:4;8750:6;8745:3;8741:16;8737:27;8730:38;8691:87;-1:-1:-1;8832:2:1;8811:15;-1:-1:-1;;8807:29:1;8798:39;;;;8839:4;8794:50;;8379:471;-1:-1:-1;;8379:471:1:o;9682:826::-;-1:-1:-1;;;;;10079:15:1;;;10061:34;;10131:15;;10126:2;10111:18;;10104:43;10041:3;10178:2;10163:18;;10156:31;;;10004:4;;10210:57;;10247:19;;10239:6;10210:57;:::i;:::-;10315:9;10307:6;10303:22;10298:2;10287:9;10283:18;10276:50;10349:44;10386:6;10378;10349:44;:::i;:::-;10335:58;;10442:9;10434:6;10430:22;10424:3;10413:9;10409:19;10402:51;10470:32;10495:6;10487;10470:32;:::i;:::-;10462:40;9682:826;-1:-1:-1;;;;;;;;9682:826:1:o;10513:560::-;-1:-1:-1;;;;;10810:15:1;;;10792:34;;10862:15;;10857:2;10842:18;;10835:43;10909:2;10894:18;;10887:34;;;10952:2;10937:18;;10930:34;;;10772:3;10995;10980:19;;10973:32;;;10735:4;;11022:45;;11047:19;;11039:6;11022:45;:::i;:::-;11014:53;10513:560;-1:-1:-1;;;;;;;10513:560:1:o;11078:261::-;11257:2;11246:9;11239:21;11220:4;11277:56;11329:2;11318:9;11314:18;11306:6;11277:56;:::i;11344:465::-;11601:2;11590:9;11583:21;11564:4;11627:56;11679:2;11668:9;11664:18;11656:6;11627:56;:::i;:::-;11731:9;11723:6;11719:22;11714:2;11703:9;11699:18;11692:50;11759:44;11796:6;11788;11759:44;:::i;:::-;11751:52;11344:465;-1:-1:-1;;;;;11344:465:1:o;12409:219::-;12558:2;12547:9;12540:21;12521:4;12578:44;12618:2;12607:9;12603:18;12595:6;12578:44;:::i;13054:404::-;13256:2;13238:21;;;13295:2;13275:18;;;13268:30;13334:34;13329:2;13314:18;;13307:62;-1:-1:-1;;;13400:2:1;13385:18;;13378:38;13448:3;13433:19;;13054:404::o;15751:401::-;15953:2;15935:21;;;15992:2;15972:18;;;15965:30;16031:34;16026:2;16011:18;;16004:62;-1:-1:-1;;;16097:2:1;16082:18;;16075:35;16142:3;16127:19;;15751:401::o;16928:406::-;17130:2;17112:21;;;17169:2;17149:18;;;17142:30;17208:34;17203:2;17188:18;;17181:62;-1:-1:-1;;;17274:2:1;17259:18;;17252:40;17324:3;17309:19;;16928:406::o;17339:405::-;17541:2;17523:21;;;17580:2;17560:18;;;17553:30;17619:34;17614:2;17599:18;;17592:62;-1:-1:-1;;;17685:2:1;17670:18;;17663:39;17734:3;17719:19;;17339:405::o;17749:356::-;17951:2;17933:21;;;17970:18;;;17963:30;18029:34;18024:2;18009:18;;18002:62;18096:2;18081:18;;17749:356::o;19275:404::-;19477:2;19459:21;;;19516:2;19496:18;;;19489:30;19555:34;19550:2;19535:18;;19528:62;-1:-1:-1;;;19621:2:1;19606:18;;19599:38;19669:3;19654:19;;19275:404::o;19684:397::-;19886:2;19868:21;;;19925:2;19905:18;;;19898:30;19964:34;19959:2;19944:18;;19937:62;-1:-1:-1;;;20030:2:1;20015:18;;20008:31;20071:3;20056:19;;19684:397::o;20718:183::-;20778:4;20811:18;20803:6;20800:30;20797:56;;;20833:18;;:::i;:::-;-1:-1:-1;20878:1:1;20874:14;20890:4;20870:25;;20718:183::o;20906:128::-;20946:3;20977:1;20973:6;20970:1;20967:13;20964:39;;;20983:18;;:::i;:::-;-1:-1:-1;21019:9:1;;20906:128::o;21039:228::-;21078:3;21106:10;21143:2;21140:1;21136:10;21173:2;21170:1;21166:10;21204:3;21200:2;21196:12;21191:3;21188:21;21185:47;;;21212:18;;:::i;:::-;21248:13;;21039:228;-1:-1:-1;;;;21039:228:1:o;21272:217::-;21312:1;21338;21328:132;;21382:10;21377:3;21373:20;21370:1;21363:31;21417:4;21414:1;21407:15;21445:4;21442:1;21435:15;21328:132;-1:-1:-1;21474:9:1;;21272:217::o;21494:168::-;21534:7;21600:1;21596;21592:6;21588:14;21585:1;21582:21;21577:1;21570:9;21563:17;21559:45;21556:71;;;21607:18;;:::i;:::-;-1:-1:-1;21647:9:1;;21494:168::o;21667:125::-;21707:4;21735:1;21732;21729:8;21726:34;;;21740:18;;:::i;:::-;-1:-1:-1;21777:9:1;;21667:125::o;21797:380::-;21876:1;21872:12;;;;21919;;;21940:61;;21994:4;21986:6;21982:17;21972:27;;21940:61;22047:2;22039:6;22036:14;22016:18;22013:38;22010:161;;;22093:10;22088:3;22084:20;22081:1;22074:31;22128:4;22125:1;22118:15;22156:4;22153:1;22146:15;22010:161;;21797:380;;;:::o;22182:249::-;22292:2;22273:13;;-1:-1:-1;;22269:27:1;22257:40;;22327:18;22312:34;;22348:22;;;22309:62;22306:88;;;22374:18;;:::i;:::-;22410:2;22403:22;-1:-1:-1;;22182:249:1:o;22436:135::-;22475:3;-1:-1:-1;;22496:17:1;;22493:43;;;22516:18;;:::i;:::-;-1:-1:-1;22563:1:1;22552:13;;22436:135::o;22576:201::-;22614:3;22642:10;22687:2;22680:5;22676:14;22714:2;22705:7;22702:15;22699:41;;;22720:18;;:::i;:::-;22769:1;22756:15;;22576:201;-1:-1:-1;;;22576:201:1:o;22782:127::-;22843:10;22838:3;22834:20;22831:1;22824:31;22874:4;22871:1;22864:15;22898:4;22895:1;22888:15;22914:127;22975:10;22970:3;22966:20;22963:1;22956:31;23006:4;23003:1;22996:15;23030:4;23027:1;23020:15;23046:127;23107:10;23102:3;23098:20;23095:1;23088:31;23138:4;23135:1;23128:15;23162:4;23159:1;23152:15;23178:179;23213:3;23255:1;23237:16;23234:23;23231:120;;;23301:1;23298;23295;23280:23;-1:-1:-1;23338:1:1;23332:8;23327:3;23323:18;23231:120;23178:179;:::o;23362:671::-;23401:3;23443:4;23425:16;23422:26;23419:39;;;23362:671;:::o;23419:39::-;23485:2;23479:9;-1:-1:-1;;23550:16:1;23546:25;;23543:1;23479:9;23522:50;23601:4;23595:11;23625:16;23660:18;23731:2;23724:4;23716:6;23712:17;23709:25;23704:2;23696:6;23693:14;23690:45;23687:58;;;23738:5;;;;;23362:671;:::o;23687:58::-;23775:6;23769:4;23765:17;23754:28;;23811:3;23805:10;23838:2;23830:6;23827:14;23824:27;;;23844:5;;;;;;23362:671;:::o;23824:27::-;23928:2;23909:16;23903:4;23899:27;23895:36;23888:4;23879:6;23874:3;23870:16;23866:27;23863:69;23860:82;;;23935:5;;;;;;23362:671;:::o;23860:82::-;23951:57;24002:4;23993:6;23985;23981:19;23977:30;23971:4;23951:57;:::i;:::-;-1:-1:-1;24024:3:1;;23362:671;-1:-1:-1;;;;;23362:671:1:o;24038:131::-;-1:-1:-1;;;;;;24112:32:1;;24102:43;;24092:71;;24159:1;24156;24149:12

Swarm Source

ipfs://77ccb0680f562b0f2350026138a06a5ba3b9855c5206a7d4918f1af62022350b
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.