ETH Price: $3,447.29 (+4.58%)

Token

Grandpa Ape Token (GAT)
 

Overview

Max Total Supply

5,000 GAT

Holders

1,805

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xb49b145D6384BAa7Bcb1226484ee0f776ae5d344
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:
NFT1155

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-09
*/

// SPDX-License-Identifier: MIT

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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/GrandpaApeToken.sol



pragma solidity ^0.8.0;



contract NFT1155 is ERC1155, Ownable {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "Grandpa Ape Token";
    symbol = "GAT";
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
    _burnBatch(msg.sender, _ids, _amounts);
  }

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }
  
  function bulkAirdrop(address[] calldata _to, uint256 _id, uint256 _amount) public onlyOwner {
    for (uint256 i = 0; i < _to.length; i++) {
	  _mint(_to[i], _id, _amount, "");
    }
  }
  
  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"bulkAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"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":"uint256","name":"_id","type":"uint256"},{"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":"uint256","name":"","type":"uint256"}],"name":"tokenURI","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"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280601181526020017f4772616e6470612041706520546f6b656e00000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600381526020017f474154000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61405180620003056000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063862440e2116100b8578063b390c0ab1161007c578063b390c0ab14610323578063c87b56dd1461033f578063d81d0a151461036f578063e985e9c51461038b578063f242432a146103bb578063f2fde38b146103d757610136565b8063862440e2146102935780638da5cb5b146102af57806395d89b41146102cd578063a22cb465146102eb578063aa631bcf1461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780634e1273f414610221578063510f410414610251578063715018a61461026d57806383ca4b6f1461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612caa565b6103f3565b6040516101629190613648565b60405180910390f35b61018560048036038101906101809190612ea1565b6104bc565b604051610192919061342b565b60405180910390f35b6101a361059e565b6040516101b09190613446565b60405180910390f35b6101d360048036038101906101ce9190612efb565b61062c565b6040516101e09190613446565b60405180910390f35b61020360048036038101906101fe9190612cea565b6106d1565b005b61021f600480360381019061021a919061298e565b61076d565b005b61023b60048036038101906102369190612db1565b61080e565b60405161024891906133d2565b60405180910390f35b61026b60048036038101906102669190612b7f565b610927565b005b6102756109d0565b005b610291600480360381019061028c9190612e29565b610a58565b005b6102ad60048036038101906102a89190612f28565b610a67565b005b6102b7610b47565b6040516102c491906132f5565b60405180910390f35b6102d5610b71565b6040516102e29190613446565b60405180910390f35b61030560048036038101906103009190612c6a565b610bff565b005b610321600480360381019061031c9190612d3d565b610c15565b005b61033d60048036038101906103389190612f84565b610cfb565b005b61035960048036038101906103549190612efb565b610d0a565b6040516103669190613446565b60405180910390f35b61038960048036038101906103849190612af4565b610daa565b005b6103a560048036038101906103a0919061294e565b610e46565b6040516103b2919061342b565b60405180910390f35b6103d560048036038101906103d09190612a5d565b610eda565b005b6103f160048036038101906103ec9190612921565b610f7b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b906134a8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610597575061059682611073565b5b9050919050565b600480546105ab906138e8565b80601f01602080910402602001604051908101604052809291908181526020018280546105d7906138e8565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064c906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906138e8565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b50505050509050919050565b6106d96110dd565b73ffffffffffffffffffffffffffffffffffffffff166106f7610b47565b73ffffffffffffffffffffffffffffffffffffffff161461074d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610744906135a8565b60405180910390fd5b610768838383604051806020016040528060008152506110e5565b505050565b6107756110dd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba856107b56110dd565b610e46565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190613548565b60405180910390fd5b610807858585858561127b565b5050505050565b60608151835114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906135e8565b60405180910390fd5b6000835167ffffffffffffffff81111561087157610870613a21565b5b60405190808252806020026020018201604052801561089f5781602001602082028036833780820191505090505b50905060005b845181101561091c576108ec8582815181106108c4576108c36139f2565b5b60200260200101518583815181106108df576108de6139f2565b5b60200260200101516103f3565b8282815181106108ff576108fe6139f2565b5b602002602001018181525050806109159061394b565b90506108a5565b508091505092915050565b61092f6110dd565b73ffffffffffffffffffffffffffffffffffffffff1661094d610b47565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906135a8565b60405180910390fd5b6109ae85858561158f565b6109c985838360405180602001604052806000815250611840565b5050505050565b6109d86110dd565b73ffffffffffffffffffffffffffffffffffffffff166109f6610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906135a8565b60405180910390fd5b610a566000611a5e565b565b610a6333838361158f565b5050565b610a6f6110dd565b73ffffffffffffffffffffffffffffffffffffffff16610a8d610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906135a8565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610b0a9291906125a3565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b3b9190613446565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b7e906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa906138e8565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b505050505081565b610c11610c0a6110dd565b8383611b24565b5050565b610c1d6110dd565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906135a8565b60405180910390fd5b60005b84849050811015610cf457610ce1858583818110610cb557610cb46139f2565b5b9050602002016020810190610cca9190612921565b8484604051806020016040528060008152506110e5565b8080610cec9061394b565b915050610c94565b5050505050565b610d06338383611c91565b5050565b60066020528060005260406000206000915090508054610d29906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d55906138e8565b8015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b505050505081565b610db26110dd565b73ffffffffffffffffffffffffffffffffffffffff16610dd0610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906135a8565b60405180910390fd5b610e4183838360405180602001604052806000815250611840565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ee26110dd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f285750610f2785610f226110dd565b610e46565b5b610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613508565b60405180910390fd5b610f748585858585611eae565b5050505050565b610f836110dd565b73ffffffffffffffffffffffffffffffffffffffff16610fa1610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906135a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906134c8565b60405180910390fd5b61107081611a5e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613628565b60405180910390fd5b600061115f6110dd565b90506111808160008761117188612130565b61117a88612130565b876121aa565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111df91906137dc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161125d929190613663565b60405180910390a4611274816000878787876121b2565b5050505050565b81518351146112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690613608565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613528565b60405180910390fd5b60006113396110dd565b90506113498187878787876121aa565b60005b84518110156114fa57600085828151811061136a576113696139f2565b5b602002602001015190506000858381518110611389576113886139f2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190613588565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114df91906137dc565b92505081905550505050806114f39061394b565b905061134c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115719291906133f4565b60405180910390a4611587818787878787612399565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613568565b60405180910390fd5b8051825114611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613608565b60405180910390fd5b600061164d6110dd565b905061166d818560008686604051806020016040528060008152506121aa565b60005b83518110156117ba57600084828151811061168e5761168d6139f2565b5b6020026020010151905060008483815181106116ad576116ac6139f2565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906134e8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806117b29061394b565b915050611670565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118329291906133f4565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613628565b60405180910390fd5b81518351146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613608565b60405180910390fd5b60006118fe6110dd565b905061190f816000878787876121aa565b60005b84518110156119c85783818151811061192e5761192d6139f2565b5b602002602001015160008087848151811061194c5761194b6139f2565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ae91906137dc565b9250508190555080806119c09061394b565b915050611912565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a409291906133f4565b60405180910390a4611a5781600087878787612399565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a906135c8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c84919061342b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613568565b60405180910390fd5b6000611d0b6110dd565b9050611d3b81856000611d1d87612130565b611d2687612130565b604051806020016040528060008152506121aa565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc9906134e8565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e9f929190613663565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590613528565b60405180910390fd5b6000611f286110dd565b9050611f48818787611f3988612130565b611f4288612130565b876121aa565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613588565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209491906137dc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612111929190613663565b60405180910390a46121278288888888886121b2565b50505050505050565b60606000600167ffffffffffffffff81111561214f5761214e613a21565b5b60405190808252806020026020018201604052801561217d5781602001602082028036833780820191505090505b5090508281600081518110612195576121946139f2565b5b60200260200101818152505080915050919050565b505050505050565b6121d18473ffffffffffffffffffffffffffffffffffffffff16612580565b15612391578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612217959493929190613378565b602060405180830381600087803b15801561223157600080fd5b505af192505050801561226257506040513d601f19601f8201168201806040525081019061225f9190612ece565b60015b6123085761226e613a50565b806308c379a014156122cb5750612283613f29565b8061228e57506122cd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29190613446565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ff90613468565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690613488565b60405180910390fd5b505b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16612580565b15612578578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe959493929190613310565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190612ece565b60015b6124ef57612455613a50565b806308c379a014156124b2575061246a613f29565b8061247557506124b4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99190613446565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e690613468565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613488565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125af906138e8565b90600052602060002090601f0160209004810192826125d15760008555612618565b82601f106125ea57805160ff1916838001178555612618565b82800160010185558215612618579182015b828111156126175782518255916020019190600101906125fc565b5b5090506126259190612629565b5090565b5b8082111561264257600081600090555060010161262a565b5090565b6000612659612654846136b1565b61368c565b9050808382526020820190508285602086028201111561267c5761267b613a7c565b5b60005b858110156126ac578161269288826127aa565b84526020840193506020830192505060018101905061267f565b5050509392505050565b60006126c96126c4846136dd565b61368c565b905080838252602082019050828560208602820111156126ec576126eb613a7c565b5b60005b8581101561271c5781612702888261290c565b8452602084019350602083019250506001810190506126ef565b5050509392505050565b600061273961273484613709565b61368c565b90508281526020810184848401111561275557612754613a81565b5b6127608482856138a6565b509392505050565b600061277b6127768461373a565b61368c565b90508281526020810184848401111561279757612796613a81565b5b6127a28482856138a6565b509392505050565b6000813590506127b981613fbf565b92915050565b60008083601f8401126127d5576127d4613a77565b5b8235905067ffffffffffffffff8111156127f2576127f1613a72565b5b60208301915083602082028301111561280e5761280d613a7c565b5b9250929050565b600082601f83011261282a57612829613a77565b5b813561283a848260208601612646565b91505092915050565b600082601f83011261285857612857613a77565b5b81356128688482602086016126b6565b91505092915050565b60008135905061288081613fd6565b92915050565b60008135905061289581613fed565b92915050565b6000815190506128aa81613fed565b92915050565b600082601f8301126128c5576128c4613a77565b5b81356128d5848260208601612726565b91505092915050565b600082601f8301126128f3576128f2613a77565b5b8135612903848260208601612768565b91505092915050565b60008135905061291b81614004565b92915050565b60006020828403121561293757612936613a8b565b5b6000612945848285016127aa565b91505092915050565b6000806040838503121561296557612964613a8b565b5b6000612973858286016127aa565b9250506020612984858286016127aa565b9150509250929050565b600080600080600060a086880312156129aa576129a9613a8b565b5b60006129b8888289016127aa565b95505060206129c9888289016127aa565b945050604086013567ffffffffffffffff8111156129ea576129e9613a86565b5b6129f688828901612843565b935050606086013567ffffffffffffffff811115612a1757612a16613a86565b5b612a2388828901612843565b925050608086013567ffffffffffffffff811115612a4457612a43613a86565b5b612a50888289016128b0565b9150509295509295909350565b600080600080600060a08688031215612a7957612a78613a8b565b5b6000612a87888289016127aa565b9550506020612a98888289016127aa565b9450506040612aa98882890161290c565b9350506060612aba8882890161290c565b925050608086013567ffffffffffffffff811115612adb57612ada613a86565b5b612ae7888289016128b0565b9150509295509295909350565b600080600060608486031215612b0d57612b0c613a8b565b5b6000612b1b868287016127aa565b935050602084013567ffffffffffffffff811115612b3c57612b3b613a86565b5b612b4886828701612843565b925050604084013567ffffffffffffffff811115612b6957612b68613a86565b5b612b7586828701612843565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613a8b565b5b6000612ba9888289016127aa565b955050602086013567ffffffffffffffff811115612bca57612bc9613a86565b5b612bd688828901612843565b945050604086013567ffffffffffffffff811115612bf757612bf6613a86565b5b612c0388828901612843565b935050606086013567ffffffffffffffff811115612c2457612c23613a86565b5b612c3088828901612843565b925050608086013567ffffffffffffffff811115612c5157612c50613a86565b5b612c5d88828901612843565b9150509295509295909350565b60008060408385031215612c8157612c80613a8b565b5b6000612c8f858286016127aa565b9250506020612ca085828601612871565b9150509250929050565b60008060408385031215612cc157612cc0613a8b565b5b6000612ccf858286016127aa565b9250506020612ce08582860161290c565b9150509250929050565b600080600060608486031215612d0357612d02613a8b565b5b6000612d11868287016127aa565b9350506020612d228682870161290c565b9250506040612d338682870161290c565b9150509250925092565b60008060008060608587031215612d5757612d56613a8b565b5b600085013567ffffffffffffffff811115612d7557612d74613a86565b5b612d81878288016127bf565b94509450506020612d948782880161290c565b9250506040612da58782880161290c565b91505092959194509250565b60008060408385031215612dc857612dc7613a8b565b5b600083013567ffffffffffffffff811115612de657612de5613a86565b5b612df285828601612815565b925050602083013567ffffffffffffffff811115612e1357612e12613a86565b5b612e1f85828601612843565b9150509250929050565b60008060408385031215612e4057612e3f613a8b565b5b600083013567ffffffffffffffff811115612e5e57612e5d613a86565b5b612e6a85828601612843565b925050602083013567ffffffffffffffff811115612e8b57612e8a613a86565b5b612e9785828601612843565b9150509250929050565b600060208284031215612eb757612eb6613a8b565b5b6000612ec584828501612886565b91505092915050565b600060208284031215612ee457612ee3613a8b565b5b6000612ef28482850161289b565b91505092915050565b600060208284031215612f1157612f10613a8b565b5b6000612f1f8482850161290c565b91505092915050565b60008060408385031215612f3f57612f3e613a8b565b5b6000612f4d8582860161290c565b925050602083013567ffffffffffffffff811115612f6e57612f6d613a86565b5b612f7a858286016128de565b9150509250929050565b60008060408385031215612f9b57612f9a613a8b565b5b6000612fa98582860161290c565b9250506020612fba8582860161290c565b9150509250929050565b6000612fd083836132d7565b60208301905092915050565b612fe581613832565b82525050565b6000612ff68261377b565b61300081856137a9565b935061300b8361376b565b8060005b8381101561303c5781516130238882612fc4565b975061302e8361379c565b92505060018101905061300f565b5085935050505092915050565b61305281613844565b82525050565b600061306382613786565b61306d81856137ba565b935061307d8185602086016138b5565b61308681613a90565b840191505092915050565b600061309c82613791565b6130a681856137cb565b93506130b68185602086016138b5565b6130bf81613a90565b840191505092915050565b60006130d76034836137cb565b91506130e282613aae565b604082019050919050565b60006130fa6028836137cb565b915061310582613afd565b604082019050919050565b600061311d602b836137cb565b915061312882613b4c565b604082019050919050565b60006131406026836137cb565b915061314b82613b9b565b604082019050919050565b60006131636024836137cb565b915061316e82613bea565b604082019050919050565b60006131866029836137cb565b915061319182613c39565b604082019050919050565b60006131a96025836137cb565b91506131b482613c88565b604082019050919050565b60006131cc6032836137cb565b91506131d782613cd7565b604082019050919050565b60006131ef6023836137cb565b91506131fa82613d26565b604082019050919050565b6000613212602a836137cb565b915061321d82613d75565b604082019050919050565b60006132356020836137cb565b915061324082613dc4565b602082019050919050565b60006132586029836137cb565b915061326382613ded565b604082019050919050565b600061327b6029836137cb565b915061328682613e3c565b604082019050919050565b600061329e6028836137cb565b91506132a982613e8b565b604082019050919050565b60006132c16021836137cb565b91506132cc82613eda565b604082019050919050565b6132e08161389c565b82525050565b6132ef8161389c565b82525050565b600060208201905061330a6000830184612fdc565b92915050565b600060a0820190506133256000830188612fdc565b6133326020830187612fdc565b81810360408301526133448186612feb565b905081810360608301526133588185612feb565b9050818103608083015261336c8184613058565b90509695505050505050565b600060a08201905061338d6000830188612fdc565b61339a6020830187612fdc565b6133a760408301866132e6565b6133b460608301856132e6565b81810360808301526133c68184613058565b90509695505050505050565b600060208201905081810360008301526133ec8184612feb565b905092915050565b6000604082019050818103600083015261340e8185612feb565b905081810360208301526134228184612feb565b90509392505050565b60006020820190506134406000830184613049565b92915050565b600060208201905081810360008301526134608184613091565b905092915050565b60006020820190508181036000830152613481816130ca565b9050919050565b600060208201905081810360008301526134a1816130ed565b9050919050565b600060208201905081810360008301526134c181613110565b9050919050565b600060208201905081810360008301526134e181613133565b9050919050565b6000602082019050818103600083015261350181613156565b9050919050565b6000602082019050818103600083015261352181613179565b9050919050565b600060208201905081810360008301526135418161319c565b9050919050565b60006020820190508181036000830152613561816131bf565b9050919050565b60006020820190508181036000830152613581816131e2565b9050919050565b600060208201905081810360008301526135a181613205565b9050919050565b600060208201905081810360008301526135c181613228565b9050919050565b600060208201905081810360008301526135e18161324b565b9050919050565b600060208201905081810360008301526136018161326e565b9050919050565b6000602082019050818103600083015261362181613291565b9050919050565b60006020820190508181036000830152613641816132b4565b9050919050565b600060208201905061365d60008301846132e6565b92915050565b600060408201905061367860008301856132e6565b61368560208301846132e6565b9392505050565b60006136966136a7565b90506136a2828261391a565b919050565b6000604051905090565b600067ffffffffffffffff8211156136cc576136cb613a21565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136f8576136f7613a21565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372457613723613a21565b5b61372d82613a90565b9050602081019050919050565b600067ffffffffffffffff82111561375557613754613a21565b5b61375e82613a90565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137e78261389c565b91506137f28361389c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382757613826613994565b5b828201905092915050565b600061383d8261387c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138d35780820151818401526020810190506138b8565b838111156138e2576000848401525b50505050565b6000600282049050600182168061390057607f821691505b60208210811415613914576139136139c3565b5b50919050565b61392382613a90565b810181811067ffffffffffffffff8211171561394257613941613a21565b5b80604052505050565b60006139568261389c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398957613988613994565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a6f5760046000803e613a6c600051613aa1565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613f3957613fbc565b613f416136a7565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f69575050613fbc565b808201805167ffffffffffffffff811115613f875750505050613fbc565b80602083010160043d038501811115613fa4575050505050613fbc565b613fb38260200185018661391a565b82955050505050505b90565b613fc881613832565b8114613fd357600080fd5b50565b613fdf81613844565b8114613fea57600080fd5b50565b613ff681613850565b811461400157600080fd5b50565b61400d8161389c565b811461401857600080fd5b5056fea2646970667358221220b10a3a4b00fef466e3687e3b069af626be0b3b0f41eb6bf41627aca1d951b44f64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063862440e2116100b8578063b390c0ab1161007c578063b390c0ab14610323578063c87b56dd1461033f578063d81d0a151461036f578063e985e9c51461038b578063f242432a146103bb578063f2fde38b146103d757610136565b8063862440e2146102935780638da5cb5b146102af57806395d89b41146102cd578063a22cb465146102eb578063aa631bcf1461030757610136565b80632eb2c2d6116100ff5780632eb2c2d6146102055780634e1273f414610221578063510f410414610251578063715018a61461026d57806383ca4b6f1461027757610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b9578063156e29f6146101e9575b600080fd5b61015560048036038101906101509190612caa565b6103f3565b6040516101629190613648565b60405180910390f35b61018560048036038101906101809190612ea1565b6104bc565b604051610192919061342b565b60405180910390f35b6101a361059e565b6040516101b09190613446565b60405180910390f35b6101d360048036038101906101ce9190612efb565b61062c565b6040516101e09190613446565b60405180910390f35b61020360048036038101906101fe9190612cea565b6106d1565b005b61021f600480360381019061021a919061298e565b61076d565b005b61023b60048036038101906102369190612db1565b61080e565b60405161024891906133d2565b60405180910390f35b61026b60048036038101906102669190612b7f565b610927565b005b6102756109d0565b005b610291600480360381019061028c9190612e29565b610a58565b005b6102ad60048036038101906102a89190612f28565b610a67565b005b6102b7610b47565b6040516102c491906132f5565b60405180910390f35b6102d5610b71565b6040516102e29190613446565b60405180910390f35b61030560048036038101906103009190612c6a565b610bff565b005b610321600480360381019061031c9190612d3d565b610c15565b005b61033d60048036038101906103389190612f84565b610cfb565b005b61035960048036038101906103549190612efb565b610d0a565b6040516103669190613446565b60405180910390f35b61038960048036038101906103849190612af4565b610daa565b005b6103a560048036038101906103a0919061294e565b610e46565b6040516103b2919061342b565b60405180910390f35b6103d560048036038101906103d09190612a5d565b610eda565b005b6103f160048036038101906103ec9190612921565b610f7b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045b906134a8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610597575061059682611073565b5b9050919050565b600480546105ab906138e8565b80601f01602080910402602001604051908101604052809291908181526020018280546105d7906138e8565b80156106245780601f106105f957610100808354040283529160200191610624565b820191906000526020600020905b81548152906001019060200180831161060757829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461064c906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906138e8565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b50505050509050919050565b6106d96110dd565b73ffffffffffffffffffffffffffffffffffffffff166106f7610b47565b73ffffffffffffffffffffffffffffffffffffffff161461074d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610744906135a8565b60405180910390fd5b610768838383604051806020016040528060008152506110e5565b505050565b6107756110dd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba856107b56110dd565b610e46565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190613548565b60405180910390fd5b610807858585858561127b565b5050505050565b60608151835114610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906135e8565b60405180910390fd5b6000835167ffffffffffffffff81111561087157610870613a21565b5b60405190808252806020026020018201604052801561089f5781602001602082028036833780820191505090505b50905060005b845181101561091c576108ec8582815181106108c4576108c36139f2565b5b60200260200101518583815181106108df576108de6139f2565b5b60200260200101516103f3565b8282815181106108ff576108fe6139f2565b5b602002602001018181525050806109159061394b565b90506108a5565b508091505092915050565b61092f6110dd565b73ffffffffffffffffffffffffffffffffffffffff1661094d610b47565b73ffffffffffffffffffffffffffffffffffffffff16146109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906135a8565b60405180910390fd5b6109ae85858561158f565b6109c985838360405180602001604052806000815250611840565b5050505050565b6109d86110dd565b73ffffffffffffffffffffffffffffffffffffffff166109f6610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a43906135a8565b60405180910390fd5b610a566000611a5e565b565b610a6333838361158f565b5050565b610a6f6110dd565b73ffffffffffffffffffffffffffffffffffffffff16610a8d610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada906135a8565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610b0a9291906125a3565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b3b9190613446565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b7e906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610baa906138e8565b8015610bf75780601f10610bcc57610100808354040283529160200191610bf7565b820191906000526020600020905b815481529060010190602001808311610bda57829003601f168201915b505050505081565b610c11610c0a6110dd565b8383611b24565b5050565b610c1d6110dd565b73ffffffffffffffffffffffffffffffffffffffff16610c3b610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906135a8565b60405180910390fd5b60005b84849050811015610cf457610ce1858583818110610cb557610cb46139f2565b5b9050602002016020810190610cca9190612921565b8484604051806020016040528060008152506110e5565b8080610cec9061394b565b915050610c94565b5050505050565b610d06338383611c91565b5050565b60066020528060005260406000206000915090508054610d29906138e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d55906138e8565b8015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b505050505081565b610db26110dd565b73ffffffffffffffffffffffffffffffffffffffff16610dd0610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d906135a8565b60405180910390fd5b610e4183838360405180602001604052806000815250611840565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610ee26110dd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610f285750610f2785610f226110dd565b610e46565b5b610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90613508565b60405180910390fd5b610f748585858585611eae565b5050505050565b610f836110dd565b73ffffffffffffffffffffffffffffffffffffffff16610fa1610b47565b73ffffffffffffffffffffffffffffffffffffffff1614610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906135a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e906134c8565b60405180910390fd5b61107081611a5e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613628565b60405180910390fd5b600061115f6110dd565b90506111808160008761117188612130565b61117a88612130565b876121aa565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111df91906137dc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161125d929190613663565b60405180910390a4611274816000878787876121b2565b5050505050565b81518351146112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690613608565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690613528565b60405180910390fd5b60006113396110dd565b90506113498187878787876121aa565b60005b84518110156114fa57600085828151811061136a576113696139f2565b5b602002602001015190506000858381518110611389576113886139f2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190613588565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114df91906137dc565b92505081905550505050806114f39061394b565b905061134c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115719291906133f4565b60405180910390a4611587818787878787612399565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613568565b60405180910390fd5b8051825114611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613608565b60405180910390fd5b600061164d6110dd565b905061166d818560008686604051806020016040528060008152506121aa565b60005b83518110156117ba57600084828151811061168e5761168d6139f2565b5b6020026020010151905060008483815181106116ad576116ac6139f2565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561174e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611745906134e8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806117b29061394b565b915050611670565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516118329291906133f4565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613628565b60405180910390fd5b81518351146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613608565b60405180910390fd5b60006118fe6110dd565b905061190f816000878787876121aa565b60005b84518110156119c85783818151811061192e5761192d6139f2565b5b602002602001015160008087848151811061194c5761194b6139f2565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119ae91906137dc565b9250508190555080806119c09061394b565b915050611912565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a409291906133f4565b60405180910390a4611a5781600087878787612399565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a906135c8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c84919061342b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613568565b60405180910390fd5b6000611d0b6110dd565b9050611d3b81856000611d1d87612130565b611d2687612130565b604051806020016040528060008152506121aa565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc9906134e8565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e9f929190613663565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590613528565b60405180910390fd5b6000611f286110dd565b9050611f48818787611f3988612130565b611f4288612130565b876121aa565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613588565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209491906137dc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612111929190613663565b60405180910390a46121278288888888886121b2565b50505050505050565b60606000600167ffffffffffffffff81111561214f5761214e613a21565b5b60405190808252806020026020018201604052801561217d5781602001602082028036833780820191505090505b5090508281600081518110612195576121946139f2565b5b60200260200101818152505080915050919050565b505050505050565b6121d18473ffffffffffffffffffffffffffffffffffffffff16612580565b15612391578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612217959493929190613378565b602060405180830381600087803b15801561223157600080fd5b505af192505050801561226257506040513d601f19601f8201168201806040525081019061225f9190612ece565b60015b6123085761226e613a50565b806308c379a014156122cb5750612283613f29565b8061228e57506122cd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c29190613446565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ff90613468565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461238f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238690613488565b60405180910390fd5b505b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16612580565b15612578578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe959493929190613310565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190612ece565b60015b6124ef57612455613a50565b806308c379a014156124b2575061246a613f29565b8061247557506124b4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99190613446565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e690613468565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613488565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125af906138e8565b90600052602060002090601f0160209004810192826125d15760008555612618565b82601f106125ea57805160ff1916838001178555612618565b82800160010185558215612618579182015b828111156126175782518255916020019190600101906125fc565b5b5090506126259190612629565b5090565b5b8082111561264257600081600090555060010161262a565b5090565b6000612659612654846136b1565b61368c565b9050808382526020820190508285602086028201111561267c5761267b613a7c565b5b60005b858110156126ac578161269288826127aa565b84526020840193506020830192505060018101905061267f565b5050509392505050565b60006126c96126c4846136dd565b61368c565b905080838252602082019050828560208602820111156126ec576126eb613a7c565b5b60005b8581101561271c5781612702888261290c565b8452602084019350602083019250506001810190506126ef565b5050509392505050565b600061273961273484613709565b61368c565b90508281526020810184848401111561275557612754613a81565b5b6127608482856138a6565b509392505050565b600061277b6127768461373a565b61368c565b90508281526020810184848401111561279757612796613a81565b5b6127a28482856138a6565b509392505050565b6000813590506127b981613fbf565b92915050565b60008083601f8401126127d5576127d4613a77565b5b8235905067ffffffffffffffff8111156127f2576127f1613a72565b5b60208301915083602082028301111561280e5761280d613a7c565b5b9250929050565b600082601f83011261282a57612829613a77565b5b813561283a848260208601612646565b91505092915050565b600082601f83011261285857612857613a77565b5b81356128688482602086016126b6565b91505092915050565b60008135905061288081613fd6565b92915050565b60008135905061289581613fed565b92915050565b6000815190506128aa81613fed565b92915050565b600082601f8301126128c5576128c4613a77565b5b81356128d5848260208601612726565b91505092915050565b600082601f8301126128f3576128f2613a77565b5b8135612903848260208601612768565b91505092915050565b60008135905061291b81614004565b92915050565b60006020828403121561293757612936613a8b565b5b6000612945848285016127aa565b91505092915050565b6000806040838503121561296557612964613a8b565b5b6000612973858286016127aa565b9250506020612984858286016127aa565b9150509250929050565b600080600080600060a086880312156129aa576129a9613a8b565b5b60006129b8888289016127aa565b95505060206129c9888289016127aa565b945050604086013567ffffffffffffffff8111156129ea576129e9613a86565b5b6129f688828901612843565b935050606086013567ffffffffffffffff811115612a1757612a16613a86565b5b612a2388828901612843565b925050608086013567ffffffffffffffff811115612a4457612a43613a86565b5b612a50888289016128b0565b9150509295509295909350565b600080600080600060a08688031215612a7957612a78613a8b565b5b6000612a87888289016127aa565b9550506020612a98888289016127aa565b9450506040612aa98882890161290c565b9350506060612aba8882890161290c565b925050608086013567ffffffffffffffff811115612adb57612ada613a86565b5b612ae7888289016128b0565b9150509295509295909350565b600080600060608486031215612b0d57612b0c613a8b565b5b6000612b1b868287016127aa565b935050602084013567ffffffffffffffff811115612b3c57612b3b613a86565b5b612b4886828701612843565b925050604084013567ffffffffffffffff811115612b6957612b68613a86565b5b612b7586828701612843565b9150509250925092565b600080600080600060a08688031215612b9b57612b9a613a8b565b5b6000612ba9888289016127aa565b955050602086013567ffffffffffffffff811115612bca57612bc9613a86565b5b612bd688828901612843565b945050604086013567ffffffffffffffff811115612bf757612bf6613a86565b5b612c0388828901612843565b935050606086013567ffffffffffffffff811115612c2457612c23613a86565b5b612c3088828901612843565b925050608086013567ffffffffffffffff811115612c5157612c50613a86565b5b612c5d88828901612843565b9150509295509295909350565b60008060408385031215612c8157612c80613a8b565b5b6000612c8f858286016127aa565b9250506020612ca085828601612871565b9150509250929050565b60008060408385031215612cc157612cc0613a8b565b5b6000612ccf858286016127aa565b9250506020612ce08582860161290c565b9150509250929050565b600080600060608486031215612d0357612d02613a8b565b5b6000612d11868287016127aa565b9350506020612d228682870161290c565b9250506040612d338682870161290c565b9150509250925092565b60008060008060608587031215612d5757612d56613a8b565b5b600085013567ffffffffffffffff811115612d7557612d74613a86565b5b612d81878288016127bf565b94509450506020612d948782880161290c565b9250506040612da58782880161290c565b91505092959194509250565b60008060408385031215612dc857612dc7613a8b565b5b600083013567ffffffffffffffff811115612de657612de5613a86565b5b612df285828601612815565b925050602083013567ffffffffffffffff811115612e1357612e12613a86565b5b612e1f85828601612843565b9150509250929050565b60008060408385031215612e4057612e3f613a8b565b5b600083013567ffffffffffffffff811115612e5e57612e5d613a86565b5b612e6a85828601612843565b925050602083013567ffffffffffffffff811115612e8b57612e8a613a86565b5b612e9785828601612843565b9150509250929050565b600060208284031215612eb757612eb6613a8b565b5b6000612ec584828501612886565b91505092915050565b600060208284031215612ee457612ee3613a8b565b5b6000612ef28482850161289b565b91505092915050565b600060208284031215612f1157612f10613a8b565b5b6000612f1f8482850161290c565b91505092915050565b60008060408385031215612f3f57612f3e613a8b565b5b6000612f4d8582860161290c565b925050602083013567ffffffffffffffff811115612f6e57612f6d613a86565b5b612f7a858286016128de565b9150509250929050565b60008060408385031215612f9b57612f9a613a8b565b5b6000612fa98582860161290c565b9250506020612fba8582860161290c565b9150509250929050565b6000612fd083836132d7565b60208301905092915050565b612fe581613832565b82525050565b6000612ff68261377b565b61300081856137a9565b935061300b8361376b565b8060005b8381101561303c5781516130238882612fc4565b975061302e8361379c565b92505060018101905061300f565b5085935050505092915050565b61305281613844565b82525050565b600061306382613786565b61306d81856137ba565b935061307d8185602086016138b5565b61308681613a90565b840191505092915050565b600061309c82613791565b6130a681856137cb565b93506130b68185602086016138b5565b6130bf81613a90565b840191505092915050565b60006130d76034836137cb565b91506130e282613aae565b604082019050919050565b60006130fa6028836137cb565b915061310582613afd565b604082019050919050565b600061311d602b836137cb565b915061312882613b4c565b604082019050919050565b60006131406026836137cb565b915061314b82613b9b565b604082019050919050565b60006131636024836137cb565b915061316e82613bea565b604082019050919050565b60006131866029836137cb565b915061319182613c39565b604082019050919050565b60006131a96025836137cb565b91506131b482613c88565b604082019050919050565b60006131cc6032836137cb565b91506131d782613cd7565b604082019050919050565b60006131ef6023836137cb565b91506131fa82613d26565b604082019050919050565b6000613212602a836137cb565b915061321d82613d75565b604082019050919050565b60006132356020836137cb565b915061324082613dc4565b602082019050919050565b60006132586029836137cb565b915061326382613ded565b604082019050919050565b600061327b6029836137cb565b915061328682613e3c565b604082019050919050565b600061329e6028836137cb565b91506132a982613e8b565b604082019050919050565b60006132c16021836137cb565b91506132cc82613eda565b604082019050919050565b6132e08161389c565b82525050565b6132ef8161389c565b82525050565b600060208201905061330a6000830184612fdc565b92915050565b600060a0820190506133256000830188612fdc565b6133326020830187612fdc565b81810360408301526133448186612feb565b905081810360608301526133588185612feb565b9050818103608083015261336c8184613058565b90509695505050505050565b600060a08201905061338d6000830188612fdc565b61339a6020830187612fdc565b6133a760408301866132e6565b6133b460608301856132e6565b81810360808301526133c68184613058565b90509695505050505050565b600060208201905081810360008301526133ec8184612feb565b905092915050565b6000604082019050818103600083015261340e8185612feb565b905081810360208301526134228184612feb565b90509392505050565b60006020820190506134406000830184613049565b92915050565b600060208201905081810360008301526134608184613091565b905092915050565b60006020820190508181036000830152613481816130ca565b9050919050565b600060208201905081810360008301526134a1816130ed565b9050919050565b600060208201905081810360008301526134c181613110565b9050919050565b600060208201905081810360008301526134e181613133565b9050919050565b6000602082019050818103600083015261350181613156565b9050919050565b6000602082019050818103600083015261352181613179565b9050919050565b600060208201905081810360008301526135418161319c565b9050919050565b60006020820190508181036000830152613561816131bf565b9050919050565b60006020820190508181036000830152613581816131e2565b9050919050565b600060208201905081810360008301526135a181613205565b9050919050565b600060208201905081810360008301526135c181613228565b9050919050565b600060208201905081810360008301526135e18161324b565b9050919050565b600060208201905081810360008301526136018161326e565b9050919050565b6000602082019050818103600083015261362181613291565b9050919050565b60006020820190508181036000830152613641816132b4565b9050919050565b600060208201905061365d60008301846132e6565b92915050565b600060408201905061367860008301856132e6565b61368560208301846132e6565b9392505050565b60006136966136a7565b90506136a2828261391a565b919050565b6000604051905090565b600067ffffffffffffffff8211156136cc576136cb613a21565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136f8576136f7613a21565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372457613723613a21565b5b61372d82613a90565b9050602081019050919050565b600067ffffffffffffffff82111561375557613754613a21565b5b61375e82613a90565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137e78261389c565b91506137f28361389c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382757613826613994565b5b828201905092915050565b600061383d8261387c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138d35780820151818401526020810190506138b8565b838111156138e2576000848401525b50505050565b6000600282049050600182168061390057607f821691505b60208210811415613914576139136139c3565b5b50919050565b61392382613a90565b810181811067ffffffffffffffff8211171561394257613941613a21565b5b80604052505050565b60006139568261389c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561398957613988613994565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a6f5760046000803e613a6c600051613aa1565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613f3957613fbc565b613f416136a7565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f69575050613fbc565b808201805167ffffffffffffffff811115613f875750505050613fbc565b80602083010160043d038501811115613fa4575050505050613fbc565b613fb38260200185018661391a565b82955050505050505b90565b613fc881613832565b8114613fd357600080fd5b50565b613fdf81613844565b8114613fea57600080fd5b50565b613ff681613850565b811461400157600080fd5b50565b61400d8161389c565b811461401857600080fd5b5056fea2646970667358221220b10a3a4b00fef466e3687e3b069af626be0b3b0f41eb6bf41627aca1d951b44f64736f6c63430008070033

