ETH Price: $3,527.17 (+6.97%)

Token

WoahJonny Collection (WOAH)
 

Overview

Max Total Supply

3,055 WOAH

Holders

2,164

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
raygeezy.eth
0xf317ffb76754f921333bccb8840f378a1ab7ea79
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ArtByWoahJonny

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-20
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/WoahJonnyArt.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.9; 


contract ArtByWoahJonny is ERC1155, Ownable {
    using Strings for uint256; 

    struct InitialParameters {
        string name; 
        string symbol; 
        string uri; 
    }

    string private baseURI; 
    string public name; 
    string public symbol; 
    bool public artLock = false; 

    mapping(uint256 => bool) public validArt; 

    event SetBaseURI(string indexed _uri); 

    constructor(
        address _owner,
        InitialParameters memory initialParameters) 
        ERC1155(initialParameters.uri) {
            name = initialParameters.name; 
            symbol = initialParameters.symbol; 
            baseURI = initialParameters.uri; 
            emit SetBaseURI(baseURI);
            transferOwnership(_owner);
        }

    function lockArt() public onlyOwner {
        artLock = true;
    }

    function createArt(uint256 _id) public onlyOwner {
        require(!artLock, "Art has been locked"); 
        require(validArt[_id] == false, "Art already exists"); 
        validArt[_id] = true; 
    }

    function mintBatch(uint256[] memory _ids, uint256[] memory _quantity) external onlyOwner {
        require(!artLock, "Art is locked"); 
        _mintBatch(owner(), _ids, _quantity, ""); 
    }

    function setURI(string memory _uri) external onlyOwner {
        baseURI = _uri; 
        emit SetBaseURI(baseURI); 
    }

    function uri(uint256 _id) public view override returns (string memory){
        require(validArt[_id], "URI requested for invalid art.");
        return bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, _id.toString(), ".json"))
        : baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"uri","type":"string"}],"internalType":"struct ArtByWoahJonny.InitialParameters","name":"initialParameters","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_uri","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"artLock","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":"uint256","name":"_id","type":"uint256"}],"name":"createArt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockArt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantity","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validArt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526000600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200443d3803806200443d8339818101604052810190620000529190620006ef565b806040015162000068816200013e60201b60201c565b50620000896200007d6200015a60201b60201c565b6200016260201b60201c565b806000015160059080519060200190620000a592919062000367565b50806020015160069080519060200190620000c292919062000367565b50806040015160049080519060200190620000df92919062000367565b506004604051620000f1919062000864565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a262000136826200022860201b60201c565b505062000998565b80600290805190602001906200015692919062000367565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002386200015a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025e6200033d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ae90620008de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003209062000976565b60405180910390fd5b6200033a816200016260201b60201c565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003759062000784565b90600052602060002090601f016020900481019282620003995760008555620003e5565b82601f10620003b457805160ff1916838001178555620003e5565b82800160010185558215620003e5579182015b82811115620003e4578251825591602001919060010190620003c7565b5b509050620003f49190620003f8565b5090565b5b8082111562000413576000816000905550600101620003f9565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000458826200042b565b9050919050565b6200046a816200044b565b81146200047657600080fd5b50565b6000815190506200048a816200045f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004e08262000495565b810181811067ffffffffffffffff82111715620005025762000501620004a6565b5b80604052505050565b60006200051762000417565b9050620005258282620004d5565b919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff821115620005575762000556620004a6565b5b620005628262000495565b9050602081019050919050565b60005b838110156200058f57808201518184015260208101905062000572565b838111156200059f576000848401525b50505050565b6000620005bc620005b68462000539565b6200050b565b905082815260208101848484011115620005db57620005da62000534565b5b620005e88482856200056f565b509392505050565b600082601f8301126200060857620006076200052f565b5b81516200061a848260208601620005a5565b91505092915050565b6000606082840312156200063c576200063b62000490565b5b6200064860606200050b565b9050600082015167ffffffffffffffff8111156200066b576200066a6200052a565b5b6200067984828501620005f0565b600083015250602082015167ffffffffffffffff811115620006a0576200069f6200052a565b5b620006ae84828501620005f0565b602083015250604082015167ffffffffffffffff811115620006d557620006d46200052a565b5b620006e384828501620005f0565b60408301525092915050565b6000806040838503121562000709576200070862000421565b5b6000620007198582860162000479565b925050602083015167ffffffffffffffff8111156200073d576200073c62000426565b5b6200074b8582860162000623565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079d57607f821691505b602082108103620007b357620007b262000755565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154620007e88162000784565b620007f48186620007b9565b9450600182166000811462000812576001811462000824576200085b565b60ff198316865281860193506200085b565b6200082f85620007c4565b60005b83811015620008535781548189015260018201915060208101905062000832565b838801955050505b50505092915050565b6000620008728284620007d9565b915081905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620008c66020836200087d565b9150620008d3826200088e565b602082019050919050565b60006020820190508181036000830152620008f981620008b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200095e6026836200087d565b91506200096b8262000900565b604082019050919050565b6000602082019050818103600083015262000991816200094f565b9050919050565b613a9580620009a86000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80638da5cb5b116100ad578063d351cfdc11610071578063d351cfdc14610307578063e985e9c514610323578063f242432a14610353578063f2fde38b1461036f578063f86058011461038b57610120565b80638da5cb5b1461026157806390d4c18b1461027f57806395d89b411461029d5780639794f99b146102bb578063a22cb465146102eb57610120565b80630e89341c116100f45780630e89341c146101bf5780632eb2c2d6146101ef5780634e1273f41461020b57806367890a7f1461023b578063715018a61461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190612180565b610395565b60405161014c91906121cf565b60405180910390f35b61016f600480360381019061016a9190612242565b61045d565b60405161017c919061228a565b60405180910390f35b61019f600480360381019061019a91906123eb565b61053f565b005b6101a9610618565b6040516101b691906124bc565b60405180910390f35b6101d960048036038101906101d491906124de565b6106a6565b6040516101e691906124bc565b60405180910390f35b61020960048036038101906102049190612674565b6107e1565b005b61022560048036038101906102209190612806565b610882565b604051610232919061293c565b60405180910390f35b610255600480360381019061025091906124de565b61099b565b005b61025f610afd565b005b610269610b85565b604051610276919061296d565b60405180910390f35b610287610baf565b604051610294919061228a565b60405180910390f35b6102a5610bc2565b6040516102b291906124bc565b60405180910390f35b6102d560048036038101906102d091906124de565b610c50565b6040516102e2919061228a565b60405180910390f35b610305600480360381019061030091906129b4565b610c70565b005b610321600480360381019061031c91906129f4565b610c86565b005b61033d60048036038101906103389190612a6c565b610d78565b60405161034a919061228a565b60405180910390f35b61036d60048036038101906103689190612aac565b610e0c565b005b61038960048036038101906103849190612b43565b610ead565b005b610393610fa4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fc90612be2565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061053857506105378261103d565b5b9050919050565b6105476110a7565b73ffffffffffffffffffffffffffffffffffffffff16610565610b85565b73ffffffffffffffffffffffffffffffffffffffff16146105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290612c4e565b60405180910390fd5b80600490805190602001906105d1929190612035565b5060046040516105e19190612d6d565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b6005805461062590612c9d565b80601f016020809104026020016040519081016040528092919081815260200182805461065190612c9d565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b505050505081565b60606008600083815260200190815260200160002060009054906101000a900460ff16610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff90612dd0565b60405180910390fd5b60006004805461071790612c9d565b9050116107ae576004805461072b90612c9d565b80601f016020809104026020016040519081016040528092919081815260200182805461075790612c9d565b80156107a45780601f10610779576101008083540402835291602001916107a4565b820191906000526020600020905b81548152906001019060200180831161078757829003601f168201915b50505050506107da565b60046107b9836110af565b6040516020016107ca929190612e6d565b6040516020818303038152906040525b9050919050565b6107e96110a7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061082f575061082e856108296110a7565b610d78565b5b61086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612f0e565b60405180910390fd5b61087b858585858561120f565b5050505050565b606081518351146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612fa0565b60405180910390fd5b6000835167ffffffffffffffff8111156108e5576108e46122c0565b5b6040519080825280602002602001820160405280156109135781602001602082028036833780820191505090505b50905060005b84518110156109905761096085828151811061093857610937612fc0565b5b602002602001015185838151811061095357610952612fc0565b5b6020026020010151610395565b82828151811061097357610972612fc0565b5b602002602001018181525050806109899061301e565b9050610919565b508091505092915050565b6109a36110a7565b73ffffffffffffffffffffffffffffffffffffffff166109c1610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612c4e565b60405180910390fd5b600760009054906101000a900460ff1615610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906130b2565b60405180910390fd5b600015156008600083815260200190815260200160002060009054906101000a900460ff16151514610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac59061311e565b60405180910390fd5b60016008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b056110a7565b73ffffffffffffffffffffffffffffffffffffffff16610b23610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090612c4e565b60405180910390fd5b610b836000611522565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900460ff1681565b60068054610bcf90612c9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfb90612c9d565b8015610c485780601f10610c1d57610100808354040283529160200191610c48565b820191906000526020600020905b815481529060010190602001808311610c2b57829003601f168201915b505050505081565b60086020528060005260406000206000915054906101000a900460ff1681565b610c82610c7b6110a7565b83836115e8565b5050565b610c8e6110a7565b73ffffffffffffffffffffffffffffffffffffffff16610cac610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990612c4e565b60405180910390fd5b600760009054906101000a900460ff1615610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d499061318a565b60405180910390fd5b610d74610d5d610b85565b838360405180602001604052806000815250611754565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e146110a7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e5a5750610e5985610e546110a7565b610d78565b5b610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061321c565b60405180910390fd5b610ea68585858585611971565b5050505050565b610eb56110a7565b73ffffffffffffffffffffffffffffffffffffffff16610ed3610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090612c4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906132ae565b60405180910390fd5b610fa181611522565b50565b610fac6110a7565b73ffffffffffffffffffffffffffffffffffffffff16610fca610b85565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790612c4e565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600082036110f6576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061120a565b600082905060005b600082146111285780806111119061301e565b915050600a8261112191906132fd565b91506110fe565b60008167ffffffffffffffff811115611144576111436122c0565b5b6040519080825280601f01601f1916602001820160405280156111765781602001600182028036833780820191505090505b5090505b600085146112035760018261118f919061332e565b9150600a8561119e9190613362565b60306111aa9190613393565b60f81b8183815181106111c0576111bf612fc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856111fc91906132fd565b945061117a565b8093505050505b919050565b8151835114611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a9061345b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b9906134ed565b60405180910390fd5b60006112cc6110a7565b90506112dc818787878787611bf2565b60005b845181101561148d5760008582815181106112fd576112fc612fc0565b5b60200260200101519050600085838151811061131c5761131b612fc0565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b49061357f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114729190613393565b92505081905550505050806114869061301e565b90506112df565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161150492919061359f565b60405180910390a461151a818787878787611bfa565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613648565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611747919061228a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906136da565b60405180910390fd5b8151835114611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061345b565b60405180910390fd5b60006118116110a7565b905061182281600087878787611bf2565b60005b84518110156118db5783818151811061184157611840612fc0565b5b602002602001015160008087848151811061185f5761185e612fc0565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c19190613393565b9250508190555080806118d39061301e565b915050611825565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195392919061359f565b60405180910390a461196a81600087878787611bfa565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906134ed565b60405180910390fd5b60006119ea6110a7565b9050611a0a8187876119fb88611dd1565b611a0488611dd1565b87611bf2565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a989061357f565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b569190613393565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611bd39291906136fa565b60405180910390a4611be9828888888888611e4b565b50505050505050565b505050505050565b611c198473ffffffffffffffffffffffffffffffffffffffff16612022565b15611dc9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c5f959493929190613778565b6020604051808303816000875af1925050508015611c9b57506040513d601f19601f82011682018060405250810190611c9891906137f5565b60015b611d4057611ca761382f565b806308c379a003611d035750611cbb613851565b80611cc65750611d05565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa91906124bc565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613953565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe906139e5565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611df057611def6122c0565b5b604051908082528060200260200182016040528015611e1e5781602001602082028036833780820191505090505b5090508281600081518110611e3657611e35612fc0565b5b60200260200101818152505080915050919050565b611e6a8473ffffffffffffffffffffffffffffffffffffffff16612022565b1561201a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611eb0959493929190613a05565b6020604051808303816000875af1925050508015611eec57506040513d601f19601f82011682018060405250810190611ee991906137f5565b60015b611f9157611ef861382f565b806308c379a003611f545750611f0c613851565b80611f175750611f56565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b91906124bc565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613953565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f906139e5565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461204190612c9d565b90600052602060002090601f01602090048101928261206357600085556120aa565b82601f1061207c57805160ff19168380011785556120aa565b828001600101855582156120aa579182015b828111156120a957825182559160200191906001019061208e565b5b5090506120b791906120bb565b5090565b5b808211156120d45760008160009055506001016120bc565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612117826120ec565b9050919050565b6121278161210c565b811461213257600080fd5b50565b6000813590506121448161211e565b92915050565b6000819050919050565b61215d8161214a565b811461216857600080fd5b50565b60008135905061217a81612154565b92915050565b60008060408385031215612197576121966120e2565b5b60006121a585828601612135565b92505060206121b68582860161216b565b9150509250929050565b6121c98161214a565b82525050565b60006020820190506121e460008301846121c0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61221f816121ea565b811461222a57600080fd5b50565b60008135905061223c81612216565b92915050565b600060208284031215612258576122576120e2565b5b60006122668482850161222d565b91505092915050565b60008115159050919050565b6122848161226f565b82525050565b600060208201905061229f600083018461227b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122f8826122af565b810181811067ffffffffffffffff82111715612317576123166122c0565b5b80604052505050565b600061232a6120d8565b905061233682826122ef565b919050565b600067ffffffffffffffff821115612356576123556122c0565b5b61235f826122af565b9050602081019050919050565b82818337600083830152505050565b600061238e6123898461233b565b612320565b9050828152602081018484840111156123aa576123a96122aa565b5b6123b584828561236c565b509392505050565b600082601f8301126123d2576123d16122a5565b5b81356123e284826020860161237b565b91505092915050565b600060208284031215612401576124006120e2565b5b600082013567ffffffffffffffff81111561241f5761241e6120e7565b5b61242b848285016123bd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561246e578082015181840152602081019050612453565b8381111561247d576000848401525b50505050565b600061248e82612434565b612498818561243f565b93506124a8818560208601612450565b6124b1816122af565b840191505092915050565b600060208201905081810360008301526124d68184612483565b905092915050565b6000602082840312156124f4576124f36120e2565b5b60006125028482850161216b565b91505092915050565b600067ffffffffffffffff821115612526576125256122c0565b5b602082029050602081019050919050565b600080fd5b600061254f61254a8461250b565b612320565b9050808382526020820190506020840283018581111561257257612571612537565b5b835b8181101561259b5780612587888261216b565b845260208401935050602081019050612574565b5050509392505050565b600082601f8301126125ba576125b96122a5565b5b81356125ca84826020860161253c565b91505092915050565b600067ffffffffffffffff8211156125ee576125ed6122c0565b5b6125f7826122af565b9050602081019050919050565b6000612617612612846125d3565b612320565b905082815260208101848484011115612633576126326122aa565b5b61263e84828561236c565b509392505050565b600082601f83011261265b5761265a6122a5565b5b813561266b848260208601612604565b91505092915050565b600080600080600060a086880312156126905761268f6120e2565b5b600061269e88828901612135565b95505060206126af88828901612135565b945050604086013567ffffffffffffffff8111156126d0576126cf6120e7565b5b6126dc888289016125a5565b935050606086013567ffffffffffffffff8111156126fd576126fc6120e7565b5b612709888289016125a5565b925050608086013567ffffffffffffffff81111561272a576127296120e7565b5b61273688828901612646565b9150509295509295909350565b600067ffffffffffffffff82111561275e5761275d6122c0565b5b602082029050602081019050919050565b600061278261277d84612743565b612320565b905080838252602082019050602084028301858111156127a5576127a4612537565b5b835b818110156127ce57806127ba8882612135565b8452602084019350506020810190506127a7565b5050509392505050565b600082601f8301126127ed576127ec6122a5565b5b81356127fd84826020860161276f565b91505092915050565b6000806040838503121561281d5761281c6120e2565b5b600083013567ffffffffffffffff81111561283b5761283a6120e7565b5b612847858286016127d8565b925050602083013567ffffffffffffffff811115612868576128676120e7565b5b612874858286016125a5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128b38161214a565b82525050565b60006128c583836128aa565b60208301905092915050565b6000602082019050919050565b60006128e98261287e565b6128f38185612889565b93506128fe8361289a565b8060005b8381101561292f57815161291688826128b9565b9750612921836128d1565b925050600181019050612902565b5085935050505092915050565b6000602082019050818103600083015261295681846128de565b905092915050565b6129678161210c565b82525050565b6000602082019050612982600083018461295e565b92915050565b6129918161226f565b811461299c57600080fd5b50565b6000813590506129ae81612988565b92915050565b600080604083850312156129cb576129ca6120e2565b5b60006129d985828601612135565b92505060206129ea8582860161299f565b9150509250929050565b60008060408385031215612a0b57612a0a6120e2565b5b600083013567ffffffffffffffff811115612a2957612a286120e7565b5b612a35858286016125a5565b925050602083013567ffffffffffffffff811115612a5657612a556120e7565b5b612a62858286016125a5565b9150509250929050565b60008060408385031215612a8357612a826120e2565b5b6000612a9185828601612135565b9250506020612aa285828601612135565b9150509250929050565b600080600080600060a08688031215612ac857612ac76120e2565b5b6000612ad688828901612135565b9550506020612ae788828901612135565b9450506040612af88882890161216b565b9350506060612b098882890161216b565b925050608086013567ffffffffffffffff811115612b2a57612b296120e7565b5b612b3688828901612646565b9150509295509295909350565b600060208284031215612b5957612b586120e2565b5b6000612b6784828501612135565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612bcc602b8361243f565b9150612bd782612b70565b604082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c3860208361243f565b9150612c4382612c02565b602082019050919050565b60006020820190508181036000830152612c6781612c2b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cb557607f821691505b602082108103612cc857612cc7612c6e565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612cfb81612c9d565b612d058186612cce565b94506001821660008114612d205760018114612d3157612d64565b60ff19831686528186019350612d64565b612d3a85612cd9565b60005b83811015612d5c57815481890152600182019150602081019050612d3d565b838801955050505b50505092915050565b6000612d798284612cee565b915081905092915050565b7f5552492072657175657374656420666f7220696e76616c6964206172742e0000600082015250565b6000612dba601e8361243f565b9150612dc582612d84565b602082019050919050565b60006020820190508181036000830152612de981612dad565b9050919050565b6000612dfb82612434565b612e058185612cce565b9350612e15818560208601612450565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612e57600583612cce565b9150612e6282612e21565b600582019050919050565b6000612e798285612cee565b9150612e858284612df0565b9150612e9082612e4a565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612ef860328361243f565b9150612f0382612e9c565b604082019050919050565b60006020820190508181036000830152612f2781612eeb565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f8a60298361243f565b9150612f9582612f2e565b604082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130298261214a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361305b5761305a612fef565b5b600182019050919050565b7f41727420686173206265656e206c6f636b656400000000000000000000000000600082015250565b600061309c60138361243f565b91506130a782613066565b602082019050919050565b600060208201905081810360008301526130cb8161308f565b9050919050565b7f41727420616c7265616479206578697374730000000000000000000000000000600082015250565b600061310860128361243f565b9150613113826130d2565b602082019050919050565b60006020820190508181036000830152613137816130fb565b9050919050565b7f417274206973206c6f636b656400000000000000000000000000000000000000600082015250565b6000613174600d8361243f565b915061317f8261313e565b602082019050919050565b600060208201905081810360008301526131a381613167565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061320660298361243f565b9150613211826131aa565b604082019050919050565b60006020820190508181036000830152613235816131f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061329860268361243f565b91506132a38261323c565b604082019050919050565b600060208201905081810360008301526132c78161328b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133088261214a565b91506133138361214a565b925082613323576133226132ce565b5b828204905092915050565b60006133398261214a565b91506133448361214a565b92508282101561335757613356612fef565b5b828203905092915050565b600061336d8261214a565b91506133788361214a565b925082613388576133876132ce565b5b828206905092915050565b600061339e8261214a565b91506133a98361214a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133de576133dd612fef565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061344560288361243f565b9150613450826133e9565b604082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134d760258361243f565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613569602a8361243f565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b600060408201905081810360008301526135b981856128de565b905081810360208301526135cd81846128de565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061363260298361243f565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c460218361243f565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b600060408201905061370f60008301856121c0565b61371c60208301846121c0565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061374a82613723565b613754818561372e565b9350613764818560208601612450565b61376d816122af565b840191505092915050565b600060a08201905061378d600083018861295e565b61379a602083018761295e565b81810360408301526137ac81866128de565b905081810360608301526137c081856128de565b905081810360808301526137d4818461373f565b90509695505050505050565b6000815190506137ef81612216565b92915050565b60006020828403121561380b5761380a6120e2565b5b6000613819848285016137e0565b91505092915050565b60008160e01c9050919050565b600060033d111561384e5760046000803e61384b600051613822565b90505b90565b600060443d106138de576138636120d8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561388b5750506138de565b808201805167ffffffffffffffff8111156138a957505050506138de565b80602083010160043d0385018111156138c65750505050506138de565b6138d5826020018501866122ef565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061393d60348361243f565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006139cf60288361243f565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b600060a082019050613a1a600083018861295e565b613a27602083018761295e565b613a3460408301866121c0565b613a4160608301856121c0565b8181036080830152613a53818461373f565b9050969550505050505056fea264697066735822122060cfeee1cc82d9f7d5ebc244c69a158af945c08dfacbf00795c3ce7687ae408364736f6c634300080e00330000000000000000000000007b635fe7d5d2ffcd93ecb6a65dbe107058b011d80000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014576f61684a6f6e6e7920436f6c6c656374696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574f414800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d557055776167376e433553586733524c42466a684a44715266594d6b45714454644b64614a744233665375582f000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c80638da5cb5b116100ad578063d351cfdc11610071578063d351cfdc14610307578063e985e9c514610323578063f242432a14610353578063f2fde38b1461036f578063f86058011461038b57610120565b80638da5cb5b1461026157806390d4c18b1461027f57806395d89b411461029d5780639794f99b146102bb578063a22cb465146102eb57610120565b80630e89341c116100f45780630e89341c146101bf5780632eb2c2d6146101ef5780634e1273f41461020b57806367890a7f1461023b578063715018a61461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190612180565b610395565b60405161014c91906121cf565b60405180910390f35b61016f600480360381019061016a9190612242565b61045d565b60405161017c919061228a565b60405180910390f35b61019f600480360381019061019a91906123eb565b61053f565b005b6101a9610618565b6040516101b691906124bc565b60405180910390f35b6101d960048036038101906101d491906124de565b6106a6565b6040516101e691906124bc565b60405180910390f35b61020960048036038101906102049190612674565b6107e1565b005b61022560048036038101906102209190612806565b610882565b604051610232919061293c565b60405180910390f35b610255600480360381019061025091906124de565b61099b565b005b61025f610afd565b005b610269610b85565b604051610276919061296d565b60405180910390f35b610287610baf565b604051610294919061228a565b60405180910390f35b6102a5610bc2565b6040516102b291906124bc565b60405180910390f35b6102d560048036038101906102d091906124de565b610c50565b6040516102e2919061228a565b60405180910390f35b610305600480360381019061030091906129b4565b610c70565b005b610321600480360381019061031c91906129f4565b610c86565b005b61033d60048036038101906103389190612a6c565b610d78565b60405161034a919061228a565b60405180910390f35b61036d60048036038101906103689190612aac565b610e0c565b005b61038960048036038101906103849190612b43565b610ead565b005b610393610fa4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fc90612be2565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061053857506105378261103d565b5b9050919050565b6105476110a7565b73ffffffffffffffffffffffffffffffffffffffff16610565610b85565b73ffffffffffffffffffffffffffffffffffffffff16146105bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b290612c4e565b60405180910390fd5b80600490805190602001906105d1929190612035565b5060046040516105e19190612d6d565b60405180910390207f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa60405160405180910390a250565b6005805461062590612c9d565b80601f016020809104026020016040519081016040528092919081815260200182805461065190612c9d565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b505050505081565b60606008600083815260200190815260200160002060009054906101000a900460ff16610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff90612dd0565b60405180910390fd5b60006004805461071790612c9d565b9050116107ae576004805461072b90612c9d565b80601f016020809104026020016040519081016040528092919081815260200182805461075790612c9d565b80156107a45780601f10610779576101008083540402835291602001916107a4565b820191906000526020600020905b81548152906001019060200180831161078757829003601f168201915b50505050506107da565b60046107b9836110af565b6040516020016107ca929190612e6d565b6040516020818303038152906040525b9050919050565b6107e96110a7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061082f575061082e856108296110a7565b610d78565b5b61086e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086590612f0e565b60405180910390fd5b61087b858585858561120f565b5050505050565b606081518351146108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612fa0565b60405180910390fd5b6000835167ffffffffffffffff8111156108e5576108e46122c0565b5b6040519080825280602002602001820160405280156109135781602001602082028036833780820191505090505b50905060005b84518110156109905761096085828151811061093857610937612fc0565b5b602002602001015185838151811061095357610952612fc0565b5b6020026020010151610395565b82828151811061097357610972612fc0565b5b602002602001018181525050806109899061301e565b9050610919565b508091505092915050565b6109a36110a7565b73ffffffffffffffffffffffffffffffffffffffff166109c1610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612c4e565b60405180910390fd5b600760009054906101000a900460ff1615610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906130b2565b60405180910390fd5b600015156008600083815260200190815260200160002060009054906101000a900460ff16151514610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac59061311e565b60405180910390fd5b60016008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b056110a7565b73ffffffffffffffffffffffffffffffffffffffff16610b23610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090612c4e565b60405180910390fd5b610b836000611522565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900460ff1681565b60068054610bcf90612c9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfb90612c9d565b8015610c485780601f10610c1d57610100808354040283529160200191610c48565b820191906000526020600020905b815481529060010190602001808311610c2b57829003601f168201915b505050505081565b60086020528060005260406000206000915054906101000a900460ff1681565b610c82610c7b6110a7565b83836115e8565b5050565b610c8e6110a7565b73ffffffffffffffffffffffffffffffffffffffff16610cac610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990612c4e565b60405180910390fd5b600760009054906101000a900460ff1615610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d499061318a565b60405180910390fd5b610d74610d5d610b85565b838360405180602001604052806000815250611754565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e146110a7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e5a5750610e5985610e546110a7565b610d78565b5b610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e909061321c565b60405180910390fd5b610ea68585858585611971565b5050505050565b610eb56110a7565b73ffffffffffffffffffffffffffffffffffffffff16610ed3610b85565b73ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090612c4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8f906132ae565b60405180910390fd5b610fa181611522565b50565b610fac6110a7565b73ffffffffffffffffffffffffffffffffffffffff16610fca610b85565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790612c4e565b60405180910390fd5b6001600760006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600082036110f6576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061120a565b600082905060005b600082146111285780806111119061301e565b915050600a8261112191906132fd565b91506110fe565b60008167ffffffffffffffff811115611144576111436122c0565b5b6040519080825280601f01601f1916602001820160405280156111765781602001600182028036833780820191505090505b5090505b600085146112035760018261118f919061332e565b9150600a8561119e9190613362565b60306111aa9190613393565b60f81b8183815181106111c0576111bf612fc0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856111fc91906132fd565b945061117a565b8093505050505b919050565b8151835114611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a9061345b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b9906134ed565b60405180910390fd5b60006112cc6110a7565b90506112dc818787878787611bf2565b60005b845181101561148d5760008582815181106112fd576112fc612fc0565b5b60200260200101519050600085838151811061131c5761131b612fc0565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b49061357f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114729190613393565b92505081905550505050806114869061301e565b90506112df565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161150492919061359f565b60405180910390a461151a818787878787611bfa565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613648565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611747919061228a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ba906136da565b60405180910390fd5b8151835114611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fe9061345b565b60405180910390fd5b60006118116110a7565b905061182281600087878787611bf2565b60005b84518110156118db5783818151811061184157611840612fc0565b5b602002602001015160008087848151811061185f5761185e612fc0565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c19190613393565b9250508190555080806118d39061301e565b915050611825565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195392919061359f565b60405180910390a461196a81600087878787611bfa565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906134ed565b60405180910390fd5b60006119ea6110a7565b9050611a0a8187876119fb88611dd1565b611a0488611dd1565b87611bf2565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a989061357f565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b569190613393565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611bd39291906136fa565b60405180910390a4611be9828888888888611e4b565b50505050505050565b505050505050565b611c198473ffffffffffffffffffffffffffffffffffffffff16612022565b15611dc9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c5f959493929190613778565b6020604051808303816000875af1925050508015611c9b57506040513d601f19601f82011682018060405250810190611c9891906137f5565b60015b611d4057611ca761382f565b806308c379a003611d035750611cbb613851565b80611cc65750611d05565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa91906124bc565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3790613953565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbe906139e5565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611df057611def6122c0565b5b604051908082528060200260200182016040528015611e1e5781602001602082028036833780820191505090505b5090508281600081518110611e3657611e35612fc0565b5b60200260200101818152505080915050919050565b611e6a8473ffffffffffffffffffffffffffffffffffffffff16612022565b1561201a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611eb0959493929190613a05565b6020604051808303816000875af1925050508015611eec57506040513d601f19601f82011682018060405250810190611ee991906137f5565b60015b611f9157611ef861382f565b806308c379a003611f545750611f0c613851565b80611f175750611f56565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b91906124bc565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613953565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f906139e5565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461204190612c9d565b90600052602060002090601f01602090048101928261206357600085556120aa565b82601f1061207c57805160ff19168380011785556120aa565b828001600101855582156120aa579182015b828111156120a957825182559160200191906001019061208e565b5b5090506120b791906120bb565b5090565b5b808211156120d45760008160009055506001016120bc565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612117826120ec565b9050919050565b6121278161210c565b811461213257600080fd5b50565b6000813590506121448161211e565b92915050565b6000819050919050565b61215d8161214a565b811461216857600080fd5b50565b60008135905061217a81612154565b92915050565b60008060408385031215612197576121966120e2565b5b60006121a585828601612135565b92505060206121b68582860161216b565b9150509250929050565b6121c98161214a565b82525050565b60006020820190506121e460008301846121c0565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61221f816121ea565b811461222a57600080fd5b50565b60008135905061223c81612216565b92915050565b600060208284031215612258576122576120e2565b5b60006122668482850161222d565b91505092915050565b60008115159050919050565b6122848161226f565b82525050565b600060208201905061229f600083018461227b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122f8826122af565b810181811067ffffffffffffffff82111715612317576123166122c0565b5b80604052505050565b600061232a6120d8565b905061233682826122ef565b919050565b600067ffffffffffffffff821115612356576123556122c0565b5b61235f826122af565b9050602081019050919050565b82818337600083830152505050565b600061238e6123898461233b565b612320565b9050828152602081018484840111156123aa576123a96122aa565b5b6123b584828561236c565b509392505050565b600082601f8301126123d2576123d16122a5565b5b81356123e284826020860161237b565b91505092915050565b600060208284031215612401576124006120e2565b5b600082013567ffffffffffffffff81111561241f5761241e6120e7565b5b61242b848285016123bd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561246e578082015181840152602081019050612453565b8381111561247d576000848401525b50505050565b600061248e82612434565b612498818561243f565b93506124a8818560208601612450565b6124b1816122af565b840191505092915050565b600060208201905081810360008301526124d68184612483565b905092915050565b6000602082840312156124f4576124f36120e2565b5b60006125028482850161216b565b91505092915050565b600067ffffffffffffffff821115612526576125256122c0565b5b602082029050602081019050919050565b600080fd5b600061254f61254a8461250b565b612320565b9050808382526020820190506020840283018581111561257257612571612537565b5b835b8181101561259b5780612587888261216b565b845260208401935050602081019050612574565b5050509392505050565b600082601f8301126125ba576125b96122a5565b5b81356125ca84826020860161253c565b91505092915050565b600067ffffffffffffffff8211156125ee576125ed6122c0565b5b6125f7826122af565b9050602081019050919050565b6000612617612612846125d3565b612320565b905082815260208101848484011115612633576126326122aa565b5b61263e84828561236c565b509392505050565b600082601f83011261265b5761265a6122a5565b5b813561266b848260208601612604565b91505092915050565b600080600080600060a086880312156126905761268f6120e2565b5b600061269e88828901612135565b95505060206126af88828901612135565b945050604086013567ffffffffffffffff8111156126d0576126cf6120e7565b5b6126dc888289016125a5565b935050606086013567ffffffffffffffff8111156126fd576126fc6120e7565b5b612709888289016125a5565b925050608086013567ffffffffffffffff81111561272a576127296120e7565b5b61273688828901612646565b9150509295509295909350565b600067ffffffffffffffff82111561275e5761275d6122c0565b5b602082029050602081019050919050565b600061278261277d84612743565b612320565b905080838252602082019050602084028301858111156127a5576127a4612537565b5b835b818110156127ce57806127ba8882612135565b8452602084019350506020810190506127a7565b5050509392505050565b600082601f8301126127ed576127ec6122a5565b5b81356127fd84826020860161276f565b91505092915050565b6000806040838503121561281d5761281c6120e2565b5b600083013567ffffffffffffffff81111561283b5761283a6120e7565b5b612847858286016127d8565b925050602083013567ffffffffffffffff811115612868576128676120e7565b5b612874858286016125a5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6128b38161214a565b82525050565b60006128c583836128aa565b60208301905092915050565b6000602082019050919050565b60006128e98261287e565b6128f38185612889565b93506128fe8361289a565b8060005b8381101561292f57815161291688826128b9565b9750612921836128d1565b925050600181019050612902565b5085935050505092915050565b6000602082019050818103600083015261295681846128de565b905092915050565b6129678161210c565b82525050565b6000602082019050612982600083018461295e565b92915050565b6129918161226f565b811461299c57600080fd5b50565b6000813590506129ae81612988565b92915050565b600080604083850312156129cb576129ca6120e2565b5b60006129d985828601612135565b92505060206129ea8582860161299f565b9150509250929050565b60008060408385031215612a0b57612a0a6120e2565b5b600083013567ffffffffffffffff811115612a2957612a286120e7565b5b612a35858286016125a5565b925050602083013567ffffffffffffffff811115612a5657612a556120e7565b5b612a62858286016125a5565b9150509250929050565b60008060408385031215612a8357612a826120e2565b5b6000612a9185828601612135565b9250506020612aa285828601612135565b9150509250929050565b600080600080600060a08688031215612ac857612ac76120e2565b5b6000612ad688828901612135565b9550506020612ae788828901612135565b9450506040612af88882890161216b565b9350506060612b098882890161216b565b925050608086013567ffffffffffffffff811115612b2a57612b296120e7565b5b612b3688828901612646565b9150509295509295909350565b600060208284031215612b5957612b586120e2565b5b6000612b6784828501612135565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612bcc602b8361243f565b9150612bd782612b70565b604082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c3860208361243f565b9150612c4382612c02565b602082019050919050565b60006020820190508181036000830152612c6781612c2b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cb557607f821691505b602082108103612cc857612cc7612c6e565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612cfb81612c9d565b612d058186612cce565b94506001821660008114612d205760018114612d3157612d64565b60ff19831686528186019350612d64565b612d3a85612cd9565b60005b83811015612d5c57815481890152600182019150602081019050612d3d565b838801955050505b50505092915050565b6000612d798284612cee565b915081905092915050565b7f5552492072657175657374656420666f7220696e76616c6964206172742e0000600082015250565b6000612dba601e8361243f565b9150612dc582612d84565b602082019050919050565b60006020820190508181036000830152612de981612dad565b9050919050565b6000612dfb82612434565b612e058185612cce565b9350612e15818560208601612450565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612e57600583612cce565b9150612e6282612e21565b600582019050919050565b6000612e798285612cee565b9150612e858284612df0565b9150612e9082612e4a565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612ef860328361243f565b9150612f0382612e9c565b604082019050919050565b60006020820190508181036000830152612f2781612eeb565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f8a60298361243f565b9150612f9582612f2e565b604082019050919050565b60006020820190508181036000830152612fb981612f7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130298261214a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361305b5761305a612fef565b5b600182019050919050565b7f41727420686173206265656e206c6f636b656400000000000000000000000000600082015250565b600061309c60138361243f565b91506130a782613066565b602082019050919050565b600060208201905081810360008301526130cb8161308f565b9050919050565b7f41727420616c7265616479206578697374730000000000000000000000000000600082015250565b600061310860128361243f565b9150613113826130d2565b602082019050919050565b60006020820190508181036000830152613137816130fb565b9050919050565b7f417274206973206c6f636b656400000000000000000000000000000000000000600082015250565b6000613174600d8361243f565b915061317f8261313e565b602082019050919050565b600060208201905081810360008301526131a381613167565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061320660298361243f565b9150613211826131aa565b604082019050919050565b60006020820190508181036000830152613235816131f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061329860268361243f565b91506132a38261323c565b604082019050919050565b600060208201905081810360008301526132c78161328b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133088261214a565b91506133138361214a565b925082613323576133226132ce565b5b828204905092915050565b60006133398261214a565b91506133448361214a565b92508282101561335757613356612fef565b5b828203905092915050565b600061336d8261214a565b91506133788361214a565b925082613388576133876132ce565b5b828206905092915050565b600061339e8261214a565b91506133a98361214a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133de576133dd612fef565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061344560288361243f565b9150613450826133e9565b604082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134d760258361243f565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613569602a8361243f565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b600060408201905081810360008301526135b981856128de565b905081810360208301526135cd81846128de565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061363260298361243f565b915061363d826135d6565b604082019050919050565b6000602082019050818103600083015261366181613625565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c460218361243f565b91506136cf82613668565b604082019050919050565b600060208201905081810360008301526136f3816136b7565b9050919050565b600060408201905061370f60008301856121c0565b61371c60208301846121c0565b9392505050565b600081519050919050565b600082825260208201905092915050565b600061374a82613723565b613754818561372e565b9350613764818560208601612450565b61376d816122af565b840191505092915050565b600060a08201905061378d600083018861295e565b61379a602083018761295e565b81810360408301526137ac81866128de565b905081810360608301526137c081856128de565b905081810360808301526137d4818461373f565b90509695505050505050565b6000815190506137ef81612216565b92915050565b60006020828403121561380b5761380a6120e2565b5b6000613819848285016137e0565b91505092915050565b60008160e01c9050919050565b600060033d111561384e5760046000803e61384b600051613822565b90505b90565b600060443d106138de576138636120d8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561388b5750506138de565b808201805167ffffffffffffffff8111156138a957505050506138de565b80602083010160043d0385018111156138c65750505050506138de565b6138d5826020018501866122ef565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061393d60348361243f565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006139cf60288361243f565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b600060a082019050613a1a600083018861295e565b613a27602083018761295e565b613a3460408301866121c0565b613a4160608301856121c0565b8181036080830152613a53818461373f565b9050969550505050505056fea264697066735822122060cfeee1cc82d9f7d5ebc244c69a158af945c08dfacbf00795c3ce7687ae408364736f6c634300080e0033

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

