ETH Price: $3,269.99 (+0.59%)
Gas: 1 Gwei

Token

Unemployables+ (UNE+)
 

Overview

Max Total Supply

319 UNE+

Holders

96

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
stiha.eth
0x050F2bDEf3bBaaF19aFC198E59E74c7Bb7F4fb2A
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:
UnemployablesPlus

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 10 : UnemployablesPlus.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract UnemployablesPlus is ERC1155, Ownable {
  string public constant name = "Unemployables+";
  string public constant symbol = "UNE+";

  string[] private tokenMetadata;

  constructor() ERC1155(""){}

  function uri(uint256 tokenId) public view override returns (string memory) {
      return tokenMetadata[tokenId - 1];
  }

  function create(string calldata metadata, uint256 editions) external onlyOwner {
      tokenMetadata.push(metadata);
      _mint(msg.sender, tokenMetadata.length, editions, "");
  }

  // Emergency
  function update(uint256 tokenId, string calldata metadata) external onlyOwner {
      tokenMetadata[tokenId - 1] = metadata;
  }
}

File 2 of 10 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

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

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

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

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

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

File 3 of 10 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

        _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);

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _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);

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        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);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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 4 of 10 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 10 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 6 of 10 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 7 of 10 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @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 8 of 10 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

File 9 of 10 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @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 10 of 10 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256","name":"editions","type":"uint256"}],"name":"create","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":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000258565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001529062000223565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023c57607f821691505b602082108103620002525762000251620001f4565b5b50919050565b6130f680620002686000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610271578063f242432a146102a1578063f2fde38b146102bd578063f745630f146102d9576100f4565b8063715018a61461020f5780638da5cb5b1461021957806395d89b4114610237578063a22cb46514610255576100f4565b80630e89341c116100d35780630e89341c146101775780632eb2c2d6146101a757806346f81a87146101c35780634e1273f4146101df576100f4565b8062fdd58e146100f957806301ffc9a71461012957806306fdde0314610159575b600080fd5b610113600480360381019061010e9190611bcb565b6102f5565b6040516101209190611c1a565b60405180910390f35b610143600480360381019061013e9190611c8d565b6103bd565b6040516101509190611cd5565b60405180910390f35b61016161049f565b60405161016e9190611d89565b60405180910390f35b610191600480360381019061018c9190611dab565b6104d8565b60405161019e9190611d89565b60405180910390f35b6101c160048036038101906101bc9190611fd5565b610594565b005b6101dd60048036038101906101d891906120ff565b610635565b005b6101f960048036038101906101f49190612222565b610714565b6040516102069190612358565b60405180910390f35b61021761082d565b005b6102216108b5565b60405161022e9190612389565b60405180910390f35b61023f6108df565b60405161024c9190611d89565b60405180910390f35b61026f600480360381019061026a91906123d0565b610918565b005b61028b60048036038101906102869190612410565b61092e565b6040516102989190611cd5565b60405180910390f35b6102bb60048036038101906102b69190612450565b6109c2565b005b6102d760048036038101906102d291906124e7565b610a63565b005b6102f360048036038101906102ee9190612514565b610b5a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035c906125e6565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610498575061049782610c15565b5b9050919050565b6040518060400160405280600e81526020017f556e656d706c6f7961626c65732b00000000000000000000000000000000000081525081565b606060046001836104e99190612635565b815481106104fa576104f9612669565b5b90600052602060002001805461050f906126c7565b80601f016020809104026020016040519081016040528092919081815260200182805461053b906126c7565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b50505050509050919050565b61059c610c7f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105e257506105e1856105dc610c7f565b61092e565b5b610621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106189061276a565b60405180910390fd5b61062e8585858585610c87565b5050505050565b61063d610c7f565b73ffffffffffffffffffffffffffffffffffffffff1661065b6108b5565b73ffffffffffffffffffffffffffffffffffffffff16146106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a8906127d6565b60405180910390fd5b60048383909180600181540180825580915050600190039060005260206000200160009091929091929091929091925091906106ee929190611a80565b5061070f336004805490508360405180602001604052806000815250610fa8565b505050565b6060815183511461075a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075190612868565b60405180910390fd5b6000835167ffffffffffffffff81111561077757610776611ddd565b5b6040519080825280602002602001820160405280156107a55781602001602082028036833780820191505090505b50905060005b8451811015610822576107f28582815181106107ca576107c9612669565b5b60200260200101518583815181106107e5576107e4612669565b5b60200260200101516102f5565b82828151811061080557610804612669565b5b6020026020010181815250508061081b90612888565b90506107ab565b508091505092915050565b610835610c7f565b73ffffffffffffffffffffffffffffffffffffffff166108536108b5565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a0906127d6565b60405180910390fd5b6108b36000611158565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f554e452b0000000000000000000000000000000000000000000000000000000081525081565b61092a610923610c7f565b838361121e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6109ca610c7f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a105750610a0f85610a0a610c7f565b61092e565b5b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612942565b60405180910390fd5b610a5c858585858561138a565b5050505050565b610a6b610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610a896108b5565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad6906127d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b45906129d4565b60405180910390fd5b610b5781611158565b50565b610b62610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610b806108b5565b73ffffffffffffffffffffffffffffffffffffffff1614610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd906127d6565b60405180910390fd5b81816004600186610be79190612635565b81548110610bf857610bf7612669565b5b906000526020600020019190610c0f929190611a80565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290612a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190612af8565b60405180910390fd5b6000610d44610c7f565b9050610d54818787878787611625565b60005b8451811015610f05576000858281518110610d7557610d74612669565b5b602002602001015190506000858381518110610d9457610d93612669565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90612b8a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eea9190612baa565b9250508190555050505080610efe90612888565b9050610d57565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f7c929190612c00565b60405180910390a4610f9281878787878761162d565b610fa0818787878787611635565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90612ca9565b60405180910390fd5b6000611021610c7f565b9050600061102e8561180c565b9050600061103b8561180c565b905061104c83600089858589611625565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110ab9190612baa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611129929190612cc9565b60405180910390a46111408360008985858961162d565b61114f83600089898989611886565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128390612d64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137d9190611cd5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090612af8565b60405180910390fd5b6000611403610c7f565b905060006114108561180c565b9050600061141d8561180c565b905061142d838989858589611625565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b8a565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115799190612baa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516115f6929190612cc9565b60405180910390a461160c848a8a86868a61162d565b61161a848a8a8a8a8a611886565b505050505050505050565b505050505050565b505050505050565b6116548473ffffffffffffffffffffffffffffffffffffffff16611a5d565b15611804578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161169a959493929190612dd9565b6020604051808303816000875af19250505080156116d657506040513d601f19601f820116820180604052508101906116d39190612e56565b60015b61177b576116e2612e90565b806308c379a00361173e57506116f6612eb2565b806117015750611740565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359190611d89565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290612fb4565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613046565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561182b5761182a611ddd565b5b6040519080825280602002602001820160405280156118595781602001602082028036833780820191505090505b509050828160008151811061187157611870612669565b5b60200260200101818152505080915050919050565b6118a58473ffffffffffffffffffffffffffffffffffffffff16611a5d565b15611a55578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016118eb959493929190613066565b6020604051808303816000875af192505050801561192757506040513d601f19601f820116820180604052508101906119249190612e56565b60015b6119cc57611933612e90565b806308c379a00361198f5750611947612eb2565b806119525750611991565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119869190611d89565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612fb4565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613046565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611a8c906126c7565b90600052602060002090601f016020900481019282611aae5760008555611af5565b82601f10611ac757803560ff1916838001178555611af5565b82800160010185558215611af5579182015b82811115611af4578235825591602001919060010190611ad9565b5b509050611b029190611b06565b5090565b5b80821115611b1f576000816000905550600101611b07565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b6282611b37565b9050919050565b611b7281611b57565b8114611b7d57600080fd5b50565b600081359050611b8f81611b69565b92915050565b6000819050919050565b611ba881611b95565b8114611bb357600080fd5b50565b600081359050611bc581611b9f565b92915050565b60008060408385031215611be257611be1611b2d565b5b6000611bf085828601611b80565b9250506020611c0185828601611bb6565b9150509250929050565b611c1481611b95565b82525050565b6000602082019050611c2f6000830184611c0b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c6a81611c35565b8114611c7557600080fd5b50565b600081359050611c8781611c61565b92915050565b600060208284031215611ca357611ca2611b2d565b5b6000611cb184828501611c78565b91505092915050565b60008115159050919050565b611ccf81611cba565b82525050565b6000602082019050611cea6000830184611cc6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d2a578082015181840152602081019050611d0f565b83811115611d39576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d5b82611cf0565b611d658185611cfb565b9350611d75818560208601611d0c565b611d7e81611d3f565b840191505092915050565b60006020820190508181036000830152611da38184611d50565b905092915050565b600060208284031215611dc157611dc0611b2d565b5b6000611dcf84828501611bb6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e1582611d3f565b810181811067ffffffffffffffff82111715611e3457611e33611ddd565b5b80604052505050565b6000611e47611b23565b9050611e538282611e0c565b919050565b600067ffffffffffffffff821115611e7357611e72611ddd565b5b602082029050602081019050919050565b600080fd5b6000611e9c611e9784611e58565b611e3d565b90508083825260208201905060208402830185811115611ebf57611ebe611e84565b5b835b81811015611ee85780611ed48882611bb6565b845260208401935050602081019050611ec1565b5050509392505050565b600082601f830112611f0757611f06611dd8565b5b8135611f17848260208601611e89565b91505092915050565b600080fd5b600067ffffffffffffffff821115611f4057611f3f611ddd565b5b611f4982611d3f565b9050602081019050919050565b82818337600083830152505050565b6000611f78611f7384611f25565b611e3d565b905082815260208101848484011115611f9457611f93611f20565b5b611f9f848285611f56565b509392505050565b600082601f830112611fbc57611fbb611dd8565b5b8135611fcc848260208601611f65565b91505092915050565b600080600080600060a08688031215611ff157611ff0611b2d565b5b6000611fff88828901611b80565b955050602061201088828901611b80565b945050604086013567ffffffffffffffff81111561203157612030611b32565b5b61203d88828901611ef2565b935050606086013567ffffffffffffffff81111561205e5761205d611b32565b5b61206a88828901611ef2565b925050608086013567ffffffffffffffff81111561208b5761208a611b32565b5b61209788828901611fa7565b9150509295509295909350565b600080fd5b60008083601f8401126120bf576120be611dd8565b5b8235905067ffffffffffffffff8111156120dc576120db6120a4565b5b6020830191508360018202830111156120f8576120f7611e84565b5b9250929050565b60008060006040848603121561211857612117611b2d565b5b600084013567ffffffffffffffff81111561213657612135611b32565b5b612142868287016120a9565b9350935050602061215586828701611bb6565b9150509250925092565b600067ffffffffffffffff82111561217a57612179611ddd565b5b602082029050602081019050919050565b600061219e6121998461215f565b611e3d565b905080838252602082019050602084028301858111156121c1576121c0611e84565b5b835b818110156121ea57806121d68882611b80565b8452602084019350506020810190506121c3565b5050509392505050565b600082601f83011261220957612208611dd8565b5b813561221984826020860161218b565b91505092915050565b6000806040838503121561223957612238611b2d565b5b600083013567ffffffffffffffff81111561225757612256611b32565b5b612263858286016121f4565b925050602083013567ffffffffffffffff81111561228457612283611b32565b5b61229085828601611ef2565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6122cf81611b95565b82525050565b60006122e183836122c6565b60208301905092915050565b6000602082019050919050565b60006123058261229a565b61230f81856122a5565b935061231a836122b6565b8060005b8381101561234b57815161233288826122d5565b975061233d836122ed565b92505060018101905061231e565b5085935050505092915050565b6000602082019050818103600083015261237281846122fa565b905092915050565b61238381611b57565b82525050565b600060208201905061239e600083018461237a565b92915050565b6123ad81611cba565b81146123b857600080fd5b50565b6000813590506123ca816123a4565b92915050565b600080604083850312156123e7576123e6611b2d565b5b60006123f585828601611b80565b9250506020612406858286016123bb565b9150509250929050565b6000806040838503121561242757612426611b2d565b5b600061243585828601611b80565b925050602061244685828601611b80565b9150509250929050565b600080600080600060a0868803121561246c5761246b611b2d565b5b600061247a88828901611b80565b955050602061248b88828901611b80565b945050604061249c88828901611bb6565b93505060606124ad88828901611bb6565b925050608086013567ffffffffffffffff8111156124ce576124cd611b32565b5b6124da88828901611fa7565b9150509295509295909350565b6000602082840312156124fd576124fc611b2d565b5b600061250b84828501611b80565b91505092915050565b60008060006040848603121561252d5761252c611b2d565b5b600061253b86828701611bb6565b935050602084013567ffffffffffffffff81111561255c5761255b611b32565b5b612568868287016120a9565b92509250509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006125d0602b83611cfb565b91506125db82612574565b604082019050919050565b600060208201905081810360008301526125ff816125c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061264082611b95565b915061264b83611b95565b92508282101561265e5761265d612606565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126df57607f821691505b6020821081036126f2576126f1612698565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612754603283611cfb565b915061275f826126f8565b604082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127c0602083611cfb565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612852602983611cfb565b915061285d826127f6565b604082019050919050565b6000602082019050818103600083015261288181612845565b9050919050565b600061289382611b95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128c5576128c4612606565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061292c602983611cfb565b9150612937826128d0565b604082019050919050565b6000602082019050818103600083015261295b8161291f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129be602683611cfb565b91506129c982612962565b604082019050919050565b600060208201905081810360008301526129ed816129b1565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612a50602883611cfb565b9150612a5b826129f4565b604082019050919050565b60006020820190508181036000830152612a7f81612a43565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ae2602583611cfb565b9150612aed82612a86565b604082019050919050565b60006020820190508181036000830152612b1181612ad5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612b74602a83611cfb565b9150612b7f82612b18565b604082019050919050565b60006020820190508181036000830152612ba381612b67565b9050919050565b6000612bb582611b95565b9150612bc083611b95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bf557612bf4612606565b5b828201905092915050565b60006040820190508181036000830152612c1a81856122fa565b90508181036020830152612c2e81846122fa565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c93602183611cfb565b9150612c9e82612c37565b604082019050919050565b60006020820190508181036000830152612cc281612c86565b9050919050565b6000604082019050612cde6000830185611c0b565b612ceb6020830184611c0b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612d4e602983611cfb565b9150612d5982612cf2565b604082019050919050565b60006020820190508181036000830152612d7d81612d41565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612dab82612d84565b612db58185612d8f565b9350612dc5818560208601611d0c565b612dce81611d3f565b840191505092915050565b600060a082019050612dee600083018861237a565b612dfb602083018761237a565b8181036040830152612e0d81866122fa565b90508181036060830152612e2181856122fa565b90508181036080830152612e358184612da0565b90509695505050505050565b600081519050612e5081611c61565b92915050565b600060208284031215612e6c57612e6b611b2d565b5b6000612e7a84828501612e41565b91505092915050565b60008160e01c9050919050565b600060033d1115612eaf5760046000803e612eac600051612e83565b90505b90565b600060443d10612f3f57612ec4611b23565b60043d036004823e80513d602482011167ffffffffffffffff82111715612eec575050612f3f565b808201805167ffffffffffffffff811115612f0a5750505050612f3f565b80602083010160043d038501811115612f27575050505050612f3f565b612f3682602001850186611e0c565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000612f9e603483611cfb565b9150612fa982612f42565b604082019050919050565b60006020820190508181036000830152612fcd81612f91565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613030602883611cfb565b915061303b82612fd4565b604082019050919050565b6000602082019050818103600083015261305f81613023565b9050919050565b600060a08201905061307b600083018861237a565b613088602083018761237a565b6130956040830186611c0b565b6130a26060830185611c0b565b81810360808301526130b48184612da0565b9050969550505050505056fea2646970667358221220293c7b15f11d15240a212272828d359b0ab7e91107c18700869cb8e38ec9106e64736f6c634300080e0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063e985e9c511610066578063e985e9c514610271578063f242432a146102a1578063f2fde38b146102bd578063f745630f146102d9576100f4565b8063715018a61461020f5780638da5cb5b1461021957806395d89b4114610237578063a22cb46514610255576100f4565b80630e89341c116100d35780630e89341c146101775780632eb2c2d6146101a757806346f81a87146101c35780634e1273f4146101df576100f4565b8062fdd58e146100f957806301ffc9a71461012957806306fdde0314610159575b600080fd5b610113600480360381019061010e9190611bcb565b6102f5565b6040516101209190611c1a565b60405180910390f35b610143600480360381019061013e9190611c8d565b6103bd565b6040516101509190611cd5565b60405180910390f35b61016161049f565b60405161016e9190611d89565b60405180910390f35b610191600480360381019061018c9190611dab565b6104d8565b60405161019e9190611d89565b60405180910390f35b6101c160048036038101906101bc9190611fd5565b610594565b005b6101dd60048036038101906101d891906120ff565b610635565b005b6101f960048036038101906101f49190612222565b610714565b6040516102069190612358565b60405180910390f35b61021761082d565b005b6102216108b5565b60405161022e9190612389565b60405180910390f35b61023f6108df565b60405161024c9190611d89565b60405180910390f35b61026f600480360381019061026a91906123d0565b610918565b005b61028b60048036038101906102869190612410565b61092e565b6040516102989190611cd5565b60405180910390f35b6102bb60048036038101906102b69190612450565b6109c2565b005b6102d760048036038101906102d291906124e7565b610a63565b005b6102f360048036038101906102ee9190612514565b610b5a565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035c906125e6565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610498575061049782610c15565b5b9050919050565b6040518060400160405280600e81526020017f556e656d706c6f7961626c65732b00000000000000000000000000000000000081525081565b606060046001836104e99190612635565b815481106104fa576104f9612669565b5b90600052602060002001805461050f906126c7565b80601f016020809104026020016040519081016040528092919081815260200182805461053b906126c7565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b50505050509050919050565b61059c610c7f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806105e257506105e1856105dc610c7f565b61092e565b5b610621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106189061276a565b60405180910390fd5b61062e8585858585610c87565b5050505050565b61063d610c7f565b73ffffffffffffffffffffffffffffffffffffffff1661065b6108b5565b73ffffffffffffffffffffffffffffffffffffffff16146106b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a8906127d6565b60405180910390fd5b60048383909180600181540180825580915050600190039060005260206000200160009091929091929091929091925091906106ee929190611a80565b5061070f336004805490508360405180602001604052806000815250610fa8565b505050565b6060815183511461075a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075190612868565b60405180910390fd5b6000835167ffffffffffffffff81111561077757610776611ddd565b5b6040519080825280602002602001820160405280156107a55781602001602082028036833780820191505090505b50905060005b8451811015610822576107f28582815181106107ca576107c9612669565b5b60200260200101518583815181106107e5576107e4612669565b5b60200260200101516102f5565b82828151811061080557610804612669565b5b6020026020010181815250508061081b90612888565b90506107ab565b508091505092915050565b610835610c7f565b73ffffffffffffffffffffffffffffffffffffffff166108536108b5565b73ffffffffffffffffffffffffffffffffffffffff16146108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a0906127d6565b60405180910390fd5b6108b36000611158565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f554e452b0000000000000000000000000000000000000000000000000000000081525081565b61092a610923610c7f565b838361121e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6109ca610c7f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a105750610a0f85610a0a610c7f565b61092e565b5b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612942565b60405180910390fd5b610a5c858585858561138a565b5050505050565b610a6b610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610a896108b5565b73ffffffffffffffffffffffffffffffffffffffff1614610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad6906127d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b45906129d4565b60405180910390fd5b610b5781611158565b50565b610b62610c7f565b73ffffffffffffffffffffffffffffffffffffffff16610b806108b5565b73ffffffffffffffffffffffffffffffffffffffff1614610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd906127d6565b60405180910390fd5b81816004600186610be79190612635565b81548110610bf857610bf7612669565b5b906000526020600020019190610c0f929190611a80565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290612a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190612af8565b60405180910390fd5b6000610d44610c7f565b9050610d54818787878787611625565b60005b8451811015610f05576000858281518110610d7557610d74612669565b5b602002602001015190506000858381518110610d9457610d93612669565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c90612b8a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610eea9190612baa565b9250508190555050505080610efe90612888565b9050610d57565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f7c929190612c00565b60405180910390a4610f9281878787878761162d565b610fa0818787878787611635565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90612ca9565b60405180910390fd5b6000611021610c7f565b9050600061102e8561180c565b9050600061103b8561180c565b905061104c83600089858589611625565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110ab9190612baa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611129929190612cc9565b60405180910390a46111408360008985858961162d565b61114f83600089898989611886565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128390612d64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137d9190611cd5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036113f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f090612af8565b60405180910390fd5b6000611403610c7f565b905060006114108561180c565b9050600061141d8561180c565b905061142d838989858589611625565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156114c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bb90612b8a565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115799190612baa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516115f6929190612cc9565b60405180910390a461160c848a8a86868a61162d565b61161a848a8a8a8a8a611886565b505050505050505050565b505050505050565b505050505050565b6116548473ffffffffffffffffffffffffffffffffffffffff16611a5d565b15611804578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161169a959493929190612dd9565b6020604051808303816000875af19250505080156116d657506040513d601f19601f820116820180604052508101906116d39190612e56565b60015b61177b576116e2612e90565b806308c379a00361173e57506116f6612eb2565b806117015750611740565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359190611d89565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290612fb4565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613046565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561182b5761182a611ddd565b5b6040519080825280602002602001820160405280156118595781602001602082028036833780820191505090505b509050828160008151811061187157611870612669565b5b60200260200101818152505080915050919050565b6118a58473ffffffffffffffffffffffffffffffffffffffff16611a5d565b15611a55578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016118eb959493929190613066565b6020604051808303816000875af192505050801561192757506040513d601f19601f820116820180604052508101906119249190612e56565b60015b6119cc57611933612e90565b806308c379a00361198f5750611947612eb2565b806119525750611991565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119869190611d89565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612fb4565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613046565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611a8c906126c7565b90600052602060002090601f016020900481019282611aae5760008555611af5565b82601f10611ac757803560ff1916838001178555611af5565b82800160010185558215611af5579182015b82811115611af4578235825591602001919060010190611ad9565b5b509050611b029190611b06565b5090565b5b80821115611b1f576000816000905550600101611b07565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b6282611b37565b9050919050565b611b7281611b57565b8114611b7d57600080fd5b50565b600081359050611b8f81611b69565b92915050565b6000819050919050565b611ba881611b95565b8114611bb357600080fd5b50565b600081359050611bc581611b9f565b92915050565b60008060408385031215611be257611be1611b2d565b5b6000611bf085828601611b80565b9250506020611c0185828601611bb6565b9150509250929050565b611c1481611b95565b82525050565b6000602082019050611c2f6000830184611c0b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611c6a81611c35565b8114611c7557600080fd5b50565b600081359050611c8781611c61565b92915050565b600060208284031215611ca357611ca2611b2d565b5b6000611cb184828501611c78565b91505092915050565b60008115159050919050565b611ccf81611cba565b82525050565b6000602082019050611cea6000830184611cc6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d2a578082015181840152602081019050611d0f565b83811115611d39576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d5b82611cf0565b611d658185611cfb565b9350611d75818560208601611d0c565b611d7e81611d3f565b840191505092915050565b60006020820190508181036000830152611da38184611d50565b905092915050565b600060208284031215611dc157611dc0611b2d565b5b6000611dcf84828501611bb6565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e1582611d3f565b810181811067ffffffffffffffff82111715611e3457611e33611ddd565b5b80604052505050565b6000611e47611b23565b9050611e538282611e0c565b919050565b600067ffffffffffffffff821115611e7357611e72611ddd565b5b602082029050602081019050919050565b600080fd5b6000611e9c611e9784611e58565b611e3d565b90508083825260208201905060208402830185811115611ebf57611ebe611e84565b5b835b81811015611ee85780611ed48882611bb6565b845260208401935050602081019050611ec1565b5050509392505050565b600082601f830112611f0757611f06611dd8565b5b8135611f17848260208601611e89565b91505092915050565b600080fd5b600067ffffffffffffffff821115611f4057611f3f611ddd565b5b611f4982611d3f565b9050602081019050919050565b82818337600083830152505050565b6000611f78611f7384611f25565b611e3d565b905082815260208101848484011115611f9457611f93611f20565b5b611f9f848285611f56565b509392505050565b600082601f830112611fbc57611fbb611dd8565b5b8135611fcc848260208601611f65565b91505092915050565b600080600080600060a08688031215611ff157611ff0611b2d565b5b6000611fff88828901611b80565b955050602061201088828901611b80565b945050604086013567ffffffffffffffff81111561203157612030611b32565b5b61203d88828901611ef2565b935050606086013567ffffffffffffffff81111561205e5761205d611b32565b5b61206a88828901611ef2565b925050608086013567ffffffffffffffff81111561208b5761208a611b32565b5b61209788828901611fa7565b9150509295509295909350565b600080fd5b60008083601f8401126120bf576120be611dd8565b5b8235905067ffffffffffffffff8111156120dc576120db6120a4565b5b6020830191508360018202830111156120f8576120f7611e84565b5b9250929050565b60008060006040848603121561211857612117611b2d565b5b600084013567ffffffffffffffff81111561213657612135611b32565b5b612142868287016120a9565b9350935050602061215586828701611bb6565b9150509250925092565b600067ffffffffffffffff82111561217a57612179611ddd565b5b602082029050602081019050919050565b600061219e6121998461215f565b611e3d565b905080838252602082019050602084028301858111156121c1576121c0611e84565b5b835b818110156121ea57806121d68882611b80565b8452602084019350506020810190506121c3565b5050509392505050565b600082601f83011261220957612208611dd8565b5b813561221984826020860161218b565b91505092915050565b6000806040838503121561223957612238611b2d565b5b600083013567ffffffffffffffff81111561225757612256611b32565b5b612263858286016121f4565b925050602083013567ffffffffffffffff81111561228457612283611b32565b5b61229085828601611ef2565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6122cf81611b95565b82525050565b60006122e183836122c6565b60208301905092915050565b6000602082019050919050565b60006123058261229a565b61230f81856122a5565b935061231a836122b6565b8060005b8381101561234b57815161233288826122d5565b975061233d836122ed565b92505060018101905061231e565b5085935050505092915050565b6000602082019050818103600083015261237281846122fa565b905092915050565b61238381611b57565b82525050565b600060208201905061239e600083018461237a565b92915050565b6123ad81611cba565b81146123b857600080fd5b50565b6000813590506123ca816123a4565b92915050565b600080604083850312156123e7576123e6611b2d565b5b60006123f585828601611b80565b9250506020612406858286016123bb565b9150509250929050565b6000806040838503121561242757612426611b2d565b5b600061243585828601611b80565b925050602061244685828601611b80565b9150509250929050565b600080600080600060a0868803121561246c5761246b611b2d565b5b600061247a88828901611b80565b955050602061248b88828901611b80565b945050604061249c88828901611bb6565b93505060606124ad88828901611bb6565b925050608086013567ffffffffffffffff8111156124ce576124cd611b32565b5b6124da88828901611fa7565b9150509295509295909350565b6000602082840312156124fd576124fc611b2d565b5b600061250b84828501611b80565b91505092915050565b60008060006040848603121561252d5761252c611b2d565b5b600061253b86828701611bb6565b935050602084013567ffffffffffffffff81111561255c5761255b611b32565b5b612568868287016120a9565b92509250509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006125d0602b83611cfb565b91506125db82612574565b604082019050919050565b600060208201905081810360008301526125ff816125c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061264082611b95565b915061264b83611b95565b92508282101561265e5761265d612606565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126df57607f821691505b6020821081036126f2576126f1612698565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612754603283611cfb565b915061275f826126f8565b604082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127c0602083611cfb565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612852602983611cfb565b915061285d826127f6565b604082019050919050565b6000602082019050818103600083015261288181612845565b9050919050565b600061289382611b95565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128c5576128c4612606565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061292c602983611cfb565b9150612937826128d0565b604082019050919050565b6000602082019050818103600083015261295b8161291f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006129be602683611cfb565b91506129c982612962565b604082019050919050565b600060208201905081810360008301526129ed816129b1565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612a50602883611cfb565b9150612a5b826129f4565b604082019050919050565b60006020820190508181036000830152612a7f81612a43565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612ae2602583611cfb565b9150612aed82612a86565b604082019050919050565b60006020820190508181036000830152612b1181612ad5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612b74602a83611cfb565b9150612b7f82612b18565b604082019050919050565b60006020820190508181036000830152612ba381612b67565b9050919050565b6000612bb582611b95565b9150612bc083611b95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bf557612bf4612606565b5b828201905092915050565b60006040820190508181036000830152612c1a81856122fa565b90508181036020830152612c2e81846122fa565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c93602183611cfb565b9150612c9e82612c37565b604082019050919050565b60006020820190508181036000830152612cc281612c86565b9050919050565b6000604082019050612cde6000830185611c0b565b612ceb6020830184611c0b565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612d4e602983611cfb565b9150612d5982612cf2565b604082019050919050565b60006020820190508181036000830152612d7d81612d41565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612dab82612d84565b612db58185612d8f565b9350612dc5818560208601611d0c565b612dce81611d3f565b840191505092915050565b600060a082019050612dee600083018861237a565b612dfb602083018761237a565b8181036040830152612e0d81866122fa565b90508181036060830152612e2181856122fa565b90508181036080830152612e358184612da0565b90509695505050505050565b600081519050612e5081611c61565b92915050565b600060208284031215612e6c57612e6b611b2d565b5b6000612e7a84828501612e41565b91505092915050565b60008160e01c9050919050565b600060033d1115612eaf5760046000803e612eac600051612e83565b90505b90565b600060443d10612f3f57612ec4611b23565b60043d036004823e80513d602482011167ffffffffffffffff82111715612eec575050612f3f565b808201805167ffffffffffffffff811115612f0a5750505050612f3f565b80602083010160043d038501811115612f27575050505050612f3f565b612f3682602001850186611e0c565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000612f9e603483611cfb565b9150612fa982612f42565b604082019050919050565b60006020820190508181036000830152612fcd81612f91565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613030602883611cfb565b915061303b82612fd4565b604082019050919050565b6000602082019050818103600083015261305f81613023565b9050919050565b600060a08201905061307b600083018861237a565b613088602083018761237a565b6130956040830186611c0b565b6130a26060830185611c0b565b81810360808301526130b48184612da0565b9050969550505050505056fea2646970667358221220293c7b15f11d15240a212272828d359b0ab7e91107c18700869cb8e38ec9106e64736f6c634300080e0033

