ETH Price: $3,402.09 (-1.24%)
Gas: 5 Gwei

Token

CaliPlug (CALI)
 

Overview

Max Total Supply

1,387 CALI

Holders

361

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x27ba44f45fcb6ebe84c8da501f36a4de9ae5444b
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:
CaliPlug

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-26
*/

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts 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.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/CaliPlug.sol


pragma solidity ^0.8.0;



contract CaliPlug is ERC1155, Ownable {
    string public constant name = "CaliPlug";
    string public constant symbol = "CALI";

    uint32 public totalSupply = 0;
    uint32 public constant maxSupply = 5555;

    uint32 public preSaleStart = 1645905600;
    uint256 public constant preSaleUnitPrice = 0.09 ether;

    uint32 public publicSaleStart = 1645920000;
    uint256 public constant publicSaleUnitPrice = 0.13 ether;

    address signerAddress = 0x1c183d9daB1AbaE93b1d9488976d6d93DDd74f2D;

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

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

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

    function setPreSaleStart(uint32 timestamp) external onlyOwner {
        preSaleStart = timestamp;
    }

    function setPublicSaleStart(uint32 timestamp) external onlyOwner {
        publicSaleStart = timestamp;
    }

    function preSaleIsActive() public view returns (bool) {
        return
            preSaleStart <= block.timestamp &&
            publicSaleStart > block.timestamp;
    }

    function publicSaleIsActive() public view returns (bool) {
        return publicSaleStart <= block.timestamp;
    }

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

    function mint(address to, uint32 count) internal {
        totalSupply += count;

        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

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

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, totalSupply - 1, 1, "");
        }
    }

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

        mint(msg.sender, count);
    }

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

        mint(msg.sender, count);
    }

    function batchMint(address[] memory addresses) external onlyOwner {
        require(
            totalSupply + addresses.length <= maxSupply,
            "Count exceeds the maximum allowed supply."
        );

        for (uint256 i = 0; i < addresses.length; i++) {
            mint(addresses[i], 1);
        }
    }

    function withdraw() external onlyOwner {
        address[3] memory addresses = [
            0x106E7cD9cE87Be19DffeD2a9aa831fE0C604fc68,
            0xa005c80E35328e92BE470BffcA6e1E0Ad80Ab1Dd,
            0xAF4dD02e3e0fF9609FAf54320a6Ae97bd7683ECF
        ];

        uint32[3] memory shares = [uint32(9000), uint32(500), uint32(500)];

        uint256 balance = address(this).balance;

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleUnitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleUnitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548163ffffffff021916908363ffffffff16021790555063621a86c0600360186101000a81548163ffffffff021916908363ffffffff16021790555063621abf006003601c6101000a81548163ffffffff021916908363ffffffff160217905550731c183d9dab1abae93b1d9488976d6d93ddd74f2d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d257600080fd5b5060405162004e4b38038062004e4b8339818101604052810190620000f891906200034a565b806200010a816200013260201b60201c565b506200012b6200011f6200014e60201b60201c565b6200015660201b60201c565b506200051f565b80600290805190602001906200014a9291906200021c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000430565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002e3620002dd84620003c4565b6200039b565b905082815260208101848484011115620003025762000301620004ff565b5b6200030f848285620003fa565b509392505050565b600082601f8301126200032f576200032e620004fa565b5b815162000341848260208601620002cc565b91505092915050565b60006020828403121562000363576200036262000509565b5b600082015167ffffffffffffffff81111562000384576200038362000504565b5b620003928482850162000317565b91505092915050565b6000620003a7620003ba565b9050620003b5828262000466565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e257620003e1620004cb565b5b620003ed826200050e565b9050602081019050919050565b60005b838110156200041a578082015181840152602081019050620003fd565b838111156200042a576000848401525b50505050565b600060028204905060018216806200044957607f821691505b6020821081141562000460576200045f6200049c565b5b50919050565b62000471826200050e565b810181811067ffffffffffffffff82111715620004935762000492620004cb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61491c806200052f6000396000f3fe6080604052600436106101c15760003560e01c80634e1273f4116100f7578063b172e13311610095578063d67b06c111610064578063d67b06c1146105ef578063e985e9c514610618578063f242432a14610655578063f2fde38b1461067e576101c1565b8063b172e13314610552578063c7667a4b1461057d578063cc21f485146105a8578063d5abeb01146105c4576101c1565b80638da5cb5b116100d15780638da5cb5b146104aa5780639039903c146104d557806395d89b41146104fe578063a22cb46514610529576101c1565b80634e1273f41461043a578063715018a614610477578063892f5f6f1461048e576101c1565b80630fcf2e75116101645780632eb2c2d61161013e5780632eb2c2d6146103a65780633360caa0146103cf5780633ccfd60b146103fa57806340fa89d914610411576101c1565b80630fcf2e751461032557806318160ddd146103505780631f0234d81461037b576101c1565b8063046dc166116101a0578063046dc1661461026957806306fdde03146102925780630d5624b3146102bd5780630e89341c146102e8576101c1565b8062fdd58e146101c657806301ffc9a71461020357806302fe530514610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190613122565b6106a7565b6040516101fa9190613c1b565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190613223565b610770565b6040516102379190613939565b60405180910390f35b34801561024c57600080fd5b506102676004803603810190610262919061327d565b610852565b005b34801561027557600080fd5b50610290600480360381019061028b9190612f0f565b6108da565b005b34801561029e57600080fd5b506102a761099a565b6040516102b49190613999565b60405180910390f35b3480156102c957600080fd5b506102d26109d3565b6040516102df9190613c5f565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a91906132c6565b6109e9565b60405161031c9190613999565b60405180910390f35b34801561033157600080fd5b5061033a610a7d565b6040516103479190613939565b60405180910390f35b34801561035c57600080fd5b50610365610aa0565b6040516103729190613c5f565b60405180910390f35b34801561038757600080fd5b50610390610ab6565b60405161039d9190613939565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190612f7c565b610afc565b005b3480156103db57600080fd5b506103e4610b9d565b6040516103f19190613c5f565b60405180910390f35b34801561040657600080fd5b5061040f610bb3565b005b34801561041d57600080fd5b50610438600480360381019061043391906132f3565b610e4d565b005b34801561044657600080fd5b50610461600480360381019061045c91906131ab565b610eed565b60405161046e91906138e0565b60405180910390f35b34801561048357600080fd5b5061048c611006565b005b6104a860048036038101906104a391906132f3565b61108e565b005b3480156104b657600080fd5b506104bf6111f5565b6040516104cc9190613803565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906132f3565b61121f565b005b34801561050a57600080fd5b506105136112bf565b6040516105209190613999565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906130e2565b6112f8565b005b34801561055e57600080fd5b5061056761130e565b6040516105749190613c1b565b60405180910390f35b34801561058957600080fd5b5061059261131a565b60405161059f9190613c1b565b60405180910390f35b6105c260048036038101906105bd9190613320565b611326565b005b3480156105d057600080fd5b506105d96114da565b6040516105e69190613c5f565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190613162565b6114e0565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612f3c565b611613565b60405161064c9190613939565b60405180910390f35b34801561066157600080fd5b5061067c6004803603810190610677919061304b565b6116a7565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612f0f565b611748565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f906139fb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084b575061084a82611840565b5b9050919050565b61085a6118aa565b73ffffffffffffffffffffffffffffffffffffffff166108786111f5565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613b5b565b60405180910390fd5b6108d7816118b2565b50565b6108e26118aa565b73ffffffffffffffffffffffffffffffffffffffff166109006111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613b5b565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600881526020017f43616c69506c756700000000000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b6060600280546109f890614035565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2490614035565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610af75750426003601c9054906101000a900463ffffffff1663ffffffff16115b905090565b610b046118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4a5750610b4985610b446118aa565b611613565b5b610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613adb565b60405180910390fd5b610b9685858585856118cc565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bbb6118aa565b73ffffffffffffffffffffffffffffffffffffffff16610bd96111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690613b5b565b60405180910390fd5b6000604051806060016040528073106e7cd9ce87be19dffed2a9aa831fe0c604fc6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a005c80e35328e92be470bffca6e1e0ad80ab1dd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173af4dd02e3e0ff9609faf54320a6ae97bd7683ecf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090506000604051806060016040528061232863ffffffff1663ffffffff1681526020016101f463ffffffff1663ffffffff1681526020016101f463ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610e4757600060016003610d7e9190613ef0565b8263ffffffff1614610dcb57612710848363ffffffff1660038110610da657610da56141c9565b5b602002015163ffffffff1684610dbc9190613e96565b610dc69190613e65565b610dcd565b475b9050848263ffffffff1660038110610de857610de76141c9565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e32573d6000803e3d6000fd5b50508080610e3f906140e1565b915050610d5f565b50505050565b610e556118aa565b73ffffffffffffffffffffffffffffffffffffffff16610e736111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613b5b565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90613bbb565b60405180910390fd5b6000835167ffffffffffffffff811115610f5057610f4f6141f8565b5b604051908082528060200260200182016040528015610f7e5781602001602082028036833780820191505090505b50905060005b8451811015610ffb57610fcb858281518110610fa357610fa26141c9565b5b6020026020010151858381518110610fbe57610fbd6141c9565b5b60200260200101516106a7565b828281518110610fde57610fdd6141c9565b5b60200260200101818152505080610ff490614098565b9050610f84565b508091505092915050565b61100e6118aa565b73ffffffffffffffffffffffffffffffffffffffff1661102c6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613b5b565b60405180910390fd5b61108c6000611be0565b565b611096610a7d565b6110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613a5b565b60405180910390fd5b60008163ffffffff161161111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613a7b565b60405180910390fd5b6115b363ffffffff1681600360149054906101000a900463ffffffff166111459190613e2b565b63ffffffff16111561118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613b3b565b60405180910390fd5b8063ffffffff166701cdda4faccd00006111a69190613e96565b3410156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90613a9b565b60405180910390fd5b6111f23382611ca6565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112276118aa565b73ffffffffffffffffffffffffffffffffffffffff166112456111f5565b73ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613b5b565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600481526020017f43414c490000000000000000000000000000000000000000000000000000000081525081565b61130a6113036118aa565b8383611ea7565b5050565b6701cdda4faccd000081565b67013fbe85edc9000081565b61132e610ab6565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613afb565b60405180910390fd5b611378848484612014565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90613b7b565b60405180910390fd5b60008163ffffffff1611611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613a7b565b60405180910390fd5b6115b363ffffffff1681600360149054906101000a900463ffffffff166114279190613e2b565b63ffffffff16111561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613b3b565b60405180910390fd5b8063ffffffff1667013fbe85edc900006114889190613e96565b3410156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613a9b565b60405180910390fd5b6114d43382611ca6565b50505050565b6115b381565b6114e86118aa565b73ffffffffffffffffffffffffffffffffffffffff166115066111f5565b73ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613b5b565b60405180910390fd5b6115b363ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661158a9190613dd5565b11156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290613b3b565b60405180910390fd5b60005b815181101561160f576115fc8282815181106115ed576115ec6141c9565b5b60200260200101516001611ca6565b808061160790614098565b9150506115ce565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116af6118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116f557506116f4856116ef6118aa565b611613565b5b611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90613a3b565b60405180910390fd5b611741858585858561210f565b5050505050565b6117506118aa565b73ffffffffffffffffffffffffffffffffffffffff1661176e6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613b5b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90613a1b565b60405180910390fd5b61183d81611be0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906118c8929190612ba8565b5050565b8151835114611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613abb565b60405180910390fd5b600061198a6118aa565b905061199a818787878787612391565b60005b8451811015611b4b5760008582815181106119bb576119ba6141c9565b5b6020026020010151905060008583815181106119da576119d96141c9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613b1b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b309190613dd5565b9250508190555050505080611b4490614098565b905061199d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bc2929190613902565b60405180910390a4611bd8818787878787612399565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600360148282829054906101000a900463ffffffff16611cc79190613e2b565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611e625760008163ffffffff1667ffffffffffffffff811115611d1657611d156141f8565b5b604051908082528060200260200182016040528015611d445781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611d6957611d686141f8565b5b604051908082528060200260200182016040528015611d975781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611e3f578084600360149054906101000a900463ffffffff16611dd09190613f24565b611dda9190613e2b565b63ffffffff16838263ffffffff1681518110611df957611df86141c9565b5b6020026020010181815250506001828263ffffffff1681518110611e2057611e1f6141c9565b5b6020026020010181815250508080611e37906140e1565b915050611d9d565b50611e5b84838360405180602001604052806000815250612580565b5050611ea3565b611ea2826001600360149054906101000a900463ffffffff16611e859190613f24565b63ffffffff1660016040518060200160405280600081525061279e565b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90613b9b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120079190613939565b60405180910390a3505050565b6000803360405160200161202891906137c2565b60405160208183030381529060405280519060200120905060018160405160200161205391906137dd565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516120899493929190613954565b6020604051602081039080840390855afa1580156120ab573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690613abb565b60405180910390fd5b60006121896118aa565b90506121a981878761219a88612934565b6121a388612934565b87612391565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613b1b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f59190613dd5565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612372929190613c36565b60405180910390a46123888288888888886129ae565b50505050505050565b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16612b95565b15612578578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe95949392919061381e565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190613250565b60015b6124ef57612455614227565b806308c379a014156124b2575061246a6147af565b8061247557506124b4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99190613999565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906139bb565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d906139db565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790613bfb565b60405180910390fd5b8151835114612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90613bdb565b60405180910390fd5b600061263e6118aa565b905061264f81600087878787612391565b60005b84518110156127085783818151811061266e5761266d6141c9565b5b602002602001015160008087848151811061268c5761268b6141c9565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ee9190613dd5565b92505081905550808061270090614098565b915050612652565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612780929190613902565b60405180910390a461279781600087878787612399565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590613bfb565b60405180910390fd5b60006128186118aa565b90506128398160008761282a88612934565b61283388612934565b87612391565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128989190613dd5565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612916929190613c36565b60405180910390a461292d816000878787876129ae565b5050505050565b60606000600167ffffffffffffffff811115612953576129526141f8565b5b6040519080825280602002602001820160405280156129815781602001602082028036833780820191505090505b5090508281600081518110612999576129986141c9565b5b60200260200101818152505080915050919050565b6129cd8473ffffffffffffffffffffffffffffffffffffffff16612b95565b15612b8d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612a13959493929190613886565b602060405180830381600087803b158015612a2d57600080fd5b505af1925050508015612a5e57506040513d601f19601f82011682018060405250810190612a5b9190613250565b60015b612b0457612a6a614227565b806308c379a01415612ac75750612a7f6147af565b80612a8a5750612ac9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe9190613999565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb906139bb565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906139db565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612bb490614035565b90600052602060002090601f016020900481019282612bd65760008555612c1d565b82601f10612bef57805160ff1916838001178555612c1d565b82800160010185558215612c1d579182015b82811115612c1c578251825591602001919060010190612c01565b5b509050612c2a9190612c2e565b5090565b5b80821115612c47576000816000905550600101612c2f565b5090565b6000612c5e612c5984613c9f565b613c7a565b90508083825260208201905082856020860282011115612c8157612c8061424e565b5b60005b85811015612cb15781612c978882612daf565b845260208401935060208301925050600181019050612c84565b5050509392505050565b6000612cce612cc984613ccb565b613c7a565b90508083825260208201905082856020860282011115612cf157612cf061424e565b5b60005b85811015612d215781612d078882612ed0565b845260208401935060208301925050600181019050612cf4565b5050509392505050565b6000612d3e612d3984613cf7565b613c7a565b905082815260208101848484011115612d5a57612d59614253565b5b612d65848285613ff3565b509392505050565b6000612d80612d7b84613d28565b613c7a565b905082815260208101848484011115612d9c57612d9b614253565b5b612da7848285613ff3565b509392505050565b600081359050612dbe81614845565b92915050565b600082601f830112612dd957612dd8614249565b5b8135612de9848260208601612c4b565b91505092915050565b600082601f830112612e0757612e06614249565b5b8135612e17848260208601612cbb565b91505092915050565b600081359050612e2f8161485c565b92915050565b600081359050612e4481614873565b92915050565b600081359050612e598161488a565b92915050565b600081519050612e6e8161488a565b92915050565b600082601f830112612e8957612e88614249565b5b8135612e99848260208601612d2b565b91505092915050565b600082601f830112612eb757612eb6614249565b5b8135612ec7848260208601612d6d565b91505092915050565b600081359050612edf816148a1565b92915050565b600081359050612ef4816148b8565b92915050565b600081359050612f09816148cf565b92915050565b600060208284031215612f2557612f2461425d565b5b6000612f3384828501612daf565b91505092915050565b60008060408385031215612f5357612f5261425d565b5b6000612f6185828601612daf565b9250506020612f7285828601612daf565b9150509250929050565b600080600080600060a08688031215612f9857612f9761425d565b5b6000612fa688828901612daf565b9550506020612fb788828901612daf565b945050604086013567ffffffffffffffff811115612fd857612fd7614258565b5b612fe488828901612df2565b935050606086013567ffffffffffffffff81111561300557613004614258565b5b61301188828901612df2565b925050608086013567ffffffffffffffff81111561303257613031614258565b5b61303e88828901612e74565b9150509295509295909350565b600080600080600060a086880312156130675761306661425d565b5b600061307588828901612daf565b955050602061308688828901612daf565b945050604061309788828901612ed0565b93505060606130a888828901612ed0565b925050608086013567ffffffffffffffff8111156130c9576130c8614258565b5b6130d588828901612e74565b9150509295509295909350565b600080604083850312156130f9576130f861425d565b5b600061310785828601612daf565b925050602061311885828601612e20565b9150509250929050565b600080604083850312156131395761313861425d565b5b600061314785828601612daf565b925050602061315885828601612ed0565b9150509250929050565b6000602082840312156131785761317761425d565b5b600082013567ffffffffffffffff81111561319657613195614258565b5b6131a284828501612dc4565b91505092915050565b600080604083850312156131c2576131c161425d565b5b600083013567ffffffffffffffff8111156131e0576131df614258565b5b6131ec85828601612dc4565b925050602083013567ffffffffffffffff81111561320d5761320c614258565b5b61321985828601612df2565b9150509250929050565b6000602082840312156132395761323861425d565b5b600061324784828501612e4a565b91505092915050565b6000602082840312156132665761326561425d565b5b600061327484828501612e5f565b91505092915050565b6000602082840312156132935761329261425d565b5b600082013567ffffffffffffffff8111156132b1576132b0614258565b5b6132bd84828501612ea2565b91505092915050565b6000602082840312156132dc576132db61425d565b5b60006132ea84828501612ed0565b91505092915050565b6000602082840312156133095761330861425d565b5b600061331784828501612ee5565b91505092915050565b6000806000806080858703121561333a5761333961425d565b5b600061334887828801612efa565b945050602061335987828801612e35565b935050604061336a87828801612e35565b925050606061337b87828801612ee5565b91505092959194509250565b60006133938383613786565b60208301905092915050565b6133a881613f58565b82525050565b6133bf6133ba82613f58565b61410e565b82525050565b60006133d082613d69565b6133da8185613d97565b93506133e583613d59565b8060005b838110156134165781516133fd8882613387565b975061340883613d8a565b9250506001810190506133e9565b5085935050505092915050565b61342c81613f6a565b82525050565b61343b81613f76565b82525050565b61345261344d82613f76565b614120565b82525050565b600061346382613d74565b61346d8185613da8565b935061347d818560208601614002565b61348681614262565b840191505092915050565b600061349c82613d7f565b6134a68185613db9565b93506134b6818560208601614002565b6134bf81614262565b840191505092915050565b60006134d7603483613db9565b91506134e28261428d565b604082019050919050565b60006134fa602883613db9565b9150613505826142dc565b604082019050919050565b600061351d601c83613dca565b91506135288261432b565b601c82019050919050565b6000613540602b83613db9565b915061354b82614354565b604082019050919050565b6000613563602683613db9565b915061356e826143a3565b604082019050919050565b6000613586602983613db9565b9150613591826143f2565b604082019050919050565b60006135a9601a83613db9565b91506135b482614441565b602082019050919050565b60006135cc601d83613db9565b91506135d78261446a565b602082019050919050565b60006135ef601183613db9565b91506135fa82614493565b602082019050919050565b6000613612602583613db9565b915061361d826144bc565b604082019050919050565b6000613635603283613db9565b91506136408261450b565b604082019050919050565b6000613658601783613db9565b91506136638261455a565b602082019050919050565b600061367b602a83613db9565b915061368682614583565b604082019050919050565b600061369e602983613db9565b91506136a9826145d2565b604082019050919050565b60006136c1602083613db9565b91506136cc82614621565b602082019050919050565b60006136e4601083613db9565b91506136ef8261464a565b602082019050919050565b6000613707602983613db9565b915061371282614673565b604082019050919050565b600061372a602983613db9565b9150613735826146c2565b604082019050919050565b600061374d602883613db9565b915061375882614711565b604082019050919050565b6000613770602183613db9565b915061377b82614760565b604082019050919050565b61378f81613fcc565b82525050565b61379e81613fcc565b82525050565b6137ad81613fd6565b82525050565b6137bc81613fe6565b82525050565b60006137ce82846133ae565b60148201915081905092915050565b60006137e882613510565b91506137f48284613441565b60208201915081905092915050565b6000602082019050613818600083018461339f565b92915050565b600060a082019050613833600083018861339f565b613840602083018761339f565b818103604083015261385281866133c5565b9050818103606083015261386681856133c5565b9050818103608083015261387a8184613458565b90509695505050505050565b600060a08201905061389b600083018861339f565b6138a8602083018761339f565b6138b56040830186613795565b6138c26060830185613795565b81810360808301526138d48184613458565b90509695505050505050565b600060208201905081810360008301526138fa81846133c5565b905092915050565b6000604082019050818103600083015261391c81856133c5565b9050818103602083015261393081846133c5565b90509392505050565b600060208201905061394e6000830184613423565b92915050565b60006080820190506139696000830187613432565b61397660208301866137b3565b6139836040830185613432565b6139906060830184613432565b95945050505050565b600060208201905081810360008301526139b38184613491565b905092915050565b600060208201905081810360008301526139d4816134ca565b9050919050565b600060208201905081810360008301526139f4816134ed565b9050919050565b60006020820190508181036000830152613a1481613533565b9050919050565b60006020820190508181036000830152613a3481613556565b9050919050565b60006020820190508181036000830152613a5481613579565b9050919050565b60006020820190508181036000830152613a748161359c565b9050919050565b60006020820190508181036000830152613a94816135bf565b9050919050565b60006020820190508181036000830152613ab4816135e2565b9050919050565b60006020820190508181036000830152613ad481613605565b9050919050565b60006020820190508181036000830152613af481613628565b9050919050565b60006020820190508181036000830152613b148161364b565b9050919050565b60006020820190508181036000830152613b348161366e565b9050919050565b60006020820190508181036000830152613b5481613691565b9050919050565b60006020820190508181036000830152613b74816136b4565b9050919050565b60006020820190508181036000830152613b94816136d7565b9050919050565b60006020820190508181036000830152613bb4816136fa565b9050919050565b60006020820190508181036000830152613bd48161371d565b9050919050565b60006020820190508181036000830152613bf481613740565b9050919050565b60006020820190508181036000830152613c1481613763565b9050919050565b6000602082019050613c306000830184613795565b92915050565b6000604082019050613c4b6000830185613795565b613c586020830184613795565b9392505050565b6000602082019050613c7460008301846137a4565b92915050565b6000613c84613c95565b9050613c908282614067565b919050565b6000604051905090565b600067ffffffffffffffff821115613cba57613cb96141f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ce657613ce56141f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d1257613d116141f8565b5b613d1b82614262565b9050602081019050919050565b600067ffffffffffffffff821115613d4357613d426141f8565b5b613d4c82614262565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613de082613fcc565b9150613deb83613fcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2057613e1f61413c565b5b828201905092915050565b6000613e3682613fd6565b9150613e4183613fd6565b92508263ffffffff03821115613e5a57613e5961413c565b5b828201905092915050565b6000613e7082613fcc565b9150613e7b83613fcc565b925082613e8b57613e8a61416b565b5b828204905092915050565b6000613ea182613fcc565b9150613eac83613fcc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ee557613ee461413c565b5b828202905092915050565b6000613efb82613fcc565b9150613f0683613fcc565b925082821015613f1957613f1861413c565b5b828203905092915050565b6000613f2f82613fd6565b9150613f3a83613fd6565b925082821015613f4d57613f4c61413c565b5b828203905092915050565b6000613f6382613fac565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614020578082015181840152602081019050614005565b8381111561402f576000848401525b50505050565b6000600282049050600182168061404d57607f821691505b602082108114156140615761406061419a565b5b50919050565b61407082614262565b810181811067ffffffffffffffff8211171561408f5761408e6141f8565b5b80604052505050565b60006140a382613fcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140d6576140d561413c565b5b600182019050919050565b60006140ec82613fd6565b915063ffffffff8214156141035761410261413c565b5b600182019050919050565b60006141198261412a565b9050919050565b6000819050919050565b600061413582614273565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142465760046000803e614243600051614280565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156147bf57614842565b6147c7613c95565b60043d036004823e80513d602482011167ffffffffffffffff821117156147ef575050614842565b808201805167ffffffffffffffff81111561480d5750505050614842565b80602083010160043d03850181111561482a575050505050614842565b61483982602001850186614067565b82955050505050505b90565b61484e81613f58565b811461485957600080fd5b50565b61486581613f6a565b811461487057600080fd5b50565b61487c81613f76565b811461488757600080fd5b50565b61489381613f80565b811461489e57600080fd5b50565b6148aa81613fcc565b81146148b557600080fd5b50565b6148c181613fd6565b81146148cc57600080fd5b50565b6148d881613fe6565b81146148e357600080fd5b5056fea2646970667358221220f79bfeb49dd7b67628e219f65e5c5667d7e396505263518a89cb2ff8d58a577164736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d646a6576664151337737795258507a4b353433476458784574446a4b4a35767656734543577957556a6332502f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80634e1273f4116100f7578063b172e13311610095578063d67b06c111610064578063d67b06c1146105ef578063e985e9c514610618578063f242432a14610655578063f2fde38b1461067e576101c1565b8063b172e13314610552578063c7667a4b1461057d578063cc21f485146105a8578063d5abeb01146105c4576101c1565b80638da5cb5b116100d15780638da5cb5b146104aa5780639039903c146104d557806395d89b41146104fe578063a22cb46514610529576101c1565b80634e1273f41461043a578063715018a614610477578063892f5f6f1461048e576101c1565b80630fcf2e75116101645780632eb2c2d61161013e5780632eb2c2d6146103a65780633360caa0146103cf5780633ccfd60b146103fa57806340fa89d914610411576101c1565b80630fcf2e751461032557806318160ddd146103505780631f0234d81461037b576101c1565b8063046dc166116101a0578063046dc1661461026957806306fdde03146102925780630d5624b3146102bd5780630e89341c146102e8576101c1565b8062fdd58e146101c657806301ffc9a71461020357806302fe530514610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190613122565b6106a7565b6040516101fa9190613c1b565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190613223565b610770565b6040516102379190613939565b60405180910390f35b34801561024c57600080fd5b506102676004803603810190610262919061327d565b610852565b005b34801561027557600080fd5b50610290600480360381019061028b9190612f0f565b6108da565b005b34801561029e57600080fd5b506102a761099a565b6040516102b49190613999565b60405180910390f35b3480156102c957600080fd5b506102d26109d3565b6040516102df9190613c5f565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a91906132c6565b6109e9565b60405161031c9190613999565b60405180910390f35b34801561033157600080fd5b5061033a610a7d565b6040516103479190613939565b60405180910390f35b34801561035c57600080fd5b50610365610aa0565b6040516103729190613c5f565b60405180910390f35b34801561038757600080fd5b50610390610ab6565b60405161039d9190613939565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190612f7c565b610afc565b005b3480156103db57600080fd5b506103e4610b9d565b6040516103f19190613c5f565b60405180910390f35b34801561040657600080fd5b5061040f610bb3565b005b34801561041d57600080fd5b50610438600480360381019061043391906132f3565b610e4d565b005b34801561044657600080fd5b50610461600480360381019061045c91906131ab565b610eed565b60405161046e91906138e0565b60405180910390f35b34801561048357600080fd5b5061048c611006565b005b6104a860048036038101906104a391906132f3565b61108e565b005b3480156104b657600080fd5b506104bf6111f5565b6040516104cc9190613803565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906132f3565b61121f565b005b34801561050a57600080fd5b506105136112bf565b6040516105209190613999565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906130e2565b6112f8565b005b34801561055e57600080fd5b5061056761130e565b6040516105749190613c1b565b60405180910390f35b34801561058957600080fd5b5061059261131a565b60405161059f9190613c1b565b60405180910390f35b6105c260048036038101906105bd9190613320565b611326565b005b3480156105d057600080fd5b506105d96114da565b6040516105e69190613c5f565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190613162565b6114e0565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612f3c565b611613565b60405161064c9190613939565b60405180910390f35b34801561066157600080fd5b5061067c6004803603810190610677919061304b565b6116a7565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612f0f565b611748565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f906139fb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084b575061084a82611840565b5b9050919050565b61085a6118aa565b73ffffffffffffffffffffffffffffffffffffffff166108786111f5565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613b5b565b60405180910390fd5b6108d7816118b2565b50565b6108e26118aa565b73ffffffffffffffffffffffffffffffffffffffff166109006111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613b5b565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600881526020017f43616c69506c756700000000000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b6060600280546109f890614035565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2490614035565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610af75750426003601c9054906101000a900463ffffffff1663ffffffff16115b905090565b610b046118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4a5750610b4985610b446118aa565b611613565b5b610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613adb565b60405180910390fd5b610b9685858585856118cc565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bbb6118aa565b73ffffffffffffffffffffffffffffffffffffffff16610bd96111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690613b5b565b60405180910390fd5b6000604051806060016040528073106e7cd9ce87be19dffed2a9aa831fe0c604fc6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a005c80e35328e92be470bffca6e1e0ad80ab1dd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173af4dd02e3e0ff9609faf54320a6ae97bd7683ecf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090506000604051806060016040528061232863ffffffff1663ffffffff1681526020016101f463ffffffff1663ffffffff1681526020016101f463ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610e4757600060016003610d7e9190613ef0565b8263ffffffff1614610dcb57612710848363ffffffff1660038110610da657610da56141c9565b5b602002015163ffffffff1684610dbc9190613e96565b610dc69190613e65565b610dcd565b475b9050848263ffffffff1660038110610de857610de76141c9565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e32573d6000803e3d6000fd5b50508080610e3f906140e1565b915050610d5f565b50505050565b610e556118aa565b73ffffffffffffffffffffffffffffffffffffffff16610e736111f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec090613b5b565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90613bbb565b60405180910390fd5b6000835167ffffffffffffffff811115610f5057610f4f6141f8565b5b604051908082528060200260200182016040528015610f7e5781602001602082028036833780820191505090505b50905060005b8451811015610ffb57610fcb858281518110610fa357610fa26141c9565b5b6020026020010151858381518110610fbe57610fbd6141c9565b5b60200260200101516106a7565b828281518110610fde57610fdd6141c9565b5b60200260200101818152505080610ff490614098565b9050610f84565b508091505092915050565b61100e6118aa565b73ffffffffffffffffffffffffffffffffffffffff1661102c6111f5565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613b5b565b60405180910390fd5b61108c6000611be0565b565b611096610a7d565b6110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90613a5b565b60405180910390fd5b60008163ffffffff161161111e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111590613a7b565b60405180910390fd5b6115b363ffffffff1681600360149054906101000a900463ffffffff166111459190613e2b565b63ffffffff16111561118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613b3b565b60405180910390fd5b8063ffffffff166701cdda4faccd00006111a69190613e96565b3410156111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df90613a9b565b60405180910390fd5b6111f23382611ca6565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112276118aa565b73ffffffffffffffffffffffffffffffffffffffff166112456111f5565b73ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129290613b5b565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600481526020017f43414c490000000000000000000000000000000000000000000000000000000081525081565b61130a6113036118aa565b8383611ea7565b5050565b6701cdda4faccd000081565b67013fbe85edc9000081565b61132e610ab6565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613afb565b60405180910390fd5b611378848484612014565b6113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae90613b7b565b60405180910390fd5b60008163ffffffff1611611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f790613a7b565b60405180910390fd5b6115b363ffffffff1681600360149054906101000a900463ffffffff166114279190613e2b565b63ffffffff16111561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613b3b565b60405180910390fd5b8063ffffffff1667013fbe85edc900006114889190613e96565b3410156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190613a9b565b60405180910390fd5b6114d43382611ca6565b50505050565b6115b381565b6114e86118aa565b73ffffffffffffffffffffffffffffffffffffffff166115066111f5565b73ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613b5b565b60405180910390fd5b6115b363ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661158a9190613dd5565b11156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290613b3b565b60405180910390fd5b60005b815181101561160f576115fc8282815181106115ed576115ec6141c9565b5b60200260200101516001611ca6565b808061160790614098565b9150506115ce565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116af6118aa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806116f557506116f4856116ef6118aa565b611613565b5b611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90613a3b565b60405180910390fd5b611741858585858561210f565b5050505050565b6117506118aa565b73ffffffffffffffffffffffffffffffffffffffff1661176e6111f5565b73ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613b5b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90613a1b565b60405180910390fd5b61183d81611be0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906118c8929190612ba8565b5050565b8151835114611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790613bdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613abb565b60405180910390fd5b600061198a6118aa565b905061199a818787878787612391565b60005b8451811015611b4b5760008582815181106119bb576119ba6141c9565b5b6020026020010151905060008583815181106119da576119d96141c9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290613b1b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b309190613dd5565b9250508190555050505080611b4490614098565b905061199d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bc2929190613902565b60405180910390a4611bd8818787878787612399565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600360148282829054906101000a900463ffffffff16611cc79190613e2b565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611e625760008163ffffffff1667ffffffffffffffff811115611d1657611d156141f8565b5b604051908082528060200260200182016040528015611d445781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611d6957611d686141f8565b5b604051908082528060200260200182016040528015611d975781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611e3f578084600360149054906101000a900463ffffffff16611dd09190613f24565b611dda9190613e2b565b63ffffffff16838263ffffffff1681518110611df957611df86141c9565b5b6020026020010181815250506001828263ffffffff1681518110611e2057611e1f6141c9565b5b6020026020010181815250508080611e37906140e1565b915050611d9d565b50611e5b84838360405180602001604052806000815250612580565b5050611ea3565b611ea2826001600360149054906101000a900463ffffffff16611e859190613f24565b63ffffffff1660016040518060200160405280600081525061279e565b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90613b9b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120079190613939565b60405180910390a3505050565b6000803360405160200161202891906137c2565b60405160208183030381529060405280519060200120905060018160405160200161205391906137dd565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516120899493929190613954565b6020604051602081039080840390855afa1580156120ab573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690613abb565b60405180910390fd5b60006121896118aa565b90506121a981878761219a88612934565b6121a388612934565b87612391565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613b1b565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f59190613dd5565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612372929190613c36565b60405180910390a46123888288888888886129ae565b50505050505050565b505050505050565b6123b88473ffffffffffffffffffffffffffffffffffffffff16612b95565b15612578578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016123fe95949392919061381e565b602060405180830381600087803b15801561241857600080fd5b505af192505050801561244957506040513d601f19601f820116820180604052508101906124469190613250565b60015b6124ef57612455614227565b806308c379a014156124b2575061246a6147af565b8061247557506124b4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99190613999565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906139bb565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d906139db565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156125f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e790613bfb565b60405180910390fd5b8151835114612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90613bdb565b60405180910390fd5b600061263e6118aa565b905061264f81600087878787612391565b60005b84518110156127085783818151811061266e5761266d6141c9565b5b602002602001015160008087848151811061268c5761268b6141c9565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ee9190613dd5565b92505081905550808061270090614098565b915050612652565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612780929190613902565b60405180910390a461279781600087878787612399565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590613bfb565b60405180910390fd5b60006128186118aa565b90506128398160008761282a88612934565b61283388612934565b87612391565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128989190613dd5565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612916929190613c36565b60405180910390a461292d816000878787876129ae565b5050505050565b60606000600167ffffffffffffffff811115612953576129526141f8565b5b6040519080825280602002602001820160405280156129815781602001602082028036833780820191505090505b5090508281600081518110612999576129986141c9565b5b60200260200101818152505080915050919050565b6129cd8473ffffffffffffffffffffffffffffffffffffffff16612b95565b15612b8d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612a13959493929190613886565b602060405180830381600087803b158015612a2d57600080fd5b505af1925050508015612a5e57506040513d601f19601f82011682018060405250810190612a5b9190613250565b60015b612b0457612a6a614227565b806308c379a01415612ac75750612a7f6147af565b80612a8a5750612ac9565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abe9190613999565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afb906139bb565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b82906139db565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612bb490614035565b90600052602060002090601f016020900481019282612bd65760008555612c1d565b82601f10612bef57805160ff1916838001178555612c1d565b82800160010185558215612c1d579182015b82811115612c1c578251825591602001919060010190612c01565b5b509050612c2a9190612c2e565b5090565b5b80821115612c47576000816000905550600101612c2f565b5090565b6000612c5e612c5984613c9f565b613c7a565b90508083825260208201905082856020860282011115612c8157612c8061424e565b5b60005b85811015612cb15781612c978882612daf565b845260208401935060208301925050600181019050612c84565b5050509392505050565b6000612cce612cc984613ccb565b613c7a565b90508083825260208201905082856020860282011115612cf157612cf061424e565b5b60005b85811015612d215781612d078882612ed0565b845260208401935060208301925050600181019050612cf4565b5050509392505050565b6000612d3e612d3984613cf7565b613c7a565b905082815260208101848484011115612d5a57612d59614253565b5b612d65848285613ff3565b509392505050565b6000612d80612d7b84613d28565b613c7a565b905082815260208101848484011115612d9c57612d9b614253565b5b612da7848285613ff3565b509392505050565b600081359050612dbe81614845565b92915050565b600082601f830112612dd957612dd8614249565b5b8135612de9848260208601612c4b565b91505092915050565b600082601f830112612e0757612e06614249565b5b8135612e17848260208601612cbb565b91505092915050565b600081359050612e2f8161485c565b92915050565b600081359050612e4481614873565b92915050565b600081359050612e598161488a565b92915050565b600081519050612e6e8161488a565b92915050565b600082601f830112612e8957612e88614249565b5b8135612e99848260208601612d2b565b91505092915050565b600082601f830112612eb757612eb6614249565b5b8135612ec7848260208601612d6d565b91505092915050565b600081359050612edf816148a1565b92915050565b600081359050612ef4816148b8565b92915050565b600081359050612f09816148cf565b92915050565b600060208284031215612f2557612f2461425d565b5b6000612f3384828501612daf565b91505092915050565b60008060408385031215612f5357612f5261425d565b5b6000612f6185828601612daf565b9250506020612f7285828601612daf565b9150509250929050565b600080600080600060a08688031215612f9857612f9761425d565b5b6000612fa688828901612daf565b9550506020612fb788828901612daf565b945050604086013567ffffffffffffffff811115612fd857612fd7614258565b5b612fe488828901612df2565b935050606086013567ffffffffffffffff81111561300557613004614258565b5b61301188828901612df2565b925050608086013567ffffffffffffffff81111561303257613031614258565b5b61303e88828901612e74565b9150509295509295909350565b600080600080600060a086880312156130675761306661425d565b5b600061307588828901612daf565b955050602061308688828901612daf565b945050604061309788828901612ed0565b93505060606130a888828901612ed0565b925050608086013567ffffffffffffffff8111156130c9576130c8614258565b5b6130d588828901612e74565b9150509295509295909350565b600080604083850312156130f9576130f861425d565b5b600061310785828601612daf565b925050602061311885828601612e20565b9150509250929050565b600080604083850312156131395761313861425d565b5b600061314785828601612daf565b925050602061315885828601612ed0565b9150509250929050565b6000602082840312156131785761317761425d565b5b600082013567ffffffffffffffff81111561319657613195614258565b5b6131a284828501612dc4565b91505092915050565b600080604083850312156131c2576131c161425d565b5b600083013567ffffffffffffffff8111156131e0576131df614258565b5b6131ec85828601612dc4565b925050602083013567ffffffffffffffff81111561320d5761320c614258565b5b61321985828601612df2565b9150509250929050565b6000602082840312156132395761323861425d565b5b600061324784828501612e4a565b91505092915050565b6000602082840312156132665761326561425d565b5b600061327484828501612e5f565b91505092915050565b6000602082840312156132935761329261425d565b5b600082013567ffffffffffffffff8111156132b1576132b0614258565b5b6132bd84828501612ea2565b91505092915050565b6000602082840312156132dc576132db61425d565b5b60006132ea84828501612ed0565b91505092915050565b6000602082840312156133095761330861425d565b5b600061331784828501612ee5565b91505092915050565b6000806000806080858703121561333a5761333961425d565b5b600061334887828801612efa565b945050602061335987828801612e35565b935050604061336a87828801612e35565b925050606061337b87828801612ee5565b91505092959194509250565b60006133938383613786565b60208301905092915050565b6133a881613f58565b82525050565b6133bf6133ba82613f58565b61410e565b82525050565b60006133d082613d69565b6133da8185613d97565b93506133e583613d59565b8060005b838110156134165781516133fd8882613387565b975061340883613d8a565b9250506001810190506133e9565b5085935050505092915050565b61342c81613f6a565b82525050565b61343b81613f76565b82525050565b61345261344d82613f76565b614120565b82525050565b600061346382613d74565b61346d8185613da8565b935061347d818560208601614002565b61348681614262565b840191505092915050565b600061349c82613d7f565b6134a68185613db9565b93506134b6818560208601614002565b6134bf81614262565b840191505092915050565b60006134d7603483613db9565b91506134e28261428d565b604082019050919050565b60006134fa602883613db9565b9150613505826142dc565b604082019050919050565b600061351d601c83613dca565b91506135288261432b565b601c82019050919050565b6000613540602b83613db9565b915061354b82614354565b604082019050919050565b6000613563602683613db9565b915061356e826143a3565b604082019050919050565b6000613586602983613db9565b9150613591826143f2565b604082019050919050565b60006135a9601a83613db9565b91506135b482614441565b602082019050919050565b60006135cc601d83613db9565b91506135d78261446a565b602082019050919050565b60006135ef601183613db9565b91506135fa82614493565b602082019050919050565b6000613612602583613db9565b915061361d826144bc565b604082019050919050565b6000613635603283613db9565b91506136408261450b565b604082019050919050565b6000613658601783613db9565b91506136638261455a565b602082019050919050565b600061367b602a83613db9565b915061368682614583565b604082019050919050565b600061369e602983613db9565b91506136a9826145d2565b604082019050919050565b60006136c1602083613db9565b91506136cc82614621565b602082019050919050565b60006136e4601083613db9565b91506136ef8261464a565b602082019050919050565b6000613707602983613db9565b915061371282614673565b604082019050919050565b600061372a602983613db9565b9150613735826146c2565b604082019050919050565b600061374d602883613db9565b915061375882614711565b604082019050919050565b6000613770602183613db9565b915061377b82614760565b604082019050919050565b61378f81613fcc565b82525050565b61379e81613fcc565b82525050565b6137ad81613fd6565b82525050565b6137bc81613fe6565b82525050565b60006137ce82846133ae565b60148201915081905092915050565b60006137e882613510565b91506137f48284613441565b60208201915081905092915050565b6000602082019050613818600083018461339f565b92915050565b600060a082019050613833600083018861339f565b613840602083018761339f565b818103604083015261385281866133c5565b9050818103606083015261386681856133c5565b9050818103608083015261387a8184613458565b90509695505050505050565b600060a08201905061389b600083018861339f565b6138a8602083018761339f565b6138b56040830186613795565b6138c26060830185613795565b81810360808301526138d48184613458565b90509695505050505050565b600060208201905081810360008301526138fa81846133c5565b905092915050565b6000604082019050818103600083015261391c81856133c5565b9050818103602083015261393081846133c5565b90509392505050565b600060208201905061394e6000830184613423565b92915050565b60006080820190506139696000830187613432565b61397660208301866137b3565b6139836040830185613432565b6139906060830184613432565b95945050505050565b600060208201905081810360008301526139b38184613491565b905092915050565b600060208201905081810360008301526139d4816134ca565b9050919050565b600060208201905081810360008301526139f4816134ed565b9050919050565b60006020820190508181036000830152613a1481613533565b9050919050565b60006020820190508181036000830152613a3481613556565b9050919050565b60006020820190508181036000830152613a5481613579565b9050919050565b60006020820190508181036000830152613a748161359c565b9050919050565b60006020820190508181036000830152613a94816135bf565b9050919050565b60006020820190508181036000830152613ab4816135e2565b9050919050565b60006020820190508181036000830152613ad481613605565b9050919050565b60006020820190508181036000830152613af481613628565b9050919050565b60006020820190508181036000830152613b148161364b565b9050919050565b60006020820190508181036000830152613b348161366e565b9050919050565b60006020820190508181036000830152613b5481613691565b9050919050565b60006020820190508181036000830152613b74816136b4565b9050919050565b60006020820190508181036000830152613b94816136d7565b9050919050565b60006020820190508181036000830152613bb4816136fa565b9050919050565b60006020820190508181036000830152613bd48161371d565b9050919050565b60006020820190508181036000830152613bf481613740565b9050919050565b60006020820190508181036000830152613c1481613763565b9050919050565b6000602082019050613c306000830184613795565b92915050565b6000604082019050613c4b6000830185613795565b613c586020830184613795565b9392505050565b6000602082019050613c7460008301846137a4565b92915050565b6000613c84613c95565b9050613c908282614067565b919050565b6000604051905090565b600067ffffffffffffffff821115613cba57613cb96141f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ce657613ce56141f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613d1257613d116141f8565b5b613d1b82614262565b9050602081019050919050565b600067ffffffffffffffff821115613d4357613d426141f8565b5b613d4c82614262565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613de082613fcc565b9150613deb83613fcc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2057613e1f61413c565b5b828201905092915050565b6000613e3682613fd6565b9150613e4183613fd6565b92508263ffffffff03821115613e5a57613e5961413c565b5b828201905092915050565b6000613e7082613fcc565b9150613e7b83613fcc565b925082613e8b57613e8a61416b565b5b828204905092915050565b6000613ea182613fcc565b9150613eac83613fcc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ee557613ee461413c565b5b828202905092915050565b6000613efb82613fcc565b9150613f0683613fcc565b925082821015613f1957613f1861413c565b5b828203905092915050565b6000613f2f82613fd6565b9150613f3a83613fd6565b925082821015613f4d57613f4c61413c565b5b828203905092915050565b6000613f6382613fac565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614020578082015181840152602081019050614005565b8381111561402f576000848401525b50505050565b6000600282049050600182168061404d57607f821691505b602082108114156140615761406061419a565b5b50919050565b61407082614262565b810181811067ffffffffffffffff8211171561408f5761408e6141f8565b5b80604052505050565b60006140a382613fcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140d6576140d561413c565b5b600182019050919050565b60006140ec82613fd6565b915063ffffffff8214156141035761410261413c565b5b600182019050919050565b60006141198261412a565b9050919050565b6000819050919050565b600061413582614273565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156142465760046000803e614243600051614280565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156147bf57614842565b6147c7613c95565b60043d036004823e80513d602482011167ffffffffffffffff821117156147ef575050614842565b808201805167ffffffffffffffff81111561480d5750505050614842565b80602083010160043d03850181111561482a575050505050614842565b61483982602001850186614067565b82955050505050505b90565b61484e81613f58565b811461485957600080fd5b50565b61486581613f6a565b811461487057600080fd5b50565b61487c81613f76565b811461488757600080fd5b50565b61489381613f80565b811461489e57600080fd5b50565b6148aa81613fcc565b81146148b557600080fd5b50565b6148c181613fd6565b81146148cc57600080fd5b50565b6148d881613fe6565b81146148e357600080fd5b5056fea2646970667358221220f79bfeb49dd7b67628e219f65e5c5667d7e396505263518a89cb2ff8d58a577164736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d646a6576664151337737795258507a4b353433476458784574446a4b4a35767656734543577957556a6332502f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : uri (string): https://buckets.mypinata.cloud/ipfs/QmdjevfAQ3w7yRXPzK543GdXxEtDjKJ5vvVsECWyWUjc2P/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d646a6576664151337737795258507a4b35343347645878457444
Arg [4] : 6a4b4a35767656734543577957556a6332502f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36549:4376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37123:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37216:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36594:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36772:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37736:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36688:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37554:174;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24917:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36880:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40251:671;;;;;;;;;;;;;:::i;:::-;;37322:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23375:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;39463:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37435:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36641:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36929:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36818:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38878:577;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36724:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39917:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24199:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;37123:85::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37188:12:::1;37196:3;37188:7;:12::i;:::-;37123:85:::0;:::o;37216:98::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37302:4:::1;37286:13;;:20;;;;;;;;;;;;;;;;;;37216:98:::0;:::o;36594:40::-;;;;;;;;;;;;;;;;;;;:::o;36772:39::-;;;;;;;;;;;;;:::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;37736:117::-;37787:4;37830:15;37811;;;;;;;;;;;:34;;;;37804:41;;37736:117;:::o;36688:29::-;;;;;;;;;;;;;:::o;37554:174::-;37602:4;37655:15;37639:12;;;;;;;;;;;:31;;;;:81;;;;;37705:15;37687;;;;;;;;;;;:33;;;37639:81;37619:101;;37554:174;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;36880:42::-;;;;;;;;;;;;;:::o;40251:671::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40301:27:::1;:212;;;;;;;;40346:42;40301:212;;;;;;;;40403:42;40301:212;;;;;;;;40460:42;40301:212;;;;;;::::0;::::1;;40526:23;:66;;;;;;;;40560:4;40526:66;;;;;;;;40574:3;40526:66;;;;;;;;40587:3;40526:66;;;;;;::::0;::::1;;40605:15;40623:21;40605:39;;40662:8;40657:258;40680:16;40676:1;:20;;;40657:258;;;40718:14;40759:1;40740:16;:20;;;;:::i;:::-;40735:1;:25;;;:115;;40845:5;40832:6;40839:1;40832:9;;;;;;;;;:::i;:::-;;;;;;40822:19;;:7;:19;;;;:::i;:::-;40821:29;;;;:::i;:::-;40735:115;;;40780:21;40735:115;40718:132;;40873:9;40883:1;40873:12;;;;;;;;;:::i;:::-;;;;;;40865:30;;:38;40896:6;40865:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40703:212;40698:3;;;;;:::i;:::-;;;;40657:258;;;;40290:632;;;40251:671::o:0;37322:105::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37410:9:::1;37395:12;;:24;;;;;;;;;;;;;;;;;;37322:105:::0;:::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;39463:446::-;39537:20;:18;:20::i;:::-;39529:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39615:1;39607:5;:9;;;39599:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36759:4;39683:32;;39697:5;39683:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;39661:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;39838:5;39816:27;;36975:10;39816:27;;;;:::i;:::-;39803:9;:40;;39795:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39878:23;39883:10;39895:5;39878:4;:23::i;:::-;39463:446;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;37435:111::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37529:9:::1;37511:15;;:27;;;;;;;;;;;;;;;;;;37435:111:::0;:::o;36641:38::-;;;;;;;;;;;;;;;;;;;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;36929:56::-;36975:10;36929:56;:::o;36818:53::-;36861:10;36818:53;:::o;38878:577::-;39023:17;:15;:17::i;:::-;39015:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39087:29;39108:1;39111;39114;39087:20;:29::i;:::-;39079:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39164:1;39156:5;:9;;;39148:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36759:4;39232:32;;39246:5;39232:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;39210:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;39384:5;39365:24;;36861:10;39365:24;;;;:::i;:::-;39352:9;:37;;39344:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39424:23;39429:10;39441:5;39424:4;:23::i;:::-;38878:577;;;;:::o;36724:39::-;36759:4;36724:39;:::o;39917:326::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36759:4:::1;40016:43;;40030:9;:16;40016:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;39994:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;40146:9;40141:95;40165:9;:16;40161:1;:20;40141:95;;;40203:21;40208:9;40218:1;40208:12;;;;;;;;:::i;:::-;;;;;;;;40222:1;40203:4;:21::i;:::-;40183:3;;;;;:::i;:::-;;;;40141:95;;;;39917:326:::0;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28919:88::-;28993:6;28986:4;:13;;;;;;;;;;;;:::i;:::-;;28919:88;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;38339:531::-;38414:5;38399:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38444:1;38436:5;:9;;;38432:431;;;38462:20;38507:5;38499:14;;38485:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38462:52;;38529:24;38578:5;38570:14;;38556:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38529:56;;38607:8;38602:135;38625:5;38621:9;;:1;:9;;;38602:135;;;38687:1;38679:5;38665:11;;;;;;;;;;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;38656:32;;:3;38660:1;38656:6;;;;;;;;;;:::i;:::-;;;;;;;:32;;;;;38720:1;38707:7;38715:1;38707:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;38632:3;;;;;:::i;:::-;;;;38602:135;;;;38753:32;38764:2;38768:3;38773:7;38753:32;;;;;;;;;;;;:10;:32::i;:::-;38447:350;;38432:431;;;38818:33;38824:2;38842:1;38828:11;;;;;;;;;;;:15;;;;:::i;:::-;38818:33;;38845:1;38818:33;;;;;;;;;;;;:5;:33::i;:::-;38432:431;38339:531;;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;37861:470::-;37979:4;37996:12;38038:10;38021:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;38011:39;;;;;;37996:54;;38111:212;38224:4;38171:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;38139:109;;;;;;38267:1;38287;38307;38111:212;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38081:242;;:13;;;;;;;;;;;:242;;;38061:262;;;37861:470;;;;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;34474:221::-;;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;30318:735::-;30510:1;30496:16;;:2;:16;;;;30488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:14;30569:3;:10;:28;30561:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:16;30674:12;:10;:12::i;:::-;30655:31;;30699:66;30720:8;30738:1;30742:2;30746:3;30751:7;30760:4;30699:20;:66::i;:::-;30783:9;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;30834:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30814:3;;;;;:::i;:::-;;;;30778:103;;;;30934:2;30898:53;;30930:1;30898:53;;30912:8;30898:53;;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;:::-;30477:576;30318:735;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::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:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:137::-;4743:5;4781:6;4768:20;4759:29;;4797:32;4823:5;4797:32;:::i;:::-;4698:137;;;;:::o;4841:135::-;4885:5;4923:6;4910:20;4901:29;;4939:31;4964:5;4939:31;:::i;:::-;4841:135;;;;:::o;4982:329::-;5041:6;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;4982:329;;;;:::o;5317:474::-;5385:6;5393;5442:2;5430:9;5421:7;5417:23;5413:32;5410:119;;;5448:79;;:::i;:::-;5410:119;5568:1;5593:53;5638:7;5629:6;5618:9;5614:22;5593:53;:::i;:::-;5583:63;;5539:117;5695:2;5721:53;5766:7;5757:6;5746:9;5742:22;5721:53;:::i;:::-;5711:63;;5666:118;5317:474;;;;;:::o;5797:1509::-;5951:6;5959;5967;5975;5983;6032:3;6020:9;6011:7;6007:23;6003:33;6000:120;;;6039:79;;:::i;:::-;6000:120;6159:1;6184:53;6229:7;6220:6;6209:9;6205:22;6184:53;:::i;:::-;6174:63;;6130:117;6286:2;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;:::i;:::-;6302:63;;6257:118;6442:2;6431:9;6427:18;6414:32;6473:18;6465:6;6462:30;6459:117;;;6495:79;;:::i;:::-;6459:117;6600:78;6670:7;6661:6;6650:9;6646:22;6600:78;:::i;:::-;6590:88;;6385:303;6755:2;6744:9;6740:18;6727:32;6786:18;6778:6;6775:30;6772:117;;;6808:79;;:::i;:::-;6772:117;6913:78;6983:7;6974:6;6963:9;6959:22;6913:78;:::i;:::-;6903:88;;6698:303;7068:3;7057:9;7053:19;7040:33;7100:18;7092:6;7089:30;7086:117;;;7122:79;;:::i;:::-;7086:117;7227:62;7281:7;7272:6;7261:9;7257:22;7227:62;:::i;:::-;7217:72;;7011:288;5797:1509;;;;;;;;:::o;7312:1089::-;7416:6;7424;7432;7440;7448;7497:3;7485:9;7476:7;7472:23;7468:33;7465:120;;;7504:79;;:::i;:::-;7465:120;7624:1;7649:53;7694:7;7685:6;7674:9;7670:22;7649:53;:::i;:::-;7639:63;;7595:117;7751:2;7777:53;7822:7;7813:6;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;7722:118;7879:2;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7850:118;8007:2;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7978:118;8163:3;8152:9;8148:19;8135:33;8195:18;8187:6;8184:30;8181:117;;;8217:79;;:::i;:::-;8181:117;8322:62;8376:7;8367:6;8356:9;8352:22;8322:62;:::i;:::-;8312:72;;8106:288;7312:1089;;;;;;;;:::o;8407:468::-;8472:6;8480;8529:2;8517:9;8508:7;8504:23;8500:32;8497:119;;;8535:79;;:::i;:::-;8497:119;8655:1;8680:53;8725:7;8716:6;8705:9;8701:22;8680:53;:::i;:::-;8670:63;;8626:117;8782:2;8808:50;8850:7;8841:6;8830:9;8826:22;8808:50;:::i;:::-;8798:60;;8753:115;8407:468;;;;;:::o;8881:474::-;8949:6;8957;9006:2;8994:9;8985:7;8981:23;8977:32;8974:119;;;9012:79;;:::i;:::-;8974:119;9132:1;9157:53;9202:7;9193:6;9182:9;9178:22;9157:53;:::i;:::-;9147:63;;9103:117;9259:2;9285:53;9330:7;9321:6;9310:9;9306:22;9285:53;:::i;:::-;9275:63;;9230:118;8881:474;;;;;:::o;9361:539::-;9445:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:119;;;9500:79;;:::i;:::-;9462:119;9648:1;9637:9;9633:17;9620:31;9678:18;9670:6;9667:30;9664:117;;;9700:79;;:::i;:::-;9664:117;9805:78;9875:7;9866:6;9855:9;9851:22;9805:78;:::i;:::-;9795:88;;9591:302;9361:539;;;;:::o;9906:894::-;10024:6;10032;10081:2;10069:9;10060:7;10056:23;10052:32;10049:119;;;10087:79;;:::i;:::-;10049:119;10235:1;10224:9;10220:17;10207:31;10265:18;10257:6;10254:30;10251:117;;;10287:79;;:::i;:::-;10251:117;10392:78;10462:7;10453:6;10442:9;10438:22;10392:78;:::i;:::-;10382:88;;10178:302;10547:2;10536:9;10532:18;10519:32;10578:18;10570:6;10567:30;10564:117;;;10600:79;;:::i;:::-;10564:117;10705:78;10775:7;10766:6;10755:9;10751:22;10705:78;:::i;:::-;10695:88;;10490:303;9906:894;;;;;:::o;10806:327::-;10864:6;10913:2;10901:9;10892:7;10888:23;10884:32;10881:119;;;10919:79;;:::i;:::-;10881:119;11039:1;11064:52;11108:7;11099:6;11088:9;11084:22;11064:52;:::i;:::-;11054:62;;11010:116;10806:327;;;;:::o;11139:349::-;11208:6;11257:2;11245:9;11236:7;11232:23;11228:32;11225:119;;;11263:79;;:::i;:::-;11225:119;11383:1;11408:63;11463:7;11454:6;11443:9;11439:22;11408:63;:::i;:::-;11398:73;;11354:127;11139:349;;;;:::o;11494:509::-;11563:6;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11766:1;11755:9;11751:17;11738:31;11796:18;11788:6;11785:30;11782:117;;;11818:79;;:::i;:::-;11782:117;11923:63;11978:7;11969:6;11958:9;11954:22;11923:63;:::i;:::-;11913:73;;11709:287;11494:509;;;;:::o;12009:329::-;12068:6;12117:2;12105:9;12096:7;12092:23;12088:32;12085:119;;;12123:79;;:::i;:::-;12085:119;12243:1;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12214:117;12009:329;;;;:::o;12344:327::-;12402:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12577:1;12602:52;12646:7;12637:6;12626:9;12622:22;12602:52;:::i;:::-;12592:62;;12548:116;12344:327;;;;:::o;12677:759::-;12760:6;12768;12776;12784;12833:3;12821:9;12812:7;12808:23;12804:33;12801:120;;;12840:79;;:::i;:::-;12801:120;12960:1;12985:51;13028:7;13019:6;13008:9;13004:22;12985:51;:::i;:::-;12975:61;;12931:115;13085:2;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13056:118;13213:2;13239:53;13284:7;13275:6;13264:9;13260:22;13239:53;:::i;:::-;13229:63;;13184:118;13341:2;13367:52;13411:7;13402:6;13391:9;13387:22;13367:52;:::i;:::-;13357:62;;13312:117;12677:759;;;;;;;:::o;13442:179::-;13511:10;13532:46;13574:3;13566:6;13532:46;:::i;:::-;13610:4;13605:3;13601:14;13587:28;;13442:179;;;;:::o;13627:118::-;13714:24;13732:5;13714:24;:::i;:::-;13709:3;13702:37;13627:118;;:::o;13751:157::-;13856:45;13876:24;13894:5;13876:24;:::i;:::-;13856:45;:::i;:::-;13851:3;13844:58;13751:157;;:::o;13944:732::-;14063:3;14092:54;14140:5;14092:54;:::i;:::-;14162:86;14241:6;14236:3;14162:86;:::i;:::-;14155:93;;14272:56;14322:5;14272:56;:::i;:::-;14351:7;14382:1;14367:284;14392:6;14389:1;14386:13;14367:284;;;14468:6;14462:13;14495:63;14554:3;14539:13;14495:63;:::i;:::-;14488:70;;14581:60;14634:6;14581:60;:::i;:::-;14571:70;;14427:224;14414:1;14411;14407:9;14402:14;;14367:284;;;14371:14;14667:3;14660:10;;14068:608;;;13944:732;;;;:::o;14682:109::-;14763:21;14778:5;14763:21;:::i;:::-;14758:3;14751:34;14682:109;;:::o;14797:118::-;14884:24;14902:5;14884:24;:::i;:::-;14879:3;14872:37;14797:118;;:::o;14921:157::-;15026:45;15046:24;15064:5;15046:24;:::i;:::-;15026:45;:::i;:::-;15021:3;15014:58;14921:157;;:::o;15084:360::-;15170:3;15198:38;15230:5;15198:38;:::i;:::-;15252:70;15315:6;15310:3;15252:70;:::i;:::-;15245:77;;15331:52;15376:6;15371:3;15364:4;15357:5;15353:16;15331:52;:::i;:::-;15408:29;15430:6;15408:29;:::i;:::-;15403:3;15399:39;15392:46;;15174:270;15084:360;;;;:::o;15450:364::-;15538:3;15566:39;15599:5;15566:39;:::i;:::-;15621:71;15685:6;15680:3;15621:71;:::i;:::-;15614:78;;15701:52;15746:6;15741:3;15734:4;15727:5;15723:16;15701:52;:::i;:::-;15778:29;15800:6;15778:29;:::i;:::-;15773:3;15769:39;15762:46;;15542:272;15450:364;;;;:::o;15820:366::-;15962:3;15983:67;16047:2;16042:3;15983:67;:::i;:::-;15976:74;;16059:93;16148:3;16059:93;:::i;:::-;16177:2;16172:3;16168:12;16161:19;;15820:366;;;:::o;16192:::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:402::-;16724:3;16745:85;16827:2;16822:3;16745:85;:::i;:::-;16738:92;;16839:93;16928:3;16839:93;:::i;:::-;16957:2;16952:3;16948:12;16941:19;;16564:402;;;:::o;16972:366::-;17114:3;17135:67;17199:2;17194:3;17135:67;:::i;:::-;17128:74;;17211:93;17300:3;17211:93;:::i;:::-;17329:2;17324:3;17320:12;17313:19;;16972:366;;;:::o;17344:::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17344:366;;;:::o;17716:::-;17858:3;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17955:93;18044:3;17955:93;:::i;:::-;18073:2;18068:3;18064:12;18057:19;;17716:366;;;:::o;18088:::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18088:366;;;:::o;18460:::-;18602:3;18623:67;18687:2;18682:3;18623:67;:::i;:::-;18616:74;;18699:93;18788:3;18699:93;:::i;:::-;18817:2;18812:3;18808:12;18801:19;;18460:366;;;:::o;18832:::-;18974:3;18995:67;19059:2;19054:3;18995:67;:::i;:::-;18988:74;;19071:93;19160:3;19071:93;:::i;:::-;19189:2;19184:3;19180:12;19173:19;;18832:366;;;:::o;19204:::-;19346:3;19367:67;19431:2;19426:3;19367:67;:::i;:::-;19360:74;;19443:93;19532:3;19443:93;:::i;:::-;19561:2;19556:3;19552:12;19545:19;;19204:366;;;:::o;19576:::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19576:366;;;:::o;19948:::-;20090:3;20111:67;20175:2;20170:3;20111:67;:::i;:::-;20104:74;;20187:93;20276:3;20187:93;:::i;:::-;20305:2;20300:3;20296:12;20289:19;;19948:366;;;:::o;20320:::-;20462:3;20483:67;20547:2;20542:3;20483:67;:::i;:::-;20476:74;;20559:93;20648:3;20559:93;:::i;:::-;20677:2;20672:3;20668:12;20661:19;;20320:366;;;:::o;20692:::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20692:366;;;:::o;21064:::-;21206:3;21227:67;21291:2;21286:3;21227:67;:::i;:::-;21220:74;;21303:93;21392:3;21303:93;:::i;:::-;21421:2;21416:3;21412:12;21405:19;;21064:366;;;:::o;21436:::-;21578:3;21599:67;21663:2;21658:3;21599:67;:::i;:::-;21592:74;;21675:93;21764:3;21675:93;:::i;:::-;21793:2;21788:3;21784:12;21777:19;;21436:366;;;:::o;21808:::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:108::-;23373:24;23391:5;23373:24;:::i;:::-;23368:3;23361:37;23296:108;;:::o;23410:118::-;23497:24;23515:5;23497:24;:::i;:::-;23492:3;23485:37;23410:118;;:::o;23534:115::-;23619:23;23636:5;23619:23;:::i;:::-;23614:3;23607:36;23534:115;;:::o;23655:112::-;23738:22;23754:5;23738:22;:::i;:::-;23733:3;23726:35;23655:112;;:::o;23773:256::-;23885:3;23900:75;23971:3;23962:6;23900:75;:::i;:::-;24000:2;23995:3;23991:12;23984:19;;24020:3;24013:10;;23773:256;;;;:::o;24035:522::-;24248:3;24270:148;24414:3;24270:148;:::i;:::-;24263:155;;24428:75;24499:3;24490:6;24428:75;:::i;:::-;24528:2;24523:3;24519:12;24512:19;;24548:3;24541:10;;24035:522;;;;:::o;24563:222::-;24656:4;24694:2;24683:9;24679:18;24671:26;;24707:71;24775:1;24764:9;24760:17;24751:6;24707:71;:::i;:::-;24563:222;;;;:::o;24791:1053::-;25114:4;25152:3;25141:9;25137:19;25129:27;;25166:71;25234:1;25223:9;25219:17;25210:6;25166:71;:::i;:::-;25247:72;25315:2;25304:9;25300:18;25291:6;25247:72;:::i;:::-;25366:9;25360:4;25356:20;25351:2;25340:9;25336:18;25329:48;25394:108;25497:4;25488:6;25394:108;:::i;:::-;25386:116;;25549:9;25543:4;25539:20;25534:2;25523:9;25519:18;25512:48;25577:108;25680:4;25671:6;25577:108;:::i;:::-;25569:116;;25733:9;25727:4;25723:20;25717:3;25706:9;25702:19;25695:49;25761:76;25832:4;25823:6;25761:76;:::i;:::-;25753:84;;24791:1053;;;;;;;;:::o;25850:751::-;26073:4;26111:3;26100:9;26096:19;26088:27;;26125:71;26193:1;26182:9;26178:17;26169:6;26125:71;:::i;:::-;26206:72;26274:2;26263:9;26259:18;26250:6;26206:72;:::i;:::-;26288;26356:2;26345:9;26341:18;26332:6;26288:72;:::i;:::-;26370;26438:2;26427:9;26423:18;26414:6;26370:72;:::i;:::-;26490:9;26484:4;26480:20;26474:3;26463:9;26459:19;26452:49;26518:76;26589:4;26580:6;26518:76;:::i;:::-;26510:84;;25850:751;;;;;;;;:::o;26607:373::-;26750:4;26788:2;26777:9;26773:18;26765:26;;26837:9;26831:4;26827:20;26823:1;26812:9;26808:17;26801:47;26865:108;26968:4;26959:6;26865:108;:::i;:::-;26857:116;;26607:373;;;;:::o;26986:634::-;27207:4;27245:2;27234:9;27230:18;27222:26;;27294:9;27288:4;27284:20;27280:1;27269:9;27265:17;27258:47;27322:108;27425:4;27416:6;27322:108;:::i;:::-;27314:116;;27477:9;27471:4;27467:20;27462:2;27451:9;27447:18;27440:48;27505:108;27608:4;27599:6;27505:108;:::i;:::-;27497:116;;26986:634;;;;;:::o;27626:210::-;27713:4;27751:2;27740:9;27736:18;27728:26;;27764:65;27826:1;27815:9;27811:17;27802:6;27764:65;:::i;:::-;27626:210;;;;:::o;27842:545::-;28015:4;28053:3;28042:9;28038:19;28030:27;;28067:71;28135:1;28124:9;28120:17;28111:6;28067:71;:::i;:::-;28148:68;28212:2;28201:9;28197:18;28188:6;28148:68;:::i;:::-;28226:72;28294:2;28283:9;28279:18;28270:6;28226:72;:::i;:::-;28308;28376:2;28365:9;28361:18;28352:6;28308:72;:::i;:::-;27842:545;;;;;;;:::o;28393:313::-;28506:4;28544:2;28533:9;28529:18;28521:26;;28593:9;28587:4;28583:20;28579:1;28568:9;28564:17;28557:47;28621:78;28694:4;28685:6;28621:78;:::i;:::-;28613:86;;28393:313;;;;:::o;28712:419::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28965:9;28959:4;28955:20;28951:1;28940:9;28936:17;28929:47;28993:131;29119:4;28993:131;:::i;:::-;28985:139;;28712:419;;;:::o;29137:::-;29303:4;29341:2;29330:9;29326:18;29318:26;;29390:9;29384:4;29380:20;29376:1;29365:9;29361:17;29354:47;29418:131;29544:4;29418:131;:::i;:::-;29410:139;;29137:419;;;:::o;29562:::-;29728:4;29766:2;29755:9;29751:18;29743:26;;29815:9;29809:4;29805:20;29801:1;29790:9;29786:17;29779:47;29843:131;29969:4;29843:131;:::i;:::-;29835:139;;29562:419;;;:::o;29987:::-;30153:4;30191:2;30180:9;30176:18;30168:26;;30240:9;30234:4;30230:20;30226:1;30215:9;30211:17;30204:47;30268:131;30394:4;30268:131;:::i;:::-;30260:139;;29987:419;;;:::o;30412:::-;30578:4;30616:2;30605:9;30601:18;30593:26;;30665:9;30659:4;30655:20;30651:1;30640:9;30636:17;30629:47;30693:131;30819:4;30693:131;:::i;:::-;30685:139;;30412:419;;;:::o;30837:::-;31003:4;31041:2;31030:9;31026:18;31018:26;;31090:9;31084:4;31080:20;31076:1;31065:9;31061:17;31054:47;31118:131;31244:4;31118:131;:::i;:::-;31110:139;;30837:419;;;:::o;31262:::-;31428:4;31466:2;31455:9;31451:18;31443:26;;31515:9;31509:4;31505:20;31501:1;31490:9;31486:17;31479:47;31543:131;31669:4;31543:131;:::i;:::-;31535:139;;31262:419;;;:::o;31687:::-;31853:4;31891:2;31880:9;31876:18;31868:26;;31940:9;31934:4;31930:20;31926:1;31915:9;31911:17;31904:47;31968:131;32094:4;31968:131;:::i;:::-;31960:139;;31687:419;;;:::o;32112:::-;32278:4;32316:2;32305:9;32301:18;32293:26;;32365:9;32359:4;32355:20;32351:1;32340:9;32336:17;32329:47;32393:131;32519:4;32393:131;:::i;:::-;32385:139;;32112:419;;;:::o;32537:::-;32703:4;32741:2;32730:9;32726:18;32718:26;;32790:9;32784:4;32780:20;32776:1;32765:9;32761:17;32754:47;32818:131;32944:4;32818:131;:::i;:::-;32810:139;;32537:419;;;:::o;32962:::-;33128:4;33166:2;33155:9;33151:18;33143:26;;33215:9;33209:4;33205:20;33201:1;33190:9;33186:17;33179:47;33243:131;33369:4;33243:131;:::i;:::-;33235:139;;32962:419;;;:::o;33387:::-;33553:4;33591:2;33580:9;33576:18;33568:26;;33640:9;33634:4;33630:20;33626:1;33615:9;33611:17;33604:47;33668:131;33794:4;33668:131;:::i;:::-;33660:139;;33387:419;;;:::o;33812:::-;33978:4;34016:2;34005:9;34001:18;33993:26;;34065:9;34059:4;34055:20;34051:1;34040:9;34036:17;34029:47;34093:131;34219:4;34093:131;:::i;:::-;34085:139;;33812:419;;;:::o;34237:::-;34403:4;34441:2;34430:9;34426:18;34418:26;;34490:9;34484:4;34480:20;34476:1;34465:9;34461:17;34454:47;34518:131;34644:4;34518:131;:::i;:::-;34510:139;;34237:419;;;:::o;34662:::-;34828:4;34866:2;34855:9;34851:18;34843:26;;34915:9;34909:4;34905:20;34901:1;34890:9;34886:17;34879:47;34943:131;35069:4;34943:131;:::i;:::-;34935:139;;34662:419;;;:::o;35087:::-;35253:4;35291:2;35280:9;35276:18;35268:26;;35340:9;35334:4;35330:20;35326:1;35315:9;35311:17;35304:47;35368:131;35494:4;35368:131;:::i;:::-;35360:139;;35087:419;;;:::o;35512:::-;35678:4;35716:2;35705:9;35701:18;35693:26;;35765:9;35759:4;35755:20;35751:1;35740:9;35736:17;35729:47;35793:131;35919:4;35793:131;:::i;:::-;35785:139;;35512:419;;;:::o;35937:::-;36103:4;36141:2;36130:9;36126:18;36118:26;;36190:9;36184:4;36180:20;36176:1;36165:9;36161:17;36154:47;36218:131;36344:4;36218:131;:::i;:::-;36210:139;;35937:419;;;:::o;36362:::-;36528:4;36566:2;36555:9;36551:18;36543:26;;36615:9;36609:4;36605:20;36601:1;36590:9;36586:17;36579:47;36643:131;36769:4;36643:131;:::i;:::-;36635:139;;36362:419;;;:::o;36787:222::-;36880:4;36918:2;36907:9;36903:18;36895:26;;36931:71;36999:1;36988:9;36984:17;36975:6;36931:71;:::i;:::-;36787:222;;;;:::o;37015:332::-;37136:4;37174:2;37163:9;37159:18;37151:26;;37187:71;37255:1;37244:9;37240:17;37231:6;37187:71;:::i;:::-;37268:72;37336:2;37325:9;37321:18;37312:6;37268:72;:::i;:::-;37015:332;;;;;:::o;37353:218::-;37444:4;37482:2;37471:9;37467:18;37459:26;;37495:69;37561:1;37550:9;37546:17;37537:6;37495:69;:::i;:::-;37353:218;;;;:::o;37577:129::-;37611:6;37638:20;;:::i;:::-;37628:30;;37667:33;37695:4;37687:6;37667:33;:::i;:::-;37577:129;;;:::o;37712:75::-;37745:6;37778:2;37772:9;37762:19;;37712:75;:::o;37793:311::-;37870:4;37960:18;37952:6;37949:30;37946:56;;;37982:18;;:::i;:::-;37946:56;38032:4;38024:6;38020:17;38012:25;;38092:4;38086;38082:15;38074:23;;37793:311;;;:::o;38110:::-;38187:4;38277:18;38269:6;38266:30;38263:56;;;38299:18;;:::i;:::-;38263:56;38349:4;38341:6;38337:17;38329:25;;38409:4;38403;38399:15;38391:23;;38110:311;;;:::o;38427:307::-;38488:4;38578:18;38570:6;38567:30;38564:56;;;38600:18;;:::i;:::-;38564:56;38638:29;38660:6;38638:29;:::i;:::-;38630:37;;38722:4;38716;38712:15;38704:23;;38427:307;;;:::o;38740:308::-;38802:4;38892:18;38884:6;38881:30;38878:56;;;38914:18;;:::i;:::-;38878:56;38952:29;38974:6;38952:29;:::i;:::-;38944:37;;39036:4;39030;39026:15;39018:23;;38740:308;;;:::o;39054:132::-;39121:4;39144:3;39136:11;;39174:4;39169:3;39165:14;39157:22;;39054:132;;;:::o;39192:114::-;39259:6;39293:5;39287:12;39277:22;;39192:114;;;:::o;39312:98::-;39363:6;39397:5;39391:12;39381:22;;39312:98;;;:::o;39416:99::-;39468:6;39502:5;39496:12;39486:22;;39416:99;;;:::o;39521:113::-;39591:4;39623;39618:3;39614:14;39606:22;;39521:113;;;:::o;39640:184::-;39739:11;39773:6;39768:3;39761:19;39813:4;39808:3;39804:14;39789:29;;39640:184;;;;:::o;39830:168::-;39913:11;39947:6;39942:3;39935:19;39987:4;39982:3;39978:14;39963:29;;39830:168;;;;:::o;40004:169::-;40088:11;40122:6;40117:3;40110:19;40162:4;40157:3;40153:14;40138:29;;40004:169;;;;:::o;40179:148::-;40281:11;40318:3;40303:18;;40179:148;;;;:::o;40333:305::-;40373:3;40392:20;40410:1;40392:20;:::i;:::-;40387:25;;40426:20;40444:1;40426:20;:::i;:::-;40421:25;;40580:1;40512:66;40508:74;40505:1;40502:81;40499:107;;;40586:18;;:::i;:::-;40499:107;40630:1;40627;40623:9;40616:16;;40333:305;;;;:::o;40644:246::-;40683:3;40702:19;40719:1;40702:19;:::i;:::-;40697:24;;40735:19;40752:1;40735:19;:::i;:::-;40730:24;;40832:1;40820:10;40816:18;40813:1;40810:25;40807:51;;;40838:18;;:::i;:::-;40807:51;40882:1;40879;40875:9;40868:16;;40644:246;;;;:::o;40896:185::-;40936:1;40953:20;40971:1;40953:20;:::i;:::-;40948:25;;40987:20;41005:1;40987:20;:::i;:::-;40982:25;;41026:1;41016:35;;41031:18;;:::i;:::-;41016:35;41073:1;41070;41066:9;41061:14;;40896:185;;;;:::o;41087:348::-;41127:7;41150:20;41168:1;41150:20;:::i;:::-;41145:25;;41184:20;41202:1;41184:20;:::i;:::-;41179:25;;41372:1;41304:66;41300:74;41297:1;41294:81;41289:1;41282:9;41275:17;41271:105;41268:131;;;41379:18;;:::i;:::-;41268:131;41427:1;41424;41420:9;41409:20;;41087:348;;;;:::o;41441:191::-;41481:4;41501:20;41519:1;41501:20;:::i;:::-;41496:25;;41535:20;41553:1;41535:20;:::i;:::-;41530:25;;41574:1;41571;41568:8;41565:34;;;41579:18;;:::i;:::-;41565:34;41624:1;41621;41617:9;41609:17;;41441:191;;;;:::o;41638:188::-;41677:4;41697:19;41714:1;41697:19;:::i;:::-;41692:24;;41730:19;41747:1;41730:19;:::i;:::-;41725:24;;41768:1;41765;41762:8;41759:34;;;41773:18;;:::i;:::-;41759:34;41818:1;41815;41811:9;41803:17;;41638:188;;;;:::o;41832:96::-;41869:7;41898:24;41916:5;41898:24;:::i;:::-;41887:35;;41832:96;;;:::o;41934:90::-;41968:7;42011:5;42004:13;41997:21;41986:32;;41934:90;;;:::o;42030:77::-;42067:7;42096:5;42085:16;;42030:77;;;:::o;42113:149::-;42149:7;42189:66;42182:5;42178:78;42167:89;;42113:149;;;:::o;42268:126::-;42305:7;42345:42;42338:5;42334:54;42323:65;;42268:126;;;:::o;42400:77::-;42437:7;42466:5;42455:16;;42400:77;;;:::o;42483:93::-;42519:7;42559:10;42552:5;42548:22;42537:33;;42483:93;;;:::o;42582:86::-;42617:7;42657:4;42650:5;42646:16;42635:27;;42582:86;;;:::o;42674:154::-;42758:6;42753:3;42748;42735:30;42820:1;42811:6;42806:3;42802:16;42795:27;42674:154;;;:::o;42834:307::-;42902:1;42912:113;42926:6;42923:1;42920:13;42912:113;;;43011:1;43006:3;43002:11;42996:18;42992:1;42987:3;42983:11;42976:39;42948:2;42945:1;42941:10;42936:15;;42912:113;;;43043:6;43040:1;43037:13;43034:101;;;43123:1;43114:6;43109:3;43105:16;43098:27;43034:101;42883:258;42834:307;;;:::o;43147:320::-;43191:6;43228:1;43222:4;43218:12;43208:22;;43275:1;43269:4;43265:12;43296:18;43286:81;;43352:4;43344:6;43340:17;43330:27;;43286:81;43414:2;43406:6;43403:14;43383:18;43380:38;43377:84;;;43433:18;;:::i;:::-;43377:84;43198:269;43147:320;;;:::o;43473:281::-;43556:27;43578:4;43556:27;:::i;:::-;43548:6;43544:40;43686:6;43674:10;43671:22;43650:18;43638:10;43635:34;43632:62;43629:88;;;43697:18;;:::i;:::-;43629:88;43737:10;43733:2;43726:22;43516:238;43473:281;;:::o;43760:233::-;43799:3;43822:24;43840:5;43822:24;:::i;:::-;43813:33;;43868:66;43861:5;43858:77;43855:103;;;43938:18;;:::i;:::-;43855:103;43985:1;43978:5;43974:13;43967:20;;43760:233;;;:::o;43999:175::-;44037:3;44060:23;44077:5;44060:23;:::i;:::-;44051:32;;44105:10;44098:5;44095:21;44092:47;;;44119:18;;:::i;:::-;44092:47;44166:1;44159:5;44155:13;44148:20;;43999:175;;;:::o;44180:100::-;44219:7;44248:26;44268:5;44248:26;:::i;:::-;44237:37;;44180:100;;;:::o;44286:79::-;44325:7;44354:5;44343:16;;44286:79;;;:::o;44371:94::-;44410:7;44439:20;44453:5;44439:20;:::i;:::-;44428:31;;44371:94;;;:::o;44471:180::-;44519:77;44516:1;44509:88;44616:4;44613:1;44606:15;44640:4;44637:1;44630:15;44657:180;44705:77;44702:1;44695:88;44802:4;44799:1;44792:15;44826:4;44823:1;44816:15;44843:180;44891:77;44888:1;44881:88;44988:4;44985:1;44978:15;45012:4;45009:1;45002:15;45029:180;45077:77;45074:1;45067:88;45174:4;45171:1;45164:15;45198:4;45195:1;45188:15;45215:180;45263:77;45260:1;45253:88;45360:4;45357:1;45350:15;45384:4;45381:1;45374:15;45401:183;45436:3;45474:1;45456:16;45453:23;45450:128;;;45512:1;45509;45506;45491:23;45534:34;45565:1;45559:8;45534:34;:::i;:::-;45527:41;;45450:128;45401:183;:::o;45590:117::-;45699:1;45696;45689:12;45713:117;45822:1;45819;45812:12;45836:117;45945:1;45942;45935:12;45959:117;46068:1;46065;46058:12;46082:117;46191:1;46188;46181:12;46205:102;46246:6;46297:2;46293:7;46288:2;46281:5;46277:14;46273:28;46263:38;;46205:102;;;:::o;46313:94::-;46346:8;46394:5;46390:2;46386:14;46365:35;;46313:94;;;:::o;46413:106::-;46457:8;46506:5;46501:3;46497:15;46476:36;;46413:106;;;:::o;46525:239::-;46665:34;46661:1;46653:6;46649:14;46642:58;46734:22;46729:2;46721:6;46717:15;46710:47;46525:239;:::o;46770:227::-;46910:34;46906:1;46898:6;46894:14;46887:58;46979:10;46974:2;46966:6;46962:15;46955:35;46770:227;:::o;47003:214::-;47143:66;47139:1;47131:6;47127:14;47120:90;47003:214;:::o;47223:230::-;47363:34;47359:1;47351:6;47347:14;47340:58;47432:13;47427:2;47419:6;47415:15;47408:38;47223:230;:::o;47459:225::-;47599:34;47595:1;47587:6;47583:14;47576:58;47668:8;47663:2;47655:6;47651:15;47644:33;47459:225;:::o;47690:228::-;47830:34;47826:1;47818:6;47814:14;47807:58;47899:11;47894:2;47886:6;47882:15;47875:36;47690:228;:::o;47924:176::-;48064:28;48060:1;48052:6;48048:14;48041:52;47924:176;:::o;48106:179::-;48246:31;48242:1;48234:6;48230:14;48223:55;48106:179;:::o;48291:167::-;48431:19;48427:1;48419:6;48415:14;48408:43;48291:167;:::o;48464:224::-;48604:34;48600:1;48592:6;48588:14;48581:58;48673:7;48668:2;48660:6;48656:15;48649:32;48464:224;:::o;48694:237::-;48834:34;48830:1;48822:6;48818:14;48811:58;48903:20;48898:2;48890:6;48886:15;48879:45;48694:237;:::o;48937:173::-;49077:25;49073:1;49065:6;49061:14;49054:49;48937:173;:::o;49116:229::-;49256:34;49252:1;49244:6;49240:14;49233:58;49325:12;49320:2;49312:6;49308:15;49301:37;49116:229;:::o;49351:228::-;49491:34;49487:1;49479:6;49475:14;49468:58;49560:11;49555:2;49547:6;49543:15;49536:36;49351:228;:::o;49585:182::-;49725:34;49721:1;49713:6;49709:14;49702:58;49585:182;:::o;49773:166::-;49913:18;49909:1;49901:6;49897:14;49890:42;49773:166;:::o;49945:228::-;50085:34;50081:1;50073:6;50069:14;50062:58;50154:11;50149:2;50141:6;50137:15;50130:36;49945:228;:::o;50179:::-;50319:34;50315:1;50307:6;50303:14;50296:58;50388:11;50383:2;50375:6;50371:15;50364:36;50179:228;:::o;50413:227::-;50553:34;50549:1;50541:6;50537:14;50530:58;50622:10;50617:2;50609:6;50605:15;50598:35;50413:227;:::o;50646:220::-;50786:34;50782:1;50774:6;50770:14;50763:58;50855:3;50850:2;50842:6;50838:15;50831:28;50646:220;:::o;50872:711::-;50911:3;50949:4;50931:16;50928:26;50925:39;;;50957:5;;50925:39;50986:20;;:::i;:::-;51061:1;51043:16;51039:24;51036:1;51030:4;51015:49;51094:4;51088:11;51193:16;51186:4;51178:6;51174:17;51171:39;51138:18;51130:6;51127:30;51111:113;51108:146;;;51239:5;;;;51108:146;51285:6;51279:4;51275:17;51321:3;51315:10;51348:18;51340:6;51337:30;51334:43;;;51370:5;;;;;;51334:43;51418:6;51411:4;51406:3;51402:14;51398:27;51477:1;51459:16;51455:24;51449:4;51445:35;51440:3;51437:44;51434:57;;;51484:5;;;;;;;51434:57;51501;51549:6;51543:4;51539:17;51531:6;51527:30;51521:4;51501:57;:::i;:::-;51574:3;51567:10;;50915:668;;;;;50872:711;;:::o;51589:122::-;51662:24;51680:5;51662:24;:::i;:::-;51655:5;51652:35;51642:63;;51701:1;51698;51691:12;51642:63;51589:122;:::o;51717:116::-;51787:21;51802:5;51787:21;:::i;:::-;51780:5;51777:32;51767:60;;51823:1;51820;51813:12;51767:60;51717:116;:::o;51839:122::-;51912:24;51930:5;51912:24;:::i;:::-;51905:5;51902:35;51892:63;;51951:1;51948;51941:12;51892:63;51839:122;:::o;51967:120::-;52039:23;52056:5;52039:23;:::i;:::-;52032:5;52029:34;52019:62;;52077:1;52074;52067:12;52019:62;51967:120;:::o;52093:122::-;52166:24;52184:5;52166:24;:::i;:::-;52159:5;52156:35;52146:63;;52205:1;52202;52195:12;52146:63;52093:122;:::o;52221:120::-;52293:23;52310:5;52293:23;:::i;:::-;52286:5;52283:34;52273:62;;52331:1;52328;52321:12;52273:62;52221:120;:::o;52347:118::-;52418:22;52434:5;52418:22;:::i;:::-;52411:5;52408:33;52398:61;;52455:1;52452;52445:12;52398:61;52347:118;:::o

Swarm Source

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