0000000000000000000000007b635fe7d5d2ffcd93ecb6a65dbe107058b011d80000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014576f61684a6f6e6e7920436f6c6c656374696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574f414800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d557055776167376e433553586733524c42466a684a44715266594d6b45714454644b64614a744233665375582f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0x7B635Fe7d5d2ffcd93ecB6a65DBe107058b011d8
Arg [1] : initialParameters (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000007b635fe7d5d2ffcd93ecb6a65dbe107058b011d8
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 576f61684a6f6e6e7920436f6c6c656374696f6e000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 574f414800000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d557055776167376e433553586733524c42466a684a44715266594d6b
Arg [12] : 45714454644b64614a744233665375582f000000000000000000000000000000


Deployed Bytecode Sourcemap

38755:1694:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25149:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24172:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40036:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38982:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40169:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27088:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25546:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39619:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39036:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39008:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39073:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26143:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39833:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26370:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26610:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39542:69;;;:::i;:::-;;25149:231;25235:7;25282:1;25263:21;;:7;:21;;;25255:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25350:9;:13;25360:2;25350:13;;;;;;;;;;;:22;25364:7;25350:22;;;;;;;;;;;;;;;;25343:29;;25149:231;;;;:::o;24172:310::-;24274:4;24326:26;24311:41;;;:11;:41;;;;:110;;;;24384:37;24369:52;;;:11;:52;;;;24311:110;:163;;;;24438:36;24462:11;24438:23;:36::i;:::-;24311:163;24291:183;;24172:310;;;:::o;40036:125::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40112:4:::1;40102:7;:14;;;;;;;;;;;;:::i;:::-;;40144:7;40133:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;40036:125:::0;:::o;38982:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40169:277::-;40225:13;40258:8;:13;40267:3;40258:13;;;;;;;;;;;;;;;;;;;;;40250:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40348:1;40330:7;40324:21;;;;;:::i;:::-;;;:25;:114;;40431:7;40324:114;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40385:7;40394:14;:3;:12;:14::i;:::-;40368:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40324:114;40317:121;;40169:277;;;:::o;27088:442::-;27329:12;:10;:12::i;:::-;27321:20;;:4;:20;;;:60;;;;27345:36;27362:4;27368:12;:10;:12::i;:::-;27345:16;:36::i;:::-;27321:60;27299:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27470:52;27493:4;27499:2;27503:3;27508:7;27517:4;27470:22;:52::i;:::-;27088:442;;;;;:::o;25546:524::-;25702:16;25763:3;:10;25744:8;:15;:29;25736:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25832:30;25879:8;:15;25865:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25832:63;;25913:9;25908:122;25932:8;:15;25928:1;:19;25908:122;;;25988:30;25998:8;26007:1;25998:11;;;;;;;;:::i;:::-;;;;;;;;26011:3;26015:1;26011:6;;;;;;;;:::i;:::-;;;;;;;;25988:9;:30::i;:::-;25969:13;25983:1;25969:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25949:3;;;;:::i;:::-;;;25908:122;;;;26049:13;26042:20;;;25546:524;;;;:::o;39619:206::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39688:7:::1;;;;;;;;;;;39687:8;39679:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;39756:5;39739:22;;:8;:13;39748:3;39739:13;;;;;;;;;;;;;;;;;;;;;:22;;;39731:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39812:4;39796:8;:13;39805:3;39796:13;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;39619:206:::0;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;39036:27::-;;;;;;;;;;;;;:::o;39008:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39073:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;26143:155::-;26238:52;26257:12;:10;:12::i;:::-;26271:8;26281;26238:18;:52::i;:::-;26143:155;;:::o;39833:195::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39942:7:::1;;;;;;;;;;;39941:8;39933:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39979:40;39990:7;:5;:7::i;:::-;39999:4;40005:9;39979:40;;;;;;;;;;;::::0;:10:::1;:40::i;:::-;39833:195:::0;;:::o;26370:168::-;26469:4;26493:18;:27;26512:7;26493:27;;;;;;;;;;;;;;;:37;26521:8;26493:37;;;;;;;;;;;;;;;;;;;;;;;;;26486:44;;26370:168;;;;:::o;26610:401::-;26826:12;:10;:12::i;:::-;26818:20;;:4;:20;;;:60;;;;26842:36;26859:4;26865:12;:10;:12::i;:::-;26842:16;:36::i;:::-;26818:60;26796:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26958:45;26976:4;26982:2;26986;26990:6;26998:4;26958:17;:45::i;:::-;26610:401;;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;::::0;5069:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;39542:69::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39599:4:::1;39589:7;;:14;;;;;;;;;;;;;;;;;;39542:69::o:0;15480:157::-;15565:4;15604:25;15589:40;;;:11;:40;;;;15582:47;;15480:157;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;29172:1074::-;29399:7;:14;29385:3;:10;:28;29377:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29491:1;29477:16;;:2;:16;;;29469:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29548:16;29567:12;:10;:12::i;:::-;29548:31;;29592:60;29613:8;29623:4;29629:2;29633:3;29638:7;29647:4;29592:20;:60::i;:::-;29670:9;29665:421;29689:3;:10;29685:1;:14;29665:421;;;29721:10;29734:3;29738:1;29734:6;;;;;;;;:::i;:::-;;;;;;;;29721:19;;29755:14;29772:7;29780:1;29772:10;;;;;;;;:::i;:::-;;;;;;;;29755:27;;29799:19;29821:9;:13;29831:2;29821:13;;;;;;;;;;;:19;29835:4;29821:19;;;;;;;;;;;;;;;;29799:41;;29878:6;29863:11;:21;;29855:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30011:6;29997:11;:20;29975:9;:13;29985:2;29975:13;;;;;;;;;;;:19;29989:4;29975:19;;;;;;;;;;;;;;;:42;;;;30068:6;30047:9;:13;30057:2;30047:13;;;;;;;;;;;:17;30061:2;30047:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29706:380;;;29701:3;;;;:::i;:::-;;;29665:421;;;;30133:2;30103:47;;30127:4;30103:47;;30117:8;30103:47;;;30137:3;30142:7;30103:47;;;;;;;:::i;:::-;;;;;;;;30163:75;30199:8;30209:4;30215:2;30219:3;30224:7;30233:4;30163:35;:75::i;:::-;29366:880;29172:1074;;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;35358:331::-;35513:8;35504:17;;:5;:17;;;35496:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35616:8;35578:18;:25;35597:5;35578:25;;;;;;;;;;;;;;;:35;35604:8;35578:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35662:8;35640:41;;35655:5;35640:41;;;35672:8;35640:41;;;;;;:::i;:::-;;;;;;;;35358:331;;;:::o;32489:735::-;32681:1;32667:16;;:2;:16;;;32659:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32754:7;:14;32740:3;:10;:28;32732:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32826:16;32845:12;:10;:12::i;:::-;32826:31;;32870:66;32891:8;32909:1;32913:2;32917:3;32922:7;32931:4;32870:20;:66::i;:::-;32954:9;32949:103;32973:3;:10;32969:1;:14;32949:103;;;33030:7;33038:1;33030:10;;;;;;;;:::i;:::-;;;;;;;;33005:9;:17;33015:3;33019:1;33015:6;;;;;;;;:::i;:::-;;;;;;;;33005:17;;;;;;;;;;;:21;33023:2;33005:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32985:3;;;;;:::i;:::-;;;;32949:103;;;;33105:2;33069:53;;33101:1;33069:53;;33083:8;33069:53;;;33109:3;33114:7;33069:53;;;;;;;:::i;:::-;;;;;;;;33135:81;33171:8;33189:1;33193:2;33197:3;33202:7;33211:4;33135:35;:81::i;:::-;32648:576;32489:735;;;;:::o;27994:820::-;28196:1;28182:16;;:2;:16;;;28174:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28253:16;28272:12;:10;:12::i;:::-;28253:31;;28297:96;28318:8;28328:4;28334:2;28338:21;28356:2;28338:17;:21::i;:::-;28361:25;28379:6;28361:17;:25::i;:::-;28388:4;28297:20;:96::i;:::-;28406:19;28428:9;:13;28438:2;28428:13;;;;;;;;;;;:19;28442:4;28428:19;;;;;;;;;;;;;;;;28406:41;;28481:6;28466:11;:21;;28458:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28606:6;28592:11;:20;28570:9;:13;28580:2;28570:13;;;;;;;;;;;:19;28584:4;28570:19;;;;;;;;;;;;;;;:42;;;;28655:6;28634:9;:13;28644:2;28634:13;;;;;;;;;;;:17;28648:2;28634:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28710:2;28679:46;;28704:4;28679:46;;28694:8;28679:46;;;28714:2;28718:6;28679:46;;;;;;;:::i;:::-;;;;;;;;28738:68;28769:8;28779:4;28785:2;28789;28793:6;28801:4;28738:30;:68::i;:::-;28163:651;;27994:820;;;;;:::o;36645:221::-;;;;;;;:::o;37626:813::-;37866:15;:2;:13;;;:15::i;:::-;37862:570;;;37919:2;37902:43;;;37946:8;37956:4;37962:3;37967:7;37976:4;37902:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37898:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38294:6;38287:14;;;;;;;;;;;:::i;:::-;;;;;;;;37898:523;;;38343:62;;;;;;;;;;:::i;:::-;;;;;;;;37898:523;38075:48;;;38063:60;;;:8;:60;;;;38059:159;;38148:50;;;;;;;;;;:::i;:::-;;;;;;;;38059:159;37982:251;37862:570;37626:813;;;;;;:::o;38447:198::-;38513:16;38542:22;38581:1;38567:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38542:41;;38605:7;38594:5;38600:1;38594:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38632:5;38625:12;;;38447:198;;;:::o;36874:744::-;37089:15;:2;:13;;;:15::i;:::-;37085:526;;;37142:2;37125:38;;;37164:8;37174:4;37180:2;37184:6;37192:4;37125:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37121:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37473:6;37466:14;;;;;;;;;;;:::i;:::-;;;;;;;;37121:479;;;37522:62;;;;;;;;;;:::i;:::-;;;;;;;;37121:479;37259:43;;;37247:55;;;:8;:55;;;;37243:154;;37327:50;;;;;;;;;;:::i;:::-;;;;;;;;37243:154;37198:214;37085:526;36874:744;;;;;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::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:311::-;7636:4;7726:18;7718:6;7715:30;7712:56;;;7748:18;;:::i;:::-;7712:56;7798:4;7790:6;7786:17;7778:25;;7858:4;7852;7848:15;7840:23;;7559:311;;;:::o;7876:117::-;7985:1;7982;7975:12;8016:710;8112:5;8137:81;8153:64;8210:6;8153:64;:::i;:::-;8137:81;:::i;:::-;8128:90;;8238:5;8267:6;8260:5;8253:21;8301:4;8294:5;8290:16;8283:23;;8354:4;8346:6;8342:17;8334:6;8330:30;8383:3;8375:6;8372:15;8369:122;;;8402:79;;:::i;:::-;8369:122;8517:6;8500:220;8534:6;8529:3;8526:15;8500:220;;;8609:3;8638:37;8671:3;8659:10;8638:37;:::i;:::-;8633:3;8626:50;8705:4;8700:3;8696:14;8689:21;;8576:144;8560:4;8555:3;8551:14;8544:21;;8500:220;;;8504:21;8118:608;;8016:710;;;;;:::o;8749:370::-;8820:5;8869:3;8862:4;8854:6;8850:17;8846:27;8836:122;;8877:79;;:::i;:::-;8836:122;8994:6;8981:20;9019:94;9109:3;9101:6;9094:4;9086:6;9082:17;9019:94;:::i;:::-;9010:103;;8826:293;8749:370;;;;:::o;9125:307::-;9186:4;9276:18;9268:6;9265:30;9262:56;;;9298:18;;:::i;:::-;9262:56;9336:29;9358:6;9336:29;:::i;:::-;9328:37;;9420:4;9414;9410:15;9402:23;;9125:307;;;:::o;9438:410::-;9515:5;9540:65;9556:48;9597:6;9556:48;:::i;:::-;9540:65;:::i;:::-;9531:74;;9628:6;9621:5;9614:21;9666:4;9659:5;9655:16;9704:3;9695:6;9690:3;9686:16;9683:25;9680:112;;;9711:79;;:::i;:::-;9680:112;9801:41;9835:6;9830:3;9825;9801:41;:::i;:::-;9521:327;9438:410;;;;;:::o;9867:338::-;9922:5;9971:3;9964:4;9956:6;9952:17;9948:27;9938:122;;9979:79;;:::i;:::-;9938:122;10096:6;10083:20;10121:78;10195:3;10187:6;10180:4;10172:6;10168:17;10121:78;:::i;:::-;10112:87;;9928:277;9867:338;;;;:::o;10211:1509::-;10365:6;10373;10381;10389;10397;10446:3;10434:9;10425:7;10421:23;10417:33;10414:120;;;10453:79;;:::i;:::-;10414:120;10573:1;10598:53;10643:7;10634:6;10623:9;10619:22;10598:53;:::i;:::-;10588:63;;10544:117;10700:2;10726:53;10771:7;10762:6;10751:9;10747:22;10726:53;:::i;:::-;10716:63;;10671:118;10856:2;10845:9;10841:18;10828:32;10887:18;10879:6;10876:30;10873:117;;;10909:79;;:::i;:::-;10873:117;11014:78;11084:7;11075:6;11064:9;11060:22;11014:78;:::i;:::-;11004:88;;10799:303;11169:2;11158:9;11154:18;11141:32;11200:18;11192:6;11189:30;11186:117;;;11222:79;;:::i;:::-;11186:117;11327:78;11397:7;11388:6;11377:9;11373:22;11327:78;:::i;:::-;11317:88;;11112:303;11482:3;11471:9;11467:19;11454:33;11514:18;11506:6;11503:30;11500:117;;;11536:79;;:::i;:::-;11500:117;11641:62;11695:7;11686:6;11675:9;11671:22;11641:62;:::i;:::-;11631:72;;11425:288;10211:1509;;;;;;;;:::o;11726:311::-;11803:4;11893:18;11885:6;11882:30;11879:56;;;11915:18;;:::i;:::-;11879:56;11965:4;11957:6;11953:17;11945:25;;12025:4;12019;12015:15;12007:23;;11726:311;;;:::o;12060:710::-;12156:5;12181:81;12197:64;12254:6;12197:64;:::i;:::-;12181:81;:::i;:::-;12172:90;;12282:5;12311:6;12304:5;12297:21;12345:4;12338:5;12334:16;12327:23;;12398:4;12390:6;12386:17;12378:6;12374:30;12427:3;12419:6;12416:15;12413:122;;;12446:79;;:::i;:::-;12413:122;12561:6;12544:220;12578:6;12573:3;12570:15;12544:220;;;12653:3;12682:37;12715:3;12703:10;12682:37;:::i;:::-;12677:3;12670:50;12749:4;12744:3;12740:14;12733:21;;12620:144;12604:4;12599:3;12595:14;12588:21;;12544:220;;;12548:21;12162:608;;12060:710;;;;;:::o;12793:370::-;12864:5;12913:3;12906:4;12898:6;12894:17;12890:27;12880:122;;12921:79;;:::i;:::-;12880:122;13038:6;13025:20;13063:94;13153:3;13145:6;13138:4;13130:6;13126:17;13063:94;:::i;:::-;13054:103;;12870:293;12793:370;;;;:::o;13169:894::-;13287:6;13295;13344:2;13332:9;13323:7;13319:23;13315:32;13312:119;;;13350:79;;:::i;:::-;13312:119;13498:1;13487:9;13483:17;13470:31;13528:18;13520:6;13517:30;13514:117;;;13550:79;;:::i;:::-;13514:117;13655:78;13725:7;13716:6;13705:9;13701:22;13655:78;:::i;:::-;13645:88;;13441:302;13810:2;13799:9;13795:18;13782:32;13841:18;13833:6;13830:30;13827:117;;;13863:79;;:::i;:::-;13827:117;13968:78;14038:7;14029:6;14018:9;14014:22;13968:78;:::i;:::-;13958:88;;13753:303;13169:894;;;;;:::o;14069:114::-;14136:6;14170:5;14164:12;14154:22;;14069:114;;;:::o;14189:184::-;14288:11;14322:6;14317:3;14310:19;14362:4;14357:3;14353:14;14338:29;;14189:184;;;;:::o;14379:132::-;14446:4;14469:3;14461:11;;14499:4;14494:3;14490:14;14482:22;;14379:132;;;:::o;14517:108::-;14594:24;14612:5;14594:24;:::i;:::-;14589:3;14582:37;14517:108;;:::o;14631:179::-;14700:10;14721:46;14763:3;14755:6;14721:46;:::i;:::-;14799:4;14794:3;14790:14;14776:28;;14631:179;;;;:::o;14816:113::-;14886:4;14918;14913:3;14909:14;14901:22;;14816:113;;;:::o;14965:732::-;15084:3;15113:54;15161:5;15113:54;:::i;:::-;15183:86;15262:6;15257:3;15183:86;:::i;:::-;15176:93;;15293:56;15343:5;15293:56;:::i;:::-;15372:7;15403:1;15388:284;15413:6;15410:1;15407:13;15388:284;;;15489:6;15483:13;15516:63;15575:3;15560:13;15516:63;:::i;:::-;15509:70;;15602:60;15655:6;15602:60;:::i;:::-;15592:70;;15448:224;15435:1;15432;15428:9;15423:14;;15388:284;;;15392:14;15688:3;15681:10;;15089:608;;;14965:732;;;;:::o;15703:373::-;15846:4;15884:2;15873:9;15869:18;15861:26;;15933:9;15927:4;15923:20;15919:1;15908:9;15904:17;15897:47;15961:108;16064:4;16055:6;15961:108;:::i;:::-;15953:116;;15703:373;;;;:::o;16082:118::-;16169:24;16187:5;16169:24;:::i;:::-;16164:3;16157:37;16082:118;;:::o;16206:222::-;16299:4;16337:2;16326:9;16322:18;16314:26;;16350:71;16418:1;16407:9;16403:17;16394:6;16350:71;:::i;:::-;16206:222;;;;:::o;16434:116::-;16504:21;16519:5;16504:21;:::i;:::-;16497:5;16494:32;16484:60;;16540:1;16537;16530:12;16484:60;16434:116;:::o;16556:133::-;16599:5;16637:6;16624:20;16615:29;;16653:30;16677:5;16653:30;:::i;:::-;16556:133;;;;:::o;16695:468::-;16760:6;16768;16817:2;16805:9;16796:7;16792:23;16788:32;16785:119;;;16823:79;;:::i;:::-;16785:119;16943:1;16968:53;17013:7;17004:6;16993:9;16989:22;16968:53;:::i;:::-;16958:63;;16914:117;17070:2;17096:50;17138:7;17129:6;17118:9;17114:22;17096:50;:::i;:::-;17086:60;;17041:115;16695:468;;;;;:::o;17169:894::-;17287:6;17295;17344:2;17332:9;17323:7;17319:23;17315:32;17312:119;;;17350:79;;:::i;:::-;17312:119;17498:1;17487:9;17483:17;17470:31;17528:18;17520:6;17517:30;17514:117;;;17550:79;;:::i;:::-;17514:117;17655:78;17725:7;17716:6;17705:9;17701:22;17655:78;:::i;:::-;17645:88;;17441:302;17810:2;17799:9;17795:18;17782:32;17841:18;17833:6;17830:30;17827:117;;;17863:79;;:::i;:::-;17827:117;17968:78;18038:7;18029:6;18018:9;18014:22;17968:78;:::i;:::-;17958:88;;17753:303;17169:894;;;;;:::o;18069:474::-;18137:6;18145;18194:2;18182:9;18173:7;18169:23;18165:32;18162:119;;;18200:79;;:::i;:::-;18162:119;18320:1;18345:53;18390:7;18381:6;18370:9;18366:22;18345:53;:::i;:::-;18335:63;;18291:117;18447:2;18473:53;18518:7;18509:6;18498:9;18494:22;18473:53;:::i;:::-;18463:63;;18418:118;18069:474;;;;;:::o;18549:1089::-;18653:6;18661;18669;18677;18685;18734:3;18722:9;18713:7;18709:23;18705:33;18702:120;;;18741:79;;:::i;:::-;18702:120;18861:1;18886:53;18931:7;18922:6;18911:9;18907:22;18886:53;:::i;:::-;18876:63;;18832:117;18988:2;19014:53;19059:7;19050:6;19039:9;19035:22;19014:53;:::i;:::-;19004:63;;18959:118;19116:2;19142:53;19187:7;19178:6;19167:9;19163:22;19142:53;:::i;:::-;19132:63;;19087:118;19244:2;19270:53;19315:7;19306:6;19295:9;19291:22;19270:53;:::i;:::-;19260:63;;19215:118;19400:3;19389:9;19385:19;19372:33;19432:18;19424:6;19421:30;19418:117;;;19454:79;;:::i;:::-;19418:117;19559:62;19613:7;19604:6;19593:9;19589:22;19559:62;:::i;:::-;19549:72;;19343:288;18549:1089;;;;;;;;:::o;19644:329::-;19703:6;19752:2;19740:9;19731:7;19727:23;19723:32;19720:119;;;19758:79;;:::i;:::-;19720:119;19878:1;19903:53;19948:7;19939:6;19928:9;19924:22;19903:53;:::i;:::-;19893:63;;19849:117;19644:329;;;;:::o;19979:230::-;20119:34;20115:1;20107:6;20103:14;20096:58;20188:13;20183:2;20175:6;20171:15;20164:38;19979:230;:::o;20215:366::-;20357:3;20378:67;20442:2;20437:3;20378:67;:::i;:::-;20371:74;;20454:93;20543:3;20454:93;:::i;:::-;20572:2;20567:3;20563:12;20556:19;;20215:366;;;:::o;20587:419::-;20753:4;20791:2;20780:9;20776:18;20768:26;;20840:9;20834:4;20830:20;20826:1;20815:9;20811:17;20804:47;20868:131;20994:4;20868:131;:::i;:::-;20860:139;;20587:419;;;:::o;21012:182::-;21152:34;21148:1;21140:6;21136:14;21129:58;21012:182;:::o;21200:366::-;21342:3;21363:67;21427:2;21422:3;21363:67;:::i;:::-;21356:74;;21439:93;21528:3;21439:93;:::i;:::-;21557:2;21552:3;21548:12;21541:19;;21200:366;;;:::o;21572:419::-;21738:4;21776:2;21765:9;21761:18;21753:26;;21825:9;21819:4;21815:20;21811:1;21800:9;21796:17;21789:47;21853:131;21979:4;21853:131;:::i;:::-;21845:139;;21572:419;;;:::o;21997:180::-;22045:77;22042:1;22035:88;22142:4;22139:1;22132:15;22166:4;22163:1;22156:15;22183:320;22227:6;22264:1;22258:4;22254:12;22244:22;;22311:1;22305:4;22301:12;22332:18;22322:81;;22388:4;22380:6;22376:17;22366:27;;22322:81;22450:2;22442:6;22439:14;22419:18;22416:38;22413:84;;22469:18;;:::i;:::-;22413:84;22234:269;22183:320;;;:::o;22509:148::-;22611:11;22648:3;22633:18;;22509:148;;;;:::o;22663:141::-;22712:4;22735:3;22727:11;;22758:3;22755:1;22748:14;22792:4;22789:1;22779:18;22771:26;;22663:141;;;:::o;22834:845::-;22937:3;22974:5;22968:12;23003:36;23029:9;23003:36;:::i;:::-;23055:89;23137:6;23132:3;23055:89;:::i;:::-;23048:96;;23175:1;23164:9;23160:17;23191:1;23186:137;;;;23337:1;23332:341;;;;23153:520;;23186:137;23270:4;23266:9;23255;23251:25;23246:3;23239:38;23306:6;23301:3;23297:16;23290:23;;23186:137;;23332:341;23399:38;23431:5;23399:38;:::i;:::-;23459:1;23473:154;23487:6;23484:1;23481:13;23473:154;;;23561:7;23555:14;23551:1;23546:3;23542:11;23535:35;23611:1;23602:7;23598:15;23587:26;;23509:4;23506:1;23502:12;23497:17;;23473:154;;;23656:6;23651:3;23647:16;23640:23;;23339:334;;23153:520;;22941:738;;22834:845;;;;:::o;23685:269::-;23814:3;23836:92;23924:3;23915:6;23836:92;:::i;:::-;23829:99;;23945:3;23938:10;;23685:269;;;;:::o;23960:180::-;24100:32;24096:1;24088:6;24084:14;24077:56;23960:180;:::o;24146:366::-;24288:3;24309:67;24373:2;24368:3;24309:67;:::i;:::-;24302:74;;24385:93;24474:3;24385:93;:::i;:::-;24503:2;24498:3;24494:12;24487:19;;24146:366;;;:::o;24518:419::-;24684:4;24722:2;24711:9;24707:18;24699:26;;24771:9;24765:4;24761:20;24757:1;24746:9;24742:17;24735:47;24799:131;24925:4;24799:131;:::i;:::-;24791:139;;24518:419;;;:::o;24943:377::-;25049:3;25077:39;25110:5;25077:39;:::i;:::-;25132:89;25214:6;25209:3;25132:89;:::i;:::-;25125:96;;25230:52;25275:6;25270:3;25263:4;25256:5;25252:16;25230:52;:::i;:::-;25307:6;25302:3;25298:16;25291:23;;25053:267;24943:377;;;;:::o;25326:155::-;25466:7;25462:1;25454:6;25450:14;25443:31;25326:155;:::o;25487:400::-;25647:3;25668:84;25750:1;25745:3;25668:84;:::i;:::-;25661:91;;25761:93;25850:3;25761:93;:::i;:::-;25879:1;25874:3;25870:11;25863:18;;25487:400;;;:::o;25893:695::-;26171:3;26193:92;26281:3;26272:6;26193:92;:::i;:::-;26186:99;;26302:95;26393:3;26384:6;26302:95;:::i;:::-;26295:102;;26414:148;26558:3;26414:148;:::i;:::-;26407:155;;26579:3;26572:10;;25893:695;;;;;:::o;26594:237::-;26734:34;26730:1;26722:6;26718:14;26711:58;26803:20;26798:2;26790:6;26786:15;26779:45;26594:237;:::o;26837:366::-;26979:3;27000:67;27064:2;27059:3;27000:67;:::i;:::-;26993:74;;27076:93;27165:3;27076:93;:::i;:::-;27194:2;27189:3;27185:12;27178:19;;26837:366;;;:::o;27209:419::-;27375:4;27413:2;27402:9;27398:18;27390:26;;27462:9;27456:4;27452:20;27448:1;27437:9;27433:17;27426:47;27490:131;27616:4;27490:131;:::i;:::-;27482:139;;27209:419;;;:::o;27634:228::-;27774:34;27770:1;27762:6;27758:14;27751:58;27843:11;27838:2;27830:6;27826:15;27819:36;27634:228;:::o;27868:366::-;28010:3;28031:67;28095:2;28090:3;28031:67;:::i;:::-;28024:74;;28107:93;28196:3;28107:93;:::i;:::-;28225:2;28220:3;28216:12;28209:19;;27868:366;;;:::o;28240:419::-;28406:4;28444:2;28433:9;28429:18;28421:26;;28493:9;28487:4;28483:20;28479:1;28468:9;28464:17;28457:47;28521:131;28647:4;28521:131;:::i;:::-;28513:139;;28240:419;;;:::o;28665:180::-;28713:77;28710:1;28703:88;28810:4;28807:1;28800:15;28834:4;28831:1;28824:15;28851:180;28899:77;28896:1;28889:88;28996:4;28993:1;28986:15;29020:4;29017:1;29010:15;29037:233;29076:3;29099:24;29117:5;29099:24;:::i;:::-;29090:33;;29145:66;29138:5;29135:77;29132:103;;29215:18;;:::i;:::-;29132:103;29262:1;29255:5;29251:13;29244:20;;29037:233;;;:::o;29276:169::-;29416:21;29412:1;29404:6;29400:14;29393:45;29276:169;:::o;29451:366::-;29593:3;29614:67;29678:2;29673:3;29614:67;:::i;:::-;29607:74;;29690:93;29779:3;29690:93;:::i;:::-;29808:2;29803:3;29799:12;29792:19;;29451:366;;;:::o;29823:419::-;29989:4;30027:2;30016:9;30012:18;30004:26;;30076:9;30070:4;30066:20;30062:1;30051:9;30047:17;30040:47;30104:131;30230:4;30104:131;:::i;:::-;30096:139;;29823:419;;;:::o;30248:168::-;30388:20;30384:1;30376:6;30372:14;30365:44;30248:168;:::o;30422:366::-;30564:3;30585:67;30649:2;30644:3;30585:67;:::i;:::-;30578:74;;30661:93;30750:3;30661:93;:::i;:::-;30779:2;30774:3;30770:12;30763:19;;30422:366;;;:::o;30794:419::-;30960:4;30998:2;30987:9;30983:18;30975:26;;31047:9;31041:4;31037:20;31033:1;31022:9;31018:17;31011:47;31075:131;31201:4;31075:131;:::i;:::-;31067:139;;30794:419;;;:::o;31219:163::-;31359:15;31355:1;31347:6;31343:14;31336:39;31219:163;:::o;31388:366::-;31530:3;31551:67;31615:2;31610:3;31551:67;:::i;:::-;31544:74;;31627:93;31716:3;31627:93;:::i;:::-;31745:2;31740:3;31736:12;31729:19;;31388:366;;;:::o;31760:419::-;31926:4;31964:2;31953:9;31949:18;31941:26;;32013:9;32007:4;32003:20;31999:1;31988:9;31984:17;31977:47;32041:131;32167:4;32041:131;:::i;:::-;32033:139;;31760:419;;;:::o;32185:228::-;32325:34;32321:1;32313:6;32309:14;32302:58;32394:11;32389:2;32381:6;32377:15;32370:36;32185:228;:::o;32419:366::-;32561:3;32582:67;32646:2;32641:3;32582:67;:::i;:::-;32575:74;;32658:93;32747:3;32658:93;:::i;:::-;32776:2;32771:3;32767:12;32760:19;;32419:366;;;:::o;32791:419::-;32957:4;32995:2;32984:9;32980:18;32972:26;;33044:9;33038:4;33034:20;33030:1;33019:9;33015:17;33008:47;33072:131;33198:4;33072:131;:::i;:::-;33064:139;;32791:419;;;:::o;33216:225::-;33356:34;33352:1;33344:6;33340:14;33333:58;33425:8;33420:2;33412:6;33408:15;33401:33;33216:225;:::o;33447:366::-;33589:3;33610:67;33674:2;33669:3;33610:67;:::i;:::-;33603:74;;33686:93;33775:3;33686:93;:::i;:::-;33804:2;33799:3;33795:12;33788:19;;33447:366;;;:::o;33819:419::-;33985:4;34023:2;34012:9;34008:18;34000:26;;34072:9;34066:4;34062:20;34058:1;34047:9;34043:17;34036:47;34100:131;34226:4;34100:131;:::i;:::-;34092:139;;33819:419;;;:::o;34244:180::-;34292:77;34289:1;34282:88;34389:4;34386:1;34379:15;34413:4;34410:1;34403:15;34430:185;34470:1;34487:20;34505:1;34487:20;:::i;:::-;34482:25;;34521:20;34539:1;34521:20;:::i;:::-;34516:25;;34560:1;34550:35;;34565:18;;:::i;:::-;34550:35;34607:1;34604;34600:9;34595:14;;34430:185;;;;:::o;34621:191::-;34661:4;34681:20;34699:1;34681:20;:::i;:::-;34676:25;;34715:20;34733:1;34715:20;:::i;:::-;34710:25;;34754:1;34751;34748:8;34745:34;;;34759:18;;:::i;:::-;34745:34;34804:1;34801;34797:9;34789:17;;34621:191;;;;:::o;34818:176::-;34850:1;34867:20;34885:1;34867:20;:::i;:::-;34862:25;;34901:20;34919:1;34901:20;:::i;:::-;34896:25;;34940:1;34930:35;;34945:18;;:::i;:::-;34930:35;34986:1;34983;34979:9;34974:14;;34818:176;;;;:::o;35000:305::-;35040:3;35059:20;35077:1;35059:20;:::i;:::-;35054:25;;35093:20;35111:1;35093:20;:::i;:::-;35088:25;;35247:1;35179:66;35175:74;35172:1;35169:81;35166:107;;;35253:18;;:::i;:::-;35166:107;35297:1;35294;35290:9;35283:16;;35000:305;;;;:::o;35311:227::-;35451:34;35447:1;35439:6;35435:14;35428:58;35520:10;35515:2;35507:6;35503:15;35496:35;35311:227;:::o;35544:366::-;35686:3;35707:67;35771:2;35766:3;35707:67;:::i;:::-;35700:74;;35783:93;35872:3;35783:93;:::i;:::-;35901:2;35896:3;35892:12;35885:19;;35544:366;;;:::o;35916:419::-;36082:4;36120:2;36109:9;36105:18;36097:26;;36169:9;36163:4;36159:20;36155:1;36144:9;36140:17;36133:47;36197:131;36323:4;36197:131;:::i;:::-;36189:139;;35916:419;;;:::o;36341:224::-;36481:34;36477:1;36469:6;36465:14;36458:58;36550:7;36545:2;36537:6;36533:15;36526:32;36341:224;:::o;36571:366::-;36713:3;36734:67;36798:2;36793:3;36734:67;:::i;:::-;36727:74;;36810:93;36899:3;36810:93;:::i;:::-;36928:2;36923:3;36919:12;36912:19;;36571:366;;;:::o;36943:419::-;37109:4;37147:2;37136:9;37132:18;37124:26;;37196:9;37190:4;37186:20;37182:1;37171:9;37167:17;37160:47;37224:131;37350:4;37224:131;:::i;:::-;37216:139;;36943:419;;;:::o;37368:229::-;37508:34;37504:1;37496:6;37492:14;37485:58;37577:12;37572:2;37564:6;37560:15;37553:37;37368:229;:::o;37603:366::-;37745:3;37766:67;37830:2;37825:3;37766:67;:::i;:::-;37759:74;;37842:93;37931:3;37842:93;:::i;:::-;37960:2;37955:3;37951:12;37944:19;;37603:366;;;:::o;37975:419::-;38141:4;38179:2;38168:9;38164:18;38156:26;;38228:9;38222:4;38218:20;38214:1;38203:9;38199:17;38192:47;38256:131;38382:4;38256:131;:::i;:::-;38248:139;;37975:419;;;:::o;38400:634::-;38621:4;38659:2;38648:9;38644:18;38636:26;;38708:9;38702:4;38698:20;38694:1;38683:9;38679:17;38672:47;38736:108;38839:4;38830:6;38736:108;:::i;:::-;38728:116;;38891:9;38885:4;38881:20;38876:2;38865:9;38861:18;38854:48;38919:108;39022:4;39013:6;38919:108;:::i;:::-;38911:116;;38400:634;;;;;:::o;39040:228::-;39180:34;39176:1;39168:6;39164:14;39157:58;39249:11;39244:2;39236:6;39232:15;39225:36;39040:228;:::o;39274:366::-;39416:3;39437:67;39501:2;39496:3;39437:67;:::i;:::-;39430:74;;39513:93;39602:3;39513:93;:::i;:::-;39631:2;39626:3;39622:12;39615:19;;39274:366;;;:::o;39646:419::-;39812:4;39850:2;39839:9;39835:18;39827:26;;39899:9;39893:4;39889:20;39885:1;39874:9;39870:17;39863:47;39927:131;40053:4;39927:131;:::i;:::-;39919:139;;39646:419;;;:::o;40071:220::-;40211:34;40207:1;40199:6;40195:14;40188:58;40280:3;40275:2;40267:6;40263:15;40256:28;40071:220;:::o;40297:366::-;40439:3;40460:67;40524:2;40519:3;40460:67;:::i;:::-;40453:74;;40536:93;40625:3;40536:93;:::i;:::-;40654:2;40649:3;40645:12;40638:19;;40297:366;;;:::o;40669:419::-;40835:4;40873:2;40862:9;40858:18;40850:26;;40922:9;40916:4;40912:20;40908:1;40897:9;40893:17;40886:47;40950:131;41076:4;40950:131;:::i;:::-;40942:139;;40669:419;;;:::o;41094:332::-;41215:4;41253:2;41242:9;41238:18;41230:26;;41266:71;41334:1;41323:9;41319:17;41310:6;41266:71;:::i;:::-;41347:72;41415:2;41404:9;41400:18;41391:6;41347:72;:::i;:::-;41094:332;;;;;:::o;41432:98::-;41483:6;41517:5;41511:12;41501:22;;41432:98;;;:::o;41536:168::-;41619:11;41653:6;41648:3;41641:19;41693:4;41688:3;41684:14;41669:29;;41536:168;;;;:::o;41710:360::-;41796:3;41824:38;41856:5;41824:38;:::i;:::-;41878:70;41941:6;41936:3;41878:70;:::i;:::-;41871:77;;41957:52;42002:6;41997:3;41990:4;41983:5;41979:16;41957:52;:::i;:::-;42034:29;42056:6;42034:29;:::i;:::-;42029:3;42025:39;42018:46;;41800:270;41710:360;;;;:::o;42076:1053::-;42399:4;42437:3;42426:9;42422:19;42414:27;;42451:71;42519:1;42508:9;42504:17;42495:6;42451:71;:::i;:::-;42532:72;42600:2;42589:9;42585:18;42576:6;42532:72;:::i;:::-;42651:9;42645:4;42641:20;42636:2;42625:9;42621:18;42614:48;42679:108;42782:4;42773:6;42679:108;:::i;:::-;42671:116;;42834:9;42828:4;42824:20;42819:2;42808:9;42804:18;42797:48;42862:108;42965:4;42956:6;42862:108;:::i;:::-;42854:116;;43018:9;43012:4;43008:20;43002:3;42991:9;42987:19;42980:49;43046:76;43117:4;43108:6;43046:76;:::i;:::-;43038:84;;42076:1053;;;;;;;;:::o;43135:141::-;43191:5;43222:6;43216:13;43207:22;;43238:32;43264:5;43238:32;:::i;:::-;43135:141;;;;:::o;43282:349::-;43351:6;43400:2;43388:9;43379:7;43375:23;43371:32;43368:119;;;43406:79;;:::i;:::-;43368:119;43526:1;43551:63;43606:7;43597:6;43586:9;43582:22;43551:63;:::i;:::-;43541:73;;43497:127;43282:349;;;;:::o;43637:106::-;43681:8;43730:5;43725:3;43721:15;43700:36;;43637:106;;;:::o;43749:183::-;43784:3;43822:1;43804:16;43801:23;43798:128;;;43860:1;43857;43854;43839:23;43882:34;43913:1;43907:8;43882:34;:::i;:::-;43875:41;;43798:128;43749:183;:::o;43938:711::-;43977:3;44015:4;43997:16;43994:26;44023:5;43991:39;44052:20;;:::i;:::-;44127:1;44109:16;44105:24;44102:1;44096:4;44081:49;44160:4;44154:11;44259:16;44252:4;44244:6;44240:17;44237:39;44204:18;44196:6;44193:30;44177:113;44174:146;;;44305:5;;;;44174:146;44351:6;44345:4;44341:17;44387:3;44381:10;44414:18;44406:6;44403:30;44400:43;;;44436:5;;;;;;44400:43;44484:6;44477:4;44472:3;44468:14;44464:27;44543:1;44525:16;44521:24;44515:4;44511:35;44506:3;44503:44;44500:57;;;44550:5;;;;;;;44500:57;44567;44615:6;44609:4;44605:17;44597:6;44593:30;44587:4;44567:57;:::i;:::-;44640:3;44633:10;;43981:668;;;;;43938:711;;:::o;44655:239::-;44795:34;44791:1;44783:6;44779:14;44772:58;44864:22;44859:2;44851:6;44847:15;44840:47;44655:239;:::o;44900:366::-;45042:3;45063:67;45127:2;45122:3;45063:67;:::i;:::-;45056:74;;45139:93;45228:3;45139:93;:::i;:::-;45257:2;45252:3;45248:12;45241:19;;44900:366;;;:::o;45272:419::-;45438:4;45476:2;45465:9;45461:18;45453:26;;45525:9;45519:4;45515:20;45511:1;45500:9;45496:17;45489:47;45553:131;45679:4;45553:131;:::i;:::-;45545:139;;45272:419;;;:::o;45697:227::-;45837:34;45833:1;45825:6;45821:14;45814:58;45906:10;45901:2;45893:6;45889:15;45882:35;45697:227;:::o;45930:366::-;46072:3;46093:67;46157:2;46152:3;46093:67;:::i;:::-;46086:74;;46169:93;46258:3;46169:93;:::i;:::-;46287:2;46282:3;46278:12;46271:19;;45930:366;;;:::o;46302:419::-;46468:4;46506:2;46495:9;46491:18;46483:26;;46555:9;46549:4;46545:20;46541:1;46530:9;46526:17;46519:47;46583:131;46709:4;46583:131;:::i;:::-;46575:139;;46302:419;;;:::o;46727:751::-;46950:4;46988:3;46977:9;46973:19;46965:27;;47002:71;47070:1;47059:9;47055:17;47046:6;47002:71;:::i;:::-;47083:72;47151:2;47140:9;47136:18;47127:6;47083:72;:::i;:::-;47165;47233:2;47222:9;47218:18;47209:6;47165:72;:::i;:::-;47247;47315:2;47304:9;47300:18;47291:6;47247:72;:::i;:::-;47367:9;47361:4;47357:20;47351:3;47340:9;47336:19;47329:49;47395:76;47466:4;47457:6;47395:76;:::i;:::-;47387:84;;46727:751;;;;;;;;:::o

Swarm Source

ipfs://60cfeee1cc82d9f7d5ebc244c69a158af945c08dfacbf00795c3ce7687ae4083
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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