Deployed Bytecode Sourcemap

172:665:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:228:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;223:46:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;382:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4060:430:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;507:181:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2570:508:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;:::i;:::-;;1036:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;273:38:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3146:153:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3366:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;707:128:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:228:1;2271:7;2317:1;2298:21;;:7;:21;;;2290:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2384:9;:13;2394:2;2384:13;;;;;;;;;;;:22;2398:7;2384:22;;;;;;;;;;;;;;;;2377:29;;2185:228;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;223:46:9:-;;;;;;;;;;;;;;;;;;;:::o;382:121::-;442:13;472;496:1;486:7;:11;;;;:::i;:::-;472:26;;;;;;;;:::i;:::-;;;;;;;;;465:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;382:121;;;:::o;4060:430:1:-;4293:12;:10;:12::i;:::-;4285:20;;:4;:20;;;:60;;;;4309:36;4326:4;4332:12;:10;:12::i;:::-;4309:16;:36::i;:::-;4285:60;4264:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4431:52;4454:4;4460:2;4464:3;4469:7;4478:4;4431:22;:52::i;:::-;4060:430;;;;;:::o;507:181:9:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;594:13:9::1;613:8;;594:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;630:53;636:10;648:13;:20;;;;670:8;630:53;;;;;;;;;;;::::0;:5:::1;:53::i;:::-;507:181:::0;;;:::o;2570:508:1:-;2721:16;2780:3;:10;2761:8;:15;:29;2753:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:30;2894:8;:15;2880:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2847:63;;2926:9;2921:120;2945:8;:15;2941:1;:19;2921:120;;;3000:30;3010:8;3019:1;3010:11;;;;;;;;:::i;:::-;;;;;;;;3023:3;3027:1;3023:6;;;;;;;;:::i;:::-;;;;;;;;3000:9;:30::i;:::-;2981:13;2995:1;2981:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2962:3;;;;:::i;:::-;;;2921:120;;;;3058:13;3051:20;;;2570:508;;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1036:85::-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;273:38:9:-;;;;;;;;;;;;;;;;;;;:::o;3146:153:1:-;3240:52;3259:12;:10;:12::i;:::-;3273:8;3283;3240:18;:52::i;:::-;3146:153;;:::o;3366:166::-;3465:4;3488:18;:27;3507:7;3488:27;;;;;;;;;;;;;;;:37;3516:8;3488:37;;;;;;;;;;;;;;;;;;;;;;;;;3481:44;;3366:166;;;;:::o;3599:389::-;3807:12;:10;:12::i;:::-;3799:20;;:4;:20;;;:60;;;;3823:36;3840:4;3846:12;:10;:12::i;:::-;3823:16;:36::i;:::-;3799:60;3778:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3936:45;3954:4;3960:2;3964;3968:6;3976:4;3936:17;:45::i;:::-;3599:389;;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;::::0;1998:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;707:128:9:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;822:8:9::1;;793:13;817:1;807:7;:11;;;;:::i;:::-;793:26;;;;;;;;:::i;:::-;;;;;;;;;:37;;;;;;;:::i;:::-;;707:128:::0;;;:::o;829:155:7:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:6:-;693:7;719:10;712:17;;640:96;:::o;6233:1115:1:-;6453:7;:14;6439:3;:10;:28;6431:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6544:1;6530:16;;:2;:16;;;6522:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:16;6618:12;:10;:12::i;:::-;6599:31;;6641:60;6662:8;6672:4;6678:2;6682:3;6687:7;6696:4;6641:20;:60::i;:::-;6717:9;6712:411;6736:3;:10;6732:1;:14;6712:411;;;6767:10;6780:3;6784:1;6780:6;;;;;;;;:::i;:::-;;;;;;;;6767:19;;6800:14;6817:7;6825:1;6817:10;;;;;;;;:::i;:::-;;;;;;;;6800:27;;6842:19;6864:9;:13;6874:2;6864:13;;;;;;;;;;;:19;6878:4;6864:19;;;;;;;;;;;;;;;;6842:41;;6920:6;6905:11;:21;;6897:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7051:6;7037:11;:20;7015:9;:13;7025:2;7015:13;;;;;;;;;;;:19;7029:4;7015:19;;;;;;;;;;;;;;;:42;;;;7106:6;7085:9;:13;7095:2;7085:13;;;;;;;;;;;:17;7099:2;7085:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6753:370;;;6748:3;;;;:::i;:::-;;;6712:411;;;;7168:2;7138:47;;7162:4;7138:47;;7152:8;7138:47;;;7172:3;7177:7;7138:47;;;;;;;:::i;:::-;;;;;;;;7196:59;7216:8;7226:4;7232:2;7236:3;7241:7;7250:4;7196:19;:59::i;:::-;7266:75;7302:8;7312:4;7318:2;7322:3;7327:7;7336:4;7266:35;:75::i;:::-;6421:927;6233:1115;;;;;:::o;8630:709::-;8791:1;8777:16;;:2;:16;;;8769:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8842:16;8861:12;:10;:12::i;:::-;8842:31;;8883:20;8906:21;8924:2;8906:17;:21::i;:::-;8883:44;;8937:24;8964:25;8982:6;8964:17;:25::i;:::-;8937:52;;9000:66;9021:8;9039:1;9043:2;9047:3;9052:7;9061:4;9000:20;:66::i;:::-;9098:6;9077:9;:13;9087:2;9077:13;;;;;;;;;;;:17;9091:2;9077:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9156:2;9119:52;;9152:1;9119:52;;9134:8;9119:52;;;9160:2;9164:6;9119:52;;;;;;;:::i;:::-;;;;;;;;9182:65;9202:8;9220:1;9224:2;9228:3;9233:7;9242:4;9182:19;:65::i;:::-;9258:74;9289:8;9307:1;9311:2;9315;9319:6;9327:4;9258:30;:74::i;:::-;8759:580;;;8630:709;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;12773:323:1:-;12923:8;12914:17;;:5;:17;;;12906:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13025:8;12987:18;:25;13006:5;12987:25;;;;;;;;;;;;;;;:35;13013:8;12987:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13070:8;13048:41;;13063:5;13048:41;;;13080:8;13048:41;;;;;;:::i;:::-;;;;;;;;12773:323;;;:::o;4940:947::-;5135:1;5121:16;;:2;:16;;;5113:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:16;5209:12;:10;:12::i;:::-;5190:31;;5231:20;5254:21;5272:2;5254:17;:21::i;:::-;5231:44;;5285:24;5312:25;5330:6;5312:17;:25::i;:::-;5285:52;;5348:60;5369:8;5379:4;5385:2;5389:3;5394:7;5403:4;5348:20;:60::i;:::-;5419:19;5441:9;:13;5451:2;5441:13;;;;;;;;;;;:19;5455:4;5441:19;;;;;;;;;;;;;;;;5419:41;;5493:6;5478:11;:21;;5470:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5616:6;5602:11;:20;5580:9;:13;5590:2;5580:13;;;;;;;;;;;:19;5594:4;5580:19;;;;;;;;;;;;;;;:42;;;;5663:6;5642:9;:13;5652:2;5642:13;;;;;;;;;;;:17;5656:2;5642:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5716:2;5685:46;;5710:4;5685:46;;5700:8;5685:46;;;5720:2;5724:6;5685:46;;;;;;;:::i;:::-;;;;;;;;5742:59;5762:8;5772:4;5778:2;5782:3;5787:7;5796:4;5742:19;:59::i;:::-;5812:68;5843:8;5853:4;5859:2;5863;5867:6;5875:4;5812:30;:68::i;:::-;5103:784;;;;4940:947;;;;;:::o;14030:214::-;;;;;;;:::o;15177:213::-;;;;;;;:::o;16127:792::-;16359:15;:2;:13;;;:15::i;:::-;16355:558;;;16411:2;16394:43;;;16438:8;16448:4;16454:3;16459:7;16468:4;16394:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16390:513;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16779:6;16772:14;;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;;;16826:62;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;16564:48;;;16552:60;;;:8;:60;;;;16548:157;;16636:50;;;;;;;;;;:::i;:::-;;;;;;;;16548:157;16474:245;16355:558;16127:792;;;;;;:::o;16925:193::-;16991:16;17019:22;17058:1;17044:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17019:41;;17081:7;17070:5;17076:1;17070:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17106:5;17099:12;;;16925:193;;;:::o;15396:725::-;15603:15;:2;:13;;;:15::i;:::-;15599:516;;;15655:2;15638:38;;;15677:8;15687:4;15693:2;15697:6;15705:4;15638:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15634:471;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15981:6;15974:14;;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;;;16028:62;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;15771:43;;;15759:55;;;:8;:55;;;;15755:152;;15838:50;;;;;;;;;;:::i;:::-;;;;;;;;15755:152;15711:210;15599:516;15396:725;;;;;;:::o;1175:320:5:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:10:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:117::-;10228:1;10225;10218:12;10256:553;10314:8;10324:6;10374:3;10367:4;10359:6;10355:17;10351:27;10341:122;;10382:79;;:::i;:::-;10341:122;10495:6;10482:20;10472:30;;10525:18;10517:6;10514:30;10511:117;;;10547:79;;:::i;:::-;10511:117;10661:4;10653:6;10649:17;10637:29;;10715:3;10707:4;10699:6;10695:17;10685:8;10681:32;10678:41;10675:128;;;10722:79;;:::i;:::-;10675:128;10256:553;;;;;:::o;10815:674::-;10895:6;10903;10911;10960:2;10948:9;10939:7;10935:23;10931:32;10928:119;;;10966:79;;:::i;:::-;10928:119;11114:1;11103:9;11099:17;11086:31;11144:18;11136:6;11133:30;11130:117;;;11166:79;;:::i;:::-;11130:117;11279:65;11336:7;11327:6;11316:9;11312:22;11279:65;:::i;:::-;11261:83;;;;11057:297;11393:2;11419:53;11464:7;11455:6;11444:9;11440:22;11419:53;:::i;:::-;11409:63;;11364:118;10815:674;;;;;:::o;11495:311::-;11572:4;11662:18;11654:6;11651:30;11648:56;;;11684:18;;:::i;:::-;11648:56;11734:4;11726:6;11722:17;11714:25;;11794:4;11788;11784:15;11776:23;;11495:311;;;:::o;11829:710::-;11925:5;11950:81;11966:64;12023:6;11966:64;:::i;:::-;11950:81;:::i;:::-;11941:90;;12051:5;12080:6;12073:5;12066:21;12114:4;12107:5;12103:16;12096:23;;12167:4;12159:6;12155:17;12147:6;12143:30;12196:3;12188:6;12185:15;12182:122;;;12215:79;;:::i;:::-;12182:122;12330:6;12313:220;12347:6;12342:3;12339:15;12313:220;;;12422:3;12451:37;12484:3;12472:10;12451:37;:::i;:::-;12446:3;12439:50;12518:4;12513:3;12509:14;12502:21;;12389:144;12373:4;12368:3;12364:14;12357:21;;12313:220;;;12317:21;11931:608;;11829:710;;;;;:::o;12562:370::-;12633:5;12682:3;12675:4;12667:6;12663:17;12659:27;12649:122;;12690:79;;:::i;:::-;12649:122;12807:6;12794:20;12832:94;12922:3;12914:6;12907:4;12899:6;12895:17;12832:94;:::i;:::-;12823:103;;12639:293;12562:370;;;;:::o;12938:894::-;13056:6;13064;13113:2;13101:9;13092:7;13088:23;13084:32;13081:119;;;13119:79;;:::i;:::-;13081:119;13267:1;13256:9;13252:17;13239:31;13297:18;13289:6;13286:30;13283:117;;;13319:79;;:::i;:::-;13283:117;13424:78;13494:7;13485:6;13474:9;13470:22;13424:78;:::i;:::-;13414:88;;13210:302;13579:2;13568:9;13564:18;13551:32;13610:18;13602:6;13599:30;13596:117;;;13632:79;;:::i;:::-;13596:117;13737:78;13807:7;13798:6;13787:9;13783:22;13737:78;:::i;:::-;13727:88;;13522:303;12938:894;;;;;:::o;13838:114::-;13905:6;13939:5;13933:12;13923:22;;13838:114;;;:::o;13958:184::-;14057:11;14091:6;14086:3;14079:19;14131:4;14126:3;14122:14;14107:29;;13958:184;;;;:::o;14148:132::-;14215:4;14238:3;14230:11;;14268:4;14263:3;14259:14;14251:22;;14148:132;;;:::o;14286:108::-;14363:24;14381:5;14363:24;:::i;:::-;14358:3;14351:37;14286:108;;:::o;14400:179::-;14469:10;14490:46;14532:3;14524:6;14490:46;:::i;:::-;14568:4;14563:3;14559:14;14545:28;;14400:179;;;;:::o;14585:113::-;14655:4;14687;14682:3;14678:14;14670:22;;14585:113;;;:::o;14734:732::-;14853:3;14882:54;14930:5;14882:54;:::i;:::-;14952:86;15031:6;15026:3;14952:86;:::i;:::-;14945:93;;15062:56;15112:5;15062:56;:::i;:::-;15141:7;15172:1;15157:284;15182:6;15179:1;15176:13;15157:284;;;15258:6;15252:13;15285:63;15344:3;15329:13;15285:63;:::i;:::-;15278:70;;15371:60;15424:6;15371:60;:::i;:::-;15361:70;;15217:224;15204:1;15201;15197:9;15192:14;;15157:284;;;15161:14;15457:3;15450:10;;14858:608;;;14734:732;;;;:::o;15472:373::-;15615:4;15653:2;15642:9;15638:18;15630:26;;15702:9;15696:4;15692:20;15688:1;15677:9;15673:17;15666:47;15730:108;15833:4;15824:6;15730:108;:::i;:::-;15722:116;;15472:373;;;;:::o;15851:118::-;15938:24;15956:5;15938:24;:::i;:::-;15933:3;15926:37;15851:118;;:::o;15975:222::-;16068:4;16106:2;16095:9;16091:18;16083:26;;16119:71;16187:1;16176:9;16172:17;16163:6;16119:71;:::i;:::-;15975:222;;;;:::o;16203:116::-;16273:21;16288:5;16273:21;:::i;:::-;16266:5;16263:32;16253:60;;16309:1;16306;16299:12;16253:60;16203:116;:::o;16325:133::-;16368:5;16406:6;16393:20;16384:29;;16422:30;16446:5;16422:30;:::i;:::-;16325:133;;;;:::o;16464:468::-;16529:6;16537;16586:2;16574:9;16565:7;16561:23;16557:32;16554:119;;;16592:79;;:::i;:::-;16554:119;16712:1;16737:53;16782:7;16773:6;16762:9;16758:22;16737:53;:::i;:::-;16727:63;;16683:117;16839:2;16865:50;16907:7;16898:6;16887:9;16883:22;16865:50;:::i;:::-;16855:60;;16810:115;16464:468;;;;;:::o;16938:474::-;17006:6;17014;17063:2;17051:9;17042:7;17038:23;17034:32;17031:119;;;17069:79;;:::i;:::-;17031:119;17189:1;17214:53;17259:7;17250:6;17239:9;17235:22;17214:53;:::i;:::-;17204:63;;17160:117;17316:2;17342:53;17387:7;17378:6;17367:9;17363:22;17342:53;:::i;:::-;17332:63;;17287:118;16938:474;;;;;:::o;17418:1089::-;17522:6;17530;17538;17546;17554;17603:3;17591:9;17582:7;17578:23;17574:33;17571:120;;;17610:79;;:::i;:::-;17571:120;17730:1;17755:53;17800:7;17791:6;17780:9;17776:22;17755:53;:::i;:::-;17745:63;;17701:117;17857:2;17883:53;17928:7;17919:6;17908:9;17904:22;17883:53;:::i;:::-;17873:63;;17828:118;17985:2;18011:53;18056:7;18047:6;18036:9;18032:22;18011:53;:::i;:::-;18001:63;;17956:118;18113:2;18139:53;18184:7;18175:6;18164:9;18160:22;18139:53;:::i;:::-;18129:63;;18084:118;18269:3;18258:9;18254:19;18241:33;18301:18;18293:6;18290:30;18287:117;;;18323:79;;:::i;:::-;18287:117;18428:62;18482:7;18473:6;18462:9;18458:22;18428:62;:::i;:::-;18418:72;;18212:288;17418:1089;;;;;;;;:::o;18513:329::-;18572:6;18621:2;18609:9;18600:7;18596:23;18592:32;18589:119;;;18627:79;;:::i;:::-;18589:119;18747:1;18772:53;18817:7;18808:6;18797:9;18793:22;18772:53;:::i;:::-;18762:63;;18718:117;18513:329;;;;:::o;18848:674::-;18928:6;18936;18944;18993:2;18981:9;18972:7;18968:23;18964:32;18961:119;;;18999:79;;:::i;:::-;18961:119;19119:1;19144:53;19189:7;19180:6;19169:9;19165:22;19144:53;:::i;:::-;19134:63;;19090:117;19274:2;19263:9;19259:18;19246:32;19305:18;19297:6;19294:30;19291:117;;;19327:79;;:::i;:::-;19291:117;19440:65;19497:7;19488:6;19477:9;19473:22;19440:65;:::i;:::-;19422:83;;;;19217:298;18848:674;;;;;:::o;19528:230::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:13;19732:2;19724:6;19720:15;19713:38;19528:230;:::o;19764:366::-;19906:3;19927:67;19991:2;19986:3;19927:67;:::i;:::-;19920:74;;20003:93;20092:3;20003:93;:::i;:::-;20121:2;20116:3;20112:12;20105:19;;19764:366;;;:::o;20136:419::-;20302:4;20340:2;20329:9;20325:18;20317:26;;20389:9;20383:4;20379:20;20375:1;20364:9;20360:17;20353:47;20417:131;20543:4;20417:131;:::i;:::-;20409:139;;20136:419;;;:::o;20561:180::-;20609:77;20606:1;20599:88;20706:4;20703:1;20696:15;20730:4;20727:1;20720:15;20747:191;20787:4;20807:20;20825:1;20807:20;:::i;:::-;20802:25;;20841:20;20859:1;20841:20;:::i;:::-;20836:25;;20880:1;20877;20874:8;20871:34;;;20885:18;;:::i;:::-;20871:34;20930:1;20927;20923:9;20915:17;;20747:191;;;;:::o;20944:180::-;20992:77;20989:1;20982:88;21089:4;21086:1;21079:15;21113:4;21110:1;21103:15;21130:180;21178:77;21175:1;21168:88;21275:4;21272:1;21265:15;21299:4;21296:1;21289:15;21316:320;21360:6;21397:1;21391:4;21387:12;21377:22;;21444:1;21438:4;21434:12;21465:18;21455:81;;21521:4;21513:6;21509:17;21499:27;;21455:81;21583:2;21575:6;21572:14;21552:18;21549:38;21546:84;;21602:18;;:::i;:::-;21546:84;21367:269;21316:320;;;:::o;21642:237::-;21782:34;21778:1;21770:6;21766:14;21759:58;21851:20;21846:2;21838:6;21834:15;21827:45;21642:237;:::o;21885:366::-;22027:3;22048:67;22112:2;22107:3;22048:67;:::i;:::-;22041:74;;22124:93;22213:3;22124:93;:::i;:::-;22242:2;22237:3;22233:12;22226:19;;21885:366;;;:::o;22257:419::-;22423:4;22461:2;22450:9;22446:18;22438:26;;22510:9;22504:4;22500:20;22496:1;22485:9;22481:17;22474:47;22538:131;22664:4;22538:131;:::i;:::-;22530:139;;22257:419;;;:::o;22682:182::-;22822:34;22818:1;22810:6;22806:14;22799:58;22682:182;:::o;22870:366::-;23012:3;23033:67;23097:2;23092:3;23033:67;:::i;:::-;23026:74;;23109:93;23198:3;23109:93;:::i;:::-;23227:2;23222:3;23218:12;23211:19;;22870:366;;;:::o;23242:419::-;23408:4;23446:2;23435:9;23431:18;23423:26;;23495:9;23489:4;23485:20;23481:1;23470:9;23466:17;23459:47;23523:131;23649:4;23523:131;:::i;:::-;23515:139;;23242:419;;;:::o;23667:228::-;23807:34;23803:1;23795:6;23791:14;23784:58;23876:11;23871:2;23863:6;23859:15;23852:36;23667:228;:::o;23901:366::-;24043:3;24064:67;24128:2;24123:3;24064:67;:::i;:::-;24057:74;;24140:93;24229:3;24140:93;:::i;:::-;24258:2;24253:3;24249:12;24242:19;;23901:366;;;:::o;24273:419::-;24439:4;24477:2;24466:9;24462:18;24454:26;;24526:9;24520:4;24516:20;24512:1;24501:9;24497:17;24490:47;24554:131;24680:4;24554:131;:::i;:::-;24546:139;;24273:419;;;:::o;24698:233::-;24737:3;24760:24;24778:5;24760:24;:::i;:::-;24751:33;;24806:66;24799:5;24796:77;24793:103;;24876:18;;:::i;:::-;24793:103;24923:1;24916:5;24912:13;24905:20;;24698:233;;;:::o;24937:228::-;25077:34;25073:1;25065:6;25061:14;25054:58;25146:11;25141:2;25133:6;25129:15;25122:36;24937:228;:::o;25171:366::-;25313:3;25334:67;25398:2;25393:3;25334:67;:::i;:::-;25327:74;;25410:93;25499:3;25410:93;:::i;:::-;25528:2;25523:3;25519:12;25512:19;;25171:366;;;:::o;25543:419::-;25709:4;25747:2;25736:9;25732:18;25724:26;;25796:9;25790:4;25786:20;25782:1;25771:9;25767:17;25760:47;25824:131;25950:4;25824:131;:::i;:::-;25816:139;;25543:419;;;:::o;25968:225::-;26108:34;26104:1;26096:6;26092:14;26085:58;26177:8;26172:2;26164:6;26160:15;26153:33;25968:225;:::o;26199:366::-;26341:3;26362:67;26426:2;26421:3;26362:67;:::i;:::-;26355:74;;26438:93;26527:3;26438:93;:::i;:::-;26556:2;26551:3;26547:12;26540:19;;26199:366;;;:::o;26571:419::-;26737:4;26775:2;26764:9;26760:18;26752:26;;26824:9;26818:4;26814:20;26810:1;26799:9;26795:17;26788:47;26852:131;26978:4;26852:131;:::i;:::-;26844:139;;26571:419;;;:::o;26996:227::-;27136:34;27132:1;27124:6;27120:14;27113:58;27205:10;27200:2;27192:6;27188:15;27181:35;26996:227;:::o;27229:366::-;27371:3;27392:67;27456:2;27451:3;27392:67;:::i;:::-;27385:74;;27468:93;27557:3;27468:93;:::i;:::-;27586:2;27581:3;27577:12;27570:19;;27229:366;;;:::o;27601:419::-;27767:4;27805:2;27794:9;27790:18;27782:26;;27854:9;27848:4;27844:20;27840:1;27829:9;27825:17;27818:47;27882:131;28008:4;27882:131;:::i;:::-;27874:139;;27601:419;;;:::o;28026:224::-;28166:34;28162:1;28154:6;28150:14;28143:58;28235:7;28230:2;28222:6;28218:15;28211:32;28026:224;:::o;28256:366::-;28398:3;28419:67;28483:2;28478:3;28419:67;:::i;:::-;28412:74;;28495:93;28584:3;28495:93;:::i;:::-;28613:2;28608:3;28604:12;28597:19;;28256:366;;;:::o;28628:419::-;28794:4;28832:2;28821:9;28817:18;28809:26;;28881:9;28875:4;28871:20;28867:1;28856:9;28852:17;28845:47;28909:131;29035:4;28909:131;:::i;:::-;28901:139;;28628:419;;;:::o;29053:229::-;29193:34;29189:1;29181:6;29177:14;29170:58;29262:12;29257:2;29249:6;29245:15;29238:37;29053:229;:::o;29288:366::-;29430:3;29451:67;29515:2;29510:3;29451:67;:::i;:::-;29444:74;;29527:93;29616:3;29527:93;:::i;:::-;29645:2;29640:3;29636:12;29629:19;;29288:366;;;:::o;29660:419::-;29826:4;29864:2;29853:9;29849:18;29841:26;;29913:9;29907:4;29903:20;29899:1;29888:9;29884:17;29877:47;29941:131;30067:4;29941:131;:::i;:::-;29933:139;;29660:419;;;:::o;30085:305::-;30125:3;30144:20;30162:1;30144:20;:::i;:::-;30139:25;;30178:20;30196:1;30178:20;:::i;:::-;30173:25;;30332:1;30264:66;30260:74;30257:1;30254:81;30251:107;;;30338:18;;:::i;:::-;30251:107;30382:1;30379;30375:9;30368:16;;30085:305;;;;:::o;30396:634::-;30617:4;30655:2;30644:9;30640:18;30632:26;;30704:9;30698:4;30694:20;30690:1;30679:9;30675:17;30668:47;30732:108;30835:4;30826:6;30732:108;:::i;:::-;30724:116;;30887:9;30881:4;30877:20;30872:2;30861:9;30857:18;30850:48;30915:108;31018:4;31009:6;30915:108;:::i;:::-;30907:116;;30396:634;;;;;:::o;31036:220::-;31176:34;31172:1;31164:6;31160:14;31153:58;31245:3;31240:2;31232:6;31228:15;31221:28;31036:220;:::o;31262:366::-;31404:3;31425:67;31489:2;31484:3;31425:67;:::i;:::-;31418:74;;31501:93;31590:3;31501:93;:::i;:::-;31619:2;31614:3;31610:12;31603:19;;31262:366;;;:::o;31634:419::-;31800:4;31838:2;31827:9;31823:18;31815:26;;31887:9;31881:4;31877:20;31873:1;31862:9;31858:17;31851:47;31915:131;32041:4;31915:131;:::i;:::-;31907:139;;31634:419;;;:::o;32059:332::-;32180:4;32218:2;32207:9;32203:18;32195:26;;32231:71;32299:1;32288:9;32284:17;32275:6;32231:71;:::i;:::-;32312:72;32380:2;32369:9;32365:18;32356:6;32312:72;:::i;:::-;32059:332;;;;;:::o;32397:228::-;32537:34;32533:1;32525:6;32521:14;32514:58;32606:11;32601:2;32593:6;32589:15;32582:36;32397:228;:::o;32631:366::-;32773:3;32794:67;32858:2;32853:3;32794:67;:::i;:::-;32787:74;;32870:93;32959:3;32870:93;:::i;:::-;32988:2;32983:3;32979:12;32972:19;;32631:366;;;:::o;33003:419::-;33169:4;33207:2;33196:9;33192:18;33184:26;;33256:9;33250:4;33246:20;33242:1;33231:9;33227:17;33220:47;33284:131;33410:4;33284:131;:::i;:::-;33276:139;;33003:419;;;:::o;33428:98::-;33479:6;33513:5;33507:12;33497:22;;33428:98;;;:::o;33532:168::-;33615:11;33649:6;33644:3;33637:19;33689:4;33684:3;33680:14;33665:29;;33532:168;;;;:::o;33706:360::-;33792:3;33820:38;33852:5;33820:38;:::i;:::-;33874:70;33937:6;33932:3;33874:70;:::i;:::-;33867:77;;33953:52;33998:6;33993:3;33986:4;33979:5;33975:16;33953:52;:::i;:::-;34030:29;34052:6;34030:29;:::i;:::-;34025:3;34021:39;34014:46;;33796:270;33706:360;;;;:::o;34072:1053::-;34395:4;34433:3;34422:9;34418:19;34410:27;;34447:71;34515:1;34504:9;34500:17;34491:6;34447:71;:::i;:::-;34528:72;34596:2;34585:9;34581:18;34572:6;34528:72;:::i;:::-;34647:9;34641:4;34637:20;34632:2;34621:9;34617:18;34610:48;34675:108;34778:4;34769:6;34675:108;:::i;:::-;34667:116;;34830:9;34824:4;34820:20;34815:2;34804:9;34800:18;34793:48;34858:108;34961:4;34952:6;34858:108;:::i;:::-;34850:116;;35014:9;35008:4;35004:20;34998:3;34987:9;34983:19;34976:49;35042:76;35113:4;35104:6;35042:76;:::i;:::-;35034:84;;34072:1053;;;;;;;;:::o;35131:141::-;35187:5;35218:6;35212:13;35203:22;;35234:32;35260:5;35234:32;:::i;:::-;35131:141;;;;:::o;35278:349::-;35347:6;35396:2;35384:9;35375:7;35371:23;35367:32;35364:119;;;35402:79;;:::i;:::-;35364:119;35522:1;35547:63;35602:7;35593:6;35582:9;35578:22;35547:63;:::i;:::-;35537:73;;35493:127;35278:349;;;;:::o;35633:106::-;35677:8;35726:5;35721:3;35717:15;35696:36;;35633:106;;;:::o;35745:183::-;35780:3;35818:1;35800:16;35797:23;35794:128;;;35856:1;35853;35850;35835:23;35878:34;35909:1;35903:8;35878:34;:::i;:::-;35871:41;;35794:128;35745:183;:::o;35934:711::-;35973:3;36011:4;35993:16;35990:26;36019:5;35987:39;36048:20;;:::i;:::-;36123:1;36105:16;36101:24;36098:1;36092:4;36077:49;36156:4;36150:11;36255:16;36248:4;36240:6;36236:17;36233:39;36200:18;36192:6;36189:30;36173:113;36170:146;;;36301:5;;;;36170:146;36347:6;36341:4;36337:17;36383:3;36377:10;36410:18;36402:6;36399:30;36396:43;;;36432:5;;;;;;36396:43;36480:6;36473:4;36468:3;36464:14;36460:27;36539:1;36521:16;36517:24;36511:4;36507:35;36502:3;36499:44;36496:57;;;36546:5;;;;;;;36496:57;36563;36611:6;36605:4;36601:17;36593:6;36589:30;36583:4;36563:57;:::i;:::-;36636:3;36629:10;;35977:668;;;;;35934:711;;:::o;36651:239::-;36791:34;36787:1;36779:6;36775:14;36768:58;36860:22;36855:2;36847:6;36843:15;36836:47;36651:239;:::o;36896:366::-;37038:3;37059:67;37123:2;37118:3;37059:67;:::i;:::-;37052:74;;37135:93;37224:3;37135:93;:::i;:::-;37253:2;37248:3;37244:12;37237:19;;36896:366;;;:::o;37268:419::-;37434:4;37472:2;37461:9;37457:18;37449:26;;37521:9;37515:4;37511:20;37507:1;37496:9;37492:17;37485:47;37549:131;37675:4;37549:131;:::i;:::-;37541:139;;37268:419;;;:::o;37693:227::-;37833:34;37829:1;37821:6;37817:14;37810:58;37902:10;37897:2;37889:6;37885:15;37878:35;37693:227;:::o;37926:366::-;38068:3;38089:67;38153:2;38148:3;38089:67;:::i;:::-;38082:74;;38165:93;38254:3;38165:93;:::i;:::-;38283:2;38278:3;38274:12;38267:19;;37926:366;;;:::o;38298:419::-;38464:4;38502:2;38491:9;38487:18;38479:26;;38551:9;38545:4;38541:20;38537:1;38526:9;38522:17;38515:47;38579:131;38705:4;38579:131;:::i;:::-;38571:139;;38298:419;;;:::o;38723:751::-;38946:4;38984:3;38973:9;38969:19;38961:27;;38998:71;39066:1;39055:9;39051:17;39042:6;38998:71;:::i;:::-;39079:72;39147:2;39136:9;39132:18;39123:6;39079:72;:::i;:::-;39161;39229:2;39218:9;39214:18;39205:6;39161:72;:::i;:::-;39243;39311:2;39300:9;39296:18;39287:6;39243:72;:::i;:::-;39363:9;39357:4;39353:20;39347:3;39336:9;39332:19;39325:49;39391:76;39462:4;39453:6;39391:76;:::i;:::-;39383:84;;38723:751;;;;;;;;:::o

Swarm Source

ipfs://293c7b15f11d15240a212272828d359b0ab7e91107c18700869cb8e38ec9106e
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.