ETH Price: $3,477.51 (+0.83%)

Token

RIVETING X LONG LOST (RXLL)
 

Overview

Max Total Supply

326 RXLL

Holders

307

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xde4945118e33417aa2bb4293e8ae7fd378dbcb00
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:
RIVETINGXLONGLOST

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-25
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



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



pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol



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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol



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(!locked, "Cannot transfer - currently locked");
        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(!locked, "Cannot transfer - currently locked");
        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].
     */

    bool public locked = false;

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

pragma solidity ^0.8.0;

contract RIVETINGXLONGLOST is ERC1155, Ownable {
    
  string public name;
  string public symbol;
  bytes32 public whitelistMerkleRoot;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "RIVETING X LONG LOST";
    symbol = "RXLL";
  }

  //merkletree 
    function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) {
        return MerkleProof.verify(proof, whitelistMerkleRoot, leaf);
    }

    function _leaf(address account) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner {
        whitelistMerkleRoot = _whitelistMerkleRoot;
    }


  function mintTo(address[] memory _to, uint _id, uint _amount) external onlyOwner {
    for (uint256 i = 0; i < _to.length; i++) {
        _mint(_to[i], _id, _amount, "");
    }
  }

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

  function mintWhitelist(address _to, uint _id, uint _amount, bytes32[] calldata proof) external {
    require(_verify(_leaf(msg.sender), proof), "Invalid proof");
    _mint(_to, _id, _amount, "");
  }

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

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

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

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

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

  function setLocked(bool _locked) external onlyOwner {
        locked = _locked;
    }

    function lockCheck() public view returns (bool) {
        return locked;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_locked","type":"bool"}],"name":"setLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]

