Contract 0x07082f6379588c4482b8feb4eac20ac64b3cbb58

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa51e3e322e8fe29a9d56152d91320008a997ca60fa240afa7f33e93b87c553deUnpause263158602022-05-14 11:49:0094 days 15 hrs ago0x3bc14f7b6c5871994caafdcc5fd42d436b6f4286 IN  0x07082f6379588c4482b8feb4eac20ac64b3cbb580 MATIC0.000221918632 8.844198668
0xa9934d1b1c03948576d42797f709ddd6effff485e760fffeedd6bec3ddbc78dcSet Mint Access263158582022-05-14 11:48:4094 days 15 hrs ago0x3bc14f7b6c5871994caafdcc5fd42d436b6f4286 IN  0x07082f6379588c4482b8feb4eac20ac64b3cbb580 MATIC0.000424999446 8.839974336
0x118c44b6481dd84408f2ae98a5d63d2d739a20d7e09bacdfa1aef2965e3bd3bc0x60806040263158512022-05-14 11:47:3094 days 15 hrs ago0x3bc14f7b6c5871994caafdcc5fd42d436b6f4286 IN  Contract Creation0 MATIC0.03150012137 8.931025916
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xe8c0184198eF8265985F24E96B693Ac96646451D

Contract Name:
NFT1155

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-13
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity =0.8.12;

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.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;
    }
}

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.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);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.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;
}

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.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);
}

// import "@openzeppelin/contracts/token/ERC1155/ERC1155.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;
    }
}

