Contract Overview
[ Download CSV Export ]
Contract Name:
THCM
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-07-15 */ // SPDX-License-Identifier: MIT /** * ,----, * ,/ .`| ,--, ____ * ,` .' : ,--.'| ,----.. ,' , `. ___ * ; ; / ,--, | : / / \ ,-+-,.' _ | ,--.'|_ *.'___,/ ,',---.'| : '| : : ,-+-. ; , || | | :,' __ ,-. *| : | | | : _' |. | ;. / ,--.'|' | ;| : : ' : .---. ,' ,'/ /| .--.--. .--.--. *; |.'; ; : : |.' |. ; /--` | | ,', | ': ,---. .;__,' / ,--.--. /. ./| ,---. ' | |' | / / ' ,---. / / ' *`----' | | | ' ' ; :; | ; | | / | | || / \ | | | / \ .-' . ' | / \ | | ,'| : /`./ / \ | : /`./ * ' : ; ' | .'. || : | ' | : | : |,/ / |:__,'| : .--. .-. /___/ \: |/ / |' : / | : ;_ / / || : ;_ * | | ' | | : | '. | '___ ; . | ; |--'. ' / | ' : |__ \__\/: . . \ ' . ' / || | ' \ \ `. . ' / | \ \ `. * ' : | ' : | : ;' ; : .'| | : | | , ' ; /| | | '.'| ," .--.; |\ \ ' ; /|; : | `----. \' ; /| `----. \ * ; |.' | | ' ,/ ' | '/ : | : ' |/ ' | / | ; : ;/ / ,. | \ \ ' | / || , ; / /`--' /' | / | / /`--' / * '---' ; : ;--' | : / ; | |`-' | : | | , /; : .' \ \ \ | : | ---' '--'. / | : |'--'. / * | ,/ \ \ .' | ;/ \ \ / ---`-' | , .-./ '---" \ \ / `--'---' \ \ / `--'---' * '---' `---` '---' `----' `--`---' `----' `----' */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in paused state. */ constructor() { _paused = true; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {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 `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // THC Metaverses contract pragma solidity ^0.8.4; contract THCM is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply { string public name; string public symbol; mapping(uint => string) tokenURI; constructor() ERC1155("") { name = "Totally Hand-Crafted Metaverses by THC Group"; symbol = "THCM"; } function setURI(uint _id, string memory _uri) public onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f560201b60201c565b5062000054620000486200011160201b60201c565b6200011960201b60201c565b6001600360146101000a81548160ff0219169083151502179055506040518060600160405280602c81526020016200449b602c913960059080519060200190620000a0929190620001df565b506040518060400160405280600481526020017f5448434d0000000000000000000000000000000000000000000000000000000081525060069080519060200190620000ee929190620001df565b50620002f4565b80600290805190602001906200010d929190620001df565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ed906200028f565b90600052602060002090601f0160209004810192826200021157600085556200025d565b82601f106200022c57805160ff19168380011785556200025d565b828001600101855582156200025d579182015b828111156200025c5782518255916020019190600101906200023f565b5b5090506200026c919062000270565b5090565b5b808211156200028b57600081600090555060010162000271565b5090565b60006002820490506001821680620002a857607f821691505b60208210811415620002bf57620002be620002c5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61419780620003046000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c8063715018a6116100c3578063a22cb4651161007c578063a22cb46514610363578063bd85b0391461037f578063e985e9c5146103af578063f242432a146103df578063f2fde38b146103fb578063f5298aca146104175761014c565b8063715018a6146102db578063731133e9146102e55780638456cb5914610301578063862440e21461030b5780638da5cb5b1461032757806395d89b41146103455761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780633f4ba83a146102375780634e1273f4146102415780634f558e79146102715780635c975abb146102a15780636b20c454146102bf5761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf5780631f7fdffa146101ff575b600080fd5b61016b60048036038101906101669190612dc6565b610433565b6040516101789190613741565b60405180910390f35b61019b60048036038101906101969190612f54565b6104fc565b6040516101a891906134e4565b60405180910390f35b6101b96105de565b6040516101c691906134ff565b60405180910390f35b6101e960048036038101906101e49190612fae565b61066c565b6040516101f691906134ff565b60405180910390f35b61021960048036038101906102149190612ccb565b610711565b005b61023560048036038101906102309190612ada565b61072b565b005b61023f6107cc565b005b61025b60048036038101906102569190612edc565b6107de565b604051610268919061348b565b60405180910390f35b61028b60048036038101906102869190612fae565b6108f7565b60405161029891906134e4565b60405180910390f35b6102a961090b565b6040516102b691906134e4565b60405180910390f35b6102d960048036038101906102d49190612c40565b610922565b005b6102e36109bf565b005b6102ff60048036038101906102fa9190612e59565b6109d3565b005b6103096109ed565b005b61032560048036038101906103209190612fdb565b6109ff565b005b61032f610a6b565b60405161033c91906133ae565b60405180910390f35b61034d610a95565b60405161035a91906134ff565b60405180910390f35b61037d60048036038101906103789190612d86565b610b23565b005b61039960048036038101906103949190612fae565b610b39565b6040516103a69190613741565b60405180910390f35b6103c960048036038101906103c49190612a9a565b610b56565b6040516103d691906134e4565b60405180910390f35b6103f960048036038101906103f49190612ba9565b610bea565b005b61041560048036038101906104109190612a6d565b610c8b565b005b610431600480360381019061042c9190612e06565b610d0f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049b906135e1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d757506105d682610dac565b5b9050919050565b600580546105eb906139e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610617906139e1565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b505050505081565b606060076000838152602001908152602001600020805461068c906139e1565b80601f01602080910402602001604051908101604052809291908181526020018280546106b8906139e1565b80156107055780601f106106da57610100808354040283529160200191610705565b820191906000526020600020905b8154815290600101906020018083116106e857829003601f168201915b50505050509050919050565b610719610e16565b61072584848484610e94565b50505050565b6107336110c1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107795750610778856107736110c1565b610b56565b5b6107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af90613541565b60405180910390fd5b6107c585858585856110c9565b5050505050565b6107d4610e16565b6107dc6113eb565b565b60608151835114610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b906136e1565b60405180910390fd5b6000835167ffffffffffffffff81111561084157610840613b1a565b5b60405190808252806020026020018201604052801561086f5781602001602082028036833780820191505090505b50905060005b84518110156108ec576108bc85828151811061089457610893613aeb565b5b60200260200101518583815181106108af576108ae613aeb565b5b6020026020010151610433565b8282815181106108cf576108ce613aeb565b5b602002602001018181525050806108e590613a44565b9050610875565b508091505092915050565b60008061090383610b39565b119050919050565b6000600360149054906101000a900460ff16905090565b61092a6110c1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610970575061096f8361096a6110c1565b610b56565b5b6109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613541565b60405180910390fd5b6109ba83838361144e565b505050565b6109c7610e16565b6109d1600061171d565b565b6109db610e16565b6109e7848484846117e3565b50505050565b6109f5610e16565b6109fd611994565b565b610a07610e16565b80600760008481526020019081526020016000209080519060200190610a2e929190612745565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610a5f91906134ff565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60068054610aa2906139e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ace906139e1565b8015610b1b5780601f10610af057610100808354040283529160200191610b1b565b820191906000526020600020905b815481529060010190602001808311610afe57829003601f168201915b505050505081565b610b35610b2e6110c1565b83836119f7565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610bf26110c1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c385750610c3785610c326110c1565b610b56565b5b610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90613541565b60405180910390fd5b610c848585858585611b64565b5050505050565b610c93610e16565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa906135a1565b60405180910390fd5b610d0c8161171d565b50565b610d176110c1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d5d5750610d5c83610d576110c1565b610b56565b5b610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613541565b60405180910390fd5b610da7838383611e00565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610e1e6110c1565b73ffffffffffffffffffffffffffffffffffffffff16610e3c610a6b565b73ffffffffffffffffffffffffffffffffffffffff1614610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990613681565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613721565b60405180910390fd5b8151835114610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613701565b60405180910390fd5b6000610f526110c1565b9050610f6381600087878787612047565b60005b845181101561101c57838181518110610f8257610f81613aeb565b5b6020026020010151600080878481518110610fa057610f9f613aeb565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461100291906138d5565b92505081905550808061101490613a44565b915050610f66565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516110949291906134ad565b60405180910390a46110ab81600087878787612065565b6110ba8160008787878761206d565b5050505050565b600033905090565b815183511461110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110490613701565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490613621565b60405180910390fd5b60006111876110c1565b9050611197818787878787612047565b60005b84518110156113485760008582815181106111b8576111b7613aeb565b5b6020026020010151905060008583815181106111d7576111d6613aeb565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613661565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461132d91906138d5565b925050819055505050508061134190613a44565b905061119a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113bf9291906134ad565b60405180910390a46113d5818787878787612065565b6113e381878787878761206d565b505050505050565b6113f3612254565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114376110c1565b60405161144491906133ae565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590613641565b60405180910390fd5b8051825114611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990613701565b60405180910390fd5b600061150c6110c1565b905061152c81856000868660405180602001604052806000815250612047565b60005b835181101561167957600084828151811061154d5761154c613aeb565b5b60200260200101519050600084838151811061156c5761156b613aeb565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561160d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611604906135c1565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061167190613a44565b91505061152f565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516116f19291906134ad565b60405180910390a461171781856000868660405180602001604052806000815250612065565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90613721565b60405180910390fd5b600061185d6110c1565b9050600061186a8561229d565b905060006118778561229d565b905061188883600089858589612047565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e791906138d5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161196592919061375c565b60405180910390a461197c83600089858589612065565b61198b83600089898989612317565b50505050505050565b61199c6124fe565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119e06110c1565b6040516119ed91906133ae565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d906136c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b5791906134e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90613621565b60405180910390fd5b6000611bde6110c1565b90506000611beb8561229d565b90506000611bf88561229d565b9050611c08838989858589612047565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613661565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d5491906138d5565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611dd192919061375c565b60405180910390a4611de7848a8a86868a612065565b611df5848a8a8a8a8a612317565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613641565b60405180910390fd5b6000611e7a6110c1565b90506000611e878461229d565b90506000611e948461229d565b9050611eb483876000858560405180602001604052806000815250612047565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f42906135c1565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161201892919061375c565b60405180910390a461203e84886000868660405180602001604052806000815250612065565b50505050505050565b61204f6124fe565b61205d868686868686612548565b505050505050565b505050505050565b61208c8473ffffffffffffffffffffffffffffffffffffffff1661271a565b1561224c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120d29594939291906133c9565b602060405180830381600087803b1580156120ec57600080fd5b505af192505050801561211d57506040513d601f19601f8201168201806040525081019061211a9190612f81565b60015b6121c357612129613b49565b806308c379a01415612186575061213e61406f565b806121495750612188565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d91906134ff565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90613521565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613561565b60405180910390fd5b505b505050505050565b61225c61090b565b61229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290613581565b60405180910390fd5b565b60606000600167ffffffffffffffff8111156122bc576122bb613b1a565b5b6040519080825280602002602001820160405280156122ea5781602001602082028036833780820191505090505b509050828160008151811061230257612301613aeb565b5b60200260200101818152505080915050919050565b6123368473ffffffffffffffffffffffffffffffffffffffff1661271a565b156124f6578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161237c959493929190613431565b602060405180830381600087803b15801561239657600080fd5b505af19250505080156123c757506040513d601f19601f820116820180604052508101906123c49190612f81565b60015b61246d576123d3613b49565b806308c379a0141561243057506123e861406f565b806123f35750612432565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242791906134ff565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490613521565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90613561565b60405180910390fd5b505b505050505050565b61250661090b565b15612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d90613601565b60405180910390fd5b565b61255686868686868661273d565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156126085760005b8351811015612606578281815181106125aa576125a9613aeb565b5b6020026020010151600460008684815181106125c9576125c8613aeb565b5b6020026020010151815260200190815260200160002060008282546125ee91906138d5565b92505081905550806125ff90613a44565b905061258e565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127125760005b835181101561271057600084828151811061265e5761265d613aeb565b5b60200260200101519050600084838151811061267d5761267c613aeb565b5b60200260200101519050600060046000848152602001908152602001600020549050818110156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d9906136a1565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061270990613a44565b9050612640565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054612751906139e1565b90600052602060002090601f01602090048101928261277357600085556127ba565b82601f1061278c57805160ff19168380011785556127ba565b828001600101855582156127ba579182015b828111156127b957825182559160200191906001019061279e565b5b5090506127c791906127cb565b5090565b5b808211156127e45760008160009055506001016127cc565b5090565b60006127fb6127f6846137aa565b613785565b9050808382526020820190508285602086028201111561281e5761281d613b70565b5b60005b8581101561284e5781612834888261294c565b845260208401935060208301925050600181019050612821565b5050509392505050565b600061286b612866846137d6565b613785565b9050808382526020820190508285602086028201111561288e5761288d613b70565b5b60005b858110156128be57816128a48882612a58565b845260208401935060208301925050600181019050612891565b5050509392505050565b60006128db6128d684613802565b613785565b9050828152602081018484840111156128f7576128f6613b75565b5b61290284828561399f565b509392505050565b600061291d61291884613833565b613785565b90508281526020810184848401111561293957612938613b75565b5b61294484828561399f565b509392505050565b60008135905061295b81614105565b92915050565b600082601f83011261297657612975613b6b565b5b81356129868482602086016127e8565b91505092915050565b600082601f8301126129a4576129a3613b6b565b5b81356129b4848260208601612858565b91505092915050565b6000813590506129cc8161411c565b92915050565b6000813590506129e181614133565b92915050565b6000815190506129f681614133565b92915050565b600082601f830112612a1157612a10613b6b565b5b8135612a218482602086016128c8565b91505092915050565b600082601f830112612a3f57612a3e613b6b565b5b8135612a4f84826020860161290a565b91505092915050565b600081359050612a678161414a565b92915050565b600060208284031215612a8357612a82613b7f565b5b6000612a918482850161294c565b91505092915050565b60008060408385031215612ab157612ab0613b7f565b5b6000612abf8582860161294c565b9250506020612ad08582860161294c565b9150509250929050565b600080600080600060a08688031215612af657612af5613b7f565b5b6000612b048882890161294c565b9550506020612b158882890161294c565b945050604086013567ffffffffffffffff811115612b3657612b35613b7a565b5b612b428882890161298f565b935050606086013567ffffffffffffffff811115612b6357612b62613b7a565b5b612b6f8882890161298f565b925050608086013567ffffffffffffffff811115612b9057612b8f613b7a565b5b612b9c888289016129fc565b9150509295509295909350565b600080600080600060a08688031215612bc557612bc4613b7f565b5b6000612bd38882890161294c565b9550506020612be48882890161294c565b9450506040612bf588828901612a58565b9350506060612c0688828901612a58565b925050608086013567ffffffffffffffff811115612c2757612c26613b7a565b5b612c33888289016129fc565b9150509295509295909350565b600080600060608486031215612c5957612c58613b7f565b5b6000612c678682870161294c565b935050602084013567ffffffffffffffff811115612c8857612c87613b7a565b5b612c948682870161298f565b925050604084013567ffffffffffffffff811115612cb557612cb4613b7a565b5b612cc18682870161298f565b9150509250925092565b60008060008060808587031215612ce557612ce4613b7f565b5b6000612cf38782880161294c565b945050602085013567ffffffffffffffff811115612d1457612d13613b7a565b5b612d208782880161298f565b935050604085013567ffffffffffffffff811115612d4157612d40613b7a565b5b612d4d8782880161298f565b925050606085013567ffffffffffffffff811115612d6e57612d6d613b7a565b5b612d7a878288016129fc565b91505092959194509250565b60008060408385031215612d9d57612d9c613b7f565b5b6000612dab8582860161294c565b9250506020612dbc858286016129bd565b9150509250929050565b60008060408385031215612ddd57612ddc613b7f565b5b6000612deb8582860161294c565b9250506020612dfc85828601612a58565b9150509250929050565b600080600060608486031215612e1f57612e1e613b7f565b5b6000612e2d8682870161294c565b9350506020612e3e86828701612a58565b9250506040612e4f86828701612a58565b9150509250925092565b60008060008060808587031215612e7357612e72613b7f565b5b6000612e818782880161294c565b9450506020612e9287828801612a58565b9350506040612ea387828801612a58565b925050606085013567ffffffffffffffff811115612ec457612ec3613b7a565b5b612ed0878288016129fc565b91505092959194509250565b60008060408385031215612ef357612ef2613b7f565b5b600083013567ffffffffffffffff811115612f1157612f10613b7a565b5b612f1d85828601612961565b925050602083013567ffffffffffffffff811115612f3e57612f3d613b7a565b5b612f4a8582860161298f565b9150509250929050565b600060208284031215612f6a57612f69613b7f565b5b6000612f78848285016129d2565b91505092915050565b600060208284031215612f9757612f96613b7f565b5b6000612fa5848285016129e7565b91505092915050565b600060208284031215612fc457612fc3613b7f565b5b6000612fd284828501612a58565b91505092915050565b60008060408385031215612ff257612ff1613b7f565b5b600061300085828601612a58565b925050602083013567ffffffffffffffff81111561302157613020613b7a565b5b61302d85828601612a2a565b9150509250929050565b60006130438383613390565b60208301905092915050565b6130588161392b565b82525050565b600061306982613874565b61307381856138a2565b935061307e83613864565b8060005b838110156130af5781516130968882613037565b97506130a183613895565b925050600181019050613082565b5085935050505092915050565b6130c58161393d565b82525050565b60006130d68261387f565b6130e081856138b3565b93506130f08185602086016139ae565b6130f981613b84565b840191505092915050565b600061310f8261388a565b61311981856138c4565b93506131298185602086016139ae565b61313281613b84565b840191505092915050565b600061314a6034836138c4565b915061315582613ba2565b604082019050919050565b600061316d602f836138c4565b915061317882613bf1565b604082019050919050565b60006131906028836138c4565b915061319b82613c40565b604082019050919050565b60006131b36014836138c4565b91506131be82613c8f565b602082019050919050565b60006131d66026836138c4565b91506131e182613cb8565b604082019050919050565b60006131f96024836138c4565b915061320482613d07565b604082019050919050565b600061321c602a836138c4565b915061322782613d56565b604082019050919050565b600061323f6010836138c4565b915061324a82613da5565b602082019050919050565b60006132626025836138c4565b915061326d82613dce565b604082019050919050565b60006132856023836138c4565b915061329082613e1d565b604082019050919050565b60006132a8602a836138c4565b91506132b382613e6c565b604082019050919050565b60006132cb6020836138c4565b91506132d682613ebb565b602082019050919050565b60006132ee6028836138c4565b91506132f982613ee4565b604082019050919050565b60006133116029836138c4565b915061331c82613f33565b604082019050919050565b60006133346029836138c4565b915061333f82613f82565b604082019050919050565b60006133576028836138c4565b915061336282613fd1565b604082019050919050565b600061337a6021836138c4565b915061338582614020565b604082019050919050565b61339981613995565b82525050565b6133a881613995565b82525050565b60006020820190506133c3600083018461304f565b92915050565b600060a0820190506133de600083018861304f565b6133eb602083018761304f565b81810360408301526133fd818661305e565b90508181036060830152613411818561305e565b9050818103608083015261342581846130cb565b90509695505050505050565b600060a082019050613446600083018861304f565b613453602083018761304f565b613460604083018661339f565b61346d606083018561339f565b818103608083015261347f81846130cb565b90509695505050505050565b600060208201905081810360008301526134a5818461305e565b905092915050565b600060408201905081810360008301526134c7818561305e565b905081810360208301526134db818461305e565b90509392505050565b60006020820190506134f960008301846130bc565b92915050565b600060208201905081810360008301526135198184613104565b905092915050565b6000602082019050818103600083015261353a8161313d565b9050919050565b6000602082019050818103600083015261355a81613160565b9050919050565b6000602082019050818103600083015261357a81613183565b9050919050565b6000602082019050818103600083015261359a816131a6565b9050919050565b600060208201905081810360008301526135ba816131c9565b9050919050565b600060208201905081810360008301526135da816131ec565b9050919050565b600060208201905081810360008301526135fa8161320f565b9050919050565b6000602082019050818103600083015261361a81613232565b9050919050565b6000602082019050818103600083015261363a81613255565b9050919050565b6000602082019050818103600083015261365a81613278565b9050919050565b6000602082019050818103600083015261367a8161329b565b9050919050565b6000602082019050818103600083015261369a816132be565b9050919050565b600060208201905081810360008301526136ba816132e1565b9050919050565b600060208201905081810360008301526136da81613304565b9050919050565b600060208201905081810360008301526136fa81613327565b9050919050565b6000602082019050818103600083015261371a8161334a565b9050919050565b6000602082019050818103600083015261373a8161336d565b9050919050565b6000602082019050613756600083018461339f565b92915050565b6000604082019050613771600083018561339f565b61377e602083018461339f565b9392505050565b600061378f6137a0565b905061379b8282613a13565b919050565b6000604051905090565b600067ffffffffffffffff8211156137c5576137c4613b1a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137f1576137f0613b1a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561381d5761381c613b1a565b5b61382682613b84565b9050602081019050919050565b600067ffffffffffffffff82111561384e5761384d613b1a565b5b61385782613b84565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138e082613995565b91506138eb83613995565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139205761391f613a8d565b5b828201905092915050565b600061393682613975565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139cc5780820151818401526020810190506139b1565b838111156139db576000848401525b50505050565b600060028204905060018216806139f957607f821691505b60208210811415613a0d57613a0c613abc565b5b50919050565b613a1c82613b84565b810181811067ffffffffffffffff82111715613a3b57613a3a613b1a565b5b80604052505050565b6000613a4f82613995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a8257613a81613a8d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613b685760046000803e613b65600051613b95565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561407f57614102565b6140876137a0565b60043d036004823e80513d602482011167ffffffffffffffff821117156140af575050614102565b808201805167ffffffffffffffff8111156140cd5750505050614102565b80602083010160043d0385018111156140ea575050505050614102565b6140f982602001850186613a13565b82955050505050505b90565b61410e8161392b565b811461411957600080fd5b50565b6141258161393d565b811461413057600080fd5b50565b61413c81613949565b811461414757600080fd5b50565b61415381613995565b811461415e57600080fd5b5056fea264697066735822122090b9b86367331acac65fbc79d27dd1c68ba9277fcc50c886da8e2bd637ed808664736f6c63430008070033546f74616c6c792048616e642d43726166746564204d657461766572736573206279205448432047726f7570
Deployed ByteCode Sourcemap
47491:1390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28670:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27693:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47580:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47937:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48365:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30614:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48115:65;;;:::i;:::-;;29066:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45148:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4957:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47064:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7822:103;;;:::i;:::-;;48188:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48046:61;;;:::i;:::-;;47809:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7174:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47605:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29663:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44937:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29890:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30130:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8080:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46729:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28670:230;28756:7;28803:1;28784:21;;:7;:21;;;;28776:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28870:9;:13;28880:2;28870:13;;;;;;;;;;;:22;28884:7;28870:22;;;;;;;;;;;;;;;;28863:29;;28670:230;;;;:::o;27693:310::-;27795:4;27847:26;27832:41;;;:11;:41;;;;:110;;;;27905:37;27890:52;;;:11;:52;;;;27832:110;:163;;;;27959:36;27983:11;27959:23;:36::i;:::-;27832:163;27812:183;;27693:310;;;:::o;47580:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47937:101::-;47990:13;48019:8;:13;48028:3;48019:13;;;;;;;;;;;48012:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47937:101;;;:::o;48365:191::-;7060:13;:11;:13::i;:::-;48514:34:::1;48525:2;48529:3;48534:7;48543:4;48514:10;:34::i;:::-;48365:191:::0;;;;:::o;30614:439::-;30855:12;:10;:12::i;:::-;30847:20;;:4;:20;;;:60;;;;30871:36;30888:4;30894:12;:10;:12::i;:::-;30871:16;:36::i;:::-;30847:60;30825:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;30993:52;31016:4;31022:2;31026:3;31031:7;31040:4;30993:22;:52::i;:::-;30614:439;;;;;:::o;48115:65::-;7060:13;:11;:13::i;:::-;48162:10:::1;:8;:10::i;:::-;48115:65::o:0;29066:524::-;29222:16;29283:3;:10;29264:8;:15;:29;29256:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29352:30;29399:8;:15;29385:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29352:63;;29433:9;29428:122;29452:8;:15;29448:1;:19;29428:122;;;29508:30;29518:8;29527:1;29518:11;;;;;;;;:::i;:::-;;;;;;;;29531:3;29535:1;29531:6;;;;;;;;:::i;:::-;;;;;;;;29508:9;:30::i;:::-;29489:13;29503:1;29489:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;29469:3;;;;:::i;:::-;;;29428:122;;;;29569:13;29562:20;;;29066:524;;;;:::o;45148:122::-;45205:4;45261:1;45229:29;45255:2;45229:25;:29::i;:::-;:33;45222:40;;45148:122;;;:::o;4957:86::-;5004:4;5028:7;;;;;;;;;;;5021:14;;4957:86;:::o;47064:359::-;47240:12;:10;:12::i;:::-;47229:23;;:7;:23;;;:66;;;;47256:39;47273:7;47282:12;:10;:12::i;:::-;47256:16;:39::i;:::-;47229:66;47207:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;47383:32;47394:7;47403:3;47408:6;47383:10;:32::i;:::-;47064:359;;;:::o;7822:103::-;7060:13;:11;:13::i;:::-;7887:30:::1;7914:1;7887:18;:30::i;:::-;7822:103::o:0;48188:169::-;7060:13;:11;:13::i;:::-;48317:32:::1;48323:7;48332:2;48336:6;48344:4;48317:5;:32::i;:::-;48188:169:::0;;;;:::o;48046:61::-;7060:13;:11;:13::i;:::-;48091:8:::1;:6;:8::i;:::-;48046:61::o:0;47809:122::-;7060:13;:11;:13::i;:::-;47895:4:::1;47879:8;:13;47888:3;47879:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;47921:3;47911:14;47915:4;47911:14;;;;;;:::i;:::-;;;;;;;;47809:122:::0;;:::o;7174:87::-;7220:7;7247:6;;;;;;;;;;;7240:13;;7174:87;:::o;47605:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29663:155::-;29758:52;29777:12;:10;:12::i;:::-;29791:8;29801;29758:18;:52::i;:::-;29663:155;;:::o;44937:113::-;44999:7;45026:12;:16;45039:2;45026:16;;;;;;;;;;;;45019:23;;44937:113;;;:::o;29890:168::-;29989:4;30013:18;:27;30032:7;30013:27;;;;;;;;;;;;;;;:37;30041:8;30013:37;;;;;;;;;;;;;;;;;;;;;;;;;30006:44;;29890:168;;;;:::o;30130:407::-;30346:12;:10;:12::i;:::-;30338:20;;:4;:20;;;:60;;;;30362:36;30379:4;30385:12;:10;:12::i;:::-;30362:16;:36::i;:::-;30338:60;30316:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;30484:45;30502:4;30508:2;30512;30516:6;30524:4;30484:17;:45::i;:::-;30130:407;;;;;:::o;8080:201::-;7060:13;:11;:13::i;:::-;8189:1:::1;8169:22;;:8;:22;;;;8161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8245:28;8264:8;8245:18;:28::i;:::-;8080:201:::0;:::o;46729:327::-;46880:12;:10;:12::i;:::-;46869:23;;:7;:23;;;:66;;;;46896:39;46913:7;46922:12;:10;:12::i;:::-;46896:16;:39::i;:::-;46869:66;46847:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;47023:25;47029:7;47038:2;47042:5;47023;:25::i;:::-;46729:327;;;:::o;18974:157::-;19059:4;19098:25;19083:40;;;:11;:40;;;;19076:47;;18974:157;;;:::o;7339:132::-;7414:12;:10;:12::i;:::-;7403:23;;:7;:5;:7::i;:::-;:23;;;7395:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7339:132::o;36445:813::-;36637:1;36623:16;;:2;:16;;;;36615:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36710:7;:14;36696:3;:10;:28;36688:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36782:16;36801:12;:10;:12::i;:::-;36782:31;;36826:66;36847:8;36865:1;36869:2;36873:3;36878:7;36887:4;36826:20;:66::i;:::-;36910:9;36905:103;36929:3;:10;36925:1;:14;36905:103;;;36986:7;36994:1;36986:10;;;;;;;;:::i;:::-;;;;;;;;36961:9;:17;36971:3;36975:1;36971:6;;;;;;;;:::i;:::-;;;;;;;;36961:17;;;;;;;;;;;:21;36979:2;36961:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;36941:3;;;;;:::i;:::-;;;;36905:103;;;;37061:2;37025:53;;37057:1;37025:53;;37039:8;37025:53;;;37065:3;37070:7;37025:53;;;;;;;:::i;:::-;;;;;;;;37091:65;37111:8;37129:1;37133:2;37137:3;37142:7;37151:4;37091:19;:65::i;:::-;37169:81;37205:8;37223:1;37227:2;37231:3;37236:7;37245:4;37169:35;:81::i;:::-;36604:654;36445:813;;;;:::o;3073:98::-;3126:7;3153:10;3146:17;;3073:98;:::o;32849:1146::-;33076:7;:14;33062:3;:10;:28;33054:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33168:1;33154:16;;:2;:16;;;;33146:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33225:16;33244:12;:10;:12::i;:::-;33225:31;;33269:60;33290:8;33300:4;33306:2;33310:3;33315:7;33324:4;33269:20;:60::i;:::-;33347:9;33342:421;33366:3;:10;33362:1;:14;33342:421;;;33398:10;33411:3;33415:1;33411:6;;;;;;;;:::i;:::-;;;;;;;;33398:19;;33432:14;33449:7;33457:1;33449:10;;;;;;;;:::i;:::-;;;;;;;;33432:27;;33476:19;33498:9;:13;33508:2;33498:13;;;;;;;;;;;:19;33512:4;33498:19;;;;;;;;;;;;;;;;33476:41;;33555:6;33540:11;:21;;33532:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33688:6;33674:11;:20;33652:9;:13;33662:2;33652:13;;;;;;;;;;;:19;33666:4;33652:19;;;;;;;;;;;;;;;:42;;;;33745:6;33724:9;:13;33734:2;33724:13;;;;;;;;;;;:17;33738:2;33724:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33383:380;;;33378:3;;;;:::i;:::-;;;33342:421;;;;33810:2;33780:47;;33804:4;33780:47;;33794:8;33780:47;;;33814:3;33819:7;33780:47;;;;;;;:::i;:::-;;;;;;;;33840:59;33860:8;33870:4;33876:2;33880:3;33885:7;33894:4;33840:19;:59::i;:::-;33912:75;33948:8;33958:4;33964:2;33968:3;33973:7;33982:4;33912:35;:75::i;:::-;33043:952;32849:1146;;;;;:::o;5812:120::-;4821:16;:14;:16::i;:::-;5881:5:::1;5871:7;;:15;;;;;;;;;;;;;;;;;;5902:22;5911:12;:10;:12::i;:::-;5902:22;;;;;;:::i;:::-;;;;;;;;5812:120::o:0;38614:969::-;38782:1;38766:18;;:4;:18;;;;38758:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38857:7;:14;38843:3;:10;:28;38835:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38929:16;38948:12;:10;:12::i;:::-;38929:31;;38973:66;38994:8;39004:4;39018:1;39022:3;39027:7;38973:66;;;;;;;;;;;;:20;:66::i;:::-;39057:9;39052:373;39076:3;:10;39072:1;:14;39052:373;;;39108:10;39121:3;39125:1;39121:6;;;;;;;;:::i;:::-;;;;;;;;39108:19;;39142:14;39159:7;39167:1;39159:10;;;;;;;;:::i;:::-;;;;;;;;39142:27;;39186:19;39208:9;:13;39218:2;39208:13;;;;;;;;;;;:19;39222:4;39208:19;;;;;;;;;;;;;;;;39186:41;;39265:6;39250:11;:21;;39242:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39392:6;39378:11;:20;39356:9;:13;39366:2;39356:13;;;;;;;;;;;:19;39370:4;39356:19;;;;;;;;;;;;;;;:42;;;;39093:332;;;39088:3;;;;;:::i;:::-;;;;39052:373;;;;39480:1;39442:55;;39466:4;39442:55;;39456:8;39442:55;;;39484:3;39489:7;39442:55;;;;;;;:::i;:::-;;;;;;;;39510:65;39530:8;39540:4;39554:1;39558:3;39563:7;39510:65;;;;;;;;;;;;:19;:65::i;:::-;38747:836;38614:969;;;:::o;8441:191::-;8515:16;8534:6;;;;;;;;;;;8515:25;;8560:8;8551:6;;:17;;;;;;;;;;;;;;;;;;8615:8;8584:40;;8605:8;8584:40;;;;;;;;;;;;8504:128;8441:191;:::o;35313:729::-;35480:1;35466:16;;:2;:16;;;;35458:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35533:16;35552:12;:10;:12::i;:::-;35533:31;;35575:20;35598:21;35616:2;35598:17;:21::i;:::-;35575:44;;35630:24;35657:25;35675:6;35657:17;:25::i;:::-;35630:52;;35695:66;35716:8;35734:1;35738:2;35742:3;35747:7;35756:4;35695:20;:66::i;:::-;35795:6;35774:9;:13;35784:2;35774:13;;;;;;;;;;;:17;35788:2;35774:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35854:2;35817:52;;35850:1;35817:52;;35832:8;35817:52;;;35858:2;35862:6;35817:52;;;;;;;:::i;:::-;;;;;;;;35882:65;35902:8;35920:1;35924:2;35928:3;35933:7;35942:4;35882:19;:65::i;:::-;35960:74;35991:8;36009:1;36013:2;36017;36021:6;36029:4;35960:30;:74::i;:::-;35447:595;;;35313:729;;;;:::o;5553:118::-;4562:19;:17;:19::i;:::-;5623:4:::1;5613:7;;:14;;;;;;;;;;;;;;;;;;5643:20;5650:12;:10;:12::i;:::-;5643:20;;;;;;:::i;:::-;;;;;;;;5553:118::o:0;39726:331::-;39881:8;39872:17;;:5;:17;;;;39864:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39984:8;39946:18;:25;39965:5;39946:25;;;;;;;;;;;;;;;:35;39972:8;39946:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40030:8;40008:41;;40023:5;40008:41;;;40040:8;40008:41;;;;;;:::i;:::-;;;;;;;;39726:331;;;:::o;31517:974::-;31719:1;31705:16;;:2;:16;;;;31697:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31776:16;31795:12;:10;:12::i;:::-;31776:31;;31818:20;31841:21;31859:2;31841:17;:21::i;:::-;31818:44;;31873:24;31900:25;31918:6;31900:17;:25::i;:::-;31873:52;;31938:60;31959:8;31969:4;31975:2;31979:3;31984:7;31993:4;31938:20;:60::i;:::-;32011:19;32033:9;:13;32043:2;32033:13;;;;;;;;;;;:19;32047:4;32033:19;;;;;;;;;;;;;;;;32011:41;;32086:6;32071:11;:21;;32063:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32211:6;32197:11;:20;32175:9;:13;32185:2;32175:13;;;;;;;;;;;:19;32189:4;32175:19;;;;;;;;;;;;;;;:42;;;;32260:6;32239:9;:13;32249:2;32239:13;;;;;;;;;;;:17;32253:2;32239:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32315:2;32284:46;;32309:4;32284:46;;32299:8;32284:46;;;32319:2;32323:6;32284:46;;;;;;;:::i;:::-;;;;;;;;32343:59;32363:8;32373:4;32379:2;32383:3;32388:7;32397:4;32343:19;:59::i;:::-;32415:68;32446:8;32456:4;32462:2;32466;32470:6;32478:4;32415:30;:68::i;:::-;31686:805;;;;31517:974;;;;;:::o;37556:808::-;37699:1;37683:18;;:4;:18;;;;37675:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37754:16;37773:12;:10;:12::i;:::-;37754:31;;37796:20;37819:21;37837:2;37819:17;:21::i;:::-;37796:44;;37851:24;37878:25;37896:6;37878:17;:25::i;:::-;37851:52;;37916:66;37937:8;37947:4;37961:1;37965:3;37970:7;37916:66;;;;;;;;;;;;:20;:66::i;:::-;37995:19;38017:9;:13;38027:2;38017:13;;;;;;;;;;;:19;38031:4;38017:19;;;;;;;;;;;;;;;;37995:41;;38070:6;38055:11;:21;;38047:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38189:6;38175:11;:20;38153:9;:13;38163:2;38153:13;;;;;;;;;;;:19;38167:4;38153:19;;;;;;;;;;;;;;;:42;;;;38263:1;38224:54;;38249:4;38224:54;;38239:8;38224:54;;;38267:2;38271:6;38224:54;;;;;;;:::i;:::-;;;;;;;;38291:65;38311:8;38321:4;38335:1;38339:3;38344:7;38291:65;;;;;;;;;;;;:19;:65::i;:::-;37664:700;;;;37556:808;;;:::o;48564:314::-;4562:19;:17;:19::i;:::-;48804:66:::1;48831:8;48841:4;48847:2;48851:3;48856:7;48865:4;48804:26;:66::i;:::-;48564:314:::0;;;;;;:::o;42191:220::-;;;;;;;:::o;43171:813::-;43411:15;:2;:13;;;:15::i;:::-;43407:570;;;43464:2;43447:43;;;43491:8;43501:4;43507:3;43512:7;43521:4;43447:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43443:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;43839:6;43832:14;;;;;;;;;;;:::i;:::-;;;;;;;;43443:523;;;43888:62;;;;;;;;;;:::i;:::-;;;;;;;;43443:523;43620:48;;;43608:60;;;:8;:60;;;;43604:159;;43693:50;;;;;;;;;;:::i;:::-;;;;;;;;43604:159;43527:251;43407:570;43171:813;;;;;;:::o;5301:108::-;5368:8;:6;:8::i;:::-;5360:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5301:108::o;43992:198::-;44058:16;44087:22;44126:1;44112:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44087:41;;44150:7;44139:5;44145:1;44139:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;44177:5;44170:12;;;43992:198;;;:::o;42419:744::-;42634:15;:2;:13;;;:15::i;:::-;42630:526;;;42687:2;42670:38;;;42709:8;42719:4;42725:2;42729:6;42737:4;42670:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42666:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;43018:6;43011:14;;;;;;;;;;;:::i;:::-;;;;;;;;42666:479;;;43067:62;;;;;;;;;;:::i;:::-;;;;;;;;42666:479;42804:43;;;42792:55;;;:8;:55;;;;42788:154;;42872:50;;;;;;;;;;:::i;:::-;;;;;;;;42788:154;42743:214;42630:526;42419:744;;;;;;:::o;5116:108::-;5187:8;:6;:8::i;:::-;5186:9;5178:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5116:108::o;45345:931::-;45584:66;45611:8;45621:4;45627:2;45631:3;45636:7;45645:4;45584:26;:66::i;:::-;45683:1;45667:18;;:4;:18;;;45663:160;;;45707:9;45702:110;45726:3;:10;45722:1;:14;45702:110;;;45786:7;45794:1;45786:10;;;;;;;;:::i;:::-;;;;;;;;45762:12;:20;45775:3;45779:1;45775:6;;;;;;;;:::i;:::-;;;;;;;;45762:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;45738:3;;;;:::i;:::-;;;45702:110;;;;45663:160;45853:1;45839:16;;:2;:16;;;45835:434;;;45877:9;45872:386;45896:3;:10;45892:1;:14;45872:386;;;45932:10;45945:3;45949:1;45945:6;;;;;;;;:::i;:::-;;;;;;;;45932:19;;45970:14;45987:7;45995:1;45987:10;;;;;;;;:::i;:::-;;;;;;;;45970:27;;46016:14;46033:12;:16;46046:2;46033:16;;;;;;;;;;;;46016:33;;46086:6;46076;:16;;46068:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46217:6;46208;:15;46189:12;:16;46202:2;46189:16;;;;;;;;;;;:34;;;;45913:345;;;45908:3;;;;:::i;:::-;;;45872:386;;;;45835:434;45345:931;;;;;;:::o;9872:326::-;9932:4;10189:1;10167:7;:19;;;:23;10160:30;;9872:326;;;:::o;41015:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:1363::-;9168:6;9176;9184;9192;9241:3;9229:9;9220:7;9216:23;9212:33;9209:120;;;9248:79;;:::i;:::-;9209:120;9368:1;9393:53;9438:7;9429:6;9418:9;9414:22;9393:53;:::i;:::-;9383:63;;9339:117;9523:2;9512:9;9508:18;9495:32;9554:18;9546:6;9543:30;9540:117;;;9576:79;;:::i;:::-;9540:117;9681:78;9751:7;9742:6;9731:9;9727:22;9681:78;:::i;:::-;9671:88;;9466:303;9836:2;9825:9;9821:18;9808:32;9867:18;9859:6;9856:30;9853:117;;;9889:79;;:::i;:::-;9853:117;9994:78;10064:7;10055:6;10044:9;10040:22;9994:78;:::i;:::-;9984:88;;9779:303;10149:2;10138:9;10134:18;10121:32;10180:18;10172:6;10169:30;10166:117;;;10202:79;;:::i;:::-;10166:117;10307:62;10361:7;10352:6;10341:9;10337:22;10307:62;:::i;:::-;10297:72;;10092:287;9023:1363;;;;;;;:::o;10392:468::-;10457:6;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;;:::i;:::-;10482:119;10640:1;10665:53;10710:7;10701:6;10690:9;10686:22;10665:53;:::i;:::-;10655:63;;10611:117;10767:2;10793:50;10835:7;10826:6;10815:9;10811:22;10793:50;:::i;:::-;10783:60;;10738:115;10392:468;;;;;:::o;10866:474::-;10934:6;10942;10991:2;10979:9;10970:7;10966:23;10962:32;10959:119;;;10997:79;;:::i;:::-;10959:119;11117:1;11142:53;11187:7;11178:6;11167:9;11163:22;11142:53;:::i;:::-;11132:63;;11088:117;11244:2;11270:53;11315:7;11306:6;11295:9;11291:22;11270:53;:::i;:::-;11260:63;;11215:118;10866:474;;;;;:::o;11346:619::-;11423:6;11431;11439;11488:2;11476:9;11467:7;11463:23;11459:32;11456:119;;;11494:79;;:::i;:::-;11456:119;11614:1;11639:53;11684:7;11675:6;11664:9;11660:22;11639:53;:::i;:::-;11629:63;;11585:117;11741:2;11767:53;11812:7;11803:6;11792:9;11788:22;11767:53;:::i;:::-;11757:63;;11712:118;11869:2;11895:53;11940:7;11931:6;11920:9;11916:22;11895:53;:::i;:::-;11885:63;;11840:118;11346:619;;;;;:::o;11971:943::-;12066:6;12074;12082;12090;12139:3;12127:9;12118:7;12114:23;12110:33;12107:120;;;12146:79;;:::i;:::-;12107:120;12266:1;12291:53;12336:7;12327:6;12316:9;12312:22;12291:53;:::i;:::-;12281:63;;12237:117;12393:2;12419:53;12464:7;12455:6;12444:9;12440:22;12419:53;:::i;:::-;12409:63;;12364:118;12521:2;12547:53;12592:7;12583:6;12572:9;12568:22;12547:53;:::i;:::-;12537:63;;12492:118;12677:2;12666:9;12662:18;12649:32;12708:18;12700:6;12697:30;12694:117;;;12730:79;;:::i;:::-;12694:117;12835:62;12889:7;12880:6;12869:9;12865:22;12835:62;:::i;:::-;12825:72;;12620:287;11971:943;;;;;;;:::o;12920:894::-;13038:6;13046;13095:2;13083:9;13074:7;13070:23;13066:32;13063:119;;;13101:79;;:::i;:::-;13063:119;13249:1;13238:9;13234:17;13221:31;13279:18;13271:6;13268:30;13265:117;;;13301:79;;:::i;:::-;13265:117;13406:78;13476:7;13467:6;13456:9;13452:22;13406:78;:::i;:::-;13396:88;;13192:302;13561:2;13550:9;13546:18;13533:32;13592:18;13584:6;13581:30;13578:117;;;13614:79;;:::i;:::-;13578:117;13719:78;13789:7;13780:6;13769:9;13765:22;13719:78;:::i;:::-;13709:88;;13504:303;12920:894;;;;;:::o;13820:327::-;13878:6;13927:2;13915:9;13906:7;13902:23;13898:32;13895:119;;;13933:79;;:::i;:::-;13895:119;14053:1;14078:52;14122:7;14113:6;14102:9;14098:22;14078:52;:::i;:::-;14068:62;;14024:116;13820:327;;;;:::o;14153:349::-;14222:6;14271:2;14259:9;14250:7;14246:23;14242:32;14239:119;;;14277:79;;:::i;:::-;14239:119;14397:1;14422:63;14477:7;14468:6;14457:9;14453:22;14422:63;:::i;:::-;14412:73;;14368:127;14153:349;;;;:::o;14508:329::-;14567:6;14616:2;14604:9;14595:7;14591:23;14587:32;14584:119;;;14622:79;;:::i;:::-;14584:119;14742:1;14767:53;14812:7;14803:6;14792:9;14788:22;14767:53;:::i;:::-;14757:63;;14713:117;14508:329;;;;:::o;14843:654::-;14921:6;14929;14978:2;14966:9;14957:7;14953:23;14949:32;14946:119;;;14984:79;;:::i;:::-;14946:119;15104:1;15129:53;15174:7;15165:6;15154:9;15150:22;15129:53;:::i;:::-;15119:63;;15075:117;15259:2;15248:9;15244:18;15231:32;15290:18;15282:6;15279:30;15276:117;;;15312:79;;:::i;:::-;15276:117;15417:63;15472:7;15463:6;15452:9;15448:22;15417:63;:::i;:::-;15407:73;;15202:288;14843:654;;;;;:::o;15503:179::-;15572:10;15593:46;15635:3;15627:6;15593:46;:::i;:::-;15671:4;15666:3;15662:14;15648:28;;15503:179;;;;:::o;15688:118::-;15775:24;15793:5;15775:24;:::i;:::-;15770:3;15763:37;15688:118;;:::o;15842:732::-;15961:3;15990:54;16038:5;15990:54;:::i;:::-;16060:86;16139:6;16134:3;16060:86;:::i;:::-;16053:93;;16170:56;16220:5;16170:56;:::i;:::-;16249:7;16280:1;16265:284;16290:6;16287:1;16284:13;16265:284;;;16366:6;16360:13;16393:63;16452:3;16437:13;16393:63;:::i;:::-;16386:70;;16479:60;16532:6;16479:60;:::i;:::-;16469:70;;16325:224;16312:1;16309;16305:9;16300:14;;16265:284;;;16269:14;16565:3;16558:10;;15966:608;;;15842:732;;;;:::o;16580:109::-;16661:21;16676:5;16661:21;:::i;:::-;16656:3;16649:34;16580:109;;:::o;16695:360::-;16781:3;16809:38;16841:5;16809:38;:::i;:::-;16863:70;16926:6;16921:3;16863:70;:::i;:::-;16856:77;;16942:52;16987:6;16982:3;16975:4;16968:5;16964:16;16942:52;:::i;:::-;17019:29;17041:6;17019:29;:::i;:::-;17014:3;17010:39;17003:46;;16785:270;16695:360;;;;:::o;17061:364::-;17149:3;17177:39;17210:5;17177:39;:::i;:::-;17232:71;17296:6;17291:3;17232:71;:::i;:::-;17225:78;;17312:52;17357:6;17352:3;17345:4;17338:5;17334:16;17312:52;:::i;:::-;17389:29;17411:6;17389:29;:::i;:::-;17384:3;17380:39;17373:46;;17153:272;17061:364;;;;:::o;17431:366::-;17573:3;17594:67;17658:2;17653:3;17594:67;:::i;:::-;17587:74;;17670:93;17759:3;17670:93;:::i;:::-;17788:2;17783:3;17779:12;17772:19;;17431:366;;;:::o;17803:::-;17945:3;17966:67;18030:2;18025:3;17966:67;:::i;:::-;17959:74;;18042:93;18131:3;18042:93;:::i;:::-;18160:2;18155:3;18151:12;18144:19;;17803:366;;;:::o;18175:::-;18317:3;18338:67;18402:2;18397:3;18338:67;:::i;:::-;18331:74;;18414:93;18503:3;18414:93;:::i;:::-;18532:2;18527:3;18523:12;18516:19;;18175:366;;;:::o;18547:::-;18689:3;18710:67;18774:2;18769:3;18710:67;:::i;:::-;18703:74;;18786:93;18875:3;18786:93;:::i;:::-;18904:2;18899:3;18895:12;18888:19;;18547:366;;;:::o;18919:::-;19061:3;19082:67;19146:2;19141:3;19082:67;:::i;:::-;19075:74;;19158:93;19247:3;19158:93;:::i;:::-;19276:2;19271:3;19267:12;19260:19;;18919:366;;;:::o;19291:::-;19433:3;19454:67;19518:2;19513:3;19454:67;:::i;:::-;19447:74;;19530:93;19619:3;19530:93;:::i;:::-;19648:2;19643:3;19639:12;19632:19;;19291:366;;;:::o;19663:::-;19805:3;19826:67;19890:2;19885:3;19826:67;:::i;:::-;19819:74;;19902:93;19991:3;19902:93;:::i;:::-;20020:2;20015:3;20011:12;20004:19;;19663:366;;;:::o;20035:::-;20177:3;20198:67;20262:2;20257:3;20198:67;:::i;:::-;20191:74;;20274:93;20363:3;20274:93;:::i;:::-;20392:2;20387:3;20383:12;20376:19;;20035:366;;;:::o;20407:::-;20549:3;20570:67;20634:2;20629:3;20570:67;:::i;:::-;20563:74;;20646:93;20735:3;20646:93;:::i;:::-;20764:2;20759:3;20755:12;20748:19;;20407:366;;;:::o;20779:::-;20921:3;20942:67;21006:2;21001:3;20942:67;:::i;:::-;20935:74;;21018:93;21107:3;21018:93;:::i;:::-;21136:2;21131:3;21127:12;21120:19;;20779:366;;;:::o;21151:::-;21293:3;21314:67;21378:2;21373:3;21314:67;:::i;:::-;21307:74;;21390:93;21479:3;21390:93;:::i;:::-;21508:2;21503:3;21499:12;21492:19;;21151:366;;;:::o;21523:::-;21665:3;21686:67;21750:2;21745:3;21686:67;:::i;:::-;21679:74;;21762:93;21851:3;21762:93;:::i;:::-;21880:2;21875:3;21871:12;21864:19;;21523:366;;;:::o;21895:::-;22037:3;22058:67;22122:2;22117:3;22058:67;:::i;:::-;22051:74;;22134:93;22223:3;22134:93;:::i;:::-;22252:2;22247:3;22243:12;22236:19;;21895:366;;;:::o;22267:::-;22409:3;22430:67;22494:2;22489:3;22430:67;:::i;:::-;22423:74;;22506:93;22595:3;22506:93;:::i;:::-;22624:2;22619:3;22615:12;22608:19;;22267:366;;;:::o;22639:::-;22781:3;22802:67;22866:2;22861:3;22802:67;:::i;:::-;22795:74;;22878:93;22967:3;22878:93;:::i;:::-;22996:2;22991:3;22987:12;22980:19;;22639:366;;;:::o;23011:::-;23153:3;23174:67;23238:2;23233:3;23174:67;:::i;:::-;23167:74;;23250:93;23339:3;23250:93;:::i;:::-;23368:2;23363:3;23359:12;23352:19;;23011:366;;;:::o;23383:::-;23525:3;23546:67;23610:2;23605:3;23546:67;:::i;:::-;23539:74;;23622:93;23711:3;23622:93;:::i;:::-;23740:2;23735:3;23731:12;23724:19;;23383:366;;;:::o;23755:108::-;23832:24;23850:5;23832:24;:::i;:::-;23827:3;23820:37;23755:108;;:::o;23869:118::-;23956:24;23974:5;23956:24;:::i;:::-;23951:3;23944:37;23869:118;;:::o;23993:222::-;24086:4;24124:2;24113:9;24109:18;24101:26;;24137:71;24205:1;24194:9;24190:17;24181:6;24137:71;:::i;:::-;23993:222;;;;:::o;24221:1053::-;24544:4;24582:3;24571:9;24567:19;24559:27;;24596:71;24664:1;24653:9;24649:17;24640:6;24596:71;:::i;:::-;24677:72;24745:2;24734:9;24730:18;24721:6;24677:72;:::i;:::-;24796:9;24790:4;24786:20;24781:2;24770:9;24766:18;24759:48;24824:108;24927:4;24918:6;24824:108;:::i;:::-;24816:116;;24979:9;24973:4;24969:20;24964:2;24953:9;24949:18;24942:48;25007:108;25110:4;25101:6;25007:108;:::i;:::-;24999:116;;25163:9;25157:4;25153:20;25147:3;25136:9;25132:19;25125:49;25191:76;25262:4;25253:6;25191:76;:::i;:::-;25183:84;;24221:1053;;;;;;;;:::o;25280:751::-;25503:4;25541:3;25530:9;25526:19;25518:27;;25555:71;25623:1;25612:9;25608:17;25599:6;25555:71;:::i;:::-;25636:72;25704:2;25693:9;25689:18;25680:6;25636:72;:::i;:::-;25718;25786:2;25775:9;25771:18;25762:6;25718:72;:::i;:::-;25800;25868:2;25857:9;25853:18;25844:6;25800:72;:::i;:::-;25920:9;25914:4;25910:20;25904:3;25893:9;25889:19;25882:49;25948:76;26019:4;26010:6;25948:76;:::i;:::-;25940:84;;25280:751;;;;;;;;:::o;26037:373::-;26180:4;26218:2;26207:9;26203:18;26195:26;;26267:9;26261:4;26257:20;26253:1;26242:9;26238:17;26231:47;26295:108;26398:4;26389:6;26295:108;:::i;:::-;26287:116;;26037:373;;;;:::o;26416:634::-;26637:4;26675:2;26664:9;26660:18;26652:26;;26724:9;26718:4;26714:20;26710:1;26699:9;26695:17;26688:47;26752:108;26855:4;26846:6;26752:108;:::i;:::-;26744:116;;26907:9;26901:4;26897:20;26892:2;26881:9;26877:18;26870:48;26935:108;27038:4;27029:6;26935:108;:::i;:::-;26927:116;;26416:634;;;;;:::o;27056:210::-;27143:4;27181:2;27170:9;27166:18;27158:26;;27194:65;27256:1;27245:9;27241:17;27232:6;27194:65;:::i;:::-;27056:210;;;;:::o;27272:313::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27472:9;27466:4;27462:20;27458:1;27447:9;27443:17;27436:47;27500:78;27573:4;27564:6;27500:78;:::i;:::-;27492:86;;27272:313;;;;:::o;27591:419::-;27757:4;27795:2;27784:9;27780:18;27772:26;;27844:9;27838:4;27834:20;27830:1;27819:9;27815:17;27808:47;27872:131;27998:4;27872:131;:::i;:::-;27864:139;;27591:419;;;:::o;28016:::-;28182:4;28220:2;28209:9;28205:18;28197:26;;28269:9;28263:4;28259:20;28255:1;28244:9;28240:17;28233:47;28297:131;28423:4;28297:131;:::i;:::-;28289:139;;28016:419;;;:::o;28441:::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:::-;29457:4;29495:2;29484:9;29480:18;29472:26;;29544:9;29538:4;29534:20;29530:1;29519:9;29515:17;29508:47;29572:131;29698:4;29572:131;:::i;:::-;29564:139;;29291:419;;;:::o;29716:::-;29882:4;29920:2;29909:9;29905:18;29897:26;;29969:9;29963:4;29959:20;29955:1;29944:9;29940:17;29933:47;29997:131;30123:4;29997:131;:::i;:::-;29989:139;;29716:419;;;:::o;30141:::-;30307:4;30345:2;30334:9;30330:18;30322:26;;30394:9;30388:4;30384:20;30380:1;30369:9;30365:17;30358:47;30422:131;30548:4;30422:131;:::i;:::-;30414:139;;30141:419;;;:::o;30566:::-;30732:4;30770:2;30759:9;30755:18;30747:26;;30819:9;30813:4;30809:20;30805:1;30794:9;30790:17;30783:47;30847:131;30973:4;30847:131;:::i;:::-;30839:139;;30566:419;;;:::o;30991:::-;31157:4;31195:2;31184:9;31180:18;31172:26;;31244:9;31238:4;31234:20;31230:1;31219:9;31215:17;31208:47;31272:131;31398:4;31272:131;:::i;:::-;31264:139;;30991:419;;;:::o;31416:::-;31582:4;31620:2;31609:9;31605:18;31597:26;;31669:9;31663:4;31659:20;31655:1;31644:9;31640:17;31633:47;31697:131;31823:4;31697:131;:::i;:::-;31689:139;;31416:419;;;:::o;31841:::-;32007:4;32045:2;32034:9;32030:18;32022:26;;32094:9;32088:4;32084:20;32080:1;32069:9;32065:17;32058:47;32122:131;32248:4;32122:131;:::i;:::-;32114:139;;31841:419;;;:::o;32266:::-;32432:4;32470:2;32459:9;32455:18;32447:26;;32519:9;32513:4;32509:20;32505:1;32494:9;32490:17;32483:47;32547:131;32673:4;32547:131;:::i;:::-;32539:139;;32266:419;;;:::o;32691:::-;32857:4;32895:2;32884:9;32880:18;32872:26;;32944:9;32938:4;32934:20;32930:1;32919:9;32915:17;32908:47;32972:131;33098:4;32972:131;:::i;:::-;32964:139;;32691:419;;;:::o;33116:::-;33282:4;33320:2;33309:9;33305:18;33297:26;;33369:9;33363:4;33359:20;33355:1;33344:9;33340:17;33333:47;33397:131;33523:4;33397:131;:::i;:::-;33389:139;;33116:419;;;:::o;33541:::-;33707:4;33745:2;33734:9;33730:18;33722:26;;33794:9;33788:4;33784:20;33780:1;33769:9;33765:17;33758:47;33822:131;33948:4;33822:131;:::i;:::-;33814:139;;33541:419;;;:::o;33966:::-;34132:4;34170:2;34159:9;34155:18;34147:26;;34219:9;34213:4;34209:20;34205:1;34194:9;34190:17;34183:47;34247:131;34373:4;34247:131;:::i;:::-;34239:139;;33966:419;;;:::o;34391:::-;34557:4;34595:2;34584:9;34580:18;34572:26;;34644:9;34638:4;34634:20;34630:1;34619:9;34615:17;34608:47;34672:131;34798:4;34672:131;:::i;:::-;34664:139;;34391:419;;;:::o;34816:222::-;34909:4;34947:2;34936:9;34932:18;34924:26;;34960:71;35028:1;35017:9;35013:17;35004:6;34960:71;:::i;:::-;34816:222;;;;:::o;35044:332::-;35165:4;35203:2;35192:9;35188:18;35180:26;;35216:71;35284:1;35273:9;35269:17;35260:6;35216:71;:::i;:::-;35297:72;35365:2;35354:9;35350:18;35341:6;35297:72;:::i;:::-;35044:332;;;;;:::o;35382:129::-;35416:6;35443:20;;:::i;:::-;35433:30;;35472:33;35500:4;35492:6;35472:33;:::i;:::-;35382:129;;;:::o;35517:75::-;35550:6;35583:2;35577:9;35567:19;;35517:75;:::o;35598:311::-;35675:4;35765:18;35757:6;35754:30;35751:56;;;35787:18;;:::i;:::-;35751:56;35837:4;35829:6;35825:17;35817:25;;35897:4;35891;35887:15;35879:23;;35598:311;;;:::o;35915:::-;35992:4;36082:18;36074:6;36071:30;36068:56;;;36104:18;;:::i;:::-;36068:56;36154:4;36146:6;36142:17;36134:25;;36214:4;36208;36204:15;36196:23;;35915:311;;;:::o;36232:307::-;36293:4;36383:18;36375:6;36372:30;36369:56;;;36405:18;;:::i;:::-;36369:56;36443:29;36465:6;36443:29;:::i;:::-;36435:37;;36527:4;36521;36517:15;36509:23;;36232:307;;;:::o;36545:308::-;36607:4;36697:18;36689:6;36686:30;36683:56;;;36719:18;;:::i;:::-;36683:56;36757:29;36779:6;36757:29;:::i;:::-;36749:37;;36841:4;36835;36831:15;36823:23;;36545:308;;;:::o;36859:132::-;36926:4;36949:3;36941:11;;36979:4;36974:3;36970:14;36962:22;;36859:132;;;:::o;36997:114::-;37064:6;37098:5;37092:12;37082:22;;36997:114;;;:::o;37117:98::-;37168:6;37202:5;37196:12;37186:22;;37117:98;;;:::o;37221:99::-;37273:6;37307:5;37301:12;37291:22;;37221:99;;;:::o;37326:113::-;37396:4;37428;37423:3;37419:14;37411:22;;37326:113;;;:::o;37445:184::-;37544:11;37578:6;37573:3;37566:19;37618:4;37613:3;37609:14;37594:29;;37445:184;;;;:::o;37635:168::-;37718:11;37752:6;37747:3;37740:19;37792:4;37787:3;37783:14;37768:29;;37635:168;;;;:::o;37809:169::-;37893:11;37927:6;37922:3;37915:19;37967:4;37962:3;37958:14;37943:29;;37809:169;;;;:::o;37984:305::-;38024:3;38043:20;38061:1;38043:20;:::i;:::-;38038:25;;38077:20;38095:1;38077:20;:::i;:::-;38072:25;;38231:1;38163:66;38159:74;38156:1;38153:81;38150:107;;;38237:18;;:::i;:::-;38150:107;38281:1;38278;38274:9;38267:16;;37984:305;;;;:::o;38295:96::-;38332:7;38361:24;38379:5;38361:24;:::i;:::-;38350:35;;38295:96;;;:::o;38397:90::-;38431:7;38474:5;38467:13;38460:21;38449:32;;38397:90;;;:::o;38493:149::-;38529:7;38569:66;38562:5;38558:78;38547:89;;38493:149;;;:::o;38648:126::-;38685:7;38725:42;38718:5;38714:54;38703:65;;38648:126;;;:::o;38780:77::-;38817:7;38846:5;38835:16;;38780:77;;;:::o;38863:154::-;38947:6;38942:3;38937;38924:30;39009:1;39000:6;38995:3;38991:16;38984:27;38863:154;;;:::o;39023:307::-;39091:1;39101:113;39115:6;39112:1;39109:13;39101:113;;;39200:1;39195:3;39191:11;39185:18;39181:1;39176:3;39172:11;39165:39;39137:2;39134:1;39130:10;39125:15;;39101:113;;;39232:6;39229:1;39226:13;39223:101;;;39312:1;39303:6;39298:3;39294:16;39287:27;39223:101;39072:258;39023:307;;;:::o;39336:320::-;39380:6;39417:1;39411:4;39407:12;39397:22;;39464:1;39458:4;39454:12;39485:18;39475:81;;39541:4;39533:6;39529:17;39519:27;;39475:81;39603:2;39595:6;39592:14;39572:18;39569:38;39566:84;;;39622:18;;:::i;:::-;39566:84;39387:269;39336:320;;;:::o;39662:281::-;39745:27;39767:4;39745:27;:::i;:::-;39737:6;39733:40;39875:6;39863:10;39860:22;39839:18;39827:10;39824:34;39821:62;39818:88;;;39886:18;;:::i;:::-;39818:88;39926:10;39922:2;39915:22;39705:238;39662:281;;:::o;39949:233::-;39988:3;40011:24;40029:5;40011:24;:::i;:::-;40002:33;;40057:66;40050:5;40047:77;40044:103;;;40127:18;;:::i;:::-;40044:103;40174:1;40167:5;40163:13;40156:20;;39949:233;;;:::o;40188:180::-;40236:77;40233:1;40226:88;40333:4;40330:1;40323:15;40357:4;40354:1;40347:15;40374:180;40422:77;40419:1;40412:88;40519:4;40516:1;40509:15;40543:4;40540:1;40533:15;40560:180;40608:77;40605:1;40598:88;40705:4;40702:1;40695:15;40729:4;40726:1;40719:15;40746:180;40794:77;40791:1;40784:88;40891:4;40888:1;40881:15;40915:4;40912:1;40905:15;40932:183;40967:3;41005:1;40987:16;40984:23;40981:128;;;41043:1;41040;41037;41022:23;41065:34;41096:1;41090:8;41065:34;:::i;:::-;41058:41;;40981:128;40932:183;:::o;41121:117::-;41230:1;41227;41220:12;41244:117;41353:1;41350;41343:12;41367:117;41476:1;41473;41466:12;41490:117;41599:1;41596;41589:12;41613:117;41722:1;41719;41712:12;41736:102;41777:6;41828:2;41824:7;41819:2;41812:5;41808:14;41804:28;41794:38;;41736:102;;;:::o;41844:106::-;41888:8;41937:5;41932:3;41928:15;41907:36;;41844:106;;;:::o;41956:239::-;42096:34;42092:1;42084:6;42080:14;42073:58;42165:22;42160:2;42152:6;42148:15;42141:47;41956:239;:::o;42201:234::-;42341:34;42337:1;42329:6;42325:14;42318:58;42410:17;42405:2;42397:6;42393:15;42386:42;42201:234;:::o;42441:227::-;42581:34;42577:1;42569:6;42565:14;42558:58;42650:10;42645:2;42637:6;42633:15;42626:35;42441:227;:::o;42674:170::-;42814:22;42810:1;42802:6;42798:14;42791:46;42674:170;:::o;42850:225::-;42990:34;42986:1;42978:6;42974:14;42967:58;43059:8;43054:2;43046:6;43042:15;43035:33;42850:225;:::o;43081:223::-;43221:34;43217:1;43209:6;43205:14;43198:58;43290:6;43285:2;43277:6;43273:15;43266:31;43081:223;:::o;43310:229::-;43450:34;43446:1;43438:6;43434:14;43427:58;43519:12;43514:2;43506:6;43502:15;43495:37;43310:229;:::o;43545:166::-;43685:18;43681:1;43673:6;43669:14;43662:42;43545:166;:::o;43717:224::-;43857:34;43853:1;43845:6;43841:14;43834:58;43926:7;43921:2;43913:6;43909:15;43902:32;43717:224;:::o;43947:222::-;44087:34;44083:1;44075:6;44071:14;44064:58;44156:5;44151:2;44143:6;44139:15;44132:30;43947:222;:::o;44175:229::-;44315:34;44311:1;44303:6;44299:14;44292:58;44384:12;44379:2;44371:6;44367:15;44360:37;44175:229;:::o;44410:182::-;44550:34;44546:1;44538:6;44534:14;44527:58;44410:182;:::o;44598:227::-;44738:34;44734:1;44726:6;44722:14;44715:58;44807:10;44802:2;44794:6;44790:15;44783:35;44598:227;:::o;44831:228::-;44971:34;44967:1;44959:6;44955:14;44948:58;45040:11;45035:2;45027:6;45023:15;45016:36;44831:228;:::o;45065:::-;45205:34;45201:1;45193:6;45189:14;45182:58;45274:11;45269:2;45261:6;45257:15;45250:36;45065:228;:::o;45299:227::-;45439:34;45435:1;45427:6;45423:14;45416:58;45508:10;45503:2;45495:6;45491:15;45484:35;45299:227;:::o;45532:220::-;45672:34;45668:1;45660:6;45656:14;45649:58;45741:3;45736:2;45728:6;45724:15;45717:28;45532:220;:::o;45758:711::-;45797:3;45835:4;45817:16;45814:26;45811:39;;;45843:5;;45811:39;45872:20;;:::i;:::-;45947:1;45929:16;45925:24;45922:1;45916:4;45901:49;45980:4;45974:11;46079:16;46072:4;46064:6;46060:17;46057:39;46024:18;46016:6;46013:30;45997:113;45994:146;;;46125:5;;;;45994:146;46171:6;46165:4;46161:17;46207:3;46201:10;46234:18;46226:6;46223:30;46220:43;;;46256:5;;;;;;46220:43;46304:6;46297:4;46292:3;46288:14;46284:27;46363:1;46345:16;46341:24;46335:4;46331:35;46326:3;46323:44;46320:57;;;46370:5;;;;;;;46320:57;46387;46435:6;46429:4;46425:17;46417:6;46413:30;46407:4;46387:57;:::i;:::-;46460:3;46453:10;;45801:668;;;;;45758:711;;:::o;46475:122::-;46548:24;46566:5;46548:24;:::i;:::-;46541:5;46538:35;46528:63;;46587:1;46584;46577:12;46528:63;46475:122;:::o;46603:116::-;46673:21;46688:5;46673:21;:::i;:::-;46666:5;46663:32;46653:60;;46709:1;46706;46699:12;46653:60;46603:116;:::o;46725:120::-;46797:23;46814:5;46797:23;:::i;:::-;46790:5;46787:34;46777:62;;46835:1;46832;46825:12;46777:62;46725:120;:::o;46851:122::-;46924:24;46942:5;46924:24;:::i;:::-;46917:5;46914:35;46904:63;;46963:1;46960;46953:12;46904:63;46851:122;:::o
Swarm Source
ipfs://90b9b86367331acac65fbc79d27dd1c68ba9277fcc50c886da8e2bd637ed8086
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.