60806040526000600360006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051806020016040528060008152506200004e816200010360201b60201c565b506200006f620000636200011860201b60201c565b6200012060201b60201c565b6040518060400160405280601481526020017f5249564554494e472058204c4f4e47204c4f535400000000000000000000000081525060049081620000b5919062000460565b506040518060400160405280600481526020017f52584c4c0000000000000000000000000000000000000000000000000000000081525060059081620000fc919062000460565b5062000547565b806002908162000114919062000460565b5050565b600033905090565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b61495980620005576000396000f3fe608060405234801561001057600080fd5b50600436106101a75760003560e01c806383ca4b6f116100f9578063bd32fb6611610097578063d81d0a1511610071578063d81d0a151461048e578063e985e9c5146104aa578063f242432a146104da578063f2fde38b146104f6576101a7565b8063bd32fb6614610424578063c87b56dd14610440578063cf30901214610470576101a7565b806395d89b41116100d357806395d89b41146103b0578063a22cb465146103ce578063aa98e0c6146103ea578063b390c0ab14610408576101a7565b806383ca4b6f1461035a578063862440e2146103765780638da5cb5b14610392576101a7565b8063211e28b6116101665780634e1273f4116101405780634e1273f4146102e6578063510f410414610316578063715018a61461033257806380ce3a521461033c576101a7565b8063211e28b6146102925780632bee43cf146102ae5780632eb2c2d6146102ca576101a7565b8062aa0b48146101ac578062fdd58e146101c857806301ffc9a7146101f857806306fdde03146102285780630e89341c14610246578063156e29f614610276575b600080fd5b6101c660048036038101906101c19190612b33565b610512565b005b6101e260048036038101906101dd9190612bbb565b6105c6565b6040516101ef9190612c0a565b60405180910390f35b610212600480360381019061020d9190612c7d565b61068e565b60405161021f9190612cc5565b60405180910390f35b610230610770565b60405161023d9190612d70565b60405180910390f35b610260600480360381019061025b9190612d92565b6107fe565b60405161026d9190612d70565b60405180910390f35b610290600480360381019061028b9190612dbf565b6108a3565b005b6102ac60048036038101906102a79190612e3e565b61093f565b005b6102c860048036038101906102c39190612fa9565b6109d8565b005b6102e460048036038101906102df9190613190565b610aae565b005b61030060048036038101906102fb919061325f565b610b9f565b60405161030d9190613395565b60405180910390f35b610330600480360381019061032b91906133b7565b610cb8565b005b61033a610d61565b005b610344610de9565b6040516103519190612cc5565b60405180910390f35b610374600480360381019061036f91906134a2565b610e00565b005b610390600480360381019061038b91906135bb565b610e0f565b005b61039a610ee8565b6040516103a79190613626565b60405180910390f35b6103b8610f12565b6040516103c59190612d70565b60405180910390f35b6103e860048036038101906103e39190613641565b610fa0565b005b6103f2610fb6565b6040516103ff919061369a565b60405180910390f35b610422600480360381019061041d91906136b5565b610fbc565b005b61043e60048036038101906104399190613721565b610fcb565b005b61045a60048036038101906104559190612d92565b611051565b6040516104679190612d70565b60405180910390f35b6104786110f1565b6040516104859190612cc5565b60405180910390f35b6104a860048036038101906104a3919061374e565b611104565b005b6104c460048036038101906104bf91906137d9565b6111a0565b6040516104d19190612cc5565b60405180910390f35b6104f460048036038101906104ef9190613819565b611234565b005b610510600480360381019061050b91906138b0565b611325565b005b61056561051e3361141c565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505061144c565b6105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90613929565b60405180910390fd5b6105bf85858560405180602001604052806000815250611463565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d906139bb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750610768826115f8565b5b9050919050565b6004805461077d90613a0a565b80601f01602080910402602001604051908101604052809291908181526020018280546107a990613a0a565b80156107f65780601f106107cb576101008083540402835291602001916107f6565b820191906000526020600020905b8154815290600101906020018083116107d957829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461081e90613a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90613a0a565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b50505050509050919050565b6108ab611662565b73ffffffffffffffffffffffffffffffffffffffff166108c9610ee8565b73ffffffffffffffffffffffffffffffffffffffff161461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091690613a87565b60405180910390fd5b61093a83838360405180602001604052806000815250611463565b505050565b610947611662565b73ffffffffffffffffffffffffffffffffffffffff16610965610ee8565b73ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290613a87565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6109e0611662565b73ffffffffffffffffffffffffffffffffffffffff166109fe610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613a87565b60405180910390fd5b60005b8351811015610aa857610a95848281518110610a7657610a75613aa7565b5b6020026020010151848460405180602001604052806000815250611463565b8080610aa090613b05565b915050610a57565b50505050565b600360009054906101000a900460ff1615610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613bbf565b60405180910390fd5b610b06611662565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4c5750610b4b85610b46611662565b6111a0565b5b610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613c51565b60405180910390fd5b610b98858585858561166a565b5050505050565b60608151835114610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613ce3565b60405180910390fd5b6000835167ffffffffffffffff811115610c0257610c01612e6b565b5b604051908082528060200260200182016040528015610c305781602001602082028036833780820191505090505b50905060005b8451811015610cad57610c7d858281518110610c5557610c54613aa7565b5b6020026020010151858381518110610c7057610c6f613aa7565b5b60200260200101516105c6565b828281518110610c9057610c8f613aa7565b5b60200260200101818152505080610ca690613b05565b9050610c36565b508091505092915050565b610cc0611662565b73ffffffffffffffffffffffffffffffffffffffff16610cde610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90613a87565b60405180910390fd5b610d3f85858561197d565b610d5a85838360405180602001604052806000815250611c2d565b5050505050565b610d69611662565b73ffffffffffffffffffffffffffffffffffffffff16610d87610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613a87565b60405180910390fd5b610de76000611e4a565b565b6000600360009054906101000a900460ff16905090565b610e0b33838361197d565b5050565b610e17611662565b73ffffffffffffffffffffffffffffffffffffffff16610e35610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613a87565b60405180910390fd5b80600760008481526020019081526020016000209081610eab9190613eaf565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610edc9190612d70565b60405180910390a25050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610f1f90613a0a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4b90613a0a565b8015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b505050505081565b610fb2610fab611662565b8383611f10565b5050565b60065481565b610fc733838361207c565b5050565b610fd3611662565b73ffffffffffffffffffffffffffffffffffffffff16610ff1610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90613a87565b60405180910390fd5b8060068190555050565b6007602052806000526040600020600091509050805461107090613a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461109c90613a0a565b80156110e95780601f106110be576101008083540402835291602001916110e9565b820191906000526020600020905b8154815290600101906020018083116110cc57829003601f168201915b505050505081565b600360009054906101000a900460ff1681565b61110c611662565b73ffffffffffffffffffffffffffffffffffffffff1661112a610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613a87565b60405180910390fd5b61119b83838360405180602001604052806000815250611c2d565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600360009054906101000a900460ff1615611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90613bbf565b60405180910390fd5b61128c611662565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112d257506112d1856112cc611662565b6111a0565b5b611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613ff3565b60405180910390fd5b61131e8585858585612298565b5050505050565b61132d611662565b73ffffffffffffffffffffffffffffffffffffffff1661134b610ee8565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613a87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790614085565b60405180910390fd5b61141981611e4a565b50565b60008160405160200161142f91906140ed565b604051602081830303815290604052805190602001209050919050565b600061145b8260065485612519565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c99061417a565b60405180910390fd5b60006114dc611662565b90506114fd816000876114ee88612530565b6114f788612530565b876125aa565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155c919061419a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516115da9291906141ce565b60405180910390a46115f1816000878787876125b2565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b81518351146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614269565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906142fb565b60405180910390fd5b6000611727611662565b90506117378187878787876125aa565b60005b84518110156118e857600085828151811061175857611757613aa7565b5b60200260200101519050600085838151811061177757611776613aa7565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061438d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cd919061419a565b92505081905550505050806118e190613b05565b905061173a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195f9291906143ad565b60405180910390a4611975818787878787612789565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390614456565b60405180910390fd5b8051825114611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614269565b60405180910390fd5b6000611a3a611662565b9050611a5a818560008686604051806020016040528060008152506125aa565b60005b8351811015611ba7576000848281518110611a7b57611a7a613aa7565b5b602002602001015190506000848381518110611a9a57611a99613aa7565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b32906144e8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b9f90613b05565b915050611a5d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611c1f9291906143ad565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c939061417a565b60405180910390fd5b8151835114611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614269565b60405180910390fd5b6000611cea611662565b9050611cfb816000878787876125aa565b60005b8451811015611db457838181518110611d1a57611d19613aa7565b5b6020026020010151600080878481518110611d3857611d37613aa7565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9a919061419a565b925050819055508080611dac90613b05565b915050611cfe565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e2c9291906143ad565b60405180910390a4611e4381600087878787612789565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061457a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161206f9190612cc5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614456565b60405180910390fd5b60006120f5611662565b90506121258185600061210787612530565b61211087612530565b604051806020016040528060008152506125aa565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b3906144e8565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516122899291906141ce565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906142fb565b60405180910390fd5b6000612311611662565b905061233181878761232288612530565b61232b88612530565b876125aa565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf9061438d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247d919061419a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124fa9291906141ce565b60405180910390a46125108288888888886125b2565b50505050505050565b6000826125268584612960565b1490509392505050565b60606000600167ffffffffffffffff81111561254f5761254e612e6b565b5b60405190808252806020026020018201604052801561257d5781602001602082028036833780820191505090505b509050828160008151811061259557612594613aa7565b5b60200260200101818152505080915050919050565b505050505050565b6125d18473ffffffffffffffffffffffffffffffffffffffff16612a13565b15612781578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016126179594939291906145ef565b6020604051808303816000875af192505050801561265357506040513d601f19601f82011682018060405250810190612650919061465e565b60015b6126f85761265f614698565b806308c379a0036126bb57506126736146ba565b8061267e57506126bd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190612d70565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef906147bc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461277f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127769061484e565b60405180910390fd5b505b505050505050565b6127a88473ffffffffffffffffffffffffffffffffffffffff16612a13565b15612958578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127ee95949392919061486e565b6020604051808303816000875af192505050801561282a57506040513d601f19601f82011682018060405250810190612827919061465e565b60015b6128cf57612836614698565b806308c379a003612892575061284a6146ba565b806128555750612894565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128899190612d70565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906147bc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d9061484e565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612a0857600085828151811061298757612986613aa7565b5b602002602001015190508083116129c85782816040516020016129ab9291906148f7565b6040516020818303038152906040528051906020012092506129f4565b80836040516020016129db9291906148f7565b6040516020818303038152906040528051906020012092505b508080612a0090613b05565b915050612969565b508091505092915050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6582612a3a565b9050919050565b612a7581612a5a565b8114612a8057600080fd5b50565b600081359050612a9281612a6c565b92915050565b6000819050919050565b612aab81612a98565b8114612ab657600080fd5b50565b600081359050612ac881612aa2565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612af357612af2612ace565b5b8235905067ffffffffffffffff811115612b1057612b0f612ad3565b5b602083019150836020820283011115612b2c57612b2b612ad8565b5b9250929050565b600080600080600060808688031215612b4f57612b4e612a30565b5b6000612b5d88828901612a83565b9550506020612b6e88828901612ab9565b9450506040612b7f88828901612ab9565b935050606086013567ffffffffffffffff811115612ba057612b9f612a35565b5b612bac88828901612add565b92509250509295509295909350565b60008060408385031215612bd257612bd1612a30565b5b6000612be085828601612a83565b9250506020612bf185828601612ab9565b9150509250929050565b612c0481612a98565b82525050565b6000602082019050612c1f6000830184612bfb565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c5a81612c25565b8114612c6557600080fd5b50565b600081359050612c7781612c51565b92915050565b600060208284031215612c9357612c92612a30565b5b6000612ca184828501612c68565b91505092915050565b60008115159050919050565b612cbf81612caa565b82525050565b6000602082019050612cda6000830184612cb6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d1a578082015181840152602081019050612cff565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d4282612ce0565b612d4c8185612ceb565b9350612d5c818560208601612cfc565b612d6581612d26565b840191505092915050565b60006020820190508181036000830152612d8a8184612d37565b905092915050565b600060208284031215612da857612da7612a30565b5b6000612db684828501612ab9565b91505092915050565b600080600060608486031215612dd857612dd7612a30565b5b6000612de686828701612a83565b9350506020612df786828701612ab9565b9250506040612e0886828701612ab9565b9150509250925092565b612e1b81612caa565b8114612e2657600080fd5b50565b600081359050612e3881612e12565b92915050565b600060208284031215612e5457612e53612a30565b5b6000612e6284828501612e29565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ea382612d26565b810181811067ffffffffffffffff82111715612ec257612ec1612e6b565b5b80604052505050565b6000612ed5612a26565b9050612ee18282612e9a565b919050565b600067ffffffffffffffff821115612f0157612f00612e6b565b5b602082029050602081019050919050565b6000612f25612f2084612ee6565b612ecb565b90508083825260208201905060208402830185811115612f4857612f47612ad8565b5b835b81811015612f715780612f5d8882612a83565b845260208401935050602081019050612f4a565b5050509392505050565b600082601f830112612f9057612f8f612ace565b5b8135612fa0848260208601612f12565b91505092915050565b600080600060608486031215612fc257612fc1612a30565b5b600084013567ffffffffffffffff811115612fe057612fdf612a35565b5b612fec86828701612f7b565b9350506020612ffd86828701612ab9565b925050604061300e86828701612ab9565b9150509250925092565b600067ffffffffffffffff82111561303357613032612e6b565b5b602082029050602081019050919050565b600061305761305284613018565b612ecb565b9050808382526020820190506020840283018581111561307a57613079612ad8565b5b835b818110156130a3578061308f8882612ab9565b84526020840193505060208101905061307c565b5050509392505050565b600082601f8301126130c2576130c1612ace565b5b81356130d2848260208601613044565b91505092915050565b600080fd5b600067ffffffffffffffff8211156130fb576130fa612e6b565b5b61310482612d26565b9050602081019050919050565b82818337600083830152505050565b600061313361312e846130e0565b612ecb565b90508281526020810184848401111561314f5761314e6130db565b5b61315a848285613111565b509392505050565b600082601f83011261317757613176612ace565b5b8135613187848260208601613120565b91505092915050565b600080600080600060a086880312156131ac576131ab612a30565b5b60006131ba88828901612a83565b95505060206131cb88828901612a83565b945050604086013567ffffffffffffffff8111156131ec576131eb612a35565b5b6131f8888289016130ad565b935050606086013567ffffffffffffffff81111561321957613218612a35565b5b613225888289016130ad565b925050608086013567ffffffffffffffff81111561324657613245612a35565b5b61325288828901613162565b9150509295509295909350565b6000806040838503121561327657613275612a30565b5b600083013567ffffffffffffffff81111561329457613293612a35565b5b6132a085828601612f7b565b925050602083013567ffffffffffffffff8111156132c1576132c0612a35565b5b6132cd858286016130ad565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61330c81612a98565b82525050565b600061331e8383613303565b60208301905092915050565b6000602082019050919050565b6000613342826132d7565b61334c81856132e2565b9350613357836132f3565b8060005b8381101561338857815161336f8882613312565b975061337a8361332a565b92505060018101905061335b565b5085935050505092915050565b600060208201905081810360008301526133af8184613337565b905092915050565b600080600080600060a086880312156133d3576133d2612a30565b5b60006133e188828901612a83565b955050602086013567ffffffffffffffff81111561340257613401612a35565b5b61340e888289016130ad565b945050604086013567ffffffffffffffff81111561342f5761342e612a35565b5b61343b888289016130ad565b935050606086013567ffffffffffffffff81111561345c5761345b612a35565b5b613468888289016130ad565b925050608086013567ffffffffffffffff81111561348957613488612a35565b5b613495888289016130ad565b9150509295509295909350565b600080604083850312156134b9576134b8612a30565b5b600083013567ffffffffffffffff8111156134d7576134d6612a35565b5b6134e3858286016130ad565b925050602083013567ffffffffffffffff81111561350457613503612a35565b5b613510858286016130ad565b9150509250929050565b600067ffffffffffffffff82111561353557613534612e6b565b5b61353e82612d26565b9050602081019050919050565b600061355e6135598461351a565b612ecb565b90508281526020810184848401111561357a576135796130db565b5b613585848285613111565b509392505050565b600082601f8301126135a2576135a1612ace565b5b81356135b284826020860161354b565b91505092915050565b600080604083850312156135d2576135d1612a30565b5b60006135e085828601612ab9565b925050602083013567ffffffffffffffff81111561360157613600612a35565b5b61360d8582860161358d565b9150509250929050565b61362081612a5a565b82525050565b600060208201905061363b6000830184613617565b92915050565b6000806040838503121561365857613657612a30565b5b600061366685828601612a83565b925050602061367785828601612e29565b9150509250929050565b6000819050919050565b61369481613681565b82525050565b60006020820190506136af600083018461368b565b92915050565b600080604083850312156136cc576136cb612a30565b5b60006136da85828601612ab9565b92505060206136eb85828601612ab9565b9150509250929050565b6136fe81613681565b811461370957600080fd5b50565b60008135905061371b816136f5565b92915050565b60006020828403121561373757613736612a30565b5b60006137458482850161370c565b91505092915050565b60008060006060848603121561376757613766612a30565b5b600061377586828701612a83565b935050602084013567ffffffffffffffff81111561379657613795612a35565b5b6137a2868287016130ad565b925050604084013567ffffffffffffffff8111156137c3576137c2612a35565b5b6137cf868287016130ad565b9150509250925092565b600080604083850312156137f0576137ef612a30565b5b60006137fe85828601612a83565b925050602061380f85828601612a83565b9150509250929050565b600080600080600060a0868803121561383557613834612a30565b5b600061384388828901612a83565b955050602061385488828901612a83565b945050604061386588828901612ab9565b935050606061387688828901612ab9565b925050608086013567ffffffffffffffff81111561389757613896612a35565b5b6138a388828901613162565b9150509295509295909350565b6000602082840312156138c6576138c5612a30565b5b60006138d484828501612a83565b91505092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613913600d83612ceb565b915061391e826138dd565b602082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006139a5602b83612ceb565b91506139b082613949565b604082019050919050565b600060208201905081810360008301526139d481613998565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2257607f821691505b602082108103613a3557613a346139db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a71602083612ceb565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1082612a98565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b4257613b41613ad6565b5b600182019050919050565b7f43616e6e6f74207472616e73666572202d2063757272656e746c79206c6f636b60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba9602283612ceb565b9150613bb482613b4d565b604082019050919050565b60006020820190508181036000830152613bd881613b9c565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613c3b603283612ceb565b9150613c4682613bdf565b604082019050919050565b60006020820190508181036000830152613c6a81613c2e565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613ccd602983612ceb565b9150613cd882613c71565b604082019050919050565b60006020820190508181036000830152613cfc81613cc0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d28565b613d6f8683613d28565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613dac613da7613da284612a98565b613d87565b612a98565b9050919050565b6000819050919050565b613dc683613d91565b613dda613dd282613db3565b848454613d35565b825550505050565b600090565b613def613de2565b613dfa818484613dbd565b505050565b5b81811015613e1e57613e13600082613de7565b600181019050613e00565b5050565b601f821115613e6357613e3481613d03565b613e3d84613d18565b81016020851015613e4c578190505b613e60613e5885613d18565b830182613dff565b50505b505050565b600082821c905092915050565b6000613e8660001984600802613e68565b1980831691505092915050565b6000613e9f8383613e75565b9150826002028217905092915050565b613eb882612ce0565b67ffffffffffffffff811115613ed157613ed0612e6b565b5b613edb8254613a0a565b613ee6828285613e22565b600060209050601f831160018114613f195760008415613f07578287015190505b613f118582613e93565b865550613f79565b601f198416613f2786613d03565b60005b82811015613f4f57848901518255600182019150602085019450602081019050613f2a565b86831015613f6c5784890151613f68601f891682613e75565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613fdd602983612ceb565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061406f602683612ceb565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b60008160601b9050919050565b60006140bd826140a5565b9050919050565b60006140cf826140b2565b9050919050565b6140e76140e282612a5a565b6140c4565b82525050565b60006140f982846140d6565b60148201915081905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614164602183612ceb565b915061416f82614108565b604082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b60006141a582612a98565b91506141b083612a98565b92508282019050808211156141c8576141c7613ad6565b5b92915050565b60006040820190506141e36000830185612bfb565b6141f06020830184612bfb565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614253602883612ceb565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142e5602583612ceb565b91506142f082614289565b604082019050919050565b60006020820190508181036000830152614314816142d8565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614377602a83612ceb565b91506143828261431b565b604082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b600060408201905081810360008301526143c78185613337565b905081810360208301526143db8184613337565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614440602383612ceb565b915061444b826143e4565b604082019050919050565b6000602082019050818103600083015261446f81614433565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006144d2602483612ceb565b91506144dd82614476565b604082019050919050565b60006020820190508181036000830152614501816144c5565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614564602983612ceb565b915061456f82614508565b604082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145c18261459a565b6145cb81856145a5565b93506145db818560208601612cfc565b6145e481612d26565b840191505092915050565b600060a0820190506146046000830188613617565b6146116020830187613617565b61461e6040830186612bfb565b61462b6060830185612bfb565b818103608083015261463d81846145b6565b90509695505050505050565b60008151905061465881612c51565b92915050565b60006020828403121561467457614673612a30565b5b600061468284828501614649565b91505092915050565b60008160e01c9050919050565b600060033d11156146b75760046000803e6146b460005161468b565b90505b90565b600060443d10614747576146cc612a26565b60043d036004823e80513d602482011167ffffffffffffffff821117156146f4575050614747565b808201805167ffffffffffffffff8111156147125750505050614747565b80602083010160043d03850181111561472f575050505050614747565b61473e82602001850186612e9a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006147a6603483612ceb565b91506147b18261474a565b604082019050919050565b600060208201905081810360008301526147d581614799565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614838602883612ceb565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b600060a0820190506148836000830188613617565b6148906020830187613617565b81810360408301526148a28186613337565b905081810360608301526148b68185613337565b905081810360808301526148ca81846145b6565b90509695505050505050565b6000819050919050565b6148f16148ec82613681565b6148d6565b82525050565b600061490382856148e0565b60208201915061491382846148e0565b602082019150819050939250505056fea2646970667358221220f7a9d7c7e7ede64199241654bfa5ca11569f3d437a906f674d67c455cde9791b64736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a75760003560e01c806383ca4b6f116100f9578063bd32fb6611610097578063d81d0a1511610071578063d81d0a151461048e578063e985e9c5146104aa578063f242432a146104da578063f2fde38b146104f6576101a7565b8063bd32fb6614610424578063c87b56dd14610440578063cf30901214610470576101a7565b806395d89b41116100d357806395d89b41146103b0578063a22cb465146103ce578063aa98e0c6146103ea578063b390c0ab14610408576101a7565b806383ca4b6f1461035a578063862440e2146103765780638da5cb5b14610392576101a7565b8063211e28b6116101665780634e1273f4116101405780634e1273f4146102e6578063510f410414610316578063715018a61461033257806380ce3a521461033c576101a7565b8063211e28b6146102925780632bee43cf146102ae5780632eb2c2d6146102ca576101a7565b8062aa0b48146101ac578062fdd58e146101c857806301ffc9a7146101f857806306fdde03146102285780630e89341c14610246578063156e29f614610276575b600080fd5b6101c660048036038101906101c19190612b33565b610512565b005b6101e260048036038101906101dd9190612bbb565b6105c6565b6040516101ef9190612c0a565b60405180910390f35b610212600480360381019061020d9190612c7d565b61068e565b60405161021f9190612cc5565b60405180910390f35b610230610770565b60405161023d9190612d70565b60405180910390f35b610260600480360381019061025b9190612d92565b6107fe565b60405161026d9190612d70565b60405180910390f35b610290600480360381019061028b9190612dbf565b6108a3565b005b6102ac60048036038101906102a79190612e3e565b61093f565b005b6102c860048036038101906102c39190612fa9565b6109d8565b005b6102e460048036038101906102df9190613190565b610aae565b005b61030060048036038101906102fb919061325f565b610b9f565b60405161030d9190613395565b60405180910390f35b610330600480360381019061032b91906133b7565b610cb8565b005b61033a610d61565b005b610344610de9565b6040516103519190612cc5565b60405180910390f35b610374600480360381019061036f91906134a2565b610e00565b005b610390600480360381019061038b91906135bb565b610e0f565b005b61039a610ee8565b6040516103a79190613626565b60405180910390f35b6103b8610f12565b6040516103c59190612d70565b60405180910390f35b6103e860048036038101906103e39190613641565b610fa0565b005b6103f2610fb6565b6040516103ff919061369a565b60405180910390f35b610422600480360381019061041d91906136b5565b610fbc565b005b61043e60048036038101906104399190613721565b610fcb565b005b61045a60048036038101906104559190612d92565b611051565b6040516104679190612d70565b60405180910390f35b6104786110f1565b6040516104859190612cc5565b60405180910390f35b6104a860048036038101906104a3919061374e565b611104565b005b6104c460048036038101906104bf91906137d9565b6111a0565b6040516104d19190612cc5565b60405180910390f35b6104f460048036038101906104ef9190613819565b611234565b005b610510600480360381019061050b91906138b0565b611325565b005b61056561051e3361141c565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505061144c565b6105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90613929565b60405180910390fd5b6105bf85858560405180602001604052806000815250611463565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d906139bb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750610768826115f8565b5b9050919050565b6004805461077d90613a0a565b80601f01602080910402602001604051908101604052809291908181526020018280546107a990613a0a565b80156107f65780601f106107cb576101008083540402835291602001916107f6565b820191906000526020600020905b8154815290600101906020018083116107d957829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461081e90613a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90613a0a565b80156108975780601f1061086c57610100808354040283529160200191610897565b820191906000526020600020905b81548152906001019060200180831161087a57829003601f168201915b50505050509050919050565b6108ab611662565b73ffffffffffffffffffffffffffffffffffffffff166108c9610ee8565b73ffffffffffffffffffffffffffffffffffffffff161461091f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091690613a87565b60405180910390fd5b61093a83838360405180602001604052806000815250611463565b505050565b610947611662565b73ffffffffffffffffffffffffffffffffffffffff16610965610ee8565b73ffffffffffffffffffffffffffffffffffffffff16146109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b290613a87565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6109e0611662565b73ffffffffffffffffffffffffffffffffffffffff166109fe610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613a87565b60405180910390fd5b60005b8351811015610aa857610a95848281518110610a7657610a75613aa7565b5b6020026020010151848460405180602001604052806000815250611463565b8080610aa090613b05565b915050610a57565b50505050565b600360009054906101000a900460ff1615610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613bbf565b60405180910390fd5b610b06611662565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4c5750610b4b85610b46611662565b6111a0565b5b610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613c51565b60405180910390fd5b610b98858585858561166a565b5050505050565b60608151835114610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613ce3565b60405180910390fd5b6000835167ffffffffffffffff811115610c0257610c01612e6b565b5b604051908082528060200260200182016040528015610c305781602001602082028036833780820191505090505b50905060005b8451811015610cad57610c7d858281518110610c5557610c54613aa7565b5b6020026020010151858381518110610c7057610c6f613aa7565b5b60200260200101516105c6565b828281518110610c9057610c8f613aa7565b5b60200260200101818152505080610ca690613b05565b9050610c36565b508091505092915050565b610cc0611662565b73ffffffffffffffffffffffffffffffffffffffff16610cde610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90613a87565b60405180910390fd5b610d3f85858561197d565b610d5a85838360405180602001604052806000815250611c2d565b5050505050565b610d69611662565b73ffffffffffffffffffffffffffffffffffffffff16610d87610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613a87565b60405180910390fd5b610de76000611e4a565b565b6000600360009054906101000a900460ff16905090565b610e0b33838361197d565b5050565b610e17611662565b73ffffffffffffffffffffffffffffffffffffffff16610e35610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613a87565b60405180910390fd5b80600760008481526020019081526020016000209081610eab9190613eaf565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610edc9190612d70565b60405180910390a25050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610f1f90613a0a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4b90613a0a565b8015610f985780601f10610f6d57610100808354040283529160200191610f98565b820191906000526020600020905b815481529060010190602001808311610f7b57829003601f168201915b505050505081565b610fb2610fab611662565b8383611f10565b5050565b60065481565b610fc733838361207c565b5050565b610fd3611662565b73ffffffffffffffffffffffffffffffffffffffff16610ff1610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90613a87565b60405180910390fd5b8060068190555050565b6007602052806000526040600020600091509050805461107090613a0a565b80601f016020809104026020016040519081016040528092919081815260200182805461109c90613a0a565b80156110e95780601f106110be576101008083540402835291602001916110e9565b820191906000526020600020905b8154815290600101906020018083116110cc57829003601f168201915b505050505081565b600360009054906101000a900460ff1681565b61110c611662565b73ffffffffffffffffffffffffffffffffffffffff1661112a610ee8565b73ffffffffffffffffffffffffffffffffffffffff1614611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790613a87565b60405180910390fd5b61119b83838360405180602001604052806000815250611c2d565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600360009054906101000a900460ff1615611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90613bbf565b60405180910390fd5b61128c611662565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112d257506112d1856112cc611662565b6111a0565b5b611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613ff3565b60405180910390fd5b61131e8585858585612298565b5050505050565b61132d611662565b73ffffffffffffffffffffffffffffffffffffffff1661134b610ee8565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613a87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790614085565b60405180910390fd5b61141981611e4a565b50565b60008160405160200161142f91906140ed565b604051602081830303815290604052805190602001209050919050565b600061145b8260065485612519565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c99061417a565b60405180910390fd5b60006114dc611662565b90506114fd816000876114ee88612530565b6114f788612530565b876125aa565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155c919061419a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516115da9291906141ce565b60405180910390a46115f1816000878787876125b2565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b81518351146116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590614269565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906142fb565b60405180910390fd5b6000611727611662565b90506117378187878787876125aa565b60005b84518110156118e857600085828151811061175857611757613aa7565b5b60200260200101519050600085838151811061177757611776613aa7565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061438d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118cd919061419a565b92505081905550505050806118e190613b05565b905061173a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195f9291906143ad565b60405180910390a4611975818787878787612789565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e390614456565b60405180910390fd5b8051825114611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614269565b60405180910390fd5b6000611a3a611662565b9050611a5a818560008686604051806020016040528060008152506125aa565b60005b8351811015611ba7576000848281518110611a7b57611a7a613aa7565b5b602002602001015190506000848381518110611a9a57611a99613aa7565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b32906144e8565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b9f90613b05565b915050611a5d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611c1f9291906143ad565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c939061417a565b60405180910390fd5b8151835114611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790614269565b60405180910390fd5b6000611cea611662565b9050611cfb816000878787876125aa565b60005b8451811015611db457838181518110611d1a57611d19613aa7565b5b6020026020010151600080878481518110611d3857611d37613aa7565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d9a919061419a565b925050819055508080611dac90613b05565b915050611cfe565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e2c9291906143ad565b60405180910390a4611e4381600087878787612789565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061457a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161206f9190612cc5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290614456565b60405180910390fd5b60006120f5611662565b90506121258185600061210787612530565b61211087612530565b604051806020016040528060008152506125aa565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b3906144e8565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516122899291906141ce565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe906142fb565b60405180910390fd5b6000612311611662565b905061233181878761232288612530565b61232b88612530565b876125aa565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf9061438d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247d919061419a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124fa9291906141ce565b60405180910390a46125108288888888886125b2565b50505050505050565b6000826125268584612960565b1490509392505050565b60606000600167ffffffffffffffff81111561254f5761254e612e6b565b5b60405190808252806020026020018201604052801561257d5781602001602082028036833780820191505090505b509050828160008151811061259557612594613aa7565b5b60200260200101818152505080915050919050565b505050505050565b6125d18473ffffffffffffffffffffffffffffffffffffffff16612a13565b15612781578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016126179594939291906145ef565b6020604051808303816000875af192505050801561265357506040513d601f19601f82011682018060405250810190612650919061465e565b60015b6126f85761265f614698565b806308c379a0036126bb57506126736146ba565b8061267e57506126bd565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190612d70565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef906147bc565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461277f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127769061484e565b60405180910390fd5b505b505050505050565b6127a88473ffffffffffffffffffffffffffffffffffffffff16612a13565b15612958578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127ee95949392919061486e565b6020604051808303816000875af192505050801561282a57506040513d601f19601f82011682018060405250810190612827919061465e565b60015b6128cf57612836614698565b806308c379a003612892575061284a6146ba565b806128555750612894565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128899190612d70565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906147bc565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d9061484e565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612a0857600085828151811061298757612986613aa7565b5b602002602001015190508083116129c85782816040516020016129ab9291906148f7565b6040516020818303038152906040528051906020012092506129f4565b80836040516020016129db9291906148f7565b6040516020818303038152906040528051906020012092505b508080612a0090613b05565b915050612969565b508091505092915050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a6582612a3a565b9050919050565b612a7581612a5a565b8114612a8057600080fd5b50565b600081359050612a9281612a6c565b92915050565b6000819050919050565b612aab81612a98565b8114612ab657600080fd5b50565b600081359050612ac881612aa2565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612af357612af2612ace565b5b8235905067ffffffffffffffff811115612b1057612b0f612ad3565b5b602083019150836020820283011115612b2c57612b2b612ad8565b5b9250929050565b600080600080600060808688031215612b4f57612b4e612a30565b5b6000612b5d88828901612a83565b9550506020612b6e88828901612ab9565b9450506040612b7f88828901612ab9565b935050606086013567ffffffffffffffff811115612ba057612b9f612a35565b5b612bac88828901612add565b92509250509295509295909350565b60008060408385031215612bd257612bd1612a30565b5b6000612be085828601612a83565b9250506020612bf185828601612ab9565b9150509250929050565b612c0481612a98565b82525050565b6000602082019050612c1f6000830184612bfb565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c5a81612c25565b8114612c6557600080fd5b50565b600081359050612c7781612c51565b92915050565b600060208284031215612c9357612c92612a30565b5b6000612ca184828501612c68565b91505092915050565b60008115159050919050565b612cbf81612caa565b82525050565b6000602082019050612cda6000830184612cb6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d1a578082015181840152602081019050612cff565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d4282612ce0565b612d4c8185612ceb565b9350612d5c818560208601612cfc565b612d6581612d26565b840191505092915050565b60006020820190508181036000830152612d8a8184612d37565b905092915050565b600060208284031215612da857612da7612a30565b5b6000612db684828501612ab9565b91505092915050565b600080600060608486031215612dd857612dd7612a30565b5b6000612de686828701612a83565b9350506020612df786828701612ab9565b9250506040612e0886828701612ab9565b9150509250925092565b612e1b81612caa565b8114612e2657600080fd5b50565b600081359050612e3881612e12565b92915050565b600060208284031215612e5457612e53612a30565b5b6000612e6284828501612e29565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ea382612d26565b810181811067ffffffffffffffff82111715612ec257612ec1612e6b565b5b80604052505050565b6000612ed5612a26565b9050612ee18282612e9a565b919050565b600067ffffffffffffffff821115612f0157612f00612e6b565b5b602082029050602081019050919050565b6000612f25612f2084612ee6565b612ecb565b90508083825260208201905060208402830185811115612f4857612f47612ad8565b5b835b81811015612f715780612f5d8882612a83565b845260208401935050602081019050612f4a565b5050509392505050565b600082601f830112612f9057612f8f612ace565b5b8135612fa0848260208601612f12565b91505092915050565b600080600060608486031215612fc257612fc1612a30565b5b600084013567ffffffffffffffff811115612fe057612fdf612a35565b5b612fec86828701612f7b565b9350506020612ffd86828701612ab9565b925050604061300e86828701612ab9565b9150509250925092565b600067ffffffffffffffff82111561303357613032612e6b565b5b602082029050602081019050919050565b600061305761305284613018565b612ecb565b9050808382526020820190506020840283018581111561307a57613079612ad8565b5b835b818110156130a3578061308f8882612ab9565b84526020840193505060208101905061307c565b5050509392505050565b600082601f8301126130c2576130c1612ace565b5b81356130d2848260208601613044565b91505092915050565b600080fd5b600067ffffffffffffffff8211156130fb576130fa612e6b565b5b61310482612d26565b9050602081019050919050565b82818337600083830152505050565b600061313361312e846130e0565b612ecb565b90508281526020810184848401111561314f5761314e6130db565b5b61315a848285613111565b509392505050565b600082601f83011261317757613176612ace565b5b8135613187848260208601613120565b91505092915050565b600080600080600060a086880312156131ac576131ab612a30565b5b60006131ba88828901612a83565b95505060206131cb88828901612a83565b945050604086013567ffffffffffffffff8111156131ec576131eb612a35565b5b6131f8888289016130ad565b935050606086013567ffffffffffffffff81111561321957613218612a35565b5b613225888289016130ad565b925050608086013567ffffffffffffffff81111561324657613245612a35565b5b61325288828901613162565b9150509295509295909350565b6000806040838503121561327657613275612a30565b5b600083013567ffffffffffffffff81111561329457613293612a35565b5b6132a085828601612f7b565b925050602083013567ffffffffffffffff8111156132c1576132c0612a35565b5b6132cd858286016130ad565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61330c81612a98565b82525050565b600061331e8383613303565b60208301905092915050565b6000602082019050919050565b6000613342826132d7565b61334c81856132e2565b9350613357836132f3565b8060005b8381101561338857815161336f8882613312565b975061337a8361332a565b92505060018101905061335b565b5085935050505092915050565b600060208201905081810360008301526133af8184613337565b905092915050565b600080600080600060a086880312156133d3576133d2612a30565b5b60006133e188828901612a83565b955050602086013567ffffffffffffffff81111561340257613401612a35565b5b61340e888289016130ad565b945050604086013567ffffffffffffffff81111561342f5761342e612a35565b5b61343b888289016130ad565b935050606086013567ffffffffffffffff81111561345c5761345b612a35565b5b613468888289016130ad565b925050608086013567ffffffffffffffff81111561348957613488612a35565b5b613495888289016130ad565b9150509295509295909350565b600080604083850312156134b9576134b8612a30565b5b600083013567ffffffffffffffff8111156134d7576134d6612a35565b5b6134e3858286016130ad565b925050602083013567ffffffffffffffff81111561350457613503612a35565b5b613510858286016130ad565b9150509250929050565b600067ffffffffffffffff82111561353557613534612e6b565b5b61353e82612d26565b9050602081019050919050565b600061355e6135598461351a565b612ecb565b90508281526020810184848401111561357a576135796130db565b5b613585848285613111565b509392505050565b600082601f8301126135a2576135a1612ace565b5b81356135b284826020860161354b565b91505092915050565b600080604083850312156135d2576135d1612a30565b5b60006135e085828601612ab9565b925050602083013567ffffffffffffffff81111561360157613600612a35565b5b61360d8582860161358d565b9150509250929050565b61362081612a5a565b82525050565b600060208201905061363b6000830184613617565b92915050565b6000806040838503121561365857613657612a30565b5b600061366685828601612a83565b925050602061367785828601612e29565b9150509250929050565b6000819050919050565b61369481613681565b82525050565b60006020820190506136af600083018461368b565b92915050565b600080604083850312156136cc576136cb612a30565b5b60006136da85828601612ab9565b92505060206136eb85828601612ab9565b9150509250929050565b6136fe81613681565b811461370957600080fd5b50565b60008135905061371b816136f5565b92915050565b60006020828403121561373757613736612a30565b5b60006137458482850161370c565b91505092915050565b60008060006060848603121561376757613766612a30565b5b600061377586828701612a83565b935050602084013567ffffffffffffffff81111561379657613795612a35565b5b6137a2868287016130ad565b925050604084013567ffffffffffffffff8111156137c3576137c2612a35565b5b6137cf868287016130ad565b9150509250925092565b600080604083850312156137f0576137ef612a30565b5b60006137fe85828601612a83565b925050602061380f85828601612a83565b9150509250929050565b600080600080600060a0868803121561383557613834612a30565b5b600061384388828901612a83565b955050602061385488828901612a83565b945050604061386588828901612ab9565b935050606061387688828901612ab9565b925050608086013567ffffffffffffffff81111561389757613896612a35565b5b6138a388828901613162565b9150509295509295909350565b6000602082840312156138c6576138c5612a30565b5b60006138d484828501612a83565b91505092915050565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b6000613913600d83612ceb565b915061391e826138dd565b602082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006139a5602b83612ceb565b91506139b082613949565b604082019050919050565b600060208201905081810360008301526139d481613998565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2257607f821691505b602082108103613a3557613a346139db565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a71602083612ceb565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b1082612a98565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b4257613b41613ad6565b5b600182019050919050565b7f43616e6e6f74207472616e73666572202d2063757272656e746c79206c6f636b60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ba9602283612ceb565b9150613bb482613b4d565b604082019050919050565b60006020820190508181036000830152613bd881613b9c565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613c3b603283612ceb565b9150613c4682613bdf565b604082019050919050565b60006020820190508181036000830152613c6a81613c2e565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613ccd602983612ceb565b9150613cd882613c71565b604082019050919050565b60006020820190508181036000830152613cfc81613cc0565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d28565b613d6f8683613d28565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613dac613da7613da284612a98565b613d87565b612a98565b9050919050565b6000819050919050565b613dc683613d91565b613dda613dd282613db3565b848454613d35565b825550505050565b600090565b613def613de2565b613dfa818484613dbd565b505050565b5b81811015613e1e57613e13600082613de7565b600181019050613e00565b5050565b601f821115613e6357613e3481613d03565b613e3d84613d18565b81016020851015613e4c578190505b613e60613e5885613d18565b830182613dff565b50505b505050565b600082821c905092915050565b6000613e8660001984600802613e68565b1980831691505092915050565b6000613e9f8383613e75565b9150826002028217905092915050565b613eb882612ce0565b67ffffffffffffffff811115613ed157613ed0612e6b565b5b613edb8254613a0a565b613ee6828285613e22565b600060209050601f831160018114613f195760008415613f07578287015190505b613f118582613e93565b865550613f79565b601f198416613f2786613d03565b60005b82811015613f4f57848901518255600182019150602085019450602081019050613f2a565b86831015613f6c5784890151613f68601f891682613e75565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613fdd602983612ceb565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061406f602683612ceb565b915061407a82614013565b604082019050919050565b6000602082019050818103600083015261409e81614062565b9050919050565b60008160601b9050919050565b60006140bd826140a5565b9050919050565b60006140cf826140b2565b9050919050565b6140e76140e282612a5a565b6140c4565b82525050565b60006140f982846140d6565b60148201915081905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614164602183612ceb565b915061416f82614108565b604082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b60006141a582612a98565b91506141b083612a98565b92508282019050808211156141c8576141c7613ad6565b5b92915050565b60006040820190506141e36000830185612bfb565b6141f06020830184612bfb565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614253602883612ceb565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142e5602583612ceb565b91506142f082614289565b604082019050919050565b60006020820190508181036000830152614314816142d8565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614377602a83612ceb565b91506143828261431b565b604082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b600060408201905081810360008301526143c78185613337565b905081810360208301526143db8184613337565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614440602383612ceb565b915061444b826143e4565b604082019050919050565b6000602082019050818103600083015261446f81614433565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006144d2602483612ceb565b91506144dd82614476565b604082019050919050565b60006020820190508181036000830152614501816144c5565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614564602983612ceb565b915061456f82614508565b604082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145c18261459a565b6145cb81856145a5565b93506145db818560208601612cfc565b6145e481612d26565b840191505092915050565b600060a0820190506146046000830188613617565b6146116020830187613617565b61461e6040830186612bfb565b61462b6060830185612bfb565b818103608083015261463d81846145b6565b90509695505050505050565b60008151905061465881612c51565b92915050565b60006020828403121561467457614673612a30565b5b600061468284828501614649565b91505092915050565b60008160e01c9050919050565b600060033d11156146b75760046000803e6146b460005161468b565b90505b90565b600060443d10614747576146cc612a26565b60043d036004823e80513d602482011167ffffffffffffffff821117156146f4575050614747565b808201805167ffffffffffffffff8111156147125750505050614747565b80602083010160043d03850181111561472f575050505050614747565b61473e82602001850186612e9a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006147a6603483612ceb565b91506147b18261474a565b604082019050919050565b600060208201905081810360008301526147d581614799565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614838602883612ceb565b9150614843826147dc565b604082019050919050565b600060208201905081810360008301526148678161482b565b9050919050565b600060a0820190506148836000830188613617565b6148906020830187613617565b81810360408301526148a28186613337565b905081810360608301526148b68185613337565b905081810360808301526148ca81846145b6565b90509695505050505050565b6000819050919050565b6148f16148ec82613681565b6148d6565b82525050565b600061490382856148e0565b60208201915061491382846148e0565b602082019150819050939250505056fea2646970667358221220f7a9d7c7e7ede64199241654bfa5ca11569f3d437a906f674d67c455cde9791b64736f6c63430008120033