contract NFT1155 is ERC1155 {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    event MintAccessGranted(address);
    event MintAccessRevoked(address);
    event GaslessListingAccessGranted(address);
    event GaslessListingAccessRevoked(address);

    // Contract name
    string public name;
    // Contract symbol
    string public symbol;

    mapping(address => bool) private _owner;
    bool private _paused;

    mapping(address => bool) public MintAccess;

    mapping(address => bool) public GaslessListingAccess;

    constructor(
        string memory name_,
        string memory symbol_,
        address[] memory owner
    ) ERC1155("") {
        name = name_;
        symbol = symbol_;
        for (uint256 i = 0; i < owner.length; i++) {
            _owner[owner[i]] = true;
        }
        _paused = true;
    }

    /**
     * @dev Returns true if caller is the address of the current owner.
     */
    function isOwner(address caller) public view virtual returns (bool) {
        return _owner[caller];
    }

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

    modifier requiresMintAccess() {
        require(
            isOwner(_msgSender()) || MintAccess[_msgSender()],
            "NFT1155#requiresMintAccess: No Mint Access"
        );
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "NFT1155#Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "NFT1155#Pausable: not paused");
        _;
    }

    function pause() external onlyOwner {
        _paused = true;
        emit Paused(_msgSender());
    }

    function unpause() external onlyOwner {
        _paused = false;
        emit Unpaused(_msgSender());
    }

    function setMintAccess(address minter, bool val) external onlyOwner {
        MintAccess[minter] = val;
        if (val) {
            emit MintAccessGranted(minter);
        } else {
            emit MintAccessRevoked(minter);
        }
    }

    function setGaslessListingAccess(address marketplaceproxy, bool val)
        external
        onlyOwner
    {
        GaslessListingAccess[marketplaceproxy] = val;
        if (val) {
            emit GaslessListingAccessGranted(marketplaceproxy);
        } else {
            emit GaslessListingAccessRevoked(marketplaceproxy);
        }
    }

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

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

    function uint2str(uint256 _i) internal pure returns (string memory str) {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 length;
        while (j != 0) {
            length++;
            j /= 10;
        }
        bytes memory bstr = new bytes(length);
        uint256 k = length;
        j = _i;
        while (j != 0) {
            bstr[--k] = bytes1(uint8(48 + (j % 10)));
            j /= 10;
        }
        str = string(bstr);
    }

    function uri(uint256 _id) public view override returns (string memory) {
        return string.concat(super.uri(_id), uint2str(_id));
    }

    /**
     * Override isApprovedForAll to auto-approve OS's proxy contract
     */
    function isApprovedForAll(address _owner, address _operator)
        public
        view
        override
        returns (bool isOperator)
    {
        // if OpenSea's ERC1155 Proxy Address is detected, auto-return true
        if (GaslessListingAccess[_operator]) {
            return true;
        }
        // otherwise, use the default ERC1155.isApprovedForAll()
        return super.isApprovedForAll(_owner, _operator);
    }

    /**
     * @dev Override setApprovalForAll to add Pausable feature
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
        whenNotPaused
    {
        super.setApprovalForAll(operator, approved);
    }

    function mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external requiresMintAccess {
        _mint(account, id, amount, data);
    }

    function mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external requiresMintAccess {
        _mintBatch(to, ids, amounts, data);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address[]","name":"owner","type":"address[]"}],"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":false,"internalType":"address","name":"","type":"address"}],"name":"GaslessListingAccessGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"GaslessListingAccessRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"MintAccessGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"MintAccessRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GaslessListingAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MintAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"marketplaceproxy","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"setGaslessListingAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"},{"internalType":"bool","name":"val","type":"bool"}],"name":"setMintAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620042f0380380620042f08339818101604052810190620000379190620004f1565b6040518060200160405280600081525062000058816200014860201b60201c565b5082600390805190602001906200007192919062000164565b5081600490805190602001906200008a92919062000164565b5060005b81518110156200012357600160056000848481518110620000b457620000b3620005aa565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200011a9062000612565b9150506200008e565b506001600660006101000a81548160ff021916908315150217905550505050620006c5565b80600290805190602001906200016092919062000164565b5050565b82805462000172906200068f565b90600052602060002090601f016020900481019282620001965760008555620001e2565b82601f10620001b157805160ff1916838001178555620001e2565b82800160010185558215620001e2579182015b82811115620001e1578251825591602001919060010190620001c4565b5b509050620001f19190620001f5565b5090565b5b8082111562000210576000816000905550600101620001f6565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200027d8262000232565b810181811067ffffffffffffffff821117156200029f576200029e62000243565b5b80604052505050565b6000620002b462000214565b9050620002c2828262000272565b919050565b600067ffffffffffffffff821115620002e557620002e462000243565b5b620002f08262000232565b9050602081019050919050565b60005b838110156200031d57808201518184015260208101905062000300565b838111156200032d576000848401525b50505050565b60006200034a6200034484620002c7565b620002a8565b9050828152602081018484840111156200036957620003686200022d565b5b62000376848285620002fd565b509392505050565b600082601f83011262000396576200039562000228565b5b8151620003a884826020860162000333565b91505092915050565b600067ffffffffffffffff821115620003cf57620003ce62000243565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200041282620003e5565b9050919050565b620004248162000405565b81146200043057600080fd5b50565b600081519050620004448162000419565b92915050565b6000620004616200045b84620003b1565b620002a8565b90508083825260208201905060208402830185811115620004875762000486620003e0565b5b835b81811015620004b457806200049f888262000433565b84526020840193505060208101905062000489565b5050509392505050565b600082601f830112620004d657620004d562000228565b5b8151620004e88482602086016200044a565b91505092915050565b6000806000606084860312156200050d576200050c6200021e565b5b600084015167ffffffffffffffff8111156200052e576200052d62000223565b5b6200053c868287016200037e565b935050602084015167ffffffffffffffff81111562000560576200055f62000223565b5b6200056e868287016200037e565b925050604084015167ffffffffffffffff81111562000592576200059162000223565b5b620005a086828701620004be565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006200061f8262000608565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620006555762000654620005d9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006a857607f821691505b60208210811415620006bf57620006be62000660565b5b50919050565b613c1b80620006d56000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80633f4ba83a116100b85780638456cb591161007c5780638456cb591461035d57806395d89b4114610367578063a22cb46514610385578063cd86cefa146103a1578063e985e9c5146103bd578063f242432a146103ed57610136565b80633f4ba83a146102b957806344048df8146102c35780634e1273f4146102f35780635c975abb14610323578063731133e91461034157610136565b80631729f712116100ff5780631729f712146102055780631f7fdffa1461022157806322982a971461023d5780632eb2c2d61461026d5780632f54bf6e1461028957610136565b8062fdd58e1461013b57806301ffc9a71461016b57806302fe53051461019b57806306fdde03146101b75780630e89341c146101d5575b600080fd5b61015560048036038101906101509190612488565b610409565b60405161016291906124d7565b60405180910390f35b6101856004803603810190610180919061254a565b6104d2565b6040516101929190612592565b60405180910390f35b6101b560048036038101906101b091906126f3565b6105b4565b005b6101bf61060f565b6040516101cc91906127c4565b60405180910390f35b6101ef60048036038101906101ea91906127e6565b61069d565b6040516101fc91906127c4565b60405180910390f35b61021f600480360381019061021a919061283f565b6106d8565b005b61023b600480360381019061023691906129e8565b6107fc565b005b61025760048036038101906102529190612aa3565b6108b8565b6040516102649190612592565b60405180910390f35b61028760048036038101906102829190612ad0565b6108d8565b005b6102a3600480360381019061029e9190612aa3565b610979565b6040516102b09190612592565b60405180910390f35b6102c16109cf565b005b6102dd60048036038101906102d89190612aa3565b610a79565b6040516102ea9190612592565b60405180910390f35b61030d60048036038101906103089190612c62565b610a99565b60405161031a9190612d98565b60405180910390f35b61032b610bb2565b6040516103389190612592565b60405180910390f35b61035b60048036038101906103569190612dba565b610bc9565b005b610365610c85565b005b61036f610d2f565b60405161037c91906127c4565b60405180910390f35b61039f600480360381019061039a919061283f565b610dbd565b005b6103bb60048036038101906103b6919061283f565b610e13565b005b6103d760048036038101906103d29190612e3d565b610f37565b6040516103e49190612592565b60405180910390f35b61040760048036038101906104029190612e7d565b610fa7565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561047a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047190612f86565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105ad57506105ac82611048565b5b9050919050565b6105c46105bf6110b2565b610979565b610603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fa90612ff2565b60405180910390fd5b61060c816110ba565b50565b6003805461061c90613041565b80601f016020809104026020016040519081016040528092919081815260200182805461064890613041565b80156106955780601f1061066a57610100808354040283529160200191610695565b820191906000526020600020905b81548152906001019060200180831161067857829003601f168201915b505050505081565b60606106a8826110d4565b6106b183611168565b6040516020016106c29291906130af565b6040516020818303038152906040529050919050565b6106e86106e36110b2565b610979565b610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e90612ff2565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156107c0577fe46fef8bbff1389d9010703cf8ebb363fb3daf5bf56edc27080b67bc8d9251ea826040516107b391906130e2565b60405180910390a16107f8565b7fed998b960f6340d045f620c119730f7aa7995e7425c2401d3a5b64ff998a59e9826040516107ef91906130e2565b60405180910390a15b5050565b61080c6108076110b2565b610979565b8061086757506007600061081e6110b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d9061316f565b60405180910390fd5b6108b2848484846112cf565b50505050565b60086020528060005260406000206000915054906101000a900460ff1681565b6108e06110b2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109265750610925856109206110b2565b610f37565b5b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c90613201565b60405180910390fd5b61097285858585856114fc565b5050505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6109df6109da6110b2565b610979565b610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590612ff2565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a626110b2565b604051610a6f91906130e2565b60405180910390a1565b60076020528060005260406000206000915054906101000a900460ff1681565b60608151835114610adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad690613293565b60405180910390fd5b6000835167ffffffffffffffff811115610afc57610afb6125c8565b5b604051908082528060200260200182016040528015610b2a5781602001602082028036833780820191505090505b50905060005b8451811015610ba757610b77858281518110610b4f57610b4e6132b3565b5b6020026020010151858381518110610b6a57610b696132b3565b5b6020026020010151610409565b828281518110610b8a57610b896132b3565b5b60200260200101818152505080610ba090613311565b9050610b30565b508091505092915050565b6000600660009054906101000a900460ff16905090565b610bd9610bd46110b2565b610979565b80610c34575060076000610beb6110b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a9061316f565b60405180910390fd5b610c7f8484848461181e565b50505050565b610c95610c906110b2565b610979565b610cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccb90612ff2565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d186110b2565b604051610d2591906130e2565b60405180910390a1565b60048054610d3c90613041565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890613041565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b505050505081565b610dc5610bb2565b15610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc906133a6565b60405180910390fd5b610e0f82826119cf565b5050565b610e23610e1e6110b2565b610979565b610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990612ff2565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015610efb577f6f3e843b89d82464ae803328c5e39220b78c2586807dd60349953364eb2c41b082604051610eee91906130e2565b60405180910390a1610f33565b7f3db8c5067e2494a739da2dd36c57b9bec64d2687e177861fb451b91deb70914682604051610f2a91906130e2565b60405180910390a15b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f945760019050610fa1565b610f9e83836119e5565b90505b92915050565b610faf6110b2565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ff55750610ff485610fef6110b2565b610f37565b5b611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613438565b60405180910390fd5b6110418585858585611a79565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906110d092919061233d565b5050565b6060600280546110e390613041565b80601f016020809104026020016040519081016040528092919081815260200182805461110f90613041565b801561115c5780601f106111315761010080835404028352916020019161115c565b820191906000526020600020905b81548152906001019060200180831161113f57829003601f168201915b50505050509050919050565b606060008214156111b0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506112ca565b600082905060005b600082146111e25780806111cb90613311565b915050600a826111db9190613487565b91506111b8565b60008167ffffffffffffffff8111156111fe576111fd6125c8565b5b6040519080825280601f01601f1916602001820160405280156112305781602001600182028036833780820191505090505b50905060008290508593505b600084146112c257600a8461125191906134b8565b603061125d91906134e9565b60f81b828261126b9061353f565b9250828151811061127f5761127e6132b3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a846112bb9190613487565b935061123c565b819450505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906135db565b60405180910390fd5b8151835114611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a9061366d565b60405180910390fd5b600061138d6110b2565b905061139e81600087878787611d15565b60005b8451811015611457578381815181106113bd576113bc6132b3565b5b60200260200101516000808784815181106113db576113da6132b3565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143d91906134e9565b92505081905550808061144f90613311565b9150506113a1565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114cf92919061368d565b60405180910390a46114e681600087878787611d73565b6114f581600087878787611d7b565b5050505050565b8151835114611540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115379061366d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613736565b60405180910390fd5b60006115ba6110b2565b90506115ca818787878787611d15565b60005b845181101561177b5760008582815181106115eb576115ea6132b3565b5b60200260200101519050600085838151811061160a576116096132b3565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906137c8565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176091906134e9565b925050819055505050508061177490613311565b90506115cd565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516117f292919061368d565b60405180910390a4611808818787878787611d73565b611816818787878787611d7b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561188e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611885906135db565b60405180910390fd5b60006118986110b2565b905060006118a585611f53565b905060006118b285611f53565b90506118c383600089858589611d15565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461192291906134e9565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516119a09291906137e8565b60405180910390a46119b783600089858589611d73565b6119c683600089898989611fcd565b50505050505050565b6119e16119da6110b2565b83836121a5565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae090613736565b60405180910390fd5b6000611af36110b2565b90506000611b0085611f53565b90506000611b0d85611f53565b9050611b1d838989858589611d15565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab906137c8565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c6991906134e9565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611ce69291906137e8565b60405180910390a4611cfc848a8a86868a611d73565b611d0a848a8a8a8a8a611fcd565b505050505050505050565b611d1d610bb2565b15611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d54906133a6565b60405180910390fd5b611d6b868686868686612312565b505050505050565b505050505050565b611d9a8473ffffffffffffffffffffffffffffffffffffffff1661231a565b15611f4b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611de0959493929190613866565b6020604051808303816000875af1925050508015611e1c57506040513d601f19601f82011682018060405250810190611e1991906138e3565b60015b611ec257611e2861391d565b806308c379a01415611e855750611e3d61393f565b80611e485750611e87565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7c91906127c4565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613a47565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613ad9565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611f7257611f716125c8565b5b604051908082528060200260200182016040528015611fa05781602001602082028036833780820191505090505b5090508281600081518110611fb857611fb76132b3565b5b60200260200101818152505080915050919050565b611fec8473ffffffffffffffffffffffffffffffffffffffff1661231a565b1561219d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612032959493929190613af9565b6020604051808303816000875af192505050801561206e57506040513d601f19601f8201168201806040525081019061206b91906138e3565b60015b6121145761207a61391d565b806308c379a014156120d7575061208f61393f565b8061209a57506120d9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce91906127c4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90613a47565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613ad9565b60405180910390fd5b505b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90613bc5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123059190612592565b60405180910390a3505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461234990613041565b90600052602060002090601f01602090048101928261236b57600085556123b2565b82601f1061238457805160ff19168380011785556123b2565b828001600101855582156123b2579182015b828111156123b1578251825591602001919060010190612396565b5b5090506123bf91906123c3565b5090565b5b808211156123dc5760008160009055506001016123c4565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061241f826123f4565b9050919050565b61242f81612414565b811461243a57600080fd5b50565b60008135905061244c81612426565b92915050565b6000819050919050565b61246581612452565b811461247057600080fd5b50565b6000813590506124828161245c565b92915050565b6000806040838503121561249f5761249e6123ea565b5b60006124ad8582860161243d565b92505060206124be85828601612473565b9150509250929050565b6124d181612452565b82525050565b60006020820190506124ec60008301846124c8565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612527816124f2565b811461253257600080fd5b50565b6000813590506125448161251e565b92915050565b6000602082840312156125605761255f6123ea565b5b600061256e84828501612535565b91505092915050565b60008115159050919050565b61258c81612577565b82525050565b60006020820190506125a76000830184612583565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612600826125b7565b810181811067ffffffffffffffff8211171561261f5761261e6125c8565b5b80604052505050565b60006126326123e0565b905061263e82826125f7565b919050565b600067ffffffffffffffff82111561265e5761265d6125c8565b5b612667826125b7565b9050602081019050919050565b82818337600083830152505050565b600061269661269184612643565b612628565b9050828152602081018484840111156126b2576126b16125b2565b5b6126bd848285612674565b509392505050565b600082601f8301126126da576126d96125ad565b5b81356126ea848260208601612683565b91505092915050565b600060208284031215612709576127086123ea565b5b600082013567ffffffffffffffff811115612727576127266123ef565b5b612733848285016126c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561277657808201518184015260208101905061275b565b83811115612785576000848401525b50505050565b60006127968261273c565b6127a08185612747565b93506127b0818560208601612758565b6127b9816125b7565b840191505092915050565b600060208201905081810360008301526127de818461278b565b905092915050565b6000602082840312156127fc576127fb6123ea565b5b600061280a84828501612473565b91505092915050565b61281c81612577565b811461282757600080fd5b50565b60008135905061283981612813565b92915050565b60008060408385031215612856576128556123ea565b5b60006128648582860161243d565b92505060206128758582860161282a565b9150509250929050565b600067ffffffffffffffff82111561289a576128996125c8565b5b602082029050602081019050919050565b600080fd5b60006128c36128be8461287f565b612628565b905080838252602082019050602084028301858111156128e6576128e56128ab565b5b835b8181101561290f57806128fb8882612473565b8452602084019350506020810190506128e8565b5050509392505050565b600082601f83011261292e5761292d6125ad565b5b813561293e8482602086016128b0565b91505092915050565b600067ffffffffffffffff821115612962576129616125c8565b5b61296b826125b7565b9050602081019050919050565b600061298b61298684612947565b612628565b9050828152602081018484840111156129a7576129a66125b2565b5b6129b2848285612674565b509392505050565b600082601f8301126129cf576129ce6125ad565b5b81356129df848260208601612978565b91505092915050565b60008060008060808587031215612a0257612a016123ea565b5b6000612a108782880161243d565b945050602085013567ffffffffffffffff811115612a3157612a306123ef565b5b612a3d87828801612919565b935050604085013567ffffffffffffffff811115612a5e57612a5d6123ef565b5b612a6a87828801612919565b925050606085013567ffffffffffffffff811115612a8b57612a8a6123ef565b5b612a97878288016129ba565b91505092959194509250565b600060208284031215612ab957612ab86123ea565b5b6000612ac78482850161243d565b91505092915050565b600080600080600060a08688031215612aec57612aeb6123ea565b5b6000612afa8882890161243d565b9550506020612b0b8882890161243d565b945050604086013567ffffffffffffffff811115612b2c57612b2b6123ef565b5b612b3888828901612919565b935050606086013567ffffffffffffffff811115612b5957612b586123ef565b5b612b6588828901612919565b925050608086013567ffffffffffffffff811115612b8657612b856123ef565b5b612b92888289016129ba565b9150509295509295909350565b600067ffffffffffffffff821115612bba57612bb96125c8565b5b602082029050602081019050919050565b6000612bde612bd984612b9f565b612628565b90508083825260208201905060208402830185811115612c0157612c006128ab565b5b835b81811015612c2a5780612c16888261243d565b845260208401935050602081019050612c03565b5050509392505050565b600082601f830112612c4957612c486125ad565b5b8135612c59848260208601612bcb565b91505092915050565b60008060408385031215612c7957612c786123ea565b5b600083013567ffffffffffffffff811115612c9757612c966123ef565b5b612ca385828601612c34565b925050602083013567ffffffffffffffff811115612cc457612cc36123ef565b5b612cd085828601612919565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d0f81612452565b82525050565b6000612d218383612d06565b60208301905092915050565b6000602082019050919050565b6000612d4582612cda565b612d4f8185612ce5565b9350612d5a83612cf6565b8060005b83811015612d8b578151612d728882612d15565b9750612d7d83612d2d565b925050600181019050612d5e565b5085935050505092915050565b60006020820190508181036000830152612db28184612d3a565b905092915050565b60008060008060808587031215612dd457612dd36123ea565b5b6000612de28782880161243d565b9450506020612df387828801612473565b9350506040612e0487828801612473565b925050606085013567ffffffffffffffff811115612e2557612e246123ef565b5b612e31878288016129ba565b91505092959194509250565b60008060408385031215612e5457612e536123ea565b5b6000612e628582860161243d565b9250506020612e738582860161243d565b9150509250929050565b600080600080600060a08688031215612e9957612e986123ea565b5b6000612ea78882890161243d565b9550506020612eb88882890161243d565b9450506040612ec988828901612473565b9350506060612eda88828901612473565b925050608086013567ffffffffffffffff811115612efb57612efa6123ef565b5b612f07888289016129ba565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f70602b83612747565b9150612f7b82612f14565b604082019050919050565b60006020820190508181036000830152612f9f81612f63565b9050919050565b7f4e4654313135353a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fdc602083612747565b9150612fe782612fa6565b602082019050919050565b6000602082019050818103600083015261300b81612fcf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061305957607f821691505b6020821081141561306d5761306c613012565b5b50919050565b600081905092915050565b60006130898261273c565b6130938185613073565b93506130a3818560208601612758565b80840191505092915050565b60006130bb828561307e565b91506130c7828461307e565b91508190509392505050565b6130dc81612414565b82525050565b60006020820190506130f760008301846130d3565b92915050565b7f4e4654313135352372657175697265734d696e744163636573733a204e6f204d60008201527f696e742041636365737300000000000000000000000000000000000000000000602082015250565b6000613159602a83612747565b9150613164826130fd565b604082019050919050565b600060208201905081810360008301526131888161314c565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006131eb603283612747565b91506131f68261318f565b604082019050919050565b6000602082019050818103600083015261321a816131de565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061327d602983612747565b915061328882613221565b604082019050919050565b600060208201905081810360008301526132ac81613270565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061331c82612452565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561334f5761334e6132e2565b5b600182019050919050565b7f4e465431313535235061757361626c653a207061757365640000000000000000600082015250565b6000613390601883612747565b915061339b8261335a565b602082019050919050565b600060208201905081810360008301526133bf81613383565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613422602983612747565b915061342d826133c6565b604082019050919050565b6000602082019050818103600083015261345181613415565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061349282612452565b915061349d83612452565b9250826134ad576134ac613458565b5b828204905092915050565b60006134c382612452565b91506134ce83612452565b9250826134de576134dd613458565b5b828206905092915050565b60006134f482612452565b91506134ff83612452565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613534576135336132e2565b5b828201905092915050565b600061354a82612452565b9150600082141561355e5761355d6132e2565b5b600182039050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006135c5602183612747565b91506135d082613569565b604082019050919050565b600060208201905081810360008301526135f4816135b8565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613657602883612747565b9150613662826135fb565b604082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b600060408201905081810360008301526136a78185612d3a565b905081810360208301526136bb8184612d3a565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613720602583612747565b915061372b826136c4565b604082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006137b2602a83612747565b91506137bd82613756565b604082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b60006040820190506137fd60008301856124c8565b61380a60208301846124c8565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061383882613811565b613842818561381c565b9350613852818560208601612758565b61385b816125b7565b840191505092915050565b600060a08201905061387b60008301886130d3565b61388860208301876130d3565b818103604083015261389a8186612d3a565b905081810360608301526138ae8185612d3a565b905081810360808301526138c2818461382d565b90509695505050505050565b6000815190506138dd8161251e565b92915050565b6000602082840312156138f9576138f86123ea565b5b6000613907848285016138ce565b91505092915050565b60008160e01c9050919050565b600060033d111561393c5760046000803e613939600051613910565b90505b90565b600060443d101561394f576139d2565b6139576123e0565b60043d036004823e80513d602482011167ffffffffffffffff8211171561397f5750506139d2565b808201805167ffffffffffffffff81111561399d57505050506139d2565b80602083010160043d0385018111156139ba5750505050506139d2565b6139c9826020018501866125f7565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613a31603483612747565b9150613a3c826139d5565b604082019050919050565b60006020820190508181036000830152613a6081613a24565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613ac3602883612747565b9150613ace82613a67565b604082019050919050565b60006020820190508181036000830152613af281613ab6565b9050919050565b600060a082019050613b0e60008301886130d3565b613b1b60208301876130d3565b613b2860408301866124c8565b613b3560608301856124c8565b8181036080830152613b47818461382d565b90509695505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613baf602983612747565b9150613bba82613b53565b604082019050919050565b60006020820190508181036000830152613bde81613ba2565b905091905056fea2646970667358221220367577fca62bdc25d47a49e8eda5bf28f3ef323742656e87717a61c64a0c578c64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000074e4654313135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000003ce5259029d1636e93f4f5080fadab70c9e962d80000000000000000000000003bc14f7b6c5871994caafdcc5fd42d436b6f4286000000000000000000000000616a9b8bfaf2189f7b896edc75c9af67af89df93

Deployed ByteCode Sourcemap

37296:5663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20849:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19822:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40603:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37768:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41546:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39984:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42734:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37972:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22994:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38444:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39866:110;;;:::i;:::-;;37921:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21333:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39073:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42526:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39753:105;;;:::i;:::-;;37817:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42317:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40242:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41783:444;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22516:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20849:318;20980:7;21046:1;21027:21;;:7;:21;;;;21005:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;21137:9;:13;21147:2;21137:13;;;;;;;;;;;:22;21151:7;21137:22;;;;;;;;;;;;;;;;21130:29;;20849:318;;;;:::o;19822:360::-;19969:4;20026:26;20011:41;;;:11;:41;;;;:110;;;;20084:37;20069:52;;;:11;:52;;;;20011:110;:163;;;;20138:36;20162:11;20138:23;:36::i;:::-;20011:163;19991:183;;19822:360;;;:::o;40603:91::-;38685:21;38693:12;:10;:12::i;:::-;38685:7;:21::i;:::-;38677:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40671:15:::1;40679:6;40671:7;:15::i;:::-;40603:91:::0;:::o;37768:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41546:141::-;41602:13;41649:14;41659:3;41649:9;:14::i;:::-;41665:13;41674:3;41665:8;:13::i;:::-;41635:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41628:51;;41546:141;;;:::o;39984:250::-;38685:21;38693:12;:10;:12::i;:::-;38685:7;:21::i;:::-;38677:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40084:3:::1;40063:10;:18;40074:6;40063:18;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;40102:3;40098:129;;;40127:25;40145:6;40127:25;;;;;;:::i;:::-;;;;;;;;40098:129;;;40190:25;40208:6;40190:25;;;;;;:::i;:::-;;;;;;;;40098:129;39984:250:::0;;:::o;42734:222::-;38834:21;38842:12;:10;:12::i;:::-;38834:7;:21::i;:::-;:49;;;;38859:10;:24;38870:12;:10;:12::i;:::-;38859:24;;;;;;;;;;;;;;;;;;;;;;;;;38834:49;38812:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;42914:34:::1;42925:2;42929:3;42934:7;42943:4;42914:10;:34::i;:::-;42734:222:::0;;;;:::o;37972:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;22994:442::-;23235:12;:10;:12::i;:::-;23227:20;;:4;:20;;;:60;;;;23251:36;23268:4;23274:12;:10;:12::i;:::-;23251:16;:36::i;:::-;23227:60;23205:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23376:52;23399:4;23405:2;23409:3;23414:7;23423:4;23376:22;:52::i;:::-;22994:442;;;;;:::o;38444:108::-;38506:4;38530:6;:14;38537:6;38530:14;;;;;;;;;;;;;;;;;;;;;;;;;38523:21;;38444:108;;;:::o;39866:110::-;38685:21;38693:12;:10;:12::i;:::-;38685:7;:21::i;:::-;38677:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39925:5:::1;39915:7;;:15;;;;;;;;;;;;;;;;;;39946:22;39955:12;:10;:12::i;:::-;39946:22;;;;;;:::i;:::-;;;;;;;;39866:110::o:0;37921:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;21333:561::-;21489:16;21564:3;:10;21545:8;:15;:29;21523:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;21656:30;21703:8;:15;21689:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21656:63;;21737:9;21732:122;21756:8;:15;21752:1;:19;21732:122;;;21812:30;21822:8;21831:1;21822:11;;;;;;;;:::i;:::-;;;;;;;;21835:3;21839:1;21835:6;;;;;;;;:::i;:::-;;;;;;;;21812:9;:30::i;:::-;21793:13;21807:1;21793:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21773:3;;;;:::i;:::-;;;21732:122;;;;21873:13;21866:20;;;21333:561;;;;:::o;39073:86::-;39120:4;39144:7;;;;;;;;;;;39137:14;;39073:86;:::o;42526:200::-;38834:21;38842:12;:10;:12::i;:::-;38834:7;:21::i;:::-;:49;;;;38859:10;:24;38870:12;:10;:12::i;:::-;38859:24;;;;;;;;;;;;;;;;;;;;;;;;;38834:49;38812:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;42686:32:::1;42692:7;42701:2;42705:6;42713:4;42686:5;:32::i;:::-;42526:200:::0;;;;:::o;39753:105::-;38685:21;38693:12;:10;:12::i;:::-;38685:7;:21::i;:::-;38677:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39810:4:::1;39800:7;;:14;;;;;;;;;;;;;;;;;;39830:20;39837:12;:10;:12::i;:::-;39830:20;;;;;;:::i;:::-;;;;;;;;39753:105::o:0;37817:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42317:201::-;39399:8;:6;:8::i;:::-;39398:9;39390:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;42467:43:::1;42491:8;42501;42467:23;:43::i;:::-;42317:201:::0;;:::o;40242:353::-;38685:21;38693:12;:10;:12::i;:::-;38685:7;:21::i;:::-;38677:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40405:3:::1;40364:20;:38;40385:16;40364:38;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;40423:3;40419:169;;;40448:45;40476:16;40448:45;;;;;;:::i;:::-;;;;;;;;40419:169;;;40531:45;40559:16;40531:45;;;;;;:::i;:::-;;;;;;;;40419:169;40242:353:::0;;:::o;41783:444::-;41910:15;42024:20;:31;42045:9;42024:31;;;;;;;;;;;;;;;;;;;;;;;;;42020:75;;;42079:4;42072:11;;;;42020:75;42178:41;42201:6;42209:9;42178:22;:41::i;:::-;42171:48;;41783:444;;;;;:::o;22516:401::-;22732:12;:10;:12::i;:::-;22724:20;;:4;:20;;;:60;;;;22748:36;22765:4;22771:12;:10;:12::i;:::-;22748:16;:36::i;:::-;22724:60;22702:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22864:45;22882:4;22888:2;22892;22896:6;22904:4;22864:17;:45::i;:::-;22516:401;;;;;:::o;11354:207::-;11484:4;11528:25;11513:40;;;:11;:40;;;;11506:47;;11354:207;;;:::o;666:98::-;719:7;746:10;739:17;;666:98;:::o;27434:88::-;27508:6;27501:4;:13;;;;;;;;;;;;:::i;:::-;;27434:88;:::o;20593:105::-;20653:13;20686:4;20679:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20593:105;;;:::o;41029:509::-;41082:17;41122:1;41116:2;:7;41112:50;;;41140:10;;;;;;;;;;;;;;;;;;;;;41112:50;41172:9;41184:2;41172:14;;41197;41222:72;41234:1;41229;:6;41222:72;;41252:8;;;;;:::i;:::-;;;;41280:2;41275:7;;;;;:::i;:::-;;;41222:72;;;41304:17;41334:6;41324:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41304:37;;41352:9;41364:6;41352:18;;41385:2;41381:6;;41398:104;41410:1;41405;:6;41398:104;;41463:2;41459:1;:6;;;;:::i;:::-;41453:2;:13;;;;:::i;:::-;41440:28;;41428:4;41433:3;;;;:::i;:::-;;;;41428:9;;;;;;;;:::i;:::-;;;;;:40;;;;;;;;;;;41488:2;41483:7;;;;;:::i;:::-;;;41398:104;;;41525:4;41512:18;;41101:437;;;;41029:509;;;;:::o;29082:939::-;29274:1;29260:16;;:2;:16;;;;29252:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29361:7;:14;29347:3;:10;:28;29325:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;29456:16;29475:12;:10;:12::i;:::-;29456:31;;29500:66;29521:8;29539:1;29543:2;29547:3;29552:7;29561:4;29500:20;:66::i;:::-;29584:9;29579:103;29603:3;:10;29599:1;:14;29579:103;;;29660:7;29668:1;29660:10;;;;;;;;:::i;:::-;;;;;;;;29635:9;:17;29645:3;29649:1;29645:6;;;;;;;;:::i;:::-;;;;;;;;29635:17;;;;;;;;;;;:21;29653:2;29635:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;29615:3;;;;;:::i;:::-;;;;29579:103;;;;29735:2;29699:53;;29731:1;29699:53;;29713:8;29699:53;;;29739:3;29744:7;29699:53;;;;;;;:::i;:::-;;;;;;;;29765:65;29785:8;29803:1;29807:2;29811:3;29816:7;29825:4;29765:19;:65::i;:::-;29843:170;29893:8;29924:1;29941:2;29958:3;29976:7;29998:4;29843:35;:170::i;:::-;29241:780;29082:939;;;;:::o;25269:1321::-;25510:7;:14;25496:3;:10;:28;25474:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;25625:1;25611:16;;:2;:16;;;;25603:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25682:16;25701:12;:10;:12::i;:::-;25682:31;;25726:60;25747:8;25757:4;25763:2;25767:3;25772:7;25781:4;25726:20;:60::i;:::-;25804:9;25799:470;25823:3;:10;25819:1;:14;25799:470;;;25855:10;25868:3;25872:1;25868:6;;;;;;;;:::i;:::-;;;;;;;;25855:19;;25889:14;25906:7;25914:1;25906:10;;;;;;;;:::i;:::-;;;;;;;;25889:27;;25933:19;25955:9;:13;25965:2;25955:13;;;;;;;;;;;:19;25969:4;25955:19;;;;;;;;;;;;;;;;25933:41;;26030:6;26015:11;:21;;25989:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;26194:6;26180:11;:20;26158:9;:13;26168:2;26158:13;;;;;;;;;;;:19;26172:4;26158:19;;;;;;;;;;;;;;;:42;;;;26251:6;26230:9;:13;26240:2;26230:13;;;;;;;;;;;:17;26244:2;26230:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25840:429;;;25835:3;;;;:::i;:::-;;;25799:470;;;;26316:2;26286:47;;26310:4;26286:47;;26300:8;26286:47;;;26320:3;26325:7;26286:47;;;;;;;:::i;:::-;;;;;;;;26346:59;26366:8;26376:4;26382:2;26386:3;26391:7;26400:4;26346:19;:59::i;:::-;26418:164;26468:8;26491:4;26510:2;26527:3;26545:7;26567:4;26418:35;:164::i;:::-;25463:1127;25269:1321;;;;;:::o;27908:818::-;28075:1;28061:16;;:2;:16;;;;28053:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28128:16;28147:12;:10;:12::i;:::-;28128:31;;28170:20;28193:21;28211:2;28193:17;:21::i;:::-;28170:44;;28225:24;28252:25;28270:6;28252:17;:25::i;:::-;28225:52;;28290:66;28311:8;28329:1;28333:2;28337:3;28342:7;28351:4;28290:20;:66::i;:::-;28390:6;28369:9;:13;28379:2;28369:13;;;;;;;;;;;:17;28383:2;28369:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28449:2;28412:52;;28445:1;28412:52;;28427:8;28412:52;;;28453:2;28457:6;28412:52;;;;;;;:::i;:::-;;;;;;;;28477:65;28497:8;28515:1;28519:2;28523:3;28528:7;28537:4;28477:19;:65::i;:::-;28555:163;28600:8;28631:1;28648:2;28665;28682:6;28703:4;28555:30;:163::i;:::-;28042:684;;;27908:818;;;;:::o;21967:187::-;22094:52;22113:12;:10;:12::i;:::-;22127:8;22137;22094:18;:52::i;:::-;21967:187;;:::o;22226:218::-;22370:4;22399:18;:27;22418:7;22399:27;;;;;;;;;;;;;;;:37;22427:8;22399:37;;;;;;;;;;;;;;;;;;;;;;;;;22392:44;;22226:218;;;;:::o;23900:1011::-;24102:1;24088:16;;:2;:16;;;;24080:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24159:16;24178:12;:10;:12::i;:::-;24159:31;;24201:20;24224:21;24242:2;24224:17;:21::i;:::-;24201:44;;24256:24;24283:25;24301:6;24283:17;:25::i;:::-;24256:52;;24321:60;24342:8;24352:4;24358:2;24362:3;24367:7;24376:4;24321:20;:60::i;:::-;24394:19;24416:9;:13;24426:2;24416:13;;;;;;;;;;;:19;24430:4;24416:19;;;;;;;;;;;;;;;;24394:41;;24483:6;24468:11;:21;;24446:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;24631:6;24617:11;:20;24595:9;:13;24605:2;24595:13;;;;;;;;;;;:19;24609:4;24595:19;;;;;;;;;;;;;;;:42;;;;24680:6;24659:9;:13;24669:2;24659:13;;;;;;;;;;;:17;24673:2;24659:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24735:2;24704:46;;24729:4;24704:46;;24719:8;24704:46;;;24739:2;24743:6;24704:46;;;;;;;:::i;:::-;;;;;;;;24763:59;24783:8;24793:4;24799:2;24803:3;24808:7;24817:4;24763:19;:59::i;:::-;24835:68;24866:8;24876:4;24882:2;24886;24890:6;24898:4;24835:30;:68::i;:::-;24069:842;;;;23900:1011;;;;;:::o;40702:319::-;39399:8;:6;:8::i;:::-;39398:9;39390:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40947:66:::1;40974:8;40984:4;40990:2;40994:3;40999:7;41008:4;40947:26;:66::i;:::-;40702:319:::0;;;;;;:::o;34942:220::-;;;;;;;:::o;36076:975::-;36316:15;:2;:13;;;:15::i;:::-;36312:732;;;36386:2;36369:43;;;36435:8;36466:4;36493:3;36519:7;36549:4;36369:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36348:685;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36906:6;36899:14;;;;;;;;;;;:::i;:::-;;;;;;;;36348:685;;;36955:62;;;;;;;;;;:::i;:::-;;;;;;;;36348:685;36669:48;;;36657:60;;;:8;:60;;;;36631:199;;36760:50;;;;;;;;;;:::i;:::-;;;;;;;;36631:199;36586:259;36312:732;36076:975;;;;;;:::o;37059:230::-;37152:16;37186:22;37225:1;37211:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37186:41;;37249:7;37238:5;37244:1;37238:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37276:5;37269:12;;;37059:230;;;:::o;35170:898::-;35385:15;:2;:13;;;:15::i;:::-;35381:680;;;35455:2;35438:38;;;35499:8;35530:4;35557:2;35582:6;35611:4;35438:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35923:6;35916:14;;;;;;;;;;;:::i;:::-;;;;;;;;35417:633;;;35972:62;;;;;;;;;;:::i;:::-;;;;;;;;35417:633;35709:43;;;35697:55;;;:8;:55;;;;35693:154;;35777:50;;;;;;;;;;:::i;:::-;;;;;;;;35693:154;35648:214;35381:680;35170:898;;;;;;:::o;32479:331::-;32634:8;32625:17;;:5;:17;;;;32617:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32737:8;32699:18;:25;32718:5;32699:25;;;;;;;;;;;;;;;:35;32725:8;32699:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32783:8;32761:41;;32776:5;32761:41;;;32793:8;32761:41;;;;;;:::i;:::-;;;;;;;;32479:331;;;:::o;33766:221::-;;;;;;;:::o;2030:326::-;2090:4;2347:1;2325:7;:19;;;:23;2318:30;;2030:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;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:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:99::-;5994:6;6028:5;6022:12;6012:22;;5942:99;;;:::o;6047:169::-;6131:11;6165:6;6160:3;6153:19;6205:4;6200:3;6196:14;6181:29;;6047:169;;;;:::o;6222:307::-;6290:1;6300:113;6314:6;6311:1;6308:13;6300:113;;;6399:1;6394:3;6390:11;6384:18;6380:1;6375:3;6371:11;6364:39;6336:2;6333:1;6329:10;6324:15;;6300:113;;;6431:6;6428:1;6425:13;6422:101;;;6511:1;6502:6;6497:3;6493:16;6486:27;6422:101;6271:258;6222:307;;;:::o;6535:364::-;6623:3;6651:39;6684:5;6651:39;:::i;:::-;6706:71;6770:6;6765:3;6706:71;:::i;:::-;6699:78;;6786:52;6831:6;6826:3;6819:4;6812:5;6808:16;6786:52;:::i;:::-;6863:29;6885:6;6863:29;:::i;:::-;6858:3;6854:39;6847:46;;6627:272;6535:364;;;;:::o;6905:313::-;7018:4;7056:2;7045:9;7041:18;7033:26;;7105:9;7099:4;7095:20;7091:1;7080:9;7076:17;7069:47;7133:78;7206:4;7197:6;7133:78;:::i;:::-;7125:86;;6905:313;;;;:::o;7224:329::-;7283:6;7332:2;7320:9;7311:7;7307:23;7303:32;7300:119;;;7338:79;;:::i;:::-;7300:119;7458:1;7483:53;7528:7;7519:6;7508:9;7504:22;7483:53;:::i;:::-;7473:63;;7429:117;7224:329;;;;:::o;7559:116::-;7629:21;7644:5;7629:21;:::i;:::-;7622:5;7619:32;7609:60;;7665:1;7662;7655:12;7609:60;7559:116;:::o;7681:133::-;7724:5;7762:6;7749:20;7740:29;;7778:30;7802:5;7778:30;:::i;:::-;7681:133;;;;:::o;7820:468::-;7885:6;7893;7942:2;7930:9;7921:7;7917:23;7913:32;7910:119;;;7948:79;;:::i;:::-;7910:119;8068:1;8093:53;8138:7;8129:6;8118:9;8114:22;8093:53;:::i;:::-;8083:63;;8039:117;8195:2;8221:50;8263:7;8254:6;8243:9;8239:22;8221:50;:::i;:::-;8211:60;;8166:115;7820:468;;;;;:::o;8294:311::-;8371:4;8461:18;8453:6;8450:30;8447:56;;;8483:18;;:::i;:::-;8447:56;8533:4;8525:6;8521:17;8513:25;;8593:4;8587;8583:15;8575:23;;8294:311;;;:::o;8611:117::-;8720:1;8717;8710:12;8751:710;8847:5;8872:81;8888:64;8945:6;8888:64;:::i;:::-;8872:81;:::i;:::-;8863:90;;8973:5;9002:6;8995:5;8988:21;9036:4;9029:5;9025:16;9018:23;;9089:4;9081:6;9077:17;9069:6;9065:30;9118:3;9110:6;9107:15;9104:122;;;9137:79;;:::i;:::-;9104:122;9252:6;9235:220;9269:6;9264:3;9261:15;9235:220;;;9344:3;9373:37;9406:3;9394:10;9373:37;:::i;:::-;9368:3;9361:50;9440:4;9435:3;9431:14;9424:21;;9311:144;9295:4;9290:3;9286:14;9279:21;;9235:220;;;9239:21;8853:608;;8751:710;;;;;:::o;9484:370::-;9555:5;9604:3;9597:4;9589:6;9585:17;9581:27;9571:122;;9612:79;;:::i;:::-;9571:122;9729:6;9716:20;9754:94;9844:3;9836:6;9829:4;9821:6;9817:17;9754:94;:::i;:::-;9745:103;;9561:293;9484:370;;;;:::o;9860:307::-;9921:4;10011:18;10003:6;10000:30;9997:56;;;10033:18;;:::i;:::-;9997:56;10071:29;10093:6;10071:29;:::i;:::-;10063:37;;10155:4;10149;10145:15;10137:23;;9860:307;;;:::o;10173:410::-;10250:5;10275:65;10291:48;10332:6;10291:48;:::i;:::-;10275:65;:::i;:::-;10266:74;;10363:6;10356:5;10349:21;10401:4;10394:5;10390:16;10439:3;10430:6;10425:3;10421:16;10418:25;10415:112;;;10446:79;;:::i;:::-;10415:112;10536:41;10570:6;10565:3;10560;10536:41;:::i;:::-;10256:327;10173:410;;;;;:::o;10602:338::-;10657:5;10706:3;10699:4;10691:6;10687:17;10683:27;10673:122;;10714:79;;:::i;:::-;10673:122;10831:6;10818:20;10856:78;10930:3;10922:6;10915:4;10907:6;10903:17;10856:78;:::i;:::-;10847:87;;10663:277;10602:338;;;;:::o;10946:1363::-;11091:6;11099;11107;11115;11164:3;11152:9;11143:7;11139:23;11135:33;11132:120;;;11171:79;;:::i;:::-;11132:120;11291:1;11316:53;11361:7;11352:6;11341:9;11337:22;11316:53;:::i;:::-;11306:63;;11262:117;11446:2;11435:9;11431:18;11418:32;11477:18;11469:6;11466:30;11463:117;;;11499:79;;:::i;:::-;11463:117;11604:78;11674:7;11665:6;11654:9;11650:22;11604:78;:::i;:::-;11594:88;;11389:303;11759:2;11748:9;11744:18;11731:32;11790:18;11782:6;11779:30;11776:117;;;11812:79;;:::i;:::-;11776:117;11917:78;11987:7;11978:6;11967:9;11963:22;11917:78;:::i;:::-;11907:88;;11702:303;12072:2;12061:9;12057:18;12044:32;12103:18;12095:6;12092:30;12089:117;;;12125:79;;:::i;:::-;12089:117;12230:62;12284:7;12275:6;12264:9;12260:22;12230:62;:::i;:::-;12220:72;;12015:287;10946:1363;;;;;;;:::o;12315:329::-;12374:6;12423:2;12411:9;12402:7;12398:23;12394:32;12391:119;;;12429:79;;:::i;:::-;12391:119;12549:1;12574:53;12619:7;12610:6;12599:9;12595:22;12574:53;:::i;:::-;12564:63;;12520:117;12315:329;;;;:::o;12650:1509::-;12804:6;12812;12820;12828;12836;12885:3;12873:9;12864:7;12860:23;12856:33;12853:120;;;12892:79;;:::i;:::-;12853:120;13012:1;13037:53;13082:7;13073:6;13062:9;13058:22;13037:53;:::i;:::-;13027:63;;12983:117;13139:2;13165:53;13210:7;13201:6;13190:9;13186:22;13165:53;:::i;:::-;13155:63;;13110:118;13295:2;13284:9;13280:18;13267:32;13326:18;13318:6;13315:30;13312:117;;;13348:79;;:::i;:::-;13312:117;13453:78;13523:7;13514:6;13503:9;13499:22;13453:78;:::i;:::-;13443:88;;13238:303;13608:2;13597:9;13593:18;13580:32;13639:18;13631:6;13628:30;13625:117;;;13661:79;;:::i;:::-;13625:117;13766:78;13836:7;13827:6;13816:9;13812:22;13766:78;:::i;:::-;13756:88;;13551:303;13921:3;13910:9;13906:19;13893:33;13953:18;13945:6;13942:30;13939:117;;;13975:79;;:::i;:::-;13939:117;14080:62;14134:7;14125:6;14114:9;14110:22;14080:62;:::i;:::-;14070:72;;13864:288;12650:1509;;;;;;;;:::o;14165:311::-;14242:4;14332:18;14324:6;14321:30;14318:56;;;14354:18;;:::i;:::-;14318:56;14404:4;14396:6;14392:17;14384:25;;14464:4;14458;14454:15;14446:23;;14165:311;;;:::o;14499:710::-;14595:5;14620:81;14636:64;14693:6;14636:64;:::i;:::-;14620:81;:::i;:::-;14611:90;;14721:5;14750:6;14743:5;14736:21;14784:4;14777:5;14773:16;14766:23;;14837:4;14829:6;14825:17;14817:6;14813:30;14866:3;14858:6;14855:15;14852:122;;;14885:79;;:::i;:::-;14852:122;15000:6;14983:220;15017:6;15012:3;15009:15;14983:220;;;15092:3;15121:37;15154:3;15142:10;15121:37;:::i;:::-;15116:3;15109:50;15188:4;15183:3;15179:14;15172:21;;15059:144;15043:4;15038:3;15034:14;15027:21;;14983:220;;;14987:21;14601:608;;14499:710;;;;;:::o;15232:370::-;15303:5;15352:3;15345:4;15337:6;15333:17;15329:27;15319:122;;15360:79;;:::i;:::-;15319:122;15477:6;15464:20;15502:94;15592:3;15584:6;15577:4;15569:6;15565:17;15502:94;:::i;:::-;15493:103;;15309:293;15232:370;;;;:::o;15608:894::-;15726:6;15734;15783:2;15771:9;15762:7;15758:23;15754:32;15751:119;;;15789:79;;:::i;:::-;15751:119;15937:1;15926:9;15922:17;15909:31;15967:18;15959:6;15956:30;15953:117;;;15989:79;;:::i;:::-;15953:117;16094:78;16164:7;16155:6;16144:9;16140:22;16094:78;:::i;:::-;16084:88;;15880:302;16249:2;16238:9;16234:18;16221:32;16280:18;16272:6;16269:30;16266:117;;;16302:79;;:::i;:::-;16266:117;16407:78;16477:7;16468:6;16457:9;16453:22;16407:78;:::i;:::-;16397:88;;16192:303;15608:894;;;;;:::o;16508:114::-;16575:6;16609:5;16603:12;16593:22;;16508:114;;;:::o;16628:184::-;16727:11;16761:6;16756:3;16749:19;16801:4;16796:3;16792:14;16777:29;;16628:184;;;;:::o;16818:132::-;16885:4;16908:3;16900:11;;16938:4;16933:3;16929:14;16921:22;;16818:132;;;:::o;16956:108::-;17033:24;17051:5;17033:24;:::i;:::-;17028:3;17021:37;16956:108;;:::o;17070:179::-;17139:10;17160:46;17202:3;17194:6;17160:46;:::i;:::-;17238:4;17233:3;17229:14;17215:28;;17070:179;;;;:::o;17255:113::-;17325:4;17357;17352:3;17348:14;17340:22;;17255:113;;;:::o;17404:732::-;17523:3;17552:54;17600:5;17552:54;:::i;:::-;17622:86;17701:6;17696:3;17622:86;:::i;:::-;17615:93;;17732:56;17782:5;17732:56;:::i;:::-;17811:7;17842:1;17827:284;17852:6;17849:1;17846:13;17827:284;;;17928:6;17922:13;17955:63;18014:3;17999:13;17955:63;:::i;:::-;17948:70;;18041:60;18094:6;18041:60;:::i;:::-;18031:70;;17887:224;17874:1;17871;17867:9;17862:14;;17827:284;;;17831:14;18127:3;18120:10;;17528:608;;;17404:732;;;;:::o;18142:373::-;18285:4;18323:2;18312:9;18308:18;18300:26;;18372:9;18366:4;18362:20;18358:1;18347:9;18343:17;18336:47;18400:108;18503:4;18494:6;18400:108;:::i;:::-;18392:116;;18142:373;;;;:::o;18521:943::-;18616:6;18624;18632;18640;18689:3;18677:9;18668:7;18664:23;18660:33;18657:120;;;18696:79;;:::i;:::-;18657:120;18816:1;18841:53;18886:7;18877:6;18866:9;18862:22;18841:53;:::i;:::-;18831:63;;18787:117;18943:2;18969:53;19014:7;19005:6;18994:9;18990:22;18969:53;:::i;:::-;18959:63;;18914:118;19071:2;19097:53;19142:7;19133:6;19122:9;19118:22;19097:53;:::i;:::-;19087:63;;19042:118;19227:2;19216:9;19212:18;19199:32;19258:18;19250:6;19247:30;19244:117;;;19280:79;;:::i;:::-;19244:117;19385:62;19439:7;19430:6;19419:9;19415:22;19385:62;:::i;:::-;19375:72;;19170:287;18521:943;;;;;;;:::o;19470:474::-;19538:6;19546;19595:2;19583:9;19574:7;19570:23;19566:32;19563:119;;;19601:79;;:::i;:::-;19563:119;19721:1;19746:53;19791:7;19782:6;19771:9;19767:22;19746:53;:::i;:::-;19736:63;;19692:117;19848:2;19874:53;19919:7;19910:6;19899:9;19895:22;19874:53;:::i;:::-;19864:63;;19819:118;19470:474;;;;;:::o;19950:1089::-;20054:6;20062;20070;20078;20086;20135:3;20123:9;20114:7;20110:23;20106:33;20103:120;;;20142:79;;:::i;:::-;20103:120;20262:1;20287:53;20332:7;20323:6;20312:9;20308:22;20287:53;:::i;:::-;20277:63;;20233:117;20389:2;20415:53;20460:7;20451:6;20440:9;20436:22;20415:53;:::i;:::-;20405:63;;20360:118;20517:2;20543:53;20588:7;20579:6;20568:9;20564:22;20543:53;:::i;:::-;20533:63;;20488:118;20645:2;20671:53;20716:7;20707:6;20696:9;20692:22;20671:53;:::i;:::-;20661:63;;20616:118;20801:3;20790:9;20786:19;20773:33;20833:18;20825:6;20822:30;20819:117;;;20855:79;;:::i;:::-;20819:117;20960:62;21014:7;21005:6;20994:9;20990:22;20960:62;:::i;:::-;20950:72;;20744:288;19950:1089;;;;;;;;:::o;21045:230::-;21185:34;21181:1;21173:6;21169:14;21162:58;21254:13;21249:2;21241:6;21237:15;21230:38;21045:230;:::o;21281:366::-;21423:3;21444:67;21508:2;21503:3;21444:67;:::i;:::-;21437:74;;21520:93;21609:3;21520:93;:::i;:::-;21638:2;21633:3;21629:12;21622:19;;21281:366;;;:::o;21653:419::-;21819:4;21857:2;21846:9;21842:18;21834:26;;21906:9;21900:4;21896:20;21892:1;21881:9;21877:17;21870:47;21934:131;22060:4;21934:131;:::i;:::-;21926:139;;21653:419;;;:::o;22078:182::-;22218:34;22214:1;22206:6;22202:14;22195:58;22078:182;:::o;22266:366::-;22408:3;22429:67;22493:2;22488:3;22429:67;:::i;:::-;22422:74;;22505:93;22594:3;22505:93;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22266:366;;;:::o;22638:419::-;22804:4;22842:2;22831:9;22827:18;22819:26;;22891:9;22885:4;22881:20;22877:1;22866:9;22862:17;22855:47;22919:131;23045:4;22919:131;:::i;:::-;22911:139;;22638:419;;;:::o;23063:180::-;23111:77;23108:1;23101:88;23208:4;23205:1;23198:15;23232:4;23229:1;23222:15;23249:320;23293:6;23330:1;23324:4;23320:12;23310:22;;23377:1;23371:4;23367:12;23398:18;23388:81;;23454:4;23446:6;23442:17;23432:27;;23388:81;23516:2;23508:6;23505:14;23485:18;23482:38;23479:84;;;23535:18;;:::i;:::-;23479:84;23300:269;23249:320;;;:::o;23575:148::-;23677:11;23714:3;23699:18;;23575:148;;;;:::o;23729:377::-;23835:3;23863:39;23896:5;23863:39;:::i;:::-;23918:89;24000:6;23995:3;23918:89;:::i;:::-;23911:96;;24016:52;24061:6;24056:3;24049:4;24042:5;24038:16;24016:52;:::i;:::-;24093:6;24088:3;24084:16;24077:23;;23839:267;23729:377;;;;:::o;24112:435::-;24292:3;24314:95;24405:3;24396:6;24314:95;:::i;:::-;24307:102;;24426:95;24517:3;24508:6;24426:95;:::i;:::-;24419:102;;24538:3;24531:10;;24112:435;;;;;:::o;24553:118::-;24640:24;24658:5;24640:24;:::i;:::-;24635:3;24628:37;24553:118;;:::o;24677:222::-;24770:4;24808:2;24797:9;24793:18;24785:26;;24821:71;24889:1;24878:9;24874:17;24865:6;24821:71;:::i;:::-;24677:222;;;;:::o;24905:229::-;25045:34;25041:1;25033:6;25029:14;25022:58;25114:12;25109:2;25101:6;25097:15;25090:37;24905:229;:::o;25140:366::-;25282:3;25303:67;25367:2;25362:3;25303:67;:::i;:::-;25296:74;;25379:93;25468:3;25379:93;:::i;:::-;25497:2;25492:3;25488:12;25481:19;;25140:366;;;:::o;25512:419::-;25678:4;25716:2;25705:9;25701:18;25693:26;;25765:9;25759:4;25755:20;25751:1;25740:9;25736:17;25729:47;25793:131;25919:4;25793:131;:::i;:::-;25785:139;;25512:419;;;:::o;25937:237::-;26077:34;26073:1;26065:6;26061:14;26054:58;26146:20;26141:2;26133:6;26129:15;26122:45;25937:237;:::o;26180:366::-;26322:3;26343:67;26407:2;26402:3;26343:67;:::i;:::-;26336:74;;26419:93;26508:3;26419:93;:::i;:::-;26537:2;26532:3;26528:12;26521:19;;26180:366;;;:::o;26552:419::-;26718:4;26756:2;26745:9;26741:18;26733:26;;26805:9;26799:4;26795:20;26791:1;26780:9;26776:17;26769:47;26833:131;26959:4;26833:131;:::i;:::-;26825:139;;26552:419;;;:::o;26977:228::-;27117:34;27113:1;27105:6;27101:14;27094:58;27186:11;27181:2;27173:6;27169:15;27162:36;26977:228;:::o;27211:366::-;27353:3;27374:67;27438:2;27433:3;27374:67;:::i;:::-;27367:74;;27450:93;27539:3;27450:93;:::i;:::-;27568:2;27563:3;27559:12;27552:19;;27211:366;;;:::o;27583:419::-;27749:4;27787:2;27776:9;27772:18;27764:26;;27836:9;27830:4;27826:20;27822:1;27811:9;27807:17;27800:47;27864:131;27990:4;27864:131;:::i;:::-;27856:139;;27583:419;;;:::o;28008:180::-;28056:77;28053:1;28046:88;28153:4;28150:1;28143:15;28177:4;28174:1;28167:15;28194:180;28242:77;28239:1;28232:88;28339:4;28336:1;28329:15;28363:4;28360:1;28353:15;28380:233;28419:3;28442:24;28460:5;28442:24;:::i;:::-;28433:33;;28488:66;28481:5;28478:77;28475:103;;;28558:18;;:::i;:::-;28475:103;28605:1;28598:5;28594:13;28587:20;;28380:233;;;:::o;28619:174::-;28759:26;28755:1;28747:6;28743:14;28736:50;28619:174;:::o;28799:366::-;28941:3;28962:67;29026:2;29021:3;28962:67;:::i;:::-;28955:74;;29038:93;29127:3;29038:93;:::i;:::-;29156:2;29151:3;29147:12;29140:19;;28799:366;;;:::o;29171:419::-;29337:4;29375:2;29364:9;29360:18;29352:26;;29424:9;29418:4;29414:20;29410:1;29399:9;29395:17;29388:47;29452:131;29578:4;29452:131;:::i;:::-;29444:139;;29171:419;;;:::o;29596:228::-;29736:34;29732:1;29724:6;29720:14;29713:58;29805:11;29800:2;29792:6;29788:15;29781:36;29596:228;:::o;29830:366::-;29972:3;29993:67;30057:2;30052:3;29993:67;:::i;:::-;29986:74;;30069:93;30158:3;30069:93;:::i;:::-;30187:2;30182:3;30178:12;30171:19;;29830:366;;;:::o;30202:419::-;30368:4;30406:2;30395:9;30391:18;30383:26;;30455:9;30449:4;30445:20;30441:1;30430:9;30426:17;30419:47;30483:131;30609:4;30483:131;:::i;:::-;30475:139;;30202:419;;;:::o;30627:180::-;30675:77;30672:1;30665:88;30772:4;30769:1;30762:15;30796:4;30793:1;30786:15;30813:185;30853:1;30870:20;30888:1;30870:20;:::i;:::-;30865:25;;30904:20;30922:1;30904:20;:::i;:::-;30899:25;;30943:1;30933:35;;30948:18;;:::i;:::-;30933:35;30990:1;30987;30983:9;30978:14;;30813:185;;;;:::o;31004:176::-;31036:1;31053:20;31071:1;31053:20;:::i;:::-;31048:25;;31087:20;31105:1;31087:20;:::i;:::-;31082:25;;31126:1;31116:35;;31131:18;;:::i;:::-;31116:35;31172:1;31169;31165:9;31160:14;;31004:176;;;;:::o;31186:305::-;31226:3;31245:20;31263:1;31245:20;:::i;:::-;31240:25;;31279:20;31297:1;31279:20;:::i;:::-;31274:25;;31433:1;31365:66;31361:74;31358:1;31355:81;31352:107;;;31439:18;;:::i;:::-;31352:107;31483:1;31480;31476:9;31469:16;;31186:305;;;;:::o;31497:171::-;31536:3;31559:24;31577:5;31559:24;:::i;:::-;31550:33;;31605:4;31598:5;31595:15;31592:41;;;31613:18;;:::i;:::-;31592:41;31660:1;31653:5;31649:13;31642:20;;31497:171;;;:::o;31674:220::-;31814:34;31810:1;31802:6;31798:14;31791:58;31883:3;31878:2;31870:6;31866:15;31859:28;31674:220;:::o;31900:366::-;32042:3;32063:67;32127:2;32122:3;32063:67;:::i;:::-;32056:74;;32139:93;32228:3;32139:93;:::i;:::-;32257:2;32252:3;32248:12;32241:19;;31900:366;;;:::o;32272:419::-;32438:4;32476:2;32465:9;32461:18;32453:26;;32525:9;32519:4;32515:20;32511:1;32500:9;32496:17;32489:47;32553:131;32679:4;32553:131;:::i;:::-;32545:139;;32272:419;;;:::o;32697:227::-;32837:34;32833:1;32825:6;32821:14;32814:58;32906:10;32901:2;32893:6;32889:15;32882:35;32697:227;:::o;32930:366::-;33072:3;33093:67;33157:2;33152:3;33093:67;:::i;:::-;33086:74;;33169:93;33258:3;33169:93;:::i;:::-;33287:2;33282:3;33278:12;33271:19;;32930:366;;;:::o;33302:419::-;33468:4;33506:2;33495:9;33491:18;33483:26;;33555:9;33549:4;33545:20;33541:1;33530:9;33526:17;33519:47;33583:131;33709:4;33583:131;:::i;:::-;33575:139;;33302:419;;;:::o;33727:634::-;33948:4;33986:2;33975:9;33971:18;33963:26;;34035:9;34029:4;34025:20;34021:1;34010:9;34006:17;33999:47;34063:108;34166:4;34157:6;34063:108;:::i;:::-;34055:116;;34218:9;34212:4;34208:20;34203:2;34192:9;34188:18;34181:48;34246:108;34349:4;34340:6;34246:108;:::i;:::-;34238:116;;33727:634;;;;;:::o;34367:224::-;34507:34;34503:1;34495:6;34491:14;34484:58;34576:7;34571:2;34563:6;34559:15;34552:32;34367:224;:::o;34597:366::-;34739:3;34760:67;34824:2;34819:3;34760:67;:::i;:::-;34753:74;;34836:93;34925:3;34836:93;:::i;:::-;34954:2;34949:3;34945:12;34938:19;;34597:366;;;:::o;34969:419::-;35135:4;35173:2;35162:9;35158:18;35150:26;;35222:9;35216:4;35212:20;35208:1;35197:9;35193:17;35186:47;35250:131;35376:4;35250:131;:::i;:::-;35242:139;;34969:419;;;:::o;35394:229::-;35534:34;35530:1;35522:6;35518:14;35511:58;35603:12;35598:2;35590:6;35586:15;35579:37;35394:229;:::o;35629:366::-;35771:3;35792:67;35856:2;35851:3;35792:67;:::i;:::-;35785:74;;35868:93;35957:3;35868:93;:::i;:::-;35986:2;35981:3;35977:12;35970:19;;35629:366;;;:::o;36001:419::-;36167:4;36205:2;36194:9;36190:18;36182:26;;36254:9;36248:4;36244:20;36240:1;36229:9;36225:17;36218:47;36282:131;36408:4;36282:131;:::i;:::-;36274:139;;36001:419;;;:::o;36426:332::-;36547:4;36585:2;36574:9;36570:18;36562:26;;36598:71;36666:1;36655:9;36651:17;36642:6;36598:71;:::i;:::-;36679:72;36747:2;36736:9;36732:18;36723:6;36679:72;:::i;:::-;36426:332;;;;;:::o;36764:98::-;36815:6;36849:5;36843:12;36833:22;;36764:98;;;:::o;36868:168::-;36951:11;36985:6;36980:3;36973:19;37025:4;37020:3;37016:14;37001:29;;36868:168;;;;:::o;37042:360::-;37128:3;37156:38;37188:5;37156:38;:::i;:::-;37210:70;37273:6;37268:3;37210:70;:::i;:::-;37203:77;;37289:52;37334:6;37329:3;37322:4;37315:5;37311:16;37289:52;:::i;:::-;37366:29;37388:6;37366:29;:::i;:::-;37361:3;37357:39;37350:46;;37132:270;37042:360;;;;:::o;37408:1053::-;37731:4;37769:3;37758:9;37754:19;37746:27;;37783:71;37851:1;37840:9;37836:17;37827:6;37783:71;:::i;:::-;37864:72;37932:2;37921:9;37917:18;37908:6;37864:72;:::i;:::-;37983:9;37977:4;37973:20;37968:2;37957:9;37953:18;37946:48;38011:108;38114:4;38105:6;38011:108;:::i;:::-;38003:116;;38166:9;38160:4;38156:20;38151:2;38140:9;38136:18;38129:48;38194:108;38297:4;38288:6;38194:108;:::i;:::-;38186:116;;38350:9;38344:4;38340:20;38334:3;38323:9;38319:19;38312:49;38378:76;38449:4;38440:6;38378:76;:::i;:::-;38370:84;;37408:1053;;;;;;;;:::o;38467:141::-;38523:5;38554:6;38548:13;38539:22;;38570:32;38596:5;38570:32;:::i;:::-;38467:141;;;;:::o;38614:349::-;38683:6;38732:2;38720:9;38711:7;38707:23;38703:32;38700:119;;;38738:79;;:::i;:::-;38700:119;38858:1;38883:63;38938:7;38929:6;38918:9;38914:22;38883:63;:::i;:::-;38873:73;;38829:127;38614:349;;;;:::o;38969:106::-;39013:8;39062:5;39057:3;39053:15;39032:36;;38969:106;;;:::o;39081:183::-;39116:3;39154:1;39136:16;39133:23;39130:128;;;39192:1;39189;39186;39171:23;39214:34;39245:1;39239:8;39214:34;:::i;:::-;39207:41;;39130:128;39081:183;:::o;39270:711::-;39309:3;39347:4;39329:16;39326:26;39323:39;;;39355:5;;39323:39;39384:20;;:::i;:::-;39459:1;39441:16;39437:24;39434:1;39428:4;39413:49;39492:4;39486:11;39591:16;39584:4;39576:6;39572:17;39569:39;39536:18;39528:6;39525:30;39509:113;39506:146;;;39637:5;;;;39506:146;39683:6;39677:4;39673:17;39719:3;39713:10;39746:18;39738:6;39735:30;39732:43;;;39768:5;;;;;;39732:43;39816:6;39809:4;39804:3;39800:14;39796:27;39875:1;39857:16;39853:24;39847:4;39843:35;39838:3;39835:44;39832:57;;;39882:5;;;;;;;39832:57;39899;39947:6;39941:4;39937:17;39929:6;39925:30;39919:4;39899:57;:::i;:::-;39972:3;39965:10;;39313:668;;;;;39270:711;;:::o;39987:239::-;40127:34;40123:1;40115:6;40111:14;40104:58;40196:22;40191:2;40183:6;40179:15;40172:47;39987:239;:::o;40232:366::-;40374:3;40395:67;40459:2;40454:3;40395:67;:::i;:::-;40388:74;;40471:93;40560:3;40471:93;:::i;:::-;40589:2;40584:3;40580:12;40573:19;;40232:366;;;:::o;40604:419::-;40770:4;40808:2;40797:9;40793:18;40785:26;;40857:9;40851:4;40847:20;40843:1;40832:9;40828:17;40821:47;40885:131;41011:4;40885:131;:::i;:::-;40877:139;;40604:419;;;:::o;41029:227::-;41169:34;41165:1;41157:6;41153:14;41146:58;41238:10;41233:2;41225:6;41221:15;41214:35;41029:227;:::o;41262:366::-;41404:3;41425:67;41489:2;41484:3;41425:67;:::i;:::-;41418:74;;41501:93;41590:3;41501:93;:::i;:::-;41619:2;41614:3;41610:12;41603:19;;41262:366;;;:::o;41634:419::-;41800:4;41838:2;41827:9;41823:18;41815:26;;41887:9;41881:4;41877:20;41873:1;41862:9;41858:17;41851:47;41915:131;42041:4;41915:131;:::i;:::-;41907:139;;41634:419;;;:::o;42059:751::-;42282:4;42320:3;42309:9;42305:19;42297:27;;42334:71;42402:1;42391:9;42387:17;42378:6;42334:71;:::i;:::-;42415:72;42483:2;42472:9;42468:18;42459:6;42415:72;:::i;:::-;42497;42565:2;42554:9;42550:18;42541:6;42497:72;:::i;:::-;42579;42647:2;42636:9;42632:18;42623:6;42579:72;:::i;:::-;42699:9;42693:4;42689:20;42683:3;42672:9;42668:19;42661:49;42727:76;42798:4;42789:6;42727:76;:::i;:::-;42719:84;;42059:751;;;;;;;;:::o;42816:228::-;42956:34;42952:1;42944:6;42940:14;42933:58;43025:11;43020:2;43012:6;43008:15;43001:36;42816:228;:::o;43050:366::-;43192:3;43213:67;43277:2;43272:3;43213:67;:::i;:::-;43206:74;;43289:93;43378:3;43289:93;:::i;:::-;43407:2;43402:3;43398:12;43391:19;;43050:366;;;:::o;43422:419::-;43588:4;43626:2;43615:9;43611:18;43603:26;;43675:9;43669:4;43665:20;43661:1;43650:9;43646:17;43639:47;43703:131;43829:4;43703:131;:::i;:::-;43695:139;;43422:419;;;:::o

Swarm Source

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