Deployed Bytecode Sourcemap

37439:1435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23859:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22882:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37487:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38768:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37675:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25798:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24256:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38167:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2747:103;;;:::i;:::-;;38038:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38638:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2096:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37510:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24853:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38440:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37941:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37537:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37792:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25080:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25320:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3005:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23859:231;23945:7;23992:1;23973:21;;:7;:21;;;;23965:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24060:9;:13;24070:2;24060:13;;;;;;;;;;;:22;24074:7;24060:22;;;;;;;;;;;;;;;;24053:29;;23859:231;;;;:::o;22882:310::-;22984:4;23036:26;23021:41;;;:11;:41;;;;:110;;;;23094:37;23079:52;;;:11;:52;;;;23021:110;:163;;;;23148:36;23172:11;23148:23;:36::i;:::-;23021:163;23001:183;;22882:310;;;:::o;37487:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38768:101::-;38821:13;38850:8;:13;38859:3;38850:13;;;;;;;;;;;38843:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38768:101;;;:::o;37675:111::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37752:28:::1;37758:3;37763;37768:7;37752:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;37675:111:::0;;;:::o;25798:442::-;26039:12;:10;:12::i;:::-;26031:20;;:4;:20;;;:60;;;;26055:36;26072:4;26078:12;:10;:12::i;:::-;26055:16;:36::i;:::-;26031:60;26009:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:52;26203:4;26209:2;26213:3;26218:7;26227:4;26180:22;:52::i;:::-;25798:442;;;;;:::o;24256:524::-;24412:16;24473:3;:10;24454:8;:15;:29;24446:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24542:30;24589:8;:15;24575:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24542:63;;24623:9;24618:122;24642:8;:15;24638:1;:19;24618:122;;;24698:30;24708:8;24717:1;24708:11;;;;;;;;:::i;:::-;;;;;;;;24721:3;24725:1;24721:6;;;;;;;;:::i;:::-;;;;;;;;24698:9;:30::i;:::-;24679:13;24693:1;24679:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24659:3;;;;:::i;:::-;;;24618:122;;;;24759:13;24752:20;;;24256:524;;;;:::o;38167:265::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38333:41:::1;38344:5;38351:8;38361:12;38333:10;:41::i;:::-;38381:45;38392:5;38399:8;38409:12;38381:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;38167:265:::0;;;;;:::o;2747:103::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2812:30:::1;2839:1;2812:18;:30::i;:::-;2747:103::o:0;38038:123::-;38117:38;38128:10;38140:4;38146:8;38117:10;:38::i;:::-;38038:123;;:::o;38638:124::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38726:4:::1;38710:8;:13;38719:3;38710:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;38752:3;38742:14;38746:4;38742:14;;;;;;:::i;:::-;;;;;;;;38638:124:::0;;:::o;2096:87::-;2142:7;2169:6;;;;;;;;;;;2162:13;;2096:87;:::o;37510:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24853:155::-;24948:52;24967:12;:10;:12::i;:::-;24981:8;24991;24948:18;:52::i;:::-;24853:155;;:::o;38440:190::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38544:9:::1;38539:86;38563:3;;:10;;38559:1;:14;38539:86;;;38586:31;38592:3;;38596:1;38592:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38600:3;38605:7;38586:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;38575:3;;;;;:::i;:::-;;;;38539:86;;;;38440:190:::0;;;;:::o;37941:91::-;37995:31;38001:10;38013:3;38018:7;37995:5;:31::i;:::-;37941:91;;:::o;37537:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37792:143::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37894:35:::1;37905:3;37910:4;37916:8;37894:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;37792:143:::0;;;:::o;25080:168::-;25179:4;25203:18;:27;25222:7;25203:27;;;;;;;;;;;;;;;:37;25231:8;25203:37;;;;;;;;;;;;;;;;;;;;;;;;;25196:44;;25080:168;;;;:::o;25320:401::-;25536:12;:10;:12::i;:::-;25528:20;;:4;:20;;;:60;;;;25552:36;25569:4;25575:12;:10;:12::i;:::-;25552:16;:36::i;:::-;25528:60;25506:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25668:45;25686:4;25692:2;25696;25700:6;25708:4;25668:17;:45::i;:::-;25320:401;;;;;:::o;3005:201::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3114:1:::1;3094:22;;:8;:22;;;;3086:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3170:28;3189:8;3170:18;:28::i;:::-;3005:201:::0;:::o;13993:157::-;14078:4;14117:25;14102:40;;;:11;:40;;;;14095:47;;13993:157;;;:::o;767:98::-;820:7;847:10;840:17;;767:98;:::o;30274:569::-;30441:1;30427:16;;:2;:16;;;;30419:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30494:16;30513:12;:10;:12::i;:::-;30494:31;;30538:102;30559:8;30577:1;30581:2;30585:21;30603:2;30585:17;:21::i;:::-;30608:25;30626:6;30608:17;:25::i;:::-;30635:4;30538:20;:102::i;:::-;30674:6;30653:9;:13;30663:2;30653:13;;;;;;;;;;;:17;30667:2;30653:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30733:2;30696:52;;30729:1;30696:52;;30711:8;30696:52;;;30737:2;30741:6;30696:52;;;;;;;:::i;:::-;;;;;;;;30761:74;30792:8;30810:1;30814:2;30818;30822:6;30830:4;30761:30;:74::i;:::-;30408:435;30274:569;;;;:::o;27882:1074::-;28109:7;:14;28095:3;:10;:28;28087:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28201:1;28187:16;;:2;:16;;;;28179:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28258:16;28277:12;:10;:12::i;:::-;28258:31;;28302:60;28323:8;28333:4;28339:2;28343:3;28348:7;28357:4;28302:20;:60::i;:::-;28380:9;28375:421;28399:3;:10;28395:1;:14;28375:421;;;28431:10;28444:3;28448:1;28444:6;;;;;;;;:::i;:::-;;;;;;;;28431:19;;28465:14;28482:7;28490:1;28482:10;;;;;;;;:::i;:::-;;;;;;;;28465:27;;28509:19;28531:9;:13;28541:2;28531:13;;;;;;;;;;;:19;28545:4;28531:19;;;;;;;;;;;;;;;;28509:41;;28588:6;28573:11;:21;;28565:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:6;28707:11;:20;28685:9;:13;28695:2;28685:13;;;;;;;;;;;:19;28699:4;28685:19;;;;;;;;;;;;;;;:42;;;;28778:6;28757:9;:13;28767:2;28757:13;;;;;;;;;;;:17;28771:2;28757:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28416:380;;;28411:3;;;;:::i;:::-;;;28375:421;;;;28843:2;28813:47;;28837:4;28813:47;;28827:8;28813:47;;;28847:3;28852:7;28813:47;;;;;;;:::i;:::-;;;;;;;;28873:75;28909:8;28919:4;28925:2;28929:3;28934:7;28943:4;28873:35;:75::i;:::-;28076:880;27882:1074;;;;;:::o;33035:891::-;33203:1;33187:18;;:4;:18;;;;33179:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33278:7;:14;33264:3;:10;:28;33256:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33350:16;33369:12;:10;:12::i;:::-;33350:31;;33394:66;33415:8;33425:4;33439:1;33443:3;33448:7;33394:66;;;;;;;;;;;;:20;:66::i;:::-;33478:9;33473:373;33497:3;:10;33493:1;:14;33473:373;;;33529:10;33542:3;33546:1;33542:6;;;;;;;;:::i;:::-;;;;;;;;33529:19;;33563:14;33580:7;33588:1;33580:10;;;;;;;;:::i;:::-;;;;;;;;33563:27;;33607:19;33629:9;:13;33639:2;33629:13;;;;;;;;;;;:19;33643:4;33629:19;;;;;;;;;;;;;;;;33607:41;;33686:6;33671:11;:21;;33663:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33813:6;33799:11;:20;33777:9;:13;33787:2;33777:13;;;;;;;;;;;:19;33791:4;33777:19;;;;;;;;;;;;;;;:42;;;;33514:332;;;33509:3;;;;;:::i;:::-;;;;33473:373;;;;33901:1;33863:55;;33887:4;33863:55;;33877:8;33863:55;;;33905:3;33910:7;33863:55;;;;;;;:::i;:::-;;;;;;;;33168:758;33035:891;;;:::o;31199:735::-;31391:1;31377:16;;:2;:16;;;;31369:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31464:7;:14;31450:3;:10;:28;31442:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31536:16;31555:12;:10;:12::i;:::-;31536:31;;31580:66;31601:8;31619:1;31623:2;31627:3;31632:7;31641:4;31580:20;:66::i;:::-;31664:9;31659:103;31683:3;:10;31679:1;:14;31659:103;;;31740:7;31748:1;31740:10;;;;;;;;:::i;:::-;;;;;;;;31715:9;:17;31725:3;31729:1;31725:6;;;;;;;;:::i;:::-;;;;;;;;31715:17;;;;;;;;;;;:21;31733:2;31715:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31695:3;;;;;:::i;:::-;;;;31659:103;;;;31815:2;31779:53;;31811:1;31779:53;;31793:8;31779:53;;;31819:3;31824:7;31779:53;;;;;;;:::i;:::-;;;;;;;;31845:81;31881:8;31899:1;31903:2;31907:3;31912:7;31921:4;31845:35;:81::i;:::-;31358:576;31199:735;;;;:::o;3366:191::-;3440:16;3459:6;;;;;;;;;;;3440:25;;3485:8;3476:6;;:17;;;;;;;;;;;;;;;;;;3540:8;3509:40;;3530:8;3509:40;;;;;;;;;;;;3429:128;3366:191;:::o;34068:331::-;34223:8;34214:17;;:5;:17;;;;34206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:8;34288:18;:25;34307:5;34288:25;;;;;;;;;;;;;;;:35;34314:8;34288:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34372:8;34350:41;;34365:5;34350:41;;;34382:8;34350:41;;;;;;:::i;:::-;;;;;;;;34068:331;;;:::o;32184:648::-;32327:1;32311:18;;:4;:18;;;;32303:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32382:16;32401:12;:10;:12::i;:::-;32382:31;;32426:102;32447:8;32457:4;32471:1;32475:21;32493:2;32475:17;:21::i;:::-;32498:25;32516:6;32498:17;:25::i;:::-;32426:102;;;;;;;;;;;;:20;:102::i;:::-;32541:19;32563:9;:13;32573:2;32563:13;;;;;;;;;;;:19;32577:4;32563:19;;;;;;;;;;;;;;;;32541:41;;32616:6;32601:11;:21;;32593:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32735:6;32721:11;:20;32699:9;:13;32709:2;32699:13;;;;;;;;;;;:19;32713:4;32699:19;;;;;;;;;;;;;;;:42;;;;32809:1;32770:54;;32795:4;32770:54;;32785:8;32770:54;;;32813:2;32817:6;32770:54;;;;;;;:::i;:::-;;;;;;;;32292:540;;32184:648;;;:::o;26704:820::-;26906:1;26892:16;;:2;:16;;;;26884:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26963:16;26982:12;:10;:12::i;:::-;26963:31;;27007:96;27028:8;27038:4;27044:2;27048:21;27066:2;27048:17;:21::i;:::-;27071:25;27089:6;27071:17;:25::i;:::-;27098:4;27007:20;:96::i;:::-;27116:19;27138:9;:13;27148:2;27138:13;;;;;;;;;;;:19;27152:4;27138:19;;;;;;;;;;;;;;;;27116:41;;27191:6;27176:11;:21;;27168:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27316:6;27302:11;:20;27280:9;:13;27290:2;27280:13;;;;;;;;;;;:19;27294:4;27280:19;;;;;;;;;;;;;;;:42;;;;27365:6;27344:9;:13;27354:2;27344:13;;;;;;;;;;;:17;27358:2;27344:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27420:2;27389:46;;27414:4;27389:46;;27404:8;27389:46;;;27424:2;27428:6;27389:46;;;;;;;:::i;:::-;;;;;;;;27448:68;27479:8;27489:4;27495:2;27499;27503:6;27511:4;27448:30;:68::i;:::-;26873:651;;26704:820;;;;;:::o;37157:198::-;37223:16;37252:22;37291:1;37277:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37252:41;;37315:7;37304:5;37310:1;37304:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37342:5;37335:12;;;37157:198;;;:::o;35355:221::-;;;;;;;:::o;35584:744::-;35799:15;:2;:13;;;:15::i;:::-;35795:526;;;35852:2;35835:38;;;35874:8;35884:4;35890:2;35894:6;35902:4;35835:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35831:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36183:6;36176:14;;;;;;;;;;;:::i;:::-;;;;;;;;35831:479;;;36232:62;;;;;;;;;;:::i;:::-;;;;;;;;35831:479;35969:43;;;35957:55;;;:8;:55;;;;35953:154;;36037:50;;;;;;;;;;:::i;:::-;;;;;;;;35953:154;35908:214;35795:526;35584:744;;;;;;:::o;36336:813::-;36576:15;:2;:13;;;:15::i;:::-;36572:570;;;36629:2;36612:43;;;36656:8;36666:4;36672:3;36677:7;36686:4;36612:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36608:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37004:6;36997:14;;;;;;;;;;;:::i;:::-;;;;;;;;36608:523;;;37053:62;;;;;;;;;;:::i;:::-;;;;;;;;36608:523;36785:48;;;36773:60;;;:8;:60;;;;36769:159;;36858:50;;;;;;;;;;:::i;:::-;;;;;;;;36769:159;36692:251;36572:570;36336:813;;;;;;:::o;4835:326::-;4895:4;5152:1;5130:7;:19;;;:23;5123:30;;4835:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:568::-;2566:8;2576:6;2626:3;2619:4;2611:6;2607:17;2603:27;2593:122;;2634:79;;:::i;:::-;2593:122;2747:6;2734:20;2724:30;;2777:18;2769:6;2766:30;2763:117;;;2799:79;;:::i;:::-;2763:117;2913:4;2905:6;2901:17;2889:29;;2967:3;2959:4;2951:6;2947:17;2937:8;2933:32;2930:41;2927:128;;;2974:79;;:::i;:::-;2927:128;2493:568;;;;;:::o;3084:370::-;3155:5;3204:3;3197:4;3189:6;3185:17;3181:27;3171:122;;3212:79;;:::i;:::-;3171:122;3329:6;3316:20;3354:94;3444:3;3436:6;3429:4;3421:6;3417:17;3354:94;:::i;:::-;3345:103;;3161:293;3084:370;;;;:::o;3477:::-;3548:5;3597:3;3590:4;3582:6;3578:17;3574:27;3564:122;;3605:79;;:::i;:::-;3564:122;3722:6;3709:20;3747:94;3837:3;3829:6;3822:4;3814:6;3810:17;3747:94;:::i;:::-;3738:103;;3554:293;3477:370;;;;:::o;3853:133::-;3896:5;3934:6;3921:20;3912:29;;3950:30;3974:5;3950:30;:::i;:::-;3853:133;;;;:::o;3992:137::-;4037:5;4075:6;4062:20;4053:29;;4091:32;4117:5;4091:32;:::i;:::-;3992:137;;;;:::o;4135:141::-;4191:5;4222:6;4216:13;4207:22;;4238:32;4264:5;4238:32;:::i;:::-;4135:141;;;;:::o;4295:338::-;4350:5;4399:3;4392:4;4384:6;4380:17;4376:27;4366:122;;4407:79;;:::i;:::-;4366:122;4524:6;4511:20;4549:78;4623:3;4615:6;4608:4;4600:6;4596:17;4549:78;:::i;:::-;4540:87;;4356:277;4295:338;;;;:::o;4653:340::-;4709:5;4758:3;4751:4;4743:6;4739:17;4735:27;4725:122;;4766:79;;:::i;:::-;4725:122;4883:6;4870:20;4908:79;4983:3;4975:6;4968:4;4960:6;4956:17;4908:79;:::i;:::-;4899:88;;4715:278;4653:340;;;;:::o;4999:139::-;5045:5;5083:6;5070:20;5061:29;;5099:33;5126:5;5099:33;:::i;:::-;4999:139;;;;:::o;5144:329::-;5203:6;5252:2;5240:9;5231:7;5227:23;5223:32;5220:119;;;5258:79;;:::i;:::-;5220:119;5378:1;5403:53;5448:7;5439:6;5428:9;5424:22;5403:53;:::i;:::-;5393:63;;5349:117;5144:329;;;;:::o;5479:474::-;5547:6;5555;5604:2;5592:9;5583:7;5579:23;5575:32;5572:119;;;5610:79;;:::i;:::-;5572:119;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;5479:474;;;;;:::o;5959:1509::-;6113:6;6121;6129;6137;6145;6194:3;6182:9;6173:7;6169:23;6165:33;6162:120;;;6201:79;;:::i;:::-;6162:120;6321:1;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6292:117;6448:2;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6419:118;6604:2;6593:9;6589:18;6576:32;6635:18;6627:6;6624:30;6621:117;;;6657:79;;:::i;:::-;6621:117;6762:78;6832:7;6823:6;6812:9;6808:22;6762:78;:::i;:::-;6752:88;;6547:303;6917:2;6906:9;6902:18;6889:32;6948:18;6940:6;6937:30;6934:117;;;6970:79;;:::i;:::-;6934:117;7075:78;7145:7;7136:6;7125:9;7121:22;7075:78;:::i;:::-;7065:88;;6860:303;7230:3;7219:9;7215:19;7202:33;7262:18;7254:6;7251:30;7248:117;;;7284:79;;:::i;:::-;7248:117;7389:62;7443:7;7434:6;7423:9;7419:22;7389:62;:::i;:::-;7379:72;;7173:288;5959:1509;;;;;;;;:::o;7474:1089::-;7578:6;7586;7594;7602;7610;7659:3;7647:9;7638:7;7634:23;7630:33;7627:120;;;7666:79;;:::i;:::-;7627:120;7786:1;7811:53;7856:7;7847:6;7836:9;7832:22;7811:53;:::i;:::-;7801:63;;7757:117;7913:2;7939:53;7984:7;7975:6;7964:9;7960:22;7939:53;:::i;:::-;7929:63;;7884:118;8041:2;8067:53;8112:7;8103:6;8092:9;8088:22;8067:53;:::i;:::-;8057:63;;8012:118;8169:2;8195:53;8240:7;8231:6;8220:9;8216:22;8195:53;:::i;:::-;8185:63;;8140:118;8325:3;8314:9;8310:19;8297:33;8357:18;8349:6;8346:30;8343:117;;;8379:79;;:::i;:::-;8343:117;8484:62;8538:7;8529:6;8518:9;8514:22;8484:62;:::i;:::-;8474:72;;8268:288;7474:1089;;;;;;;;:::o;8569:1039::-;8696:6;8704;8712;8761:2;8749:9;8740:7;8736:23;8732:32;8729:119;;;8767:79;;:::i;:::-;8729:119;8887:1;8912:53;8957:7;8948:6;8937:9;8933:22;8912:53;:::i;:::-;8902:63;;8858:117;9042:2;9031:9;9027:18;9014:32;9073:18;9065:6;9062:30;9059:117;;;9095:79;;:::i;:::-;9059:117;9200:78;9270:7;9261:6;9250:9;9246:22;9200:78;:::i;:::-;9190:88;;8985:303;9355:2;9344:9;9340:18;9327:32;9386:18;9378:6;9375:30;9372:117;;;9408:79;;:::i;:::-;9372:117;9513:78;9583:7;9574:6;9563:9;9559:22;9513:78;:::i;:::-;9503:88;;9298:303;8569:1039;;;;;:::o;9614:1751::-;9809:6;9817;9825;9833;9841;9890:3;9878:9;9869:7;9865:23;9861:33;9858:120;;;9897:79;;:::i;:::-;9858:120;10017:1;10042:53;10087:7;10078:6;10067:9;10063:22;10042:53;:::i;:::-;10032:63;;9988:117;10172:2;10161:9;10157:18;10144:32;10203:18;10195:6;10192:30;10189:117;;;10225:79;;:::i;:::-;10189:117;10330:78;10400:7;10391:6;10380:9;10376:22;10330:78;:::i;:::-;10320:88;;10115:303;10485:2;10474:9;10470:18;10457:32;10516:18;10508:6;10505:30;10502:117;;;10538:79;;:::i;:::-;10502:117;10643:78;10713:7;10704:6;10693:9;10689:22;10643:78;:::i;:::-;10633:88;;10428:303;10798:2;10787:9;10783:18;10770:32;10829:18;10821:6;10818:30;10815:117;;;10851:79;;:::i;:::-;10815:117;10956:78;11026:7;11017:6;11006:9;11002:22;10956:78;:::i;:::-;10946:88;;10741:303;11111:3;11100:9;11096:19;11083:33;11143:18;11135:6;11132:30;11129:117;;;11165:79;;:::i;:::-;11129:117;11270:78;11340:7;11331:6;11320:9;11316:22;11270:78;:::i;:::-;11260:88;;11054:304;9614:1751;;;;;;;;:::o;11371:468::-;11436:6;11444;11493:2;11481:9;11472:7;11468:23;11464:32;11461:119;;;11499:79;;:::i;:::-;11461:119;11619:1;11644:53;11689:7;11680:6;11669:9;11665:22;11644:53;:::i;:::-;11634:63;;11590:117;11746:2;11772:50;11814:7;11805:6;11794:9;11790:22;11772:50;:::i;:::-;11762:60;;11717:115;11371:468;;;;;:::o;11845:474::-;11913:6;11921;11970:2;11958:9;11949:7;11945:23;11941:32;11938:119;;;11976:79;;:::i;:::-;11938:119;12096:1;12121:53;12166:7;12157:6;12146:9;12142:22;12121:53;:::i;:::-;12111:63;;12067:117;12223:2;12249:53;12294:7;12285:6;12274:9;12270:22;12249:53;:::i;:::-;12239:63;;12194:118;11845:474;;;;;:::o;12325:619::-;12402:6;12410;12418;12467:2;12455:9;12446:7;12442:23;12438:32;12435:119;;;12473:79;;:::i;:::-;12435:119;12593:1;12618:53;12663:7;12654:6;12643:9;12639:22;12618:53;:::i;:::-;12608:63;;12564:117;12720:2;12746:53;12791:7;12782:6;12771:9;12767:22;12746:53;:::i;:::-;12736:63;;12691:118;12848:2;12874:53;12919:7;12910:6;12899:9;12895:22;12874:53;:::i;:::-;12864:63;;12819:118;12325:619;;;;;:::o;12950:849::-;13054:6;13062;13070;13078;13127:2;13115:9;13106:7;13102:23;13098:32;13095:119;;;13133:79;;:::i;:::-;13095:119;13281:1;13270:9;13266:17;13253:31;13311:18;13303:6;13300:30;13297:117;;;13333:79;;:::i;:::-;13297:117;13446:80;13518:7;13509:6;13498:9;13494:22;13446:80;:::i;:::-;13428:98;;;;13224:312;13575:2;13601:53;13646:7;13637:6;13626:9;13622:22;13601:53;:::i;:::-;13591:63;;13546:118;13703:2;13729:53;13774:7;13765:6;13754:9;13750:22;13729:53;:::i;:::-;13719:63;;13674:118;12950:849;;;;;;;:::o;13805:894::-;13923:6;13931;13980:2;13968:9;13959:7;13955:23;13951:32;13948:119;;;13986:79;;:::i;:::-;13948:119;14134:1;14123:9;14119:17;14106:31;14164:18;14156:6;14153:30;14150:117;;;14186:79;;:::i;:::-;14150:117;14291:78;14361:7;14352:6;14341:9;14337:22;14291:78;:::i;:::-;14281:88;;14077:302;14446:2;14435:9;14431:18;14418:32;14477:18;14469:6;14466:30;14463:117;;;14499:79;;:::i;:::-;14463:117;14604:78;14674:7;14665:6;14654:9;14650:22;14604:78;:::i;:::-;14594:88;;14389:303;13805:894;;;;;:::o;14705:::-;14823:6;14831;14880:2;14868:9;14859:7;14855:23;14851:32;14848:119;;;14886:79;;:::i;:::-;14848:119;15034:1;15023:9;15019:17;15006:31;15064:18;15056:6;15053:30;15050:117;;;15086:79;;:::i;:::-;15050:117;15191:78;15261:7;15252:6;15241:9;15237:22;15191:78;:::i;:::-;15181:88;;14977:302;15346:2;15335:9;15331:18;15318:32;15377:18;15369:6;15366:30;15363:117;;;15399:79;;:::i;:::-;15363:117;15504:78;15574:7;15565:6;15554:9;15550:22;15504:78;:::i;:::-;15494:88;;15289:303;14705:894;;;;;:::o;15605:327::-;15663:6;15712:2;15700:9;15691:7;15687:23;15683:32;15680:119;;;15718:79;;:::i;:::-;15680:119;15838:1;15863:52;15907:7;15898:6;15887:9;15883:22;15863:52;:::i;:::-;15853:62;;15809:116;15605:327;;;;:::o;15938:349::-;16007:6;16056:2;16044:9;16035:7;16031:23;16027:32;16024:119;;;16062:79;;:::i;:::-;16024:119;16182:1;16207:63;16262:7;16253:6;16242:9;16238:22;16207:63;:::i;:::-;16197:73;;16153:127;15938:349;;;;:::o;16293:329::-;16352:6;16401:2;16389:9;16380:7;16376:23;16372:32;16369:119;;;16407:79;;:::i;:::-;16369:119;16527:1;16552:53;16597:7;16588:6;16577:9;16573:22;16552:53;:::i;:::-;16542:63;;16498:117;16293:329;;;;:::o;16628:654::-;16706:6;16714;16763:2;16751:9;16742:7;16738:23;16734:32;16731:119;;;16769:79;;:::i;:::-;16731:119;16889:1;16914:53;16959:7;16950:6;16939:9;16935:22;16914:53;:::i;:::-;16904:63;;16860:117;17044:2;17033:9;17029:18;17016:32;17075:18;17067:6;17064:30;17061:117;;;17097:79;;:::i;:::-;17061:117;17202:63;17257:7;17248:6;17237:9;17233:22;17202:63;:::i;:::-;17192:73;;16987:288;16628:654;;;;;:::o;17288:474::-;17356:6;17364;17413:2;17401:9;17392:7;17388:23;17384:32;17381:119;;;17419:79;;:::i;:::-;17381:119;17539:1;17564:53;17609:7;17600:6;17589:9;17585:22;17564:53;:::i;:::-;17554:63;;17510:117;17666:2;17692:53;17737:7;17728:6;17717:9;17713:22;17692:53;:::i;:::-;17682:63;;17637:118;17288:474;;;;;:::o;17768:179::-;17837:10;17858:46;17900:3;17892:6;17858:46;:::i;:::-;17936:4;17931:3;17927:14;17913:28;;17768:179;;;;:::o;17953:118::-;18040:24;18058:5;18040:24;:::i;:::-;18035:3;18028:37;17953:118;;:::o;18107:732::-;18226:3;18255:54;18303:5;18255:54;:::i;:::-;18325:86;18404:6;18399:3;18325:86;:::i;:::-;18318:93;;18435:56;18485:5;18435:56;:::i;:::-;18514:7;18545:1;18530:284;18555:6;18552:1;18549:13;18530:284;;;18631:6;18625:13;18658:63;18717:3;18702:13;18658:63;:::i;:::-;18651:70;;18744:60;18797:6;18744:60;:::i;:::-;18734:70;;18590:224;18577:1;18574;18570:9;18565:14;;18530:284;;;18534:14;18830:3;18823:10;;18231:608;;;18107:732;;;;:::o;18845:109::-;18926:21;18941:5;18926:21;:::i;:::-;18921:3;18914:34;18845:109;;:::o;18960:360::-;19046:3;19074:38;19106:5;19074:38;:::i;:::-;19128:70;19191:6;19186:3;19128:70;:::i;:::-;19121:77;;19207:52;19252:6;19247:3;19240:4;19233:5;19229:16;19207:52;:::i;:::-;19284:29;19306:6;19284:29;:::i;:::-;19279:3;19275:39;19268:46;;19050:270;18960:360;;;;:::o;19326:364::-;19414:3;19442:39;19475:5;19442:39;:::i;:::-;19497:71;19561:6;19556:3;19497:71;:::i;:::-;19490:78;;19577:52;19622:6;19617:3;19610:4;19603:5;19599:16;19577:52;:::i;:::-;19654:29;19676:6;19654:29;:::i;:::-;19649:3;19645:39;19638:46;;19418:272;19326:364;;;;:::o;19696:366::-;19838:3;19859:67;19923:2;19918:3;19859:67;:::i;:::-;19852:74;;19935:93;20024:3;19935:93;:::i;:::-;20053:2;20048:3;20044:12;20037:19;;19696:366;;;:::o;20068:::-;20210:3;20231:67;20295:2;20290:3;20231:67;:::i;:::-;20224:74;;20307:93;20396:3;20307:93;:::i;:::-;20425:2;20420:3;20416:12;20409:19;;20068:366;;;:::o;20440:::-;20582:3;20603:67;20667:2;20662:3;20603:67;:::i;:::-;20596:74;;20679:93;20768:3;20679:93;:::i;:::-;20797:2;20792:3;20788:12;20781:19;;20440:366;;;:::o;20812:::-;20954:3;20975:67;21039:2;21034:3;20975:67;:::i;:::-;20968:74;;21051:93;21140:3;21051:93;:::i;:::-;21169:2;21164:3;21160:12;21153:19;;20812:366;;;:::o;21184:::-;21326:3;21347:67;21411:2;21406:3;21347:67;:::i;:::-;21340:74;;21423:93;21512:3;21423:93;:::i;:::-;21541:2;21536:3;21532:12;21525:19;;21184:366;;;:::o;21556:::-;21698:3;21719:67;21783:2;21778:3;21719:67;:::i;:::-;21712:74;;21795:93;21884:3;21795:93;:::i;:::-;21913:2;21908:3;21904:12;21897:19;;21556:366;;;:::o;21928:::-;22070:3;22091:67;22155:2;22150:3;22091:67;:::i;:::-;22084:74;;22167:93;22256:3;22167:93;:::i;:::-;22285:2;22280:3;22276:12;22269:19;;21928:366;;;:::o;22300:::-;22442:3;22463:67;22527:2;22522:3;22463:67;:::i;:::-;22456:74;;22539:93;22628:3;22539:93;:::i;:::-;22657:2;22652:3;22648:12;22641:19;;22300:366;;;:::o;22672:::-;22814:3;22835:67;22899:2;22894:3;22835:67;:::i;:::-;22828:74;;22911:93;23000:3;22911:93;:::i;:::-;23029:2;23024:3;23020:12;23013:19;;22672:366;;;:::o;23044:::-;23186:3;23207:67;23271:2;23266:3;23207:67;:::i;:::-;23200:74;;23283:93;23372:3;23283:93;:::i;:::-;23401:2;23396:3;23392:12;23385:19;;23044:366;;;:::o;23416:::-;23558:3;23579:67;23643:2;23638:3;23579:67;:::i;:::-;23572:74;;23655:93;23744:3;23655:93;:::i;:::-;23773:2;23768:3;23764:12;23757:19;;23416:366;;;:::o;23788:::-;23930:3;23951:67;24015:2;24010:3;23951:67;:::i;:::-;23944:74;;24027:93;24116:3;24027:93;:::i;:::-;24145:2;24140:3;24136:12;24129:19;;23788:366;;;:::o;24160:::-;24302:3;24323:67;24387:2;24382:3;24323:67;:::i;:::-;24316:74;;24399:93;24488:3;24399:93;:::i;:::-;24517:2;24512:3;24508:12;24501:19;;24160:366;;;:::o;24532:::-;24674:3;24695:67;24759:2;24754:3;24695:67;:::i;:::-;24688:74;;24771:93;24860:3;24771:93;:::i;:::-;24889:2;24884:3;24880:12;24873:19;;24532:366;;;:::o;24904:::-;25046:3;25067:67;25131:2;25126:3;25067:67;:::i;:::-;25060:74;;25143:93;25232:3;25143:93;:::i;:::-;25261:2;25256:3;25252:12;25245:19;;24904:366;;;:::o;25276:108::-;25353:24;25371:5;25353:24;:::i;:::-;25348:3;25341:37;25276:108;;:::o;25390:118::-;25477:24;25495:5;25477:24;:::i;:::-;25472:3;25465:37;25390:118;;:::o;25514:222::-;25607:4;25645:2;25634:9;25630:18;25622:26;;25658:71;25726:1;25715:9;25711:17;25702:6;25658:71;:::i;:::-;25514:222;;;;:::o;25742:1053::-;26065:4;26103:3;26092:9;26088:19;26080:27;;26117:71;26185:1;26174:9;26170:17;26161:6;26117:71;:::i;:::-;26198:72;26266:2;26255:9;26251:18;26242:6;26198:72;:::i;:::-;26317:9;26311:4;26307:20;26302:2;26291:9;26287:18;26280:48;26345:108;26448:4;26439:6;26345:108;:::i;:::-;26337:116;;26500:9;26494:4;26490:20;26485:2;26474:9;26470:18;26463:48;26528:108;26631:4;26622:6;26528:108;:::i;:::-;26520:116;;26684:9;26678:4;26674:20;26668:3;26657:9;26653:19;26646:49;26712:76;26783:4;26774:6;26712:76;:::i;:::-;26704:84;;25742:1053;;;;;;;;:::o;26801:751::-;27024:4;27062:3;27051:9;27047:19;27039:27;;27076:71;27144:1;27133:9;27129:17;27120:6;27076:71;:::i;:::-;27157:72;27225:2;27214:9;27210:18;27201:6;27157:72;:::i;:::-;27239;27307:2;27296:9;27292:18;27283:6;27239:72;:::i;:::-;27321;27389:2;27378:9;27374:18;27365:6;27321:72;:::i;:::-;27441:9;27435:4;27431:20;27425:3;27414:9;27410:19;27403:49;27469:76;27540:4;27531:6;27469:76;:::i;:::-;27461:84;;26801:751;;;;;;;;:::o;27558:373::-;27701:4;27739:2;27728:9;27724:18;27716:26;;27788:9;27782:4;27778:20;27774:1;27763:9;27759:17;27752:47;27816:108;27919:4;27910:6;27816:108;:::i;:::-;27808:116;;27558:373;;;;:::o;27937:634::-;28158:4;28196:2;28185:9;28181:18;28173:26;;28245:9;28239:4;28235:20;28231:1;28220:9;28216:17;28209:47;28273:108;28376:4;28367:6;28273:108;:::i;:::-;28265:116;;28428:9;28422:4;28418:20;28413:2;28402:9;28398:18;28391:48;28456:108;28559:4;28550:6;28456:108;:::i;:::-;28448:116;;27937:634;;;;;:::o;28577:210::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28715:65;28777:1;28766:9;28762:17;28753:6;28715:65;:::i;:::-;28577:210;;;;:::o;28793:313::-;28906:4;28944:2;28933:9;28929:18;28921:26;;28993:9;28987:4;28983:20;28979:1;28968:9;28964:17;28957:47;29021:78;29094:4;29085:6;29021:78;:::i;:::-;29013:86;;28793:313;;;;:::o;29112:419::-;29278:4;29316:2;29305:9;29301:18;29293:26;;29365:9;29359:4;29355:20;29351:1;29340:9;29336:17;29329:47;29393:131;29519:4;29393:131;:::i;:::-;29385:139;;29112:419;;;:::o;29537:::-;29703:4;29741:2;29730:9;29726:18;29718:26;;29790:9;29784:4;29780:20;29776:1;29765:9;29761:17;29754:47;29818:131;29944:4;29818:131;:::i;:::-;29810:139;;29537:419;;;:::o;29962:::-;30128:4;30166:2;30155:9;30151:18;30143:26;;30215:9;30209:4;30205:20;30201:1;30190:9;30186:17;30179:47;30243:131;30369:4;30243:131;:::i;:::-;30235:139;;29962:419;;;:::o;30387:::-;30553:4;30591:2;30580:9;30576:18;30568:26;;30640:9;30634:4;30630:20;30626:1;30615:9;30611:17;30604:47;30668:131;30794:4;30668:131;:::i;:::-;30660:139;;30387:419;;;:::o;30812:::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:::-;31403:4;31441:2;31430:9;31426:18;31418:26;;31490:9;31484:4;31480:20;31476:1;31465:9;31461:17;31454:47;31518:131;31644:4;31518:131;:::i;:::-;31510:139;;31237:419;;;:::o;31662:::-;31828:4;31866:2;31855:9;31851:18;31843:26;;31915:9;31909:4;31905:20;31901:1;31890:9;31886:17;31879:47;31943:131;32069:4;31943:131;:::i;:::-;31935:139;;31662:419;;;:::o;32087:::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32340:9;32334:4;32330:20;32326:1;32315:9;32311:17;32304:47;32368:131;32494:4;32368:131;:::i;:::-;32360:139;;32087:419;;;:::o;32512:::-;32678:4;32716:2;32705:9;32701:18;32693:26;;32765:9;32759:4;32755:20;32751:1;32740:9;32736:17;32729:47;32793:131;32919:4;32793:131;:::i;:::-;32785:139;;32512:419;;;:::o;32937:::-;33103:4;33141:2;33130:9;33126:18;33118:26;;33190:9;33184:4;33180:20;33176:1;33165:9;33161:17;33154:47;33218:131;33344:4;33218:131;:::i;:::-;33210:139;;32937:419;;;:::o;33362:::-;33528:4;33566:2;33555:9;33551:18;33543:26;;33615:9;33609:4;33605:20;33601:1;33590:9;33586:17;33579:47;33643:131;33769:4;33643:131;:::i;:::-;33635:139;;33362:419;;;:::o;33787:::-;33953:4;33991:2;33980:9;33976:18;33968:26;;34040:9;34034:4;34030:20;34026:1;34015:9;34011:17;34004:47;34068:131;34194:4;34068:131;:::i;:::-;34060:139;;33787:419;;;:::o;34212:::-;34378:4;34416:2;34405:9;34401:18;34393:26;;34465:9;34459:4;34455:20;34451:1;34440:9;34436:17;34429:47;34493:131;34619:4;34493:131;:::i;:::-;34485:139;;34212:419;;;:::o;34637:::-;34803:4;34841:2;34830:9;34826:18;34818:26;;34890:9;34884:4;34880:20;34876:1;34865:9;34861:17;34854:47;34918:131;35044:4;34918:131;:::i;:::-;34910:139;;34637:419;;;:::o;35062:::-;35228:4;35266:2;35255:9;35251:18;35243:26;;35315:9;35309:4;35305:20;35301:1;35290:9;35286:17;35279:47;35343:131;35469:4;35343:131;:::i;:::-;35335:139;;35062:419;;;:::o;35487:222::-;35580:4;35618:2;35607:9;35603:18;35595:26;;35631:71;35699:1;35688:9;35684:17;35675:6;35631:71;:::i;:::-;35487:222;;;;:::o;35715:332::-;35836:4;35874:2;35863:9;35859:18;35851:26;;35887:71;35955:1;35944:9;35940:17;35931:6;35887:71;:::i;:::-;35968:72;36036:2;36025:9;36021:18;36012:6;35968:72;:::i;:::-;35715:332;;;;;:::o;36053:129::-;36087:6;36114:20;;:::i;:::-;36104:30;;36143:33;36171:4;36163:6;36143:33;:::i;:::-;36053:129;;;:::o;36188:75::-;36221:6;36254:2;36248:9;36238:19;;36188:75;:::o;36269:311::-;36346:4;36436:18;36428:6;36425:30;36422:56;;;36458:18;;:::i;:::-;36422:56;36508:4;36500:6;36496:17;36488:25;;36568:4;36562;36558:15;36550:23;;36269:311;;;:::o;36586:::-;36663:4;36753:18;36745:6;36742:30;36739:56;;;36775:18;;:::i;:::-;36739:56;36825:4;36817:6;36813:17;36805:25;;36885:4;36879;36875:15;36867:23;;36586:311;;;:::o;36903:307::-;36964:4;37054:18;37046:6;37043:30;37040:56;;;37076:18;;:::i;:::-;37040:56;37114:29;37136:6;37114:29;:::i;:::-;37106:37;;37198:4;37192;37188:15;37180:23;;36903:307;;;:::o;37216:308::-;37278:4;37368:18;37360:6;37357:30;37354:56;;;37390:18;;:::i;:::-;37354:56;37428:29;37450:6;37428:29;:::i;:::-;37420:37;;37512:4;37506;37502:15;37494:23;;37216:308;;;:::o;37530:132::-;37597:4;37620:3;37612:11;;37650:4;37645:3;37641:14;37633:22;;37530:132;;;:::o;37668:114::-;37735:6;37769:5;37763:12;37753:22;;37668:114;;;:::o;37788:98::-;37839:6;37873:5;37867:12;37857:22;;37788:98;;;:::o;37892:99::-;37944:6;37978:5;37972:12;37962:22;;37892:99;;;:::o;37997:113::-;38067:4;38099;38094:3;38090:14;38082:22;;37997:113;;;:::o;38116:184::-;38215:11;38249:6;38244:3;38237:19;38289:4;38284:3;38280:14;38265:29;;38116:184;;;;:::o;38306:168::-;38389:11;38423:6;38418:3;38411:19;38463:4;38458:3;38454:14;38439:29;;38306:168;;;;:::o;38480:169::-;38564:11;38598:6;38593:3;38586:19;38638:4;38633:3;38629:14;38614:29;;38480:169;;;;:::o;38655:305::-;38695:3;38714:20;38732:1;38714:20;:::i;:::-;38709:25;;38748:20;38766:1;38748:20;:::i;:::-;38743:25;;38902:1;38834:66;38830:74;38827:1;38824:81;38821:107;;;38908:18;;:::i;:::-;38821:107;38952:1;38949;38945:9;38938:16;;38655:305;;;;:::o;38966:96::-;39003:7;39032:24;39050:5;39032:24;:::i;:::-;39021:35;;38966:96;;;:::o;39068:90::-;39102:7;39145:5;39138:13;39131:21;39120:32;;39068:90;;;:::o;39164:149::-;39200:7;39240:66;39233:5;39229:78;39218:89;;39164:149;;;:::o;39319:126::-;39356:7;39396:42;39389:5;39385:54;39374:65;;39319:126;;;:::o;39451:77::-;39488:7;39517:5;39506:16;;39451:77;;;:::o;39534:154::-;39618:6;39613:3;39608;39595:30;39680:1;39671:6;39666:3;39662:16;39655:27;39534:154;;;:::o;39694:307::-;39762:1;39772:113;39786:6;39783:1;39780:13;39772:113;;;39871:1;39866:3;39862:11;39856:18;39852:1;39847:3;39843:11;39836:39;39808:2;39805:1;39801:10;39796:15;;39772:113;;;39903:6;39900:1;39897:13;39894:101;;;39983:1;39974:6;39969:3;39965:16;39958:27;39894:101;39743:258;39694:307;;;:::o;40007:320::-;40051:6;40088:1;40082:4;40078:12;40068:22;;40135:1;40129:4;40125:12;40156:18;40146:81;;40212:4;40204:6;40200:17;40190:27;;40146:81;40274:2;40266:6;40263:14;40243:18;40240:38;40237:84;;;40293:18;;:::i;:::-;40237:84;40058:269;40007:320;;;:::o;40333:281::-;40416:27;40438:4;40416:27;:::i;:::-;40408:6;40404:40;40546:6;40534:10;40531:22;40510:18;40498:10;40495:34;40492:62;40489:88;;;40557:18;;:::i;:::-;40489:88;40597:10;40593:2;40586:22;40376:238;40333:281;;:::o;40620:233::-;40659:3;40682:24;40700:5;40682:24;:::i;:::-;40673:33;;40728:66;40721:5;40718:77;40715:103;;;40798:18;;:::i;:::-;40715:103;40845:1;40838:5;40834:13;40827:20;;40620:233;;;:::o;40859:180::-;40907:77;40904:1;40897:88;41004:4;41001:1;40994:15;41028:4;41025:1;41018:15;41045:180;41093:77;41090:1;41083:88;41190:4;41187:1;41180:15;41214:4;41211:1;41204:15;41231:180;41279:77;41276:1;41269:88;41376:4;41373:1;41366:15;41400:4;41397:1;41390:15;41417:180;41465:77;41462:1;41455:88;41562:4;41559:1;41552:15;41586:4;41583:1;41576:15;41603:183;41638:3;41676:1;41658:16;41655:23;41652:128;;;41714:1;41711;41708;41693:23;41736:34;41767:1;41761:8;41736:34;:::i;:::-;41729:41;;41652:128;41603:183;:::o;41792:117::-;41901:1;41898;41891:12;41915:117;42024:1;42021;42014:12;42038:117;42147:1;42144;42137:12;42161:117;42270:1;42267;42260:12;42284:117;42393:1;42390;42383:12;42407:117;42516:1;42513;42506:12;42530:102;42571:6;42622:2;42618:7;42613:2;42606:5;42602:14;42598:28;42588:38;;42530:102;;;:::o;42638:106::-;42682:8;42731:5;42726:3;42722:15;42701:36;;42638:106;;;:::o;42750:239::-;42890:34;42886:1;42878:6;42874:14;42867:58;42959:22;42954:2;42946:6;42942:15;42935:47;42750:239;:::o;42995:227::-;43135:34;43131:1;43123:6;43119:14;43112:58;43204:10;43199:2;43191:6;43187:15;43180:35;42995:227;:::o;43228:230::-;43368:34;43364:1;43356:6;43352:14;43345:58;43437:13;43432:2;43424:6;43420:15;43413:38;43228:230;:::o;43464:225::-;43604:34;43600:1;43592:6;43588:14;43581:58;43673:8;43668:2;43660:6;43656:15;43649:33;43464:225;:::o;43695:223::-;43835:34;43831:1;43823:6;43819:14;43812:58;43904:6;43899:2;43891:6;43887:15;43880:31;43695:223;:::o;43924:228::-;44064:34;44060:1;44052:6;44048:14;44041:58;44133:11;44128:2;44120:6;44116:15;44109:36;43924:228;:::o;44158:224::-;44298:34;44294:1;44286:6;44282:14;44275:58;44367:7;44362:2;44354:6;44350:15;44343:32;44158:224;:::o;44388:237::-;44528:34;44524:1;44516:6;44512:14;44505:58;44597:20;44592:2;44584:6;44580:15;44573:45;44388:237;:::o;44631:222::-;44771:34;44767:1;44759:6;44755:14;44748:58;44840:5;44835:2;44827:6;44823:15;44816:30;44631:222;:::o;44859:229::-;44999:34;44995:1;44987:6;44983:14;44976:58;45068:12;45063:2;45055:6;45051:15;45044:37;44859:229;:::o;45094:182::-;45234:34;45230:1;45222:6;45218:14;45211:58;45094:182;:::o;45282:228::-;45422:34;45418:1;45410:6;45406:14;45399:58;45491:11;45486:2;45478:6;45474:15;45467:36;45282:228;:::o;45516:::-;45656:34;45652:1;45644:6;45640:14;45633:58;45725:11;45720:2;45712:6;45708:15;45701:36;45516:228;:::o;45750:227::-;45890:34;45886:1;45878:6;45874:14;45867:58;45959:10;45954:2;45946:6;45942:15;45935:35;45750:227;:::o;45983:220::-;46123:34;46119:1;46111:6;46107:14;46100:58;46192:3;46187:2;46179:6;46175:15;46168:28;45983:220;:::o;46209:711::-;46248:3;46286:4;46268:16;46265:26;46262:39;;;46294:5;;46262:39;46323:20;;:::i;:::-;46398:1;46380:16;46376:24;46373:1;46367:4;46352:49;46431:4;46425:11;46530:16;46523:4;46515:6;46511:17;46508:39;46475:18;46467:6;46464:30;46448:113;46445:146;;;46576:5;;;;46445:146;46622:6;46616:4;46612:17;46658:3;46652:10;46685:18;46677:6;46674:30;46671:43;;;46707:5;;;;;;46671:43;46755:6;46748:4;46743:3;46739:14;46735:27;46814:1;46796:16;46792:24;46786:4;46782:35;46777:3;46774:44;46771:57;;;46821:5;;;;;;;46771:57;46838;46886:6;46880:4;46876:17;46868:6;46864:30;46858:4;46838:57;:::i;:::-;46911:3;46904:10;;46252:668;;;;;46209:711;;:::o;46926:122::-;46999:24;47017:5;46999:24;:::i;:::-;46992:5;46989:35;46979:63;;47038:1;47035;47028:12;46979:63;46926:122;:::o;47054:116::-;47124:21;47139:5;47124:21;:::i;:::-;47117:5;47114:32;47104:60;;47160:1;47157;47150:12;47104:60;47054:116;:::o;47176:120::-;47248:23;47265:5;47248:23;:::i;:::-;47241:5;47238:34;47228:62;;47286:1;47283;47276:12;47228:62;47176:120;:::o;47302:122::-;47375:24;47393:5;47375:24;:::i;:::-;47368:5;47365:35;47355:63;;47414:1;47411;47404:12;47355:63;47302:122;:::o

Swarm Source

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