Deployed Bytecode Sourcemap

38690:2340:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39759:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24968:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23991:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38748:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40743:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39642:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40850:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39452:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26972:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25365:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40342:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4695:103;;;:::i;:::-;;40945:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40213:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40613:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4044:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38771:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25962:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38796:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40116:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39302:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38837:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36596:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39967:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26189:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26429:466;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4953:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39759:202;39869:33;39877:17;39883:10;39877:5;:17::i;:::-;39896:5;;39869:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;39861:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39927:28;39933:3;39938;39943:7;39927:28;;;;;;;;;;;;:5;:28::i;:::-;39759:202;;;;;:::o;24968:231::-;25054:7;25101:1;25082:21;;:7;:21;;;25074:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25169:9;:13;25179:2;25169:13;;;;;;;;;;;:22;25183:7;25169:22;;;;;;;;;;;;;;;;25162:29;;24968:231;;;;:::o;23991:310::-;24093:4;24145:26;24130:41;;;:11;:41;;;;:110;;;;24203:37;24188:52;;;:11;:52;;;;24130:110;:163;;;;24257:36;24281:11;24257:23;:36::i;:::-;24130:163;24110:183;;23991:310;;;:::o;38748:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40743:101::-;40796:13;40825:8;:13;40834:3;40825:13;;;;;;;;;;;40818:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40743:101;;;:::o;39642:111::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39719:28:::1;39725:3;39730;39735:7;39719:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;39642:111:::0;;;:::o;40850:87::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40922:7:::1;40913:6;;:16;;;;;;;;;;;;;;;;;;40850:87:::0;:::o;39452:184::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39545:9:::1;39540:91;39564:3;:10;39560:1;:14;39540:91;;;39592:31;39598:3;39602:1;39598:6;;;;;;;;:::i;:::-;;;;;;;;39606:3;39611:7;39592:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;39576:3;;;;;:::i;:::-;;;;39540:91;;;;39452:184:::0;;;:::o;26972:507::-;27192:6;;;;;;;;;;;27191:7;27183:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27278:12;:10;:12::i;:::-;27270:20;;:4;:20;;;:60;;;;27294:36;27311:4;27317:12;:10;:12::i;:::-;27294:16;:36::i;:::-;27270:60;27248:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27419:52;27442:4;27448:2;27452:3;27457:7;27466:4;27419:22;:52::i;:::-;26972:507;;;;;:::o;25365:524::-;25521:16;25582:3;:10;25563:8;:15;:29;25555:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25651:30;25698:8;:15;25684:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25651:63;;25732:9;25727:122;25751:8;:15;25747:1;:19;25727:122;;;25807:30;25817:8;25826:1;25817:11;;;;;;;;:::i;:::-;;;;;;;;25830:3;25834:1;25830:6;;;;;;;;:::i;:::-;;;;;;;;25807:9;:30::i;:::-;25788:13;25802:1;25788:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25768:3;;;;:::i;:::-;;;25727:122;;;;25868:13;25861:20;;;25365:524;;;;:::o;40342:265::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:41:::1;40519:5;40526:8;40536:12;40508:10;:41::i;:::-;40556:45;40567:5;40574:8;40584:12;40556:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;40342:265:::0;;;;;:::o;4695:103::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4760:30:::1;4787:1;4760:18;:30::i;:::-;4695:103::o:0;40945:80::-;40987:4;41011:6;;;;;;;;;;;41004:13;;40945:80;:::o;40213:123::-;40292:38;40303:10;40315:4;40321:8;40292:10;:38::i;:::-;40213:123;;:::o;40613:124::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40701:4:::1;40685:8;:13;40694:3;40685:13;;;;;;;;;;;:20;;;;;;:::i;:::-;;40727:3;40717:14;40721:4;40717:14;;;;;;:::i;:::-;;;;;;;;40613:124:::0;;:::o;4044:87::-;4090:7;4117:6;;;;;;;;;;;4110:13;;4044:87;:::o;38771:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25962:155::-;26057:52;26076:12;:10;:12::i;:::-;26090:8;26100;26057:18;:52::i;:::-;25962:155;;:::o;38796:34::-;;;;:::o;40116:91::-;40170:31;40176:10;40188:3;40193:7;40170:5;:31::i;:::-;40116:91;;:::o;39302:142::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39416:20:::1;39394:19;:42;;;;39302:142:::0;:::o;38837:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36596:26::-;;;;;;;;;;;;;:::o;39967:143::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40069:35:::1;40080:3;40085:4;40091:8;40069:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;39967:143:::0;;;:::o;26189:168::-;26288:4;26312:18;:27;26331:7;26312:27;;;;;;;;;;;;;;;:37;26340:8;26312:37;;;;;;;;;;;;;;;;;;;;;;;;;26305:44;;26189:168;;;;:::o;26429:466::-;26624:6;;;;;;;;;;;26623:7;26615:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26710:12;:10;:12::i;:::-;26702:20;;:4;:20;;;:60;;;;26726:36;26743:4;26749:12;:10;:12::i;:::-;26726:16;:36::i;:::-;26702:60;26680:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26842:45;26860:4;26866:2;26870;26874:6;26882:4;26842:17;:45::i;:::-;26429:466;;;;;:::o;4953:201::-;4275:12;:10;:12::i;:::-;4264:23;;:7;:5;:7::i;:::-;:23;;;4256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5062:1:::1;5042:22;;:8;:22;;::::0;5034:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5118:28;5137:8;5118:18;:28::i;:::-;4953:201:::0;:::o;39168:126::-;39223:7;39277;39260:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;39250:36;;;;;;39243:43;;39168:126;;;:::o;38998:162::-;39076:4;39100:52;39119:5;39126:19;;39147:4;39100:18;:52::i;:::-;39093:59;;38998:162;;;;:::o;31513:569::-;31680:1;31666:16;;:2;:16;;;31658:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31733:16;31752:12;:10;:12::i;:::-;31733:31;;31777:102;31798:8;31816:1;31820:2;31824:21;31842:2;31824:17;:21::i;:::-;31847:25;31865:6;31847:17;:25::i;:::-;31874:4;31777:20;:102::i;:::-;31913:6;31892:9;:13;31902:2;31892:13;;;;;;;;;;;:17;31906:2;31892:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31972:2;31935:52;;31968:1;31935:52;;31950:8;31935:52;;;31976:2;31980:6;31935:52;;;;;;;:::i;:::-;;;;;;;;32000:74;32031:8;32049:1;32053:2;32057;32061:6;32069:4;32000:30;:74::i;:::-;31647:435;31513:569;;;;:::o;15415:157::-;15500:4;15539:25;15524:40;;;:11;:40;;;;15517:47;;15415:157;;;:::o;2770:98::-;2823:7;2850:10;2843:17;;2770:98;:::o;29121:1074::-;29348:7;:14;29334:3;:10;:28;29326:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29440:1;29426:16;;:2;:16;;;29418:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29497:16;29516:12;:10;:12::i;:::-;29497:31;;29541:60;29562:8;29572:4;29578:2;29582:3;29587:7;29596:4;29541:20;:60::i;:::-;29619:9;29614:421;29638:3;:10;29634:1;:14;29614:421;;;29670:10;29683:3;29687:1;29683:6;;;;;;;;:::i;:::-;;;;;;;;29670:19;;29704:14;29721:7;29729:1;29721:10;;;;;;;;:::i;:::-;;;;;;;;29704:27;;29748:19;29770:9;:13;29780:2;29770:13;;;;;;;;;;;:19;29784:4;29770:19;;;;;;;;;;;;;;;;29748:41;;29827:6;29812:11;:21;;29804:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29960:6;29946:11;:20;29924:9;:13;29934:2;29924:13;;;;;;;;;;;:19;29938:4;29924:19;;;;;;;;;;;;;;;:42;;;;30017:6;29996:9;:13;30006:2;29996:13;;;;;;;;;;;:17;30010:2;29996:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29655:380;;;29650:3;;;;:::i;:::-;;;29614:421;;;;30082:2;30052:47;;30076:4;30052:47;;30066:8;30052:47;;;30086:3;30091:7;30052:47;;;;;;;:::i;:::-;;;;;;;;30112:75;30148:8;30158:4;30164:2;30168:3;30173:7;30182:4;30112:35;:75::i;:::-;29315:880;29121:1074;;;;;:::o;34274:891::-;34442:1;34426:18;;:4;:18;;;34418:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34517:7;:14;34503:3;:10;:28;34495:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34589:16;34608:12;:10;:12::i;:::-;34589:31;;34633:66;34654:8;34664:4;34678:1;34682:3;34687:7;34633:66;;;;;;;;;;;;:20;:66::i;:::-;34717:9;34712:373;34736:3;:10;34732:1;:14;34712:373;;;34768:10;34781:3;34785:1;34781:6;;;;;;;;:::i;:::-;;;;;;;;34768:19;;34802:14;34819:7;34827:1;34819:10;;;;;;;;:::i;:::-;;;;;;;;34802:27;;34846:19;34868:9;:13;34878:2;34868:13;;;;;;;;;;;:19;34882:4;34868:19;;;;;;;;;;;;;;;;34846:41;;34925:6;34910:11;:21;;34902:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35052:6;35038:11;:20;35016:9;:13;35026:2;35016:13;;;;;;;;;;;:19;35030:4;35016:19;;;;;;;;;;;;;;;:42;;;;34753:332;;;34748:3;;;;;:::i;:::-;;;;34712:373;;;;35140:1;35102:55;;35126:4;35102:55;;35116:8;35102:55;;;35144:3;35149:7;35102:55;;;;;;;:::i;:::-;;;;;;;;34407:758;34274:891;;;:::o;32438:735::-;32630:1;32616:16;;:2;:16;;;32608:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32703:7;:14;32689:3;:10;:28;32681:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32775:16;32794:12;:10;:12::i;:::-;32775:31;;32819:66;32840:8;32858:1;32862:2;32866:3;32871:7;32880:4;32819:20;:66::i;:::-;32903:9;32898:103;32922:3;:10;32918:1;:14;32898:103;;;32979:7;32987:1;32979:10;;;;;;;;:::i;:::-;;;;;;;;32954:9;:17;32964:3;32968:1;32964:6;;;;;;;;:::i;:::-;;;;;;;;32954:17;;;;;;;;;;;:21;32972:2;32954:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32934:3;;;;;:::i;:::-;;;;32898:103;;;;33054:2;33018:53;;33050:1;33018:53;;33032:8;33018:53;;;33058:3;33063:7;33018:53;;;;;;;:::i;:::-;;;;;;;;33084:81;33120:8;33138:1;33142:2;33146:3;33151:7;33160:4;33084:35;:81::i;:::-;32597:576;32438:735;;;;:::o;5314:191::-;5388:16;5407:6;;;;;;;;;;;5388:25;;5433:8;5424:6;;:17;;;;;;;;;;;;;;;;;;5488:8;5457:40;;5478:8;5457:40;;;;;;;;;;;;5377:128;5314:191;:::o;35307:331::-;35462:8;35453:17;;:5;:17;;;35445:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35565:8;35527:18;:25;35546:5;35527:25;;;;;;;;;;;;;;;:35;35553:8;35527:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35611:8;35589:41;;35604:5;35589:41;;;35621:8;35589:41;;;;;;:::i;:::-;;;;;;;;35307:331;;;:::o;33423:648::-;33566:1;33550:18;;:4;:18;;;33542:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33621:16;33640:12;:10;:12::i;:::-;33621:31;;33665:102;33686:8;33696:4;33710:1;33714:21;33732:2;33714:17;:21::i;:::-;33737:25;33755:6;33737:17;:25::i;:::-;33665:102;;;;;;;;;;;;:20;:102::i;:::-;33780:19;33802:9;:13;33812:2;33802:13;;;;;;;;;;;:19;33816:4;33802:19;;;;;;;;;;;;;;;;33780:41;;33855:6;33840:11;:21;;33832:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33974:6;33960:11;:20;33938:9;:13;33948:2;33938:13;;;;;;;;;;;:19;33952:4;33938:19;;;;;;;;;;;;;;;:42;;;;34048:1;34009:54;;34034:4;34009:54;;34024:8;34009:54;;;34052:2;34056:6;34009:54;;;;;;;:::i;:::-;;;;;;;;33531:540;;33423:648;;;:::o;27943:820::-;28145:1;28131:16;;:2;:16;;;28123:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28202:16;28221:12;:10;:12::i;:::-;28202:31;;28246:96;28267:8;28277:4;28283:2;28287:21;28305:2;28287:17;:21::i;:::-;28310:25;28328:6;28310:17;:25::i;:::-;28337:4;28246:20;:96::i;:::-;28355:19;28377:9;:13;28387:2;28377:13;;;;;;;;;;;:19;28391:4;28377:19;;;;;;;;;;;;;;;;28355:41;;28430:6;28415:11;:21;;28407:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28555:6;28541:11;:20;28519:9;:13;28529:2;28519:13;;;;;;;;;;;:19;28533:4;28519:19;;;;;;;;;;;;;;;:42;;;;28604:6;28583:9;:13;28593:2;28583:13;;;;;;;;;;;:17;28597:2;28583:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28659:2;28628:46;;28653:4;28628:46;;28643:8;28628:46;;;28663:2;28667:6;28628:46;;;;;;;:::i;:::-;;;;;;;;28687:68;28718:8;28728:4;28734:2;28738;28742:6;28750:4;28687:30;:68::i;:::-;28112:651;;27943:820;;;;;:::o;943:190::-;1068:4;1121;1092:25;1105:5;1112:4;1092:12;:25::i;:::-;:33;1085:40;;943:190;;;;;:::o;38458:198::-;38524:16;38553:22;38592:1;38578:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38553:41;;38616:7;38605:5;38611:1;38605:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38643:5;38636:12;;;38458:198;;;:::o;36637:238::-;;;;;;;:::o;36885:744::-;37100:15;:2;:13;;;:15::i;:::-;37096:526;;;37153:2;37136:38;;;37175:8;37185:4;37191:2;37195:6;37203:4;37136:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37132:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37484:6;37477:14;;;;;;;;;;;:::i;:::-;;;;;;;;37132:479;;;37533:62;;;;;;;;;;:::i;:::-;;;;;;;;37132:479;37270:43;;;37258:55;;;:8;:55;;;;37254:154;;37338:50;;;;;;;;;;:::i;:::-;;;;;;;;37254:154;37209:214;37096:526;36885:744;;;;;;:::o;37637:813::-;37877:15;:2;:13;;;:15::i;:::-;37873:570;;;37930:2;37913:43;;;37957:8;37967:4;37973:3;37978:7;37987:4;37913:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37909:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38305:6;38298:14;;;;;;;;;;;:::i;:::-;;;;;;;;37909:523;;;38354:62;;;;;;;;;;:::i;:::-;;;;;;;;37909:523;38086:48;;;38074:60;;;:8;:60;;;;38070:159;;38159:50;;;;;;;;;;:::i;:::-;;;;;;;;38070:159;37993:251;37873:570;37637:813;;;;;;:::o;1495:701::-;1578:7;1598:20;1621:4;1598:27;;1641:9;1636:523;1660:5;:12;1656:1;:16;1636:523;;;1694:20;1717:5;1723:1;1717:8;;;;;;;;:::i;:::-;;;;;;;;1694:31;;1760:12;1744;:28;1740:408;;1914:12;1928;1897:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1887:55;;;;;;1872:70;;1740:408;;;2104:12;2118;2087:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2077:55;;;;;;2062:70;;1740:408;1679:480;1674:3;;;;;:::i;:::-;;;;1636:523;;;;2176:12;2169:19;;;1495:701;;;;:::o;6331:387::-;6391:4;6599:12;6666:7;6654:20;6646:28;;6709:1;6702:4;:8;6695:15;;;6331:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:117;1552:1;1549;1542:12;1583:568;1656:8;1666:6;1716:3;1709:4;1701:6;1697:17;1693:27;1683:122;;1724:79;;:::i;:::-;1683:122;1837:6;1824:20;1814:30;;1867:18;1859:6;1856:30;1853:117;;;1889:79;;:::i;:::-;1853:117;2003:4;1995:6;1991:17;1979:29;;2057:3;2049:4;2041:6;2037:17;2027:8;2023:32;2020:41;2017:128;;;2064:79;;:::i;:::-;2017:128;1583:568;;;;;:::o;2157:995::-;2270:6;2278;2286;2294;2302;2351:3;2339:9;2330:7;2326:23;2322:33;2319:120;;;2358:79;;:::i;:::-;2319:120;2478:1;2503:53;2548:7;2539:6;2528:9;2524:22;2503:53;:::i;:::-;2493:63;;2449:117;2605:2;2631:53;2676:7;2667:6;2656:9;2652:22;2631:53;:::i;:::-;2621:63;;2576:118;2733:2;2759:53;2804:7;2795:6;2784:9;2780:22;2759:53;:::i;:::-;2749:63;;2704:118;2889:2;2878:9;2874:18;2861:32;2920:18;2912:6;2909:30;2906:117;;;2942:79;;:::i;:::-;2906:117;3055:80;3127:7;3118:6;3107:9;3103:22;3055:80;:::i;:::-;3037:98;;;;2832:313;2157:995;;;;;;;;:::o;3158:474::-;3226:6;3234;3283:2;3271:9;3262:7;3258:23;3254:32;3251:119;;;3289:79;;:::i;:::-;3251:119;3409:1;3434:53;3479:7;3470:6;3459:9;3455:22;3434:53;:::i;:::-;3424:63;;3380:117;3536:2;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3507:118;3158:474;;;;;:::o;3638:118::-;3725:24;3743:5;3725:24;:::i;:::-;3720:3;3713:37;3638:118;;:::o;3762:222::-;3855:4;3893:2;3882:9;3878:18;3870:26;;3906:71;3974:1;3963:9;3959:17;3950:6;3906:71;:::i;:::-;3762:222;;;;:::o;3990:149::-;4026:7;4066:66;4059:5;4055:78;4044:89;;3990:149;;;:::o;4145:120::-;4217:23;4234:5;4217:23;:::i;:::-;4210:5;4207:34;4197:62;;4255:1;4252;4245:12;4197:62;4145:120;:::o;4271:137::-;4316:5;4354:6;4341:20;4332:29;;4370:32;4396:5;4370:32;:::i;:::-;4271:137;;;;:::o;4414:327::-;4472:6;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:52;4716:7;4707:6;4696:9;4692:22;4672:52;:::i;:::-;4662:62;;4618:116;4414:327;;;;:::o;4747:90::-;4781:7;4824:5;4817:13;4810:21;4799:32;;4747:90;;;:::o;4843:109::-;4924:21;4939:5;4924:21;:::i;:::-;4919:3;4912:34;4843:109;;:::o;4958:210::-;5045:4;5083:2;5072:9;5068:18;5060:26;;5096:65;5158:1;5147:9;5143:17;5134:6;5096:65;:::i;:::-;4958:210;;;;:::o;5174:99::-;5226:6;5260:5;5254:12;5244:22;;5174:99;;;:::o;5279:169::-;5363:11;5397:6;5392:3;5385:19;5437:4;5432:3;5428:14;5413:29;;5279:169;;;;:::o;5454:246::-;5535:1;5545:113;5559:6;5556:1;5553:13;5545:113;;;5644:1;5639:3;5635:11;5629:18;5625:1;5620:3;5616:11;5609:39;5581:2;5578:1;5574:10;5569:15;;5545:113;;;5692:1;5683:6;5678:3;5674:16;5667:27;5516:184;5454:246;;;:::o;5706:102::-;5747:6;5798:2;5794:7;5789:2;5782:5;5778:14;5774:28;5764:38;;5706:102;;;:::o;5814:377::-;5902:3;5930:39;5963:5;5930:39;:::i;:::-;5985:71;6049:6;6044:3;5985:71;:::i;:::-;5978:78;;6065:65;6123:6;6118:3;6111:4;6104:5;6100:16;6065:65;:::i;:::-;6155:29;6177:6;6155:29;:::i;:::-;6150:3;6146:39;6139:46;;5906:285;5814:377;;;;:::o;6197:313::-;6310:4;6348:2;6337:9;6333:18;6325:26;;6397:9;6391:4;6387:20;6383:1;6372:9;6368:17;6361:47;6425:78;6498:4;6489:6;6425:78;:::i;:::-;6417:86;;6197:313;;;;:::o;6516:329::-;6575:6;6624:2;6612:9;6603:7;6599:23;6595:32;6592:119;;;6630:79;;:::i;:::-;6592:119;6750:1;6775:53;6820:7;6811:6;6800:9;6796:22;6775:53;:::i;:::-;6765:63;;6721:117;6516:329;;;;:::o;6851:619::-;6928:6;6936;6944;6993:2;6981:9;6972:7;6968:23;6964:32;6961:119;;;6999:79;;:::i;:::-;6961:119;7119:1;7144:53;7189:7;7180:6;7169:9;7165:22;7144:53;:::i;:::-;7134:63;;7090:117;7246:2;7272:53;7317:7;7308:6;7297:9;7293:22;7272:53;:::i;:::-;7262:63;;7217:118;7374:2;7400:53;7445:7;7436:6;7425:9;7421:22;7400:53;:::i;:::-;7390:63;;7345:118;6851:619;;;;;:::o;7476:116::-;7546:21;7561:5;7546:21;:::i;:::-;7539:5;7536:32;7526:60;;7582:1;7579;7572:12;7526:60;7476:116;:::o;7598:133::-;7641:5;7679:6;7666:20;7657:29;;7695:30;7719:5;7695:30;:::i;:::-;7598:133;;;;:::o;7737:323::-;7793:6;7842:2;7830:9;7821:7;7817:23;7813:32;7810:119;;;7848:79;;:::i;:::-;7810:119;7968:1;7993:50;8035:7;8026:6;8015:9;8011:22;7993:50;:::i;:::-;7983:60;;7939:114;7737:323;;;;:::o;8066:180::-;8114:77;8111:1;8104:88;8211:4;8208:1;8201:15;8235:4;8232:1;8225:15;8252:281;8335:27;8357:4;8335:27;:::i;:::-;8327:6;8323:40;8465:6;8453:10;8450:22;8429:18;8417:10;8414:34;8411:62;8408:88;;;8476:18;;:::i;:::-;8408:88;8516:10;8512:2;8505:22;8295:238;8252:281;;:::o;8539:129::-;8573:6;8600:20;;:::i;:::-;8590:30;;8629:33;8657:4;8649:6;8629:33;:::i;:::-;8539:129;;;:::o;8674:311::-;8751:4;8841:18;8833:6;8830:30;8827:56;;;8863:18;;:::i;:::-;8827:56;8913:4;8905:6;8901:17;8893:25;;8973:4;8967;8963:15;8955:23;;8674:311;;;:::o;9008:710::-;9104:5;9129:81;9145:64;9202:6;9145:64;:::i;:::-;9129:81;:::i;:::-;9120:90;;9230:5;9259:6;9252:5;9245:21;9293:4;9286:5;9282:16;9275:23;;9346:4;9338:6;9334:17;9326:6;9322:30;9375:3;9367:6;9364:15;9361:122;;;9394:79;;:::i;:::-;9361:122;9509:6;9492:220;9526:6;9521:3;9518:15;9492:220;;;9601:3;9630:37;9663:3;9651:10;9630:37;:::i;:::-;9625:3;9618:50;9697:4;9692:3;9688:14;9681:21;;9568:144;9552:4;9547:3;9543:14;9536:21;;9492:220;;;9496:21;9110:608;;9008:710;;;;;:::o;9741:370::-;9812:5;9861:3;9854:4;9846:6;9842:17;9838:27;9828:122;;9869:79;;:::i;:::-;9828:122;9986:6;9973:20;10011:94;10101:3;10093:6;10086:4;10078:6;10074:17;10011:94;:::i;:::-;10002:103;;9818:293;9741:370;;;;:::o;10117:829::-;10219:6;10227;10235;10284:2;10272:9;10263:7;10259:23;10255:32;10252:119;;;10290:79;;:::i;:::-;10252:119;10438:1;10427:9;10423:17;10410:31;10468:18;10460:6;10457:30;10454:117;;;10490:79;;:::i;:::-;10454:117;10595:78;10665:7;10656:6;10645:9;10641:22;10595:78;:::i;:::-;10585:88;;10381:302;10722:2;10748:53;10793:7;10784:6;10773:9;10769:22;10748:53;:::i;:::-;10738:63;;10693:118;10850:2;10876:53;10921:7;10912:6;10901:9;10897:22;10876:53;:::i;:::-;10866:63;;10821:118;10117:829;;;;;:::o;10952:311::-;11029:4;11119:18;11111:6;11108:30;11105:56;;;11141:18;;:::i;:::-;11105:56;11191:4;11183:6;11179:17;11171:25;;11251:4;11245;11241:15;11233:23;;10952:311;;;:::o;11286:710::-;11382:5;11407:81;11423:64;11480:6;11423:64;:::i;:::-;11407:81;:::i;:::-;11398:90;;11508:5;11537:6;11530:5;11523:21;11571:4;11564:5;11560:16;11553:23;;11624:4;11616:6;11612:17;11604:6;11600:30;11653:3;11645:6;11642:15;11639:122;;;11672:79;;:::i;:::-;11639:122;11787:6;11770:220;11804:6;11799:3;11796:15;11770:220;;;11879:3;11908:37;11941:3;11929:10;11908:37;:::i;:::-;11903:3;11896:50;11975:4;11970:3;11966:14;11959:21;;11846:144;11830:4;11825:3;11821:14;11814:21;;11770:220;;;11774:21;11388:608;;11286:710;;;;;:::o;12019:370::-;12090:5;12139:3;12132:4;12124:6;12120:17;12116:27;12106:122;;12147:79;;:::i;:::-;12106:122;12264:6;12251:20;12289:94;12379:3;12371:6;12364:4;12356:6;12352:17;12289:94;:::i;:::-;12280:103;;12096:293;12019:370;;;;:::o;12395:117::-;12504:1;12501;12494:12;12518:307;12579:4;12669:18;12661:6;12658:30;12655:56;;;12691:18;;:::i;:::-;12655:56;12729:29;12751:6;12729:29;:::i;:::-;12721:37;;12813:4;12807;12803:15;12795:23;;12518:307;;;:::o;12831:146::-;12928:6;12923:3;12918;12905:30;12969:1;12960:6;12955:3;12951:16;12944:27;12831:146;;;:::o;12983:423::-;13060:5;13085:65;13101:48;13142:6;13101:48;:::i;:::-;13085:65;:::i;:::-;13076:74;;13173:6;13166:5;13159:21;13211:4;13204:5;13200:16;13249:3;13240:6;13235:3;13231:16;13228:25;13225:112;;;13256:79;;:::i;:::-;13225:112;13346:54;13393:6;13388:3;13383;13346:54;:::i;:::-;13066:340;12983:423;;;;;:::o;13425:338::-;13480:5;13529:3;13522:4;13514:6;13510:17;13506:27;13496:122;;13537:79;;:::i;:::-;13496:122;13654:6;13641:20;13679:78;13753:3;13745:6;13738:4;13730:6;13726:17;13679:78;:::i;:::-;13670:87;;13486:277;13425:338;;;;:::o;13769:1509::-;13923:6;13931;13939;13947;13955;14004:3;13992:9;13983:7;13979:23;13975:33;13972:120;;;14011:79;;:::i;:::-;13972:120;14131:1;14156:53;14201:7;14192:6;14181:9;14177:22;14156:53;:::i;:::-;14146:63;;14102:117;14258:2;14284:53;14329:7;14320:6;14309:9;14305:22;14284:53;:::i;:::-;14274:63;;14229:118;14414:2;14403:9;14399:18;14386:32;14445:18;14437:6;14434:30;14431:117;;;14467:79;;:::i;:::-;14431:117;14572:78;14642:7;14633:6;14622:9;14618:22;14572:78;:::i;:::-;14562:88;;14357:303;14727:2;14716:9;14712:18;14699:32;14758:18;14750:6;14747:30;14744:117;;;14780:79;;:::i;:::-;14744:117;14885:78;14955:7;14946:6;14935:9;14931:22;14885:78;:::i;:::-;14875:88;;14670:303;15040:3;15029:9;15025:19;15012:33;15072:18;15064:6;15061:30;15058:117;;;15094:79;;:::i;:::-;15058:117;15199:62;15253:7;15244:6;15233:9;15229:22;15199:62;:::i;:::-;15189:72;;14983:288;13769:1509;;;;;;;;:::o;15284:894::-;15402:6;15410;15459:2;15447:9;15438:7;15434:23;15430:32;15427:119;;;15465:79;;:::i;:::-;15427:119;15613:1;15602:9;15598:17;15585:31;15643:18;15635:6;15632:30;15629:117;;;15665:79;;:::i;:::-;15629:117;15770:78;15840:7;15831:6;15820:9;15816:22;15770:78;:::i;:::-;15760:88;;15556:302;15925:2;15914:9;15910:18;15897:32;15956:18;15948:6;15945:30;15942:117;;;15978:79;;:::i;:::-;15942:117;16083:78;16153:7;16144:6;16133:9;16129:22;16083:78;:::i;:::-;16073:88;;15868:303;15284:894;;;;;:::o;16184:114::-;16251:6;16285:5;16279:12;16269:22;;16184:114;;;:::o;16304:184::-;16403:11;16437:6;16432:3;16425:19;16477:4;16472:3;16468:14;16453:29;;16304:184;;;;:::o;16494:132::-;16561:4;16584:3;16576:11;;16614:4;16609:3;16605:14;16597:22;;16494:132;;;:::o;16632:108::-;16709:24;16727:5;16709:24;:::i;:::-;16704:3;16697:37;16632:108;;:::o;16746:179::-;16815:10;16836:46;16878:3;16870:6;16836:46;:::i;:::-;16914:4;16909:3;16905:14;16891:28;;16746:179;;;;:::o;16931:113::-;17001:4;17033;17028:3;17024:14;17016:22;;16931:113;;;:::o;17080:732::-;17199:3;17228:54;17276:5;17228:54;:::i;:::-;17298:86;17377:6;17372:3;17298:86;:::i;:::-;17291:93;;17408:56;17458:5;17408:56;:::i;:::-;17487:7;17518:1;17503:284;17528:6;17525:1;17522:13;17503:284;;;17604:6;17598:13;17631:63;17690:3;17675:13;17631:63;:::i;:::-;17624:70;;17717:60;17770:6;17717:60;:::i;:::-;17707:70;;17563:224;17550:1;17547;17543:9;17538:14;;17503:284;;;17507:14;17803:3;17796:10;;17204:608;;;17080:732;;;;:::o;17818:373::-;17961:4;17999:2;17988:9;17984:18;17976:26;;18048:9;18042:4;18038:20;18034:1;18023:9;18019:17;18012:47;18076:108;18179:4;18170:6;18076:108;:::i;:::-;18068:116;;17818:373;;;;:::o;18197:1751::-;18392:6;18400;18408;18416;18424;18473:3;18461:9;18452:7;18448:23;18444:33;18441:120;;;18480:79;;:::i;:::-;18441:120;18600:1;18625:53;18670:7;18661:6;18650:9;18646:22;18625:53;:::i;:::-;18615:63;;18571:117;18755:2;18744:9;18740:18;18727:32;18786:18;18778:6;18775:30;18772:117;;;18808:79;;:::i;:::-;18772:117;18913:78;18983:7;18974:6;18963:9;18959:22;18913:78;:::i;:::-;18903:88;;18698:303;19068:2;19057:9;19053:18;19040:32;19099:18;19091:6;19088:30;19085:117;;;19121:79;;:::i;:::-;19085:117;19226:78;19296:7;19287:6;19276:9;19272:22;19226:78;:::i;:::-;19216:88;;19011:303;19381:2;19370:9;19366:18;19353:32;19412:18;19404:6;19401:30;19398:117;;;19434:79;;:::i;:::-;19398:117;19539:78;19609:7;19600:6;19589:9;19585:22;19539:78;:::i;:::-;19529:88;;19324:303;19694:3;19683:9;19679:19;19666:33;19726:18;19718:6;19715:30;19712:117;;;19748:79;;:::i;:::-;19712:117;19853:78;19923:7;19914:6;19903:9;19899:22;19853:78;:::i;:::-;19843:88;;19637:304;18197:1751;;;;;;;;:::o;19954:894::-;20072:6;20080;20129:2;20117:9;20108:7;20104:23;20100:32;20097:119;;;20135:79;;:::i;:::-;20097:119;20283:1;20272:9;20268:17;20255:31;20313:18;20305:6;20302:30;20299:117;;;20335:79;;:::i;:::-;20299:117;20440:78;20510:7;20501:6;20490:9;20486:22;20440:78;:::i;:::-;20430:88;;20226:302;20595:2;20584:9;20580:18;20567:32;20626:18;20618:6;20615:30;20612:117;;;20648:79;;:::i;:::-;20612:117;20753:78;20823:7;20814:6;20803:9;20799:22;20753:78;:::i;:::-;20743:88;;20538:303;19954:894;;;;;:::o;20854:308::-;20916:4;21006:18;20998:6;20995:30;20992:56;;;21028:18;;:::i;:::-;20992:56;21066:29;21088:6;21066:29;:::i;:::-;21058:37;;21150:4;21144;21140:15;21132:23;;20854:308;;;:::o;21168:425::-;21246:5;21271:66;21287:49;21329:6;21287:49;:::i;:::-;21271:66;:::i;:::-;21262:75;;21360:6;21353:5;21346:21;21398:4;21391:5;21387:16;21436:3;21427:6;21422:3;21418:16;21415:25;21412:112;;;21443:79;;:::i;:::-;21412:112;21533:54;21580:6;21575:3;21570;21533:54;:::i;:::-;21252:341;21168:425;;;;;:::o;21613:340::-;21669:5;21718:3;21711:4;21703:6;21699:17;21695:27;21685:122;;21726:79;;:::i;:::-;21685:122;21843:6;21830:20;21868:79;21943:3;21935:6;21928:4;21920:6;21916:17;21868:79;:::i;:::-;21859:88;;21675:278;21613:340;;;;:::o;21959:654::-;22037:6;22045;22094:2;22082:9;22073:7;22069:23;22065:32;22062:119;;;22100:79;;:::i;:::-;22062:119;22220:1;22245:53;22290:7;22281:6;22270:9;22266:22;22245:53;:::i;:::-;22235:63;;22191:117;22375:2;22364:9;22360:18;22347:32;22406:18;22398:6;22395:30;22392:117;;;22428:79;;:::i;:::-;22392:117;22533:63;22588:7;22579:6;22568:9;22564:22;22533:63;:::i;:::-;22523:73;;22318:288;21959:654;;;;;:::o;22619:118::-;22706:24;22724:5;22706:24;:::i;:::-;22701:3;22694:37;22619:118;;:::o;22743:222::-;22836:4;22874:2;22863:9;22859:18;22851:26;;22887:71;22955:1;22944:9;22940:17;22931:6;22887:71;:::i;:::-;22743:222;;;;:::o;22971:468::-;23036:6;23044;23093:2;23081:9;23072:7;23068:23;23064:32;23061:119;;;23099:79;;:::i;:::-;23061:119;23219:1;23244:53;23289:7;23280:6;23269:9;23265:22;23244:53;:::i;:::-;23234:63;;23190:117;23346:2;23372:50;23414:7;23405:6;23394:9;23390:22;23372:50;:::i;:::-;23362:60;;23317:115;22971:468;;;;;:::o;23445:77::-;23482:7;23511:5;23500:16;;23445:77;;;:::o;23528:118::-;23615:24;23633:5;23615:24;:::i;:::-;23610:3;23603:37;23528:118;;:::o;23652:222::-;23745:4;23783:2;23772:9;23768:18;23760:26;;23796:71;23864:1;23853:9;23849:17;23840:6;23796:71;:::i;:::-;23652:222;;;;:::o;23880:474::-;23948:6;23956;24005:2;23993:9;23984:7;23980:23;23976:32;23973:119;;;24011:79;;:::i;:::-;23973:119;24131:1;24156:53;24201:7;24192:6;24181:9;24177:22;24156:53;:::i;:::-;24146:63;;24102:117;24258:2;24284:53;24329:7;24320:6;24309:9;24305:22;24284:53;:::i;:::-;24274:63;;24229:118;23880:474;;;;;:::o;24360:122::-;24433:24;24451:5;24433:24;:::i;:::-;24426:5;24423:35;24413:63;;24472:1;24469;24462:12;24413:63;24360:122;:::o;24488:139::-;24534:5;24572:6;24559:20;24550:29;;24588:33;24615:5;24588:33;:::i;:::-;24488:139;;;;:::o;24633:329::-;24692:6;24741:2;24729:9;24720:7;24716:23;24712:32;24709:119;;;24747:79;;:::i;:::-;24709:119;24867:1;24892:53;24937:7;24928:6;24917:9;24913:22;24892:53;:::i;:::-;24882:63;;24838:117;24633:329;;;;:::o;24968:1039::-;25095:6;25103;25111;25160:2;25148:9;25139:7;25135:23;25131:32;25128:119;;;25166:79;;:::i;:::-;25128:119;25286:1;25311:53;25356:7;25347:6;25336:9;25332:22;25311:53;:::i;:::-;25301:63;;25257:117;25441:2;25430:9;25426:18;25413:32;25472:18;25464:6;25461:30;25458:117;;;25494:79;;:::i;:::-;25458:117;25599:78;25669:7;25660:6;25649:9;25645:22;25599:78;:::i;:::-;25589:88;;25384:303;25754:2;25743:9;25739:18;25726:32;25785:18;25777:6;25774:30;25771:117;;;25807:79;;:::i;:::-;25771:117;25912:78;25982:7;25973:6;25962:9;25958:22;25912:78;:::i;:::-;25902:88;;25697:303;24968:1039;;;;;:::o;26013:474::-;26081:6;26089;26138:2;26126:9;26117:7;26113:23;26109:32;26106:119;;;26144:79;;:::i;:::-;26106:119;26264:1;26289:53;26334:7;26325:6;26314:9;26310:22;26289:53;:::i;:::-;26279:63;;26235:117;26391:2;26417:53;26462:7;26453:6;26442:9;26438:22;26417:53;:::i;:::-;26407:63;;26362:118;26013:474;;;;;:::o;26493:1089::-;26597:6;26605;26613;26621;26629;26678:3;26666:9;26657:7;26653:23;26649:33;26646:120;;;26685:79;;:::i;:::-;26646:120;26805:1;26830:53;26875:7;26866:6;26855:9;26851:22;26830:53;:::i;:::-;26820:63;;26776:117;26932:2;26958:53;27003:7;26994:6;26983:9;26979:22;26958:53;:::i;:::-;26948:63;;26903:118;27060:2;27086:53;27131:7;27122:6;27111:9;27107:22;27086:53;:::i;:::-;27076:63;;27031:118;27188:2;27214:53;27259:7;27250:6;27239:9;27235:22;27214:53;:::i;:::-;27204:63;;27159:118;27344:3;27333:9;27329:19;27316:33;27376:18;27368:6;27365:30;27362:117;;;27398:79;;:::i;:::-;27362:117;27503:62;27557:7;27548:6;27537:9;27533:22;27503:62;:::i;:::-;27493:72;;27287:288;26493:1089;;;;;;;;:::o;27588:329::-;27647:6;27696:2;27684:9;27675:7;27671:23;27667:32;27664:119;;;27702:79;;:::i;:::-;27664:119;27822:1;27847:53;27892:7;27883:6;27872:9;27868:22;27847:53;:::i;:::-;27837:63;;27793:117;27588:329;;;;:::o;27923:163::-;28063:15;28059:1;28051:6;28047:14;28040:39;27923:163;:::o;28092:366::-;28234:3;28255:67;28319:2;28314:3;28255:67;:::i;:::-;28248:74;;28331:93;28420:3;28331:93;:::i;:::-;28449:2;28444:3;28440:12;28433:19;;28092:366;;;:::o;28464:419::-;28630:4;28668:2;28657:9;28653:18;28645:26;;28717:9;28711:4;28707:20;28703:1;28692:9;28688:17;28681:47;28745:131;28871:4;28745:131;:::i;:::-;28737:139;;28464:419;;;:::o;28889:230::-;29029:34;29025:1;29017:6;29013:14;29006:58;29098:13;29093:2;29085:6;29081:15;29074:38;28889:230;:::o;29125:366::-;29267:3;29288:67;29352:2;29347:3;29288:67;:::i;:::-;29281:74;;29364:93;29453:3;29364:93;:::i;:::-;29482:2;29477:3;29473:12;29466:19;;29125:366;;;:::o;29497:419::-;29663:4;29701:2;29690:9;29686:18;29678:26;;29750:9;29744:4;29740:20;29736:1;29725:9;29721:17;29714:47;29778:131;29904:4;29778:131;:::i;:::-;29770:139;;29497:419;;;:::o;29922:180::-;29970:77;29967:1;29960:88;30067:4;30064:1;30057:15;30091:4;30088:1;30081:15;30108:320;30152:6;30189:1;30183:4;30179:12;30169:22;;30236:1;30230:4;30226:12;30257:18;30247:81;;30313:4;30305:6;30301:17;30291:27;;30247:81;30375:2;30367:6;30364:14;30344:18;30341:38;30338:84;;30394:18;;:::i;:::-;30338:84;30159:269;30108:320;;;:::o;30434:182::-;30574:34;30570:1;30562:6;30558:14;30551:58;30434:182;:::o;30622:366::-;30764:3;30785:67;30849:2;30844:3;30785:67;:::i;:::-;30778:74;;30861:93;30950:3;30861:93;:::i;:::-;30979:2;30974:3;30970:12;30963:19;;30622:366;;;:::o;30994:419::-;31160:4;31198:2;31187:9;31183:18;31175:26;;31247:9;31241:4;31237:20;31233:1;31222:9;31218:17;31211:47;31275:131;31401:4;31275:131;:::i;:::-;31267:139;;30994:419;;;:::o;31419:180::-;31467:77;31464:1;31457:88;31564:4;31561:1;31554:15;31588:4;31585:1;31578:15;31605:180;31653:77;31650:1;31643:88;31750:4;31747:1;31740:15;31774:4;31771:1;31764:15;31791:233;31830:3;31853:24;31871:5;31853:24;:::i;:::-;31844:33;;31899:66;31892:5;31889:77;31886:103;;31969:18;;:::i;:::-;31886:103;32016:1;32009:5;32005:13;31998:20;;31791:233;;;:::o;32030:221::-;32170:34;32166:1;32158:6;32154:14;32147:58;32239:4;32234:2;32226:6;32222:15;32215:29;32030:221;:::o;32257:366::-;32399:3;32420:67;32484:2;32479:3;32420:67;:::i;:::-;32413:74;;32496:93;32585:3;32496:93;:::i;:::-;32614:2;32609:3;32605:12;32598:19;;32257:366;;;:::o;32629:419::-;32795:4;32833:2;32822:9;32818:18;32810:26;;32882:9;32876:4;32872:20;32868:1;32857:9;32853:17;32846:47;32910:131;33036:4;32910:131;:::i;:::-;32902:139;;32629:419;;;:::o;33054:237::-;33194:34;33190:1;33182:6;33178:14;33171:58;33263:20;33258:2;33250:6;33246:15;33239:45;33054:237;:::o;33297:366::-;33439:3;33460:67;33524:2;33519:3;33460:67;:::i;:::-;33453:74;;33536:93;33625:3;33536:93;:::i;:::-;33654:2;33649:3;33645:12;33638:19;;33297:366;;;:::o;33669:419::-;33835:4;33873:2;33862:9;33858:18;33850:26;;33922:9;33916:4;33912:20;33908:1;33897:9;33893:17;33886:47;33950:131;34076:4;33950:131;:::i;:::-;33942:139;;33669:419;;;:::o;34094:228::-;34234:34;34230:1;34222:6;34218:14;34211:58;34303:11;34298:2;34290:6;34286:15;34279:36;34094:228;:::o;34328:366::-;34470:3;34491:67;34555:2;34550:3;34491:67;:::i;:::-;34484:74;;34567:93;34656:3;34567:93;:::i;:::-;34685:2;34680:3;34676:12;34669:19;;34328:366;;;:::o;34700:419::-;34866:4;34904:2;34893:9;34889:18;34881:26;;34953:9;34947:4;34943:20;34939:1;34928:9;34924:17;34917:47;34981:131;35107:4;34981:131;:::i;:::-;34973:139;;34700:419;;;:::o;35125:141::-;35174:4;35197:3;35189:11;;35220:3;35217:1;35210:14;35254:4;35251:1;35241:18;35233:26;;35125:141;;;:::o;35272:93::-;35309:6;35356:2;35351;35344:5;35340:14;35336:23;35326:33;;35272:93;;;:::o;35371:107::-;35415:8;35465:5;35459:4;35455:16;35434:37;;35371:107;;;;:::o;35484:393::-;35553:6;35603:1;35591:10;35587:18;35626:97;35656:66;35645:9;35626:97;:::i;:::-;35744:39;35774:8;35763:9;35744:39;:::i;:::-;35732:51;;35816:4;35812:9;35805:5;35801:21;35792:30;;35865:4;35855:8;35851:19;35844:5;35841:30;35831:40;;35560:317;;35484:393;;;;;:::o;35883:60::-;35911:3;35932:5;35925:12;;35883:60;;;:::o;35949:142::-;35999:9;36032:53;36050:34;36059:24;36077:5;36059:24;:::i;:::-;36050:34;:::i;:::-;36032:53;:::i;:::-;36019:66;;35949:142;;;:::o;36097:75::-;36140:3;36161:5;36154:12;;36097:75;;;:::o;36178:269::-;36288:39;36319:7;36288:39;:::i;:::-;36349:91;36398:41;36422:16;36398:41;:::i;:::-;36390:6;36383:4;36377:11;36349:91;:::i;:::-;36343:4;36336:105;36254:193;36178:269;;;:::o;36453:73::-;36498:3;36453:73;:::o;36532:189::-;36609:32;;:::i;:::-;36650:65;36708:6;36700;36694:4;36650:65;:::i;:::-;36585:136;36532:189;;:::o;36727:186::-;36787:120;36804:3;36797:5;36794:14;36787:120;;;36858:39;36895:1;36888:5;36858:39;:::i;:::-;36831:1;36824:5;36820:13;36811:22;;36787:120;;;36727:186;;:::o;36919:543::-;37020:2;37015:3;37012:11;37009:446;;;37054:38;37086:5;37054:38;:::i;:::-;37138:29;37156:10;37138:29;:::i;:::-;37128:8;37124:44;37321:2;37309:10;37306:18;37303:49;;;37342:8;37327:23;;37303:49;37365:80;37421:22;37439:3;37421:22;:::i;:::-;37411:8;37407:37;37394:11;37365:80;:::i;:::-;37024:431;;37009:446;36919:543;;;:::o;37468:117::-;37522:8;37572:5;37566:4;37562:16;37541:37;;37468:117;;;;:::o;37591:169::-;37635:6;37668:51;37716:1;37712:6;37704:5;37701:1;37697:13;37668:51;:::i;:::-;37664:56;37749:4;37743;37739:15;37729:25;;37642:118;37591:169;;;;:::o;37765:295::-;37841:4;37987:29;38012:3;38006:4;37987:29;:::i;:::-;37979:37;;38049:3;38046:1;38042:11;38036:4;38033:21;38025:29;;37765:295;;;;:::o;38065:1395::-;38182:37;38215:3;38182:37;:::i;:::-;38284:18;38276:6;38273:30;38270:56;;;38306:18;;:::i;:::-;38270:56;38350:38;38382:4;38376:11;38350:38;:::i;:::-;38435:67;38495:6;38487;38481:4;38435:67;:::i;:::-;38529:1;38553:4;38540:17;;38585:2;38577:6;38574:14;38602:1;38597:618;;;;39259:1;39276:6;39273:77;;;39325:9;39320:3;39316:19;39310:26;39301:35;;39273:77;39376:67;39436:6;39429:5;39376:67;:::i;:::-;39370:4;39363:81;39232:222;38567:887;;38597:618;38649:4;38645:9;38637:6;38633:22;38683:37;38715:4;38683:37;:::i;:::-;38742:1;38756:208;38770:7;38767:1;38764:14;38756:208;;;38849:9;38844:3;38840:19;38834:26;38826:6;38819:42;38900:1;38892:6;38888:14;38878:24;;38947:2;38936:9;38932:18;38919:31;;38793:4;38790:1;38786:12;38781:17;;38756:208;;;38992:6;38983:7;38980:19;38977:179;;;39050:9;39045:3;39041:19;39035:26;39093:48;39135:4;39127:6;39123:17;39112:9;39093:48;:::i;:::-;39085:6;39078:64;39000:156;38977:179;39202:1;39198;39190:6;39186:14;39182:22;39176:4;39169:36;38604:611;;;38567:887;;38157:1303;;;38065:1395;;:::o;39466:228::-;39606:34;39602:1;39594:6;39590:14;39583:58;39675:11;39670:2;39662:6;39658:15;39651:36;39466:228;:::o;39700:366::-;39842:3;39863:67;39927:2;39922:3;39863:67;:::i;:::-;39856:74;;39939:93;40028:3;39939:93;:::i;:::-;40057:2;40052:3;40048:12;40041:19;;39700:366;;;:::o;40072:419::-;40238:4;40276:2;40265:9;40261:18;40253:26;;40325:9;40319:4;40315:20;40311:1;40300:9;40296:17;40289:47;40353:131;40479:4;40353:131;:::i;:::-;40345:139;;40072:419;;;:::o;40497:225::-;40637:34;40633:1;40625:6;40621:14;40614:58;40706:8;40701:2;40693:6;40689:15;40682:33;40497:225;:::o;40728:366::-;40870:3;40891:67;40955:2;40950:3;40891:67;:::i;:::-;40884:74;;40967:93;41056:3;40967:93;:::i;:::-;41085:2;41080:3;41076:12;41069:19;;40728:366;;;:::o;41100:419::-;41266:4;41304:2;41293:9;41289:18;41281:26;;41353:9;41347:4;41343:20;41339:1;41328:9;41324:17;41317:47;41381:131;41507:4;41381:131;:::i;:::-;41373:139;;41100:419;;;:::o;41525:94::-;41558:8;41606:5;41602:2;41598:14;41577:35;;41525:94;;;:::o;41625:::-;41664:7;41693:20;41707:5;41693:20;:::i;:::-;41682:31;;41625:94;;;:::o;41725:100::-;41764:7;41793:26;41813:5;41793:26;:::i;:::-;41782:37;;41725:100;;;:::o;41831:157::-;41936:45;41956:24;41974:5;41956:24;:::i;:::-;41936:45;:::i;:::-;41931:3;41924:58;41831:157;;:::o;41994:256::-;42106:3;42121:75;42192:3;42183:6;42121:75;:::i;:::-;42221:2;42216:3;42212:12;42205:19;;42241:3;42234:10;;41994:256;;;;:::o;42256:220::-;42396:34;42392:1;42384:6;42380:14;42373:58;42465:3;42460:2;42452:6;42448:15;42441:28;42256:220;:::o;42482:366::-;42624:3;42645:67;42709:2;42704:3;42645:67;:::i;:::-;42638:74;;42721:93;42810:3;42721:93;:::i;:::-;42839:2;42834:3;42830:12;42823:19;;42482:366;;;:::o;42854:419::-;43020:4;43058:2;43047:9;43043:18;43035:26;;43107:9;43101:4;43097:20;43093:1;43082:9;43078:17;43071:47;43135:131;43261:4;43135:131;:::i;:::-;43127:139;;42854:419;;;:::o;43279:191::-;43319:3;43338:20;43356:1;43338:20;:::i;:::-;43333:25;;43372:20;43390:1;43372:20;:::i;:::-;43367:25;;43415:1;43412;43408:9;43401:16;;43436:3;43433:1;43430:10;43427:36;;;43443:18;;:::i;:::-;43427:36;43279:191;;;;:::o;43476:332::-;43597:4;43635:2;43624:9;43620:18;43612:26;;43648:71;43716:1;43705:9;43701:17;43692:6;43648:71;:::i;:::-;43729:72;43797:2;43786:9;43782:18;43773:6;43729:72;:::i;:::-;43476:332;;;;;:::o;43814:227::-;43954:34;43950:1;43942:6;43938:14;43931:58;44023:10;44018:2;44010:6;44006:15;43999:35;43814:227;:::o;44047:366::-;44189:3;44210:67;44274:2;44269:3;44210:67;:::i;:::-;44203:74;;44286:93;44375:3;44286:93;:::i;:::-;44404:2;44399:3;44395:12;44388:19;;44047:366;;;:::o;44419:419::-;44585:4;44623:2;44612:9;44608:18;44600:26;;44672:9;44666:4;44662:20;44658:1;44647:9;44643:17;44636:47;44700:131;44826:4;44700:131;:::i;:::-;44692:139;;44419:419;;;:::o;44844:224::-;44984:34;44980:1;44972:6;44968:14;44961:58;45053:7;45048:2;45040:6;45036:15;45029:32;44844:224;:::o;45074:366::-;45216:3;45237:67;45301:2;45296:3;45237:67;:::i;:::-;45230:74;;45313:93;45402:3;45313:93;:::i;:::-;45431:2;45426:3;45422:12;45415:19;;45074:366;;;:::o;45446:419::-;45612:4;45650:2;45639:9;45635:18;45627:26;;45699:9;45693:4;45689:20;45685:1;45674:9;45670:17;45663:47;45727:131;45853:4;45727:131;:::i;:::-;45719:139;;45446:419;;;:::o;45871:229::-;46011:34;46007:1;45999:6;45995:14;45988:58;46080:12;46075:2;46067:6;46063:15;46056:37;45871:229;:::o;46106:366::-;46248:3;46269:67;46333:2;46328:3;46269:67;:::i;:::-;46262:74;;46345:93;46434:3;46345:93;:::i;:::-;46463:2;46458:3;46454:12;46447:19;;46106:366;;;:::o;46478:419::-;46644:4;46682:2;46671:9;46667:18;46659:26;;46731:9;46725:4;46721:20;46717:1;46706:9;46702:17;46695:47;46759:131;46885:4;46759:131;:::i;:::-;46751:139;;46478:419;;;:::o;46903:634::-;47124:4;47162:2;47151:9;47147:18;47139:26;;47211:9;47205:4;47201:20;47197:1;47186:9;47182:17;47175:47;47239:108;47342:4;47333:6;47239:108;:::i;:::-;47231:116;;47394:9;47388:4;47384:20;47379:2;47368:9;47364:18;47357:48;47422:108;47525:4;47516:6;47422:108;:::i;:::-;47414:116;;46903:634;;;;;:::o;47543:222::-;47683:34;47679:1;47671:6;47667:14;47660:58;47752:5;47747:2;47739:6;47735:15;47728:30;47543:222;:::o;47771:366::-;47913:3;47934:67;47998:2;47993:3;47934:67;:::i;:::-;47927:74;;48010:93;48099:3;48010:93;:::i;:::-;48128:2;48123:3;48119:12;48112:19;;47771:366;;;:::o;48143:419::-;48309:4;48347:2;48336:9;48332:18;48324:26;;48396:9;48390:4;48386:20;48382:1;48371:9;48367:17;48360:47;48424:131;48550:4;48424:131;:::i;:::-;48416:139;;48143:419;;;:::o;48568:223::-;48708:34;48704:1;48696:6;48692:14;48685:58;48777:6;48772:2;48764:6;48760:15;48753:31;48568:223;:::o;48797:366::-;48939:3;48960:67;49024:2;49019:3;48960:67;:::i;:::-;48953:74;;49036:93;49125:3;49036:93;:::i;:::-;49154:2;49149:3;49145:12;49138:19;;48797:366;;;:::o;49169:419::-;49335:4;49373:2;49362:9;49358:18;49350:26;;49422:9;49416:4;49412:20;49408:1;49397:9;49393:17;49386:47;49450:131;49576:4;49450:131;:::i;:::-;49442:139;;49169:419;;;:::o;49594:228::-;49734:34;49730:1;49722:6;49718:14;49711:58;49803:11;49798:2;49790:6;49786:15;49779:36;49594:228;:::o;49828:366::-;49970:3;49991:67;50055:2;50050:3;49991:67;:::i;:::-;49984:74;;50067:93;50156:3;50067:93;:::i;:::-;50185:2;50180:3;50176:12;50169:19;;49828:366;;;:::o;50200:419::-;50366:4;50404:2;50393:9;50389:18;50381:26;;50453:9;50447:4;50443:20;50439:1;50428:9;50424:17;50417:47;50481:131;50607:4;50481:131;:::i;:::-;50473:139;;50200:419;;;:::o;50625:98::-;50676:6;50710:5;50704:12;50694:22;;50625:98;;;:::o;50729:168::-;50812:11;50846:6;50841:3;50834:19;50886:4;50881:3;50877:14;50862:29;;50729:168;;;;:::o;50903:373::-;50989:3;51017:38;51049:5;51017:38;:::i;:::-;51071:70;51134:6;51129:3;51071:70;:::i;:::-;51064:77;;51150:65;51208:6;51203:3;51196:4;51189:5;51185:16;51150:65;:::i;:::-;51240:29;51262:6;51240:29;:::i;:::-;51235:3;51231:39;51224:46;;50993:283;50903:373;;;;:::o;51282:751::-;51505:4;51543:3;51532:9;51528:19;51520:27;;51557:71;51625:1;51614:9;51610:17;51601:6;51557:71;:::i;:::-;51638:72;51706:2;51695:9;51691:18;51682:6;51638:72;:::i;:::-;51720;51788:2;51777:9;51773:18;51764:6;51720:72;:::i;:::-;51802;51870:2;51859:9;51855:18;51846:6;51802:72;:::i;:::-;51922:9;51916:4;51912:20;51906:3;51895:9;51891:19;51884:49;51950:76;52021:4;52012:6;51950:76;:::i;:::-;51942:84;;51282:751;;;;;;;;:::o;52039:141::-;52095:5;52126:6;52120:13;52111:22;;52142:32;52168:5;52142:32;:::i;:::-;52039:141;;;;:::o;52186:349::-;52255:6;52304:2;52292:9;52283:7;52279:23;52275:32;52272:119;;;52310:79;;:::i;:::-;52272:119;52430:1;52455:63;52510:7;52501:6;52490:9;52486:22;52455:63;:::i;:::-;52445:73;;52401:127;52186:349;;;;:::o;52541:106::-;52585:8;52634:5;52629:3;52625:15;52604:36;;52541:106;;;:::o;52653:183::-;52688:3;52726:1;52708:16;52705:23;52702:128;;;52764:1;52761;52758;52743:23;52786:34;52817:1;52811:8;52786:34;:::i;:::-;52779:41;;52702:128;52653:183;:::o;52842:711::-;52881:3;52919:4;52901:16;52898:26;52927:5;52895:39;52956:20;;:::i;:::-;53031:1;53013:16;53009:24;53006:1;53000:4;52985:49;53064:4;53058:11;53163:16;53156:4;53148:6;53144:17;53141:39;53108:18;53100:6;53097:30;53081:113;53078:146;;;53209:5;;;;53078:146;53255:6;53249:4;53245:17;53291:3;53285:10;53318:18;53310:6;53307:30;53304:43;;;53340:5;;;;;;53304:43;53388:6;53381:4;53376:3;53372:14;53368:27;53447:1;53429:16;53425:24;53419:4;53415:35;53410:3;53407:44;53404:57;;;53454:5;;;;;;;53404:57;53471;53519:6;53513:4;53509:17;53501:6;53497:30;53491:4;53471:57;:::i;:::-;53544:3;53537:10;;52885:668;;;;;52842:711;;:::o;53559:239::-;53699:34;53695:1;53687:6;53683:14;53676:58;53768:22;53763:2;53755:6;53751:15;53744:47;53559:239;:::o;53804:366::-;53946:3;53967:67;54031:2;54026:3;53967:67;:::i;:::-;53960:74;;54043:93;54132:3;54043:93;:::i;:::-;54161:2;54156:3;54152:12;54145:19;;53804:366;;;:::o;54176:419::-;54342:4;54380:2;54369:9;54365:18;54357:26;;54429:9;54423:4;54419:20;54415:1;54404:9;54400:17;54393:47;54457:131;54583:4;54457:131;:::i;:::-;54449:139;;54176:419;;;:::o;54601:227::-;54741:34;54737:1;54729:6;54725:14;54718:58;54810:10;54805:2;54797:6;54793:15;54786:35;54601:227;:::o;54834:366::-;54976:3;54997:67;55061:2;55056:3;54997:67;:::i;:::-;54990:74;;55073:93;55162:3;55073:93;:::i;:::-;55191:2;55186:3;55182:12;55175:19;;54834:366;;;:::o;55206:419::-;55372:4;55410:2;55399:9;55395:18;55387:26;;55459:9;55453:4;55449:20;55445:1;55434:9;55430:17;55423:47;55487:131;55613:4;55487:131;:::i;:::-;55479:139;;55206:419;;;:::o;55631:1053::-;55954:4;55992:3;55981:9;55977:19;55969:27;;56006:71;56074:1;56063:9;56059:17;56050:6;56006:71;:::i;:::-;56087:72;56155:2;56144:9;56140:18;56131:6;56087:72;:::i;:::-;56206:9;56200:4;56196:20;56191:2;56180:9;56176:18;56169:48;56234:108;56337:4;56328:6;56234:108;:::i;:::-;56226:116;;56389:9;56383:4;56379:20;56374:2;56363:9;56359:18;56352:48;56417:108;56520:4;56511:6;56417:108;:::i;:::-;56409:116;;56573:9;56567:4;56563:20;56557:3;56546:9;56542:19;56535:49;56601:76;56672:4;56663:6;56601:76;:::i;:::-;56593:84;;55631:1053;;;;;;;;:::o;56690:79::-;56729:7;56758:5;56747:16;;56690:79;;;:::o;56775:157::-;56880:45;56900:24;56918:5;56900:24;:::i;:::-;56880:45;:::i;:::-;56875:3;56868:58;56775:157;;:::o;56938:397::-;57078:3;57093:75;57164:3;57155:6;57093:75;:::i;:::-;57193:2;57188:3;57184:12;57177:19;;57206:75;57277:3;57268:6;57206:75;:::i;:::-;57306:2;57301:3;57297:12;57290:19;;57326:3;57319:10;;56938:397;;;;;:::o

Swarm Source

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