ERC-1155
Overview
Max Total Supply
1,000 TGDG
Holders
92
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTArtGenPresale
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-21 */ // Sources flattened with hardhat v2.8.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // 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/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // 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/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // 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/utils/introspection/[email protected] // 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/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File contracts/NFTArtGenPresale.sol contract NFTArtGenPresale is ERC1155, Ownable { string public name; string public symbol; string public baseUri; uint256 public cost = 0.05 ether; uint32 public maxPerMint = 5; uint32 public maxPerWallet = 20; uint32 public supply = 0; uint32 public totalSupply = 0; bool public open = false; bool public presaleOpen = false; mapping(address => uint256) private addressMintedMap; bytes32 private merkleRoot; uint32 private commission = 49; // 4.9% address payable commissionAddress = payable(0x460Fd5059E7301680fA53E63bbBF7272E643e89C); constructor( string memory _uri, string memory _name, string memory _symbol, uint32 _totalSupply, uint256 _cost, bool _open ) ERC1155(_uri) { baseUri = _uri; name = _name; symbol = _symbol; totalSupply = _totalSupply; cost = _cost; open = _open; } function setURI(string memory _uri) public onlyOwner { _setURI(_uri); } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setOpen(bool _open) public onlyOwner { open = _open; } function setPresaleOpen(bool _open) public onlyOwner { presaleOpen = _open; } function setMaxPerWallet(uint32 _max) public onlyOwner { maxPerWallet = _max; } function setMaxPerMint(uint32 _max) public onlyOwner { maxPerMint = _max; } function setPreSaleAddresses(bytes32 root) public onlyOwner { merkleRoot = root; } function preMintChecks(uint32 count) internal { require(count > 0, "Mint at least one."); require(count <= maxPerMint, "Max mint reached."); require(msg.value >= cost * count, "Not enough fund."); require(supply + count <= totalSupply, "Mint sold out"); require( addressMintedMap[msg.sender] + count <= maxPerWallet, "Max total mint reached" ); } function performMint(uint32 count) internal { if (count > 1) { uint256[] memory ids = new uint256[](uint256(count)); uint256[] memory amounts = new uint256[](uint256(count)); for (uint32 i = 0; i < count; i++) { ids[i] = supply + i + 1; // Start at 1 amounts[i] = 1; } _mintBatch(msg.sender, ids, amounts, ""); } else { _mint(msg.sender, supply + 1, 1, ""); } supply += count; addressMintedMap[msg.sender] += count; (bool success, ) = payable(commissionAddress).call{ value: (msg.value * commission) / 1000 }(""); require(success); } function mint(uint32 count) external payable { preMintChecks(count); require(open == true, "Mint not open"); performMint(count); } function presaleMint(uint32 count, bytes32[] calldata proof) external payable { preMintChecks(count); require(presaleOpen, "Presale not open"); require(merkleRoot != "", "Not part of the presale"); require( MerkleProof.verify( proof, merkleRoot, keccak256(abi.encodePacked(msg.sender)) ), "Not part of the presale" ); performMint(count); } /* Only use `balanceOf` outside the contract! This will cause high gas fees during minting if called. */ function balanceOf(address account) public view returns (uint256) { uint256 balance = 0; for (uint256 i = 0; i <= supply; i++) { if (balanceOf(account, i) == 1) { balance += 1; } } return balance; } function airdrop(address[] calldata to) public onlyOwner { for (uint32 i = 0; i < to.length; i++) { require(1 + supply <= totalSupply, "Limit reached"); _mint(to[i], ++supply, 1, ""); } } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } function uri(uint256 _tokenId) public view override returns (string memory) { require(_tokenId <= supply, "Not minted yet"); return string( abi.encodePacked(baseUri, Strings.toString(_tokenId), ".json") ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint32","name":"_totalSupply","type":"uint32"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"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":[],"name":"baseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"maxPerMint","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","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":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setPreSaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setPresaleOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec500006007556005600860006101000a81548163ffffffff021916908363ffffffff1602179055506014600860046101000a81548163ffffffff021916908363ffffffff16021790555060006008806101000a81548163ffffffff021916908363ffffffff16021790555060006008600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600860106101000a81548160ff0219169083151502179055506000600860116101000a81548160ff0219169083151502179055506031600b60006101000a81548163ffffffff021916908363ffffffff16021790555073460fd5059e7301680fa53e63bbbf7272e643e89c600b60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200015057600080fd5b5060405162005b1d38038062005b1d833981810160405281019062000176919062000493565b8562000188816200024260201b60201c565b50620001a96200019d6200025e60201b60201c565b6200026660201b60201c565b8560069080519060200190620001c19291906200032c565b508460049080519060200190620001da9291906200032c565b508360059080519060200190620001f39291906200032c565b50826008600c6101000a81548163ffffffff021916908363ffffffff1602179055508160078190555080600860106101000a81548160ff02191690831515021790555050505050505062000758565b80600290805190602001906200025a9291906200032c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033a906200062f565b90600052602060002090601f0160209004810192826200035e5760008555620003aa565b82601f106200037957805160ff1916838001178555620003aa565b82800160010185558215620003aa579182015b82811115620003a95782518255916020019190600101906200038c565b5b509050620003b99190620003bd565b5090565b5b80821115620003d8576000816000905550600101620003be565b5090565b6000620003f3620003ed846200059d565b62000574565b9050828152602081018484840111156200040c57600080fd5b62000419848285620005f9565b509392505050565b60008151905062000432816200070a565b92915050565b600082601f8301126200044a57600080fd5b81516200045c848260208601620003dc565b91505092915050565b600081519050620004768162000724565b92915050565b6000815190506200048d816200073e565b92915050565b60008060008060008060c08789031215620004ad57600080fd5b600087015167ffffffffffffffff811115620004c857600080fd5b620004d689828a0162000438565b965050602087015167ffffffffffffffff811115620004f457600080fd5b6200050289828a0162000438565b955050604087015167ffffffffffffffff8111156200052057600080fd5b6200052e89828a0162000438565b94505060606200054189828a016200047c565b93505060806200055489828a0162000465565b92505060a06200056789828a0162000421565b9150509295509295509295565b60006200058062000593565b90506200058e828262000665565b919050565b6000604051905090565b600067ffffffffffffffff821115620005bb57620005ba620006ca565b5b620005c682620006f9565b9050602081019050919050565b60008115159050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b8381101562000619578082015181840152602081019050620005fc565b8381111562000629576000848401525b50505050565b600060028204905060018216806200064857607f821691505b602082108114156200065f576200065e6200069b565b5b50919050565b6200067082620006f9565b810181811067ffffffffffffffff82111715620006925762000691620006ca565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200071581620005d3565b81146200072157600080fd5b50565b6200072f81620005df565b81146200073b57600080fd5b50565b6200074981620005e9565b81146200075557600080fd5b50565b6153b580620007686000396000f3fe6080604052600436106101ed5760003560e01c80636fdca5e01161010d578063a22cb465116100a0578063f242432a1161006f578063f242432a146106af578063f2fde38b146106d8578063f5b9662114610701578063f8048d8f1461072a578063fcfff16f14610753576101ed565b8063a22cb46514610602578063a71bbebe1461062b578063bee6348a14610647578063e985e9c514610672576101ed565b80638da5cb5b116100dc5780638da5cb5b1461055857806395d89b41146105835780639abc8320146105ae5780639e5666cd146105d9576101ed565b80636fdca5e0146104b257806370a08231146104db578063715018a614610518578063729ad39e1461052f576101ed565b806318160ddd1161018557806344a0d68a1161015457806344a0d68a146103f6578063453c23101461041f5780634e1273f41461044a578063507e094f14610487576101ed565b806318160ddd1461036f5780632eb2c2d61461039a5780633006b543146103c35780633ccfd60b146103ec576101ed565b8063047fc9aa116101c1578063047fc9aa146102b157806306fdde03146102dc5780630e89341c1461030757806313faede614610344576101ed565b8062fdd58e146101f257806301ffc9a71461022f57806302fe53051461026c5780630364d22a14610295575b600080fd5b3480156101fe57600080fd5b50610219600480360381019061021491906139ac565b61077e565b6040516102269190614682565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613aeb565b610847565b6040516102639190614365565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613b3d565b610929565b005b6102af60048036038101906102aa9190613bd0565b6109b1565b005b3480156102bd57600080fd5b506102c6610b10565b6040516102d391906146c6565b60405180910390f35b3480156102e857600080fd5b506102f1610b24565b6040516102fe9190614380565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613b7e565b610bb2565b60405161033b9190614380565b60405180910390f35b34801561035057600080fd5b50610359610c3f565b6040516103669190614682565b60405180910390f35b34801561037b57600080fd5b50610384610c45565b60405161039191906146c6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190613822565b610c5b565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613ba7565b610cfc565b005b6103f4610d9c565b005b34801561040257600080fd5b5061041d60048036038101906104189190613b7e565b610e91565b005b34801561042b57600080fd5b50610434610f17565b60405161044191906146c6565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613a2d565b610f2d565b60405161047e919061430c565b60405180910390f35b34801561049357600080fd5b5061049c6110de565b6040516104a991906146c6565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613a99565b6110f4565b005b3480156104e757600080fd5b5061050260048036038101906104fd91906137bd565b61118d565b60405161050f9190614682565b60405180910390f35b34801561052457600080fd5b5061052d6111f3565b005b34801561053b57600080fd5b50610556600480360381019061055191906139e8565b61127b565b005b34801561056457600080fd5b5061056d61144e565b60405161057a919061422f565b60405180910390f35b34801561058f57600080fd5b50610598611478565b6040516105a59190614380565b60405180910390f35b3480156105ba57600080fd5b506105c3611506565b6040516105d09190614380565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613ac2565b611594565b005b34801561060e57600080fd5b5061062960048036038101906106249190613970565b61161a565b005b61064560048036038101906106409190613ba7565b611630565b005b34801561065357600080fd5b5061065c61169b565b6040516106699190614365565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906137e6565b6116ae565b6040516106a69190614365565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906138e1565b611742565b005b3480156106e457600080fd5b506106ff60048036038101906106fa91906137bd565b6117e3565b005b34801561070d57600080fd5b5061072860048036038101906107239190613a99565b6118db565b005b34801561073657600080fd5b50610751600480360381019061074c9190613ba7565b611974565b005b34801561075f57600080fd5b50610768611a14565b6040516107759190614365565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e690614402565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610922575061092182611a27565b5b9050919050565b610931611a91565b73ffffffffffffffffffffffffffffffffffffffff1661094f61144e565b73ffffffffffffffffffffffffffffffffffffffff16146109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c90614522565b60405180910390fd5b6109ae81611a99565b50565b6109ba83611ab3565b600860119054906101000a900460ff16610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090614582565b60405180910390fd5b6000600a541415610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690614462565b60405180910390fd5b610ac3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5433604051602001610aa891906141a4565b60405160208183030381529060405280519060200120611cdd565b610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990614462565b60405180910390fd5b610b0b83611cf4565b505050565b60088054906101000a900463ffffffff1681565b60048054610b3190614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d90614a7b565b8015610baa5780601f10610b7f57610100808354040283529160200191610baa565b820191906000526020600020905b815481529060010190602001808311610b8d57829003601f168201915b505050505081565b606060088054906101000a900463ffffffff1663ffffffff16821115610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c04906143e2565b60405180910390fd5b6006610c18836120ad565b604051602001610c299291906141eb565b6040516020818303038152906040529050919050565b60075481565b6008600c9054906101000a900463ffffffff1681565b610c63611a91565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ca95750610ca885610ca3611a91565b6116ae565b5b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf906144e2565b60405180910390fd5b610cf5858585858561225a565b5050505050565b610d04611a91565b73ffffffffffffffffffffffffffffffffffffffff16610d2261144e565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90614522565b60405180910390fd5b80600860046101000a81548163ffffffff021916908363ffffffff16021790555050565b610da4611a91565b73ffffffffffffffffffffffffffffffffffffffff16610dc261144e565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90614522565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3e9061421a565b60006040518083038185875af1925050503d8060008114610e7b576040519150601f19603f3d011682016040523d82523d6000602084013e610e80565b606091505b5050905080610e8e57600080fd5b50565b610e99611a91565b73ffffffffffffffffffffffffffffffffffffffff16610eb761144e565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490614522565b60405180910390fd5b8060078190555050565b600860049054906101000a900463ffffffff1681565b60608151835114610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906145e2565b60405180910390fd5b6000835167ffffffffffffffff811115610fb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b84518110156110d35761107d85828151811061102f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161077e565b8282815181106110b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806110cc90614ade565b9050610fea565b508091505092915050565b600860009054906101000a900463ffffffff1681565b6110fc611a91565b73ffffffffffffffffffffffffffffffffffffffff1661111a61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790614522565b60405180910390fd5b80600860106101000a81548160ff02191690831515021790555050565b6000806000905060005b60088054906101000a900463ffffffff1663ffffffff1681116111e95760016111c0858361077e565b14156111d6576001826111d3919061485c565b91505b80806111e190614ade565b915050611197565b5080915050919050565b6111fb611a91565b73ffffffffffffffffffffffffffffffffffffffff1661121961144e565b73ffffffffffffffffffffffffffffffffffffffff161461126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614522565b60405180910390fd5b61127960006125ba565b565b611283611a91565b73ffffffffffffffffffffffffffffffffffffffff166112a161144e565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614522565b60405180910390fd5b60005b828290508163ffffffff161015611449576008600c9054906101000a900463ffffffff1663ffffffff1660088054906101000a900463ffffffff16600161134191906148b2565b63ffffffff161115611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906144a2565b60405180910390fd5b61143683838363ffffffff168181106113ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906113df91906137bd565b60088081819054906101000a900463ffffffff166113fc90614b27565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16600160405180602001604052806000815250612680565b808061144190614b27565b9150506112fa565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005805461148590614a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b190614a7b565b80156114fe5780601f106114d3576101008083540402835291602001916114fe565b820191906000526020600020905b8154815290600101906020018083116114e157829003601f168201915b505050505081565b6006805461151390614a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461153f90614a7b565b801561158c5780601f106115615761010080835404028352916020019161158c565b820191906000526020600020905b81548152906001019060200180831161156f57829003601f168201915b505050505081565b61159c611a91565b73ffffffffffffffffffffffffffffffffffffffff166115ba61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614522565b60405180910390fd5b80600a8190555050565b61162c611625611a91565b8383612816565b5050565b61163981611ab3565b60011515600860109054906101000a900460ff1615151461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690614562565b60405180910390fd5b61169881611cf4565b50565b600860119054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61174a611a91565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611790575061178f8561178a611a91565b6116ae565b5b6117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690614442565b60405180910390fd5b6117dc8585858585612983565b5050505050565b6117eb611a91565b73ffffffffffffffffffffffffffffffffffffffff1661180961144e565b73ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614522565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690614422565b60405180910390fd5b6118d8816125ba565b50565b6118e3611a91565b73ffffffffffffffffffffffffffffffffffffffff1661190161144e565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614522565b60405180910390fd5b80600860116101000a81548160ff02191690831515021790555050565b61197c611a91565b73ffffffffffffffffffffffffffffffffffffffff1661199a61144e565b73ffffffffffffffffffffffffffffffffffffffff16146119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e790614522565b60405180910390fd5b80600860006101000a81548163ffffffff021916908363ffffffff16021790555050565b600860109054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611aaf9291906133f7565b5050565b60008163ffffffff1611611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614662565b60405180910390fd5b600860009054906101000a900463ffffffff1663ffffffff168163ffffffff161115611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490614642565b60405180910390fd5b8063ffffffff16600754611b71919061491d565b341015611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa906145c2565b60405180910390fd5b6008600c9054906101000a900463ffffffff1663ffffffff168160088054906101000a900463ffffffff16611be891906148b2565b63ffffffff161115611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614542565b60405180910390fd5b600860049054906101000a900463ffffffff1663ffffffff168163ffffffff16600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c99919061485c565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614482565b60405180910390fd5b50565b600082611cea8584612c05565b1490509392505050565b60018163ffffffff161115611f085760008163ffffffff1667ffffffffffffffff811115611d4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d795781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611df25781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611ee55760018160088054906101000a900463ffffffff16611e2a91906148b2565b611e3491906148b2565b63ffffffff16838263ffffffff1681518110611e79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001828263ffffffff1681518110611ec6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611edd90614b27565b915050611df8565b50611f0133838360405180602001604052806000815250612cde565b5050611f47565b611f4633600160088054906101000a900463ffffffff16611f2991906148b2565b63ffffffff16600160405180602001604052806000815250612680565b5b806008808282829054906101000a900463ffffffff16611f6791906148b2565b92506101000a81548163ffffffff021916908363ffffffff1602179055508063ffffffff16600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fda919061485c565b925050819055506000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103e8600b60009054906101000a900463ffffffff1663ffffffff1634612043919061491d565b61204d91906148ec565b6040516120599061421a565b60006040518083038185875af1925050503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b50509050806120a957600080fd5b5050565b606060008214156120f5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612255565b600082905060005b6000821461212757808061211090614ade565b915050600a8261212091906148ec565b91506120fd565b60008167ffffffffffffffff811115612169577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561219b5781602001600182028036833780820191505090505b5090505b6000851461224e576001826121b49190614977565b9150600a856121c39190614b82565b60306121cf919061485c565b60f81b81838151811061220b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561224791906148ec565b945061219f565b8093505050505b919050565b815183511461229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590614602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561230e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612305906144c2565b60405180910390fd5b6000612318611a91565b9050612328818787878787612f48565b60005b845181101561252557600085828151811061236f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106123b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614502565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250a919061485c565b925050819055505050508061251e90614ade565b905061232b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161259c92919061432e565b60405180910390a46125b2818787878787612f50565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614622565b60405180910390fd5b60006126fa611a91565b905061271b8160008761270c88613137565b61271588613137565b87612f48565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277a919061485c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127f892919061469d565b60405180910390a461280f816000878787876131fd565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906145a2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129769190614365565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea906144c2565b60405180910390fd5b60006129fd611a91565b9050612a1d818787612a0e88613137565b612a1788613137565b87612f48565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614502565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b69919061485c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612be692919061469d565b60405180910390a4612bfc8288888888886131fd565b50505050505050565b60008082905060005b8451811015612cd3576000858281518110612c52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612c93578281604051602001612c769291906141bf565b604051602081830303815290604052805190602001209250612cbf565b8083604051602001612ca69291906141bf565b6040516020818303038152906040528051906020012092505b508080612ccb90614ade565b915050612c0e565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614622565b60405180910390fd5b8151835114612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8990614602565b60405180910390fd5b6000612d9c611a91565b9050612dad81600087878787612f48565b60005b8451811015612eb257838181518110612df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e98919061485c565b925050819055508080612eaa90614ade565b915050612db0565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612f2a92919061432e565b60405180910390a4612f4181600087878787612f50565b5050505050565b505050505050565b612f6f8473ffffffffffffffffffffffffffffffffffffffff166133e4565b1561312f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612fb595949392919061424a565b602060405180830381600087803b158015612fcf57600080fd5b505af192505050801561300057506040513d601f19601f82011682018060405250810190612ffd9190613b14565b60015b6130a65761300c614c6f565b806308c379a01415613069575061302161525f565b8061302c575061306b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130609190614380565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d906143a2565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461312d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613124906143c2565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561317c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131aa5781602001602082028036833780820191505090505b50905082816000815181106131e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61321c8473ffffffffffffffffffffffffffffffffffffffff166133e4565b156133dc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016132629594939291906142b2565b602060405180830381600087803b15801561327c57600080fd5b505af19250505080156132ad57506040513d601f19601f820116820180604052508101906132aa9190613b14565b60015b613353576132b9614c6f565b806308c379a0141561331657506132ce61525f565b806132d95750613318565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d9190614380565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a906143a2565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d1906143c2565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461340390614a7b565b90600052602060002090601f016020900481019282613425576000855561346c565b82601f1061343e57805160ff191683800117855561346c565b8280016001018555821561346c579182015b8281111561346b578251825591602001919060010190613450565b5b509050613479919061347d565b5090565b5b8082111561349657600081600090555060010161347e565b5090565b60006134ad6134a884614706565b6146e1565b905080838252602082019050828560208602820111156134cc57600080fd5b60005b858110156134fc57816134e288826135ee565b8452602084019350602083019250506001810190506134cf565b5050509392505050565b600061351961351484614732565b6146e1565b9050808382526020820190508285602086028201111561353857600080fd5b60005b85811015613568578161354e8882613793565b84526020840193506020830192505060018101905061353b565b5050509392505050565b60006135856135808461475e565b6146e1565b90508281526020810184848401111561359d57600080fd5b6135a8848285614a39565b509392505050565b60006135c36135be8461478f565b6146e1565b9050828152602081018484840111156135db57600080fd5b6135e6848285614a39565b509392505050565b6000813590506135fd816152f5565b92915050565b60008083601f84011261361557600080fd5b8235905067ffffffffffffffff81111561362e57600080fd5b60208301915083602082028301111561364657600080fd5b9250929050565b600082601f83011261365e57600080fd5b813561366e84826020860161349a565b91505092915050565b60008083601f84011261368957600080fd5b8235905067ffffffffffffffff8111156136a257600080fd5b6020830191508360208202830111156136ba57600080fd5b9250929050565b600082601f8301126136d257600080fd5b81356136e2848260208601613506565b91505092915050565b6000813590506136fa8161530c565b92915050565b60008135905061370f81615323565b92915050565b6000813590506137248161533a565b92915050565b6000815190506137398161533a565b92915050565b600082601f83011261375057600080fd5b8135613760848260208601613572565b91505092915050565b600082601f83011261377a57600080fd5b813561378a8482602086016135b0565b91505092915050565b6000813590506137a281615351565b92915050565b6000813590506137b781615368565b92915050565b6000602082840312156137cf57600080fd5b60006137dd848285016135ee565b91505092915050565b600080604083850312156137f957600080fd5b6000613807858286016135ee565b9250506020613818858286016135ee565b9150509250929050565b600080600080600060a0868803121561383a57600080fd5b6000613848888289016135ee565b9550506020613859888289016135ee565b945050604086013567ffffffffffffffff81111561387657600080fd5b613882888289016136c1565b935050606086013567ffffffffffffffff81111561389f57600080fd5b6138ab888289016136c1565b925050608086013567ffffffffffffffff8111156138c857600080fd5b6138d48882890161373f565b9150509295509295909350565b600080600080600060a086880312156138f957600080fd5b6000613907888289016135ee565b9550506020613918888289016135ee565b945050604061392988828901613793565b935050606061393a88828901613793565b925050608086013567ffffffffffffffff81111561395757600080fd5b6139638882890161373f565b9150509295509295909350565b6000806040838503121561398357600080fd5b6000613991858286016135ee565b92505060206139a2858286016136eb565b9150509250929050565b600080604083850312156139bf57600080fd5b60006139cd858286016135ee565b92505060206139de85828601613793565b9150509250929050565b600080602083850312156139fb57600080fd5b600083013567ffffffffffffffff811115613a1557600080fd5b613a2185828601613603565b92509250509250929050565b60008060408385031215613a4057600080fd5b600083013567ffffffffffffffff811115613a5a57600080fd5b613a668582860161364d565b925050602083013567ffffffffffffffff811115613a8357600080fd5b613a8f858286016136c1565b9150509250929050565b600060208284031215613aab57600080fd5b6000613ab9848285016136eb565b91505092915050565b600060208284031215613ad457600080fd5b6000613ae284828501613700565b91505092915050565b600060208284031215613afd57600080fd5b6000613b0b84828501613715565b91505092915050565b600060208284031215613b2657600080fd5b6000613b348482850161372a565b91505092915050565b600060208284031215613b4f57600080fd5b600082013567ffffffffffffffff811115613b6957600080fd5b613b7584828501613769565b91505092915050565b600060208284031215613b9057600080fd5b6000613b9e84828501613793565b91505092915050565b600060208284031215613bb957600080fd5b6000613bc7848285016137a8565b91505092915050565b600080600060408486031215613be557600080fd5b6000613bf3868287016137a8565b935050602084013567ffffffffffffffff811115613c1057600080fd5b613c1c86828701613677565b92509250509250925092565b6000613c348383614177565b60208301905092915050565b613c49816149ab565b82525050565b613c60613c5b826149ab565b614b54565b82525050565b6000613c71826147e5565b613c7b8185614813565b9350613c86836147c0565b8060005b83811015613cb7578151613c9e8882613c28565b9750613ca983614806565b925050600181019050613c8a565b5085935050505092915050565b613ccd816149bd565b82525050565b613ce4613cdf826149c9565b614b66565b82525050565b6000613cf5826147f0565b613cff8185614824565b9350613d0f818560208601614a48565b613d1881614c91565b840191505092915050565b6000613d2e826147fb565b613d388185614840565b9350613d48818560208601614a48565b613d5181614c91565b840191505092915050565b6000613d67826147fb565b613d718185614851565b9350613d81818560208601614a48565b80840191505092915050565b60008154613d9a81614a7b565b613da48186614851565b94506001821660008114613dbf5760018114613dd057613e03565b60ff19831686528186019350613e03565b613dd9856147d0565b60005b83811015613dfb57815481890152600182019150602081019050613ddc565b838801955050505b50505092915050565b6000613e19603483614840565b9150613e2482614cbc565b604082019050919050565b6000613e3c602883614840565b9150613e4782614d0b565b604082019050919050565b6000613e5f600e83614840565b9150613e6a82614d5a565b602082019050919050565b6000613e82602b83614840565b9150613e8d82614d83565b604082019050919050565b6000613ea5602683614840565b9150613eb082614dd2565b604082019050919050565b6000613ec8602983614840565b9150613ed382614e21565b604082019050919050565b6000613eeb601783614840565b9150613ef682614e70565b602082019050919050565b6000613f0e601683614840565b9150613f1982614e99565b602082019050919050565b6000613f31600d83614840565b9150613f3c82614ec2565b602082019050919050565b6000613f54602583614840565b9150613f5f82614eeb565b604082019050919050565b6000613f77603283614840565b9150613f8282614f3a565b604082019050919050565b6000613f9a602a83614840565b9150613fa582614f89565b604082019050919050565b6000613fbd600583614851565b9150613fc882614fd8565b600582019050919050565b6000613fe0602083614840565b9150613feb82615001565b602082019050919050565b6000614003600d83614840565b915061400e8261502a565b602082019050919050565b6000614026600d83614840565b915061403182615053565b602082019050919050565b6000614049601083614840565b91506140548261507c565b602082019050919050565b600061406c600083614835565b9150614077826150a5565b600082019050919050565b600061408f602983614840565b915061409a826150a8565b604082019050919050565b60006140b2601083614840565b91506140bd826150f7565b602082019050919050565b60006140d5602983614840565b91506140e082615120565b604082019050919050565b60006140f8602883614840565b91506141038261516f565b604082019050919050565b600061411b602183614840565b9150614126826151be565b604082019050919050565b600061413e601183614840565b91506141498261520d565b602082019050919050565b6000614161601283614840565b915061416c82615236565b602082019050919050565b61418081614a1f565b82525050565b61418f81614a1f565b82525050565b61419e81614a29565b82525050565b60006141b08284613c4f565b60148201915081905092915050565b60006141cb8285613cd3565b6020820191506141db8284613cd3565b6020820191508190509392505050565b60006141f78285613d8d565b91506142038284613d5c565b915061420e82613fb0565b91508190509392505050565b60006142258261405f565b9150819050919050565b60006020820190506142446000830184613c40565b92915050565b600060a08201905061425f6000830188613c40565b61426c6020830187613c40565b818103604083015261427e8186613c66565b905081810360608301526142928185613c66565b905081810360808301526142a68184613cea565b90509695505050505050565b600060a0820190506142c76000830188613c40565b6142d46020830187613c40565b6142e16040830186614186565b6142ee6060830185614186565b81810360808301526143008184613cea565b90509695505050505050565b600060208201905081810360008301526143268184613c66565b905092915050565b600060408201905081810360008301526143488185613c66565b9050818103602083015261435c8184613c66565b90509392505050565b600060208201905061437a6000830184613cc4565b92915050565b6000602082019050818103600083015261439a8184613d23565b905092915050565b600060208201905081810360008301526143bb81613e0c565b9050919050565b600060208201905081810360008301526143db81613e2f565b9050919050565b600060208201905081810360008301526143fb81613e52565b9050919050565b6000602082019050818103600083015261441b81613e75565b9050919050565b6000602082019050818103600083015261443b81613e98565b9050919050565b6000602082019050818103600083015261445b81613ebb565b9050919050565b6000602082019050818103600083015261447b81613ede565b9050919050565b6000602082019050818103600083015261449b81613f01565b9050919050565b600060208201905081810360008301526144bb81613f24565b9050919050565b600060208201905081810360008301526144db81613f47565b9050919050565b600060208201905081810360008301526144fb81613f6a565b9050919050565b6000602082019050818103600083015261451b81613f8d565b9050919050565b6000602082019050818103600083015261453b81613fd3565b9050919050565b6000602082019050818103600083015261455b81613ff6565b9050919050565b6000602082019050818103600083015261457b81614019565b9050919050565b6000602082019050818103600083015261459b8161403c565b9050919050565b600060208201905081810360008301526145bb81614082565b9050919050565b600060208201905081810360008301526145db816140a5565b9050919050565b600060208201905081810360008301526145fb816140c8565b9050919050565b6000602082019050818103600083015261461b816140eb565b9050919050565b6000602082019050818103600083015261463b8161410e565b9050919050565b6000602082019050818103600083015261465b81614131565b9050919050565b6000602082019050818103600083015261467b81614154565b9050919050565b60006020820190506146976000830184614186565b92915050565b60006040820190506146b26000830185614186565b6146bf6020830184614186565b9392505050565b60006020820190506146db6000830184614195565b92915050565b60006146eb6146fc565b90506146f78282614aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561472157614720614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561474d5761474c614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561477957614778614c40565b5b61478282614c91565b9050602081019050919050565b600067ffffffffffffffff8211156147aa576147a9614c40565b5b6147b382614c91565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061486782614a1f565b915061487283614a1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148a7576148a6614bb3565b5b828201905092915050565b60006148bd82614a29565b91506148c883614a29565b92508263ffffffff038211156148e1576148e0614bb3565b5b828201905092915050565b60006148f782614a1f565b915061490283614a1f565b92508261491257614911614be2565b5b828204905092915050565b600061492882614a1f565b915061493383614a1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496c5761496b614bb3565b5b828202905092915050565b600061498282614a1f565b915061498d83614a1f565b9250828210156149a05761499f614bb3565b5b828203905092915050565b60006149b6826149ff565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a66578082015181840152602081019050614a4b565b83811115614a75576000848401525b50505050565b60006002820490506001821680614a9357607f821691505b60208210811415614aa757614aa6614c11565b5b50919050565b614ab682614c91565b810181811067ffffffffffffffff82111715614ad557614ad4614c40565b5b80604052505050565b6000614ae982614a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1c57614b1b614bb3565b5b600182019050919050565b6000614b3282614a29565b915063ffffffff821415614b4957614b48614bb3565b5b600182019050919050565b6000614b5f82614b70565b9050919050565b6000819050919050565b6000614b7b82614ca2565b9050919050565b6000614b8d82614a1f565b9150614b9883614a1f565b925082614ba857614ba7614be2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614c8e5760046000803e614c8b600051614caf565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206d696e74656420796574000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652070726573616c65000000000000000000600082015250565b7f4d617820746f74616c206d696e74207265616368656400000000000000000000600082015250565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e7420736f6c64206f757400000000000000000000000000000000000000600082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f50726573616c65206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682066756e642e00000000000000000000000000000000600082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420726561636865642e000000000000000000000000000000600082015250565b7f4d696e74206174206c65617374206f6e652e0000000000000000000000000000600082015250565b600060443d101561526f576152f2565b6152776146fc565b60043d036004823e80513d602482011167ffffffffffffffff8211171561529f5750506152f2565b808201805167ffffffffffffffff8111156152bd57505050506152f2565b80602083010160043d0385018111156152da5750505050506152f2565b6152e982602001850186614aad565b82955050505050505b90565b6152fe816149ab565b811461530957600080fd5b50565b615315816149bd565b811461532057600080fd5b50565b61532c816149c9565b811461533757600080fd5b50565b615343816149d3565b811461534e57600080fd5b50565b61535a81614a1f565b811461536557600080fd5b50565b61537181614a29565b811461537c57600080fd5b5056fea2646970667358221220b01420f1ee329a0ae27445bddfc8ec014bd0ec50766b8cc741e71e47f537220564736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569666e687866747376716e7066366c6266786262696f746a77796175796934356f776763773465326d73637237646f7467677534342f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001754686520476f6f6420446f63746f72732047686f73747300000000000000000000000000000000000000000000000000000000000000000000000000000000045447444700000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101ed5760003560e01c80636fdca5e01161010d578063a22cb465116100a0578063f242432a1161006f578063f242432a146106af578063f2fde38b146106d8578063f5b9662114610701578063f8048d8f1461072a578063fcfff16f14610753576101ed565b8063a22cb46514610602578063a71bbebe1461062b578063bee6348a14610647578063e985e9c514610672576101ed565b80638da5cb5b116100dc5780638da5cb5b1461055857806395d89b41146105835780639abc8320146105ae5780639e5666cd146105d9576101ed565b80636fdca5e0146104b257806370a08231146104db578063715018a614610518578063729ad39e1461052f576101ed565b806318160ddd1161018557806344a0d68a1161015457806344a0d68a146103f6578063453c23101461041f5780634e1273f41461044a578063507e094f14610487576101ed565b806318160ddd1461036f5780632eb2c2d61461039a5780633006b543146103c35780633ccfd60b146103ec576101ed565b8063047fc9aa116101c1578063047fc9aa146102b157806306fdde03146102dc5780630e89341c1461030757806313faede614610344576101ed565b8062fdd58e146101f257806301ffc9a71461022f57806302fe53051461026c5780630364d22a14610295575b600080fd5b3480156101fe57600080fd5b50610219600480360381019061021491906139ac565b61077e565b6040516102269190614682565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613aeb565b610847565b6040516102639190614365565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613b3d565b610929565b005b6102af60048036038101906102aa9190613bd0565b6109b1565b005b3480156102bd57600080fd5b506102c6610b10565b6040516102d391906146c6565b60405180910390f35b3480156102e857600080fd5b506102f1610b24565b6040516102fe9190614380565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613b7e565b610bb2565b60405161033b9190614380565b60405180910390f35b34801561035057600080fd5b50610359610c3f565b6040516103669190614682565b60405180910390f35b34801561037b57600080fd5b50610384610c45565b60405161039191906146c6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190613822565b610c5b565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190613ba7565b610cfc565b005b6103f4610d9c565b005b34801561040257600080fd5b5061041d60048036038101906104189190613b7e565b610e91565b005b34801561042b57600080fd5b50610434610f17565b60405161044191906146c6565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613a2d565b610f2d565b60405161047e919061430c565b60405180910390f35b34801561049357600080fd5b5061049c6110de565b6040516104a991906146c6565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613a99565b6110f4565b005b3480156104e757600080fd5b5061050260048036038101906104fd91906137bd565b61118d565b60405161050f9190614682565b60405180910390f35b34801561052457600080fd5b5061052d6111f3565b005b34801561053b57600080fd5b50610556600480360381019061055191906139e8565b61127b565b005b34801561056457600080fd5b5061056d61144e565b60405161057a919061422f565b60405180910390f35b34801561058f57600080fd5b50610598611478565b6040516105a59190614380565b60405180910390f35b3480156105ba57600080fd5b506105c3611506565b6040516105d09190614380565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613ac2565b611594565b005b34801561060e57600080fd5b5061062960048036038101906106249190613970565b61161a565b005b61064560048036038101906106409190613ba7565b611630565b005b34801561065357600080fd5b5061065c61169b565b6040516106699190614365565b60405180910390f35b34801561067e57600080fd5b50610699600480360381019061069491906137e6565b6116ae565b6040516106a69190614365565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d191906138e1565b611742565b005b3480156106e457600080fd5b506106ff60048036038101906106fa91906137bd565b6117e3565b005b34801561070d57600080fd5b5061072860048036038101906107239190613a99565b6118db565b005b34801561073657600080fd5b50610751600480360381019061074c9190613ba7565b611974565b005b34801561075f57600080fd5b50610768611a14565b6040516107759190614365565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e690614402565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610922575061092182611a27565b5b9050919050565b610931611a91565b73ffffffffffffffffffffffffffffffffffffffff1661094f61144e565b73ffffffffffffffffffffffffffffffffffffffff16146109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c90614522565b60405180910390fd5b6109ae81611a99565b50565b6109ba83611ab3565b600860119054906101000a900460ff16610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090614582565b60405180910390fd5b6000600a541415610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690614462565b60405180910390fd5b610ac3828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5433604051602001610aa891906141a4565b60405160208183030381529060405280519060200120611cdd565b610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990614462565b60405180910390fd5b610b0b83611cf4565b505050565b60088054906101000a900463ffffffff1681565b60048054610b3190614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d90614a7b565b8015610baa5780601f10610b7f57610100808354040283529160200191610baa565b820191906000526020600020905b815481529060010190602001808311610b8d57829003601f168201915b505050505081565b606060088054906101000a900463ffffffff1663ffffffff16821115610c0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c04906143e2565b60405180910390fd5b6006610c18836120ad565b604051602001610c299291906141eb565b6040516020818303038152906040529050919050565b60075481565b6008600c9054906101000a900463ffffffff1681565b610c63611a91565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ca95750610ca885610ca3611a91565b6116ae565b5b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf906144e2565b60405180910390fd5b610cf5858585858561225a565b5050505050565b610d04611a91565b73ffffffffffffffffffffffffffffffffffffffff16610d2261144e565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90614522565b60405180910390fd5b80600860046101000a81548163ffffffff021916908363ffffffff16021790555050565b610da4611a91565b73ffffffffffffffffffffffffffffffffffffffff16610dc261144e565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90614522565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3e9061421a565b60006040518083038185875af1925050503d8060008114610e7b576040519150601f19603f3d011682016040523d82523d6000602084013e610e80565b606091505b5050905080610e8e57600080fd5b50565b610e99611a91565b73ffffffffffffffffffffffffffffffffffffffff16610eb761144e565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490614522565b60405180910390fd5b8060078190555050565b600860049054906101000a900463ffffffff1681565b60608151835114610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906145e2565b60405180910390fd5b6000835167ffffffffffffffff811115610fb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b84518110156110d35761107d85828151811061102f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611070577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161077e565b8282815181106110b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806110cc90614ade565b9050610fea565b508091505092915050565b600860009054906101000a900463ffffffff1681565b6110fc611a91565b73ffffffffffffffffffffffffffffffffffffffff1661111a61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790614522565b60405180910390fd5b80600860106101000a81548160ff02191690831515021790555050565b6000806000905060005b60088054906101000a900463ffffffff1663ffffffff1681116111e95760016111c0858361077e565b14156111d6576001826111d3919061485c565b91505b80806111e190614ade565b915050611197565b5080915050919050565b6111fb611a91565b73ffffffffffffffffffffffffffffffffffffffff1661121961144e565b73ffffffffffffffffffffffffffffffffffffffff161461126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690614522565b60405180910390fd5b61127960006125ba565b565b611283611a91565b73ffffffffffffffffffffffffffffffffffffffff166112a161144e565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614522565b60405180910390fd5b60005b828290508163ffffffff161015611449576008600c9054906101000a900463ffffffff1663ffffffff1660088054906101000a900463ffffffff16600161134191906148b2565b63ffffffff161115611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906144a2565b60405180910390fd5b61143683838363ffffffff168181106113ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906113df91906137bd565b60088081819054906101000a900463ffffffff166113fc90614b27565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16600160405180602001604052806000815250612680565b808061144190614b27565b9150506112fa565b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005805461148590614a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b190614a7b565b80156114fe5780601f106114d3576101008083540402835291602001916114fe565b820191906000526020600020905b8154815290600101906020018083116114e157829003601f168201915b505050505081565b6006805461151390614a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461153f90614a7b565b801561158c5780601f106115615761010080835404028352916020019161158c565b820191906000526020600020905b81548152906001019060200180831161156f57829003601f168201915b505050505081565b61159c611a91565b73ffffffffffffffffffffffffffffffffffffffff166115ba61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614522565b60405180910390fd5b80600a8190555050565b61162c611625611a91565b8383612816565b5050565b61163981611ab3565b60011515600860109054906101000a900460ff1615151461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690614562565b60405180910390fd5b61169881611cf4565b50565b600860119054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61174a611a91565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611790575061178f8561178a611a91565b6116ae565b5b6117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c690614442565b60405180910390fd5b6117dc8585858585612983565b5050505050565b6117eb611a91565b73ffffffffffffffffffffffffffffffffffffffff1661180961144e565b73ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614522565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c690614422565b60405180910390fd5b6118d8816125ba565b50565b6118e3611a91565b73ffffffffffffffffffffffffffffffffffffffff1661190161144e565b73ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614522565b60405180910390fd5b80600860116101000a81548160ff02191690831515021790555050565b61197c611a91565b73ffffffffffffffffffffffffffffffffffffffff1661199a61144e565b73ffffffffffffffffffffffffffffffffffffffff16146119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e790614522565b60405180910390fd5b80600860006101000a81548163ffffffff021916908363ffffffff16021790555050565b600860109054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611aaf9291906133f7565b5050565b60008163ffffffff1611611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614662565b60405180910390fd5b600860009054906101000a900463ffffffff1663ffffffff168163ffffffff161115611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490614642565b60405180910390fd5b8063ffffffff16600754611b71919061491d565b341015611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa906145c2565b60405180910390fd5b6008600c9054906101000a900463ffffffff1663ffffffff168160088054906101000a900463ffffffff16611be891906148b2565b63ffffffff161115611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614542565b60405180910390fd5b600860049054906101000a900463ffffffff1663ffffffff168163ffffffff16600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c99919061485c565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190614482565b60405180910390fd5b50565b600082611cea8584612c05565b1490509392505050565b60018163ffffffff161115611f085760008163ffffffff1667ffffffffffffffff811115611d4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d795781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611dc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611df25781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611ee55760018160088054906101000a900463ffffffff16611e2a91906148b2565b611e3491906148b2565b63ffffffff16838263ffffffff1681518110611e79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506001828263ffffffff1681518110611ec6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611edd90614b27565b915050611df8565b50611f0133838360405180602001604052806000815250612cde565b5050611f47565b611f4633600160088054906101000a900463ffffffff16611f2991906148b2565b63ffffffff16600160405180602001604052806000815250612680565b5b806008808282829054906101000a900463ffffffff16611f6791906148b2565b92506101000a81548163ffffffff021916908363ffffffff1602179055508063ffffffff16600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fda919061485c565b925050819055506000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103e8600b60009054906101000a900463ffffffff1663ffffffff1634612043919061491d565b61204d91906148ec565b6040516120599061421a565b60006040518083038185875af1925050503d8060008114612096576040519150601f19603f3d011682016040523d82523d6000602084013e61209b565b606091505b50509050806120a957600080fd5b5050565b606060008214156120f5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612255565b600082905060005b6000821461212757808061211090614ade565b915050600a8261212091906148ec565b91506120fd565b60008167ffffffffffffffff811115612169577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561219b5781602001600182028036833780820191505090505b5090505b6000851461224e576001826121b49190614977565b9150600a856121c39190614b82565b60306121cf919061485c565b60f81b81838151811061220b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561224791906148ec565b945061219f565b8093505050505b919050565b815183511461229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590614602565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561230e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612305906144c2565b60405180910390fd5b6000612318611a91565b9050612328818787878787612f48565b60005b845181101561252557600085828151811061236f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008583815181106123b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614502565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250a919061485c565b925050819055505050508061251e90614ade565b905061232b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161259c92919061432e565b60405180910390a46125b2818787878787612f50565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790614622565b60405180910390fd5b60006126fa611a91565b905061271b8160008761270c88613137565b61271588613137565b87612f48565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277a919061485c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127f892919061469d565b60405180910390a461280f816000878787876131fd565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906145a2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129769190614365565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea906144c2565b60405180910390fd5b60006129fd611a91565b9050612a1d818787612a0e88613137565b612a1788613137565b87612f48565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aab90614502565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b69919061485c565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612be692919061469d565b60405180910390a4612bfc8288888888886131fd565b50505050505050565b60008082905060005b8451811015612cd3576000858281518110612c52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311612c93578281604051602001612c769291906141bf565b604051602081830303815290604052805190602001209250612cbf565b8083604051602001612ca69291906141bf565b6040516020818303038152906040528051906020012092505b508080612ccb90614ade565b915050612c0e565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590614622565b60405180910390fd5b8151835114612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8990614602565b60405180910390fd5b6000612d9c611a91565b9050612dad81600087878787612f48565b60005b8451811015612eb257838181518110612df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600080878481518110612e36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e98919061485c565b925050819055508080612eaa90614ade565b915050612db0565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612f2a92919061432e565b60405180910390a4612f4181600087878787612f50565b5050505050565b505050505050565b612f6f8473ffffffffffffffffffffffffffffffffffffffff166133e4565b1561312f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612fb595949392919061424a565b602060405180830381600087803b158015612fcf57600080fd5b505af192505050801561300057506040513d601f19601f82011682018060405250810190612ffd9190613b14565b60015b6130a65761300c614c6f565b806308c379a01415613069575061302161525f565b8061302c575061306b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130609190614380565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d906143a2565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461312d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613124906143c2565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561317c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131aa5781602001602082028036833780820191505090505b50905082816000815181106131e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61321c8473ffffffffffffffffffffffffffffffffffffffff166133e4565b156133dc578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016132629594939291906142b2565b602060405180830381600087803b15801561327c57600080fd5b505af19250505080156132ad57506040513d601f19601f820116820180604052508101906132aa9190613b14565b60015b613353576132b9614c6f565b806308c379a0141561331657506132ce61525f565b806132d95750613318565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d9190614380565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a906143a2565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146133da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d1906143c2565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461340390614a7b565b90600052602060002090601f016020900481019282613425576000855561346c565b82601f1061343e57805160ff191683800117855561346c565b8280016001018555821561346c579182015b8281111561346b578251825591602001919060010190613450565b5b509050613479919061347d565b5090565b5b8082111561349657600081600090555060010161347e565b5090565b60006134ad6134a884614706565b6146e1565b905080838252602082019050828560208602820111156134cc57600080fd5b60005b858110156134fc57816134e288826135ee565b8452602084019350602083019250506001810190506134cf565b5050509392505050565b600061351961351484614732565b6146e1565b9050808382526020820190508285602086028201111561353857600080fd5b60005b85811015613568578161354e8882613793565b84526020840193506020830192505060018101905061353b565b5050509392505050565b60006135856135808461475e565b6146e1565b90508281526020810184848401111561359d57600080fd5b6135a8848285614a39565b509392505050565b60006135c36135be8461478f565b6146e1565b9050828152602081018484840111156135db57600080fd5b6135e6848285614a39565b509392505050565b6000813590506135fd816152f5565b92915050565b60008083601f84011261361557600080fd5b8235905067ffffffffffffffff81111561362e57600080fd5b60208301915083602082028301111561364657600080fd5b9250929050565b600082601f83011261365e57600080fd5b813561366e84826020860161349a565b91505092915050565b60008083601f84011261368957600080fd5b8235905067ffffffffffffffff8111156136a257600080fd5b6020830191508360208202830111156136ba57600080fd5b9250929050565b600082601f8301126136d257600080fd5b81356136e2848260208601613506565b91505092915050565b6000813590506136fa8161530c565b92915050565b60008135905061370f81615323565b92915050565b6000813590506137248161533a565b92915050565b6000815190506137398161533a565b92915050565b600082601f83011261375057600080fd5b8135613760848260208601613572565b91505092915050565b600082601f83011261377a57600080fd5b813561378a8482602086016135b0565b91505092915050565b6000813590506137a281615351565b92915050565b6000813590506137b781615368565b92915050565b6000602082840312156137cf57600080fd5b60006137dd848285016135ee565b91505092915050565b600080604083850312156137f957600080fd5b6000613807858286016135ee565b9250506020613818858286016135ee565b9150509250929050565b600080600080600060a0868803121561383a57600080fd5b6000613848888289016135ee565b9550506020613859888289016135ee565b945050604086013567ffffffffffffffff81111561387657600080fd5b613882888289016136c1565b935050606086013567ffffffffffffffff81111561389f57600080fd5b6138ab888289016136c1565b925050608086013567ffffffffffffffff8111156138c857600080fd5b6138d48882890161373f565b9150509295509295909350565b600080600080600060a086880312156138f957600080fd5b6000613907888289016135ee565b9550506020613918888289016135ee565b945050604061392988828901613793565b935050606061393a88828901613793565b925050608086013567ffffffffffffffff81111561395757600080fd5b6139638882890161373f565b9150509295509295909350565b6000806040838503121561398357600080fd5b6000613991858286016135ee565b92505060206139a2858286016136eb565b9150509250929050565b600080604083850312156139bf57600080fd5b60006139cd858286016135ee565b92505060206139de85828601613793565b9150509250929050565b600080602083850312156139fb57600080fd5b600083013567ffffffffffffffff811115613a1557600080fd5b613a2185828601613603565b92509250509250929050565b60008060408385031215613a4057600080fd5b600083013567ffffffffffffffff811115613a5a57600080fd5b613a668582860161364d565b925050602083013567ffffffffffffffff811115613a8357600080fd5b613a8f858286016136c1565b9150509250929050565b600060208284031215613aab57600080fd5b6000613ab9848285016136eb565b91505092915050565b600060208284031215613ad457600080fd5b6000613ae284828501613700565b91505092915050565b600060208284031215613afd57600080fd5b6000613b0b84828501613715565b91505092915050565b600060208284031215613b2657600080fd5b6000613b348482850161372a565b91505092915050565b600060208284031215613b4f57600080fd5b600082013567ffffffffffffffff811115613b6957600080fd5b613b7584828501613769565b91505092915050565b600060208284031215613b9057600080fd5b6000613b9e84828501613793565b91505092915050565b600060208284031215613bb957600080fd5b6000613bc7848285016137a8565b91505092915050565b600080600060408486031215613be557600080fd5b6000613bf3868287016137a8565b935050602084013567ffffffffffffffff811115613c1057600080fd5b613c1c86828701613677565b92509250509250925092565b6000613c348383614177565b60208301905092915050565b613c49816149ab565b82525050565b613c60613c5b826149ab565b614b54565b82525050565b6000613c71826147e5565b613c7b8185614813565b9350613c86836147c0565b8060005b83811015613cb7578151613c9e8882613c28565b9750613ca983614806565b925050600181019050613c8a565b5085935050505092915050565b613ccd816149bd565b82525050565b613ce4613cdf826149c9565b614b66565b82525050565b6000613cf5826147f0565b613cff8185614824565b9350613d0f818560208601614a48565b613d1881614c91565b840191505092915050565b6000613d2e826147fb565b613d388185614840565b9350613d48818560208601614a48565b613d5181614c91565b840191505092915050565b6000613d67826147fb565b613d718185614851565b9350613d81818560208601614a48565b80840191505092915050565b60008154613d9a81614a7b565b613da48186614851565b94506001821660008114613dbf5760018114613dd057613e03565b60ff19831686528186019350613e03565b613dd9856147d0565b60005b83811015613dfb57815481890152600182019150602081019050613ddc565b838801955050505b50505092915050565b6000613e19603483614840565b9150613e2482614cbc565b604082019050919050565b6000613e3c602883614840565b9150613e4782614d0b565b604082019050919050565b6000613e5f600e83614840565b9150613e6a82614d5a565b602082019050919050565b6000613e82602b83614840565b9150613e8d82614d83565b604082019050919050565b6000613ea5602683614840565b9150613eb082614dd2565b604082019050919050565b6000613ec8602983614840565b9150613ed382614e21565b604082019050919050565b6000613eeb601783614840565b9150613ef682614e70565b602082019050919050565b6000613f0e601683614840565b9150613f1982614e99565b602082019050919050565b6000613f31600d83614840565b9150613f3c82614ec2565b602082019050919050565b6000613f54602583614840565b9150613f5f82614eeb565b604082019050919050565b6000613f77603283614840565b9150613f8282614f3a565b604082019050919050565b6000613f9a602a83614840565b9150613fa582614f89565b604082019050919050565b6000613fbd600583614851565b9150613fc882614fd8565b600582019050919050565b6000613fe0602083614840565b9150613feb82615001565b602082019050919050565b6000614003600d83614840565b915061400e8261502a565b602082019050919050565b6000614026600d83614840565b915061403182615053565b602082019050919050565b6000614049601083614840565b91506140548261507c565b602082019050919050565b600061406c600083614835565b9150614077826150a5565b600082019050919050565b600061408f602983614840565b915061409a826150a8565b604082019050919050565b60006140b2601083614840565b91506140bd826150f7565b602082019050919050565b60006140d5602983614840565b91506140e082615120565b604082019050919050565b60006140f8602883614840565b91506141038261516f565b604082019050919050565b600061411b602183614840565b9150614126826151be565b604082019050919050565b600061413e601183614840565b91506141498261520d565b602082019050919050565b6000614161601283614840565b915061416c82615236565b602082019050919050565b61418081614a1f565b82525050565b61418f81614a1f565b82525050565b61419e81614a29565b82525050565b60006141b08284613c4f565b60148201915081905092915050565b60006141cb8285613cd3565b6020820191506141db8284613cd3565b6020820191508190509392505050565b60006141f78285613d8d565b91506142038284613d5c565b915061420e82613fb0565b91508190509392505050565b60006142258261405f565b9150819050919050565b60006020820190506142446000830184613c40565b92915050565b600060a08201905061425f6000830188613c40565b61426c6020830187613c40565b818103604083015261427e8186613c66565b905081810360608301526142928185613c66565b905081810360808301526142a68184613cea565b90509695505050505050565b600060a0820190506142c76000830188613c40565b6142d46020830187613c40565b6142e16040830186614186565b6142ee6060830185614186565b81810360808301526143008184613cea565b90509695505050505050565b600060208201905081810360008301526143268184613c66565b905092915050565b600060408201905081810360008301526143488185613c66565b9050818103602083015261435c8184613c66565b90509392505050565b600060208201905061437a6000830184613cc4565b92915050565b6000602082019050818103600083015261439a8184613d23565b905092915050565b600060208201905081810360008301526143bb81613e0c565b9050919050565b600060208201905081810360008301526143db81613e2f565b9050919050565b600060208201905081810360008301526143fb81613e52565b9050919050565b6000602082019050818103600083015261441b81613e75565b9050919050565b6000602082019050818103600083015261443b81613e98565b9050919050565b6000602082019050818103600083015261445b81613ebb565b9050919050565b6000602082019050818103600083015261447b81613ede565b9050919050565b6000602082019050818103600083015261449b81613f01565b9050919050565b600060208201905081810360008301526144bb81613f24565b9050919050565b600060208201905081810360008301526144db81613f47565b9050919050565b600060208201905081810360008301526144fb81613f6a565b9050919050565b6000602082019050818103600083015261451b81613f8d565b9050919050565b6000602082019050818103600083015261453b81613fd3565b9050919050565b6000602082019050818103600083015261455b81613ff6565b9050919050565b6000602082019050818103600083015261457b81614019565b9050919050565b6000602082019050818103600083015261459b8161403c565b9050919050565b600060208201905081810360008301526145bb81614082565b9050919050565b600060208201905081810360008301526145db816140a5565b9050919050565b600060208201905081810360008301526145fb816140c8565b9050919050565b6000602082019050818103600083015261461b816140eb565b9050919050565b6000602082019050818103600083015261463b8161410e565b9050919050565b6000602082019050818103600083015261465b81614131565b9050919050565b6000602082019050818103600083015261467b81614154565b9050919050565b60006020820190506146976000830184614186565b92915050565b60006040820190506146b26000830185614186565b6146bf6020830184614186565b9392505050565b60006020820190506146db6000830184614195565b92915050565b60006146eb6146fc565b90506146f78282614aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561472157614720614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561474d5761474c614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561477957614778614c40565b5b61478282614c91565b9050602081019050919050565b600067ffffffffffffffff8211156147aa576147a9614c40565b5b6147b382614c91565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061486782614a1f565b915061487283614a1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148a7576148a6614bb3565b5b828201905092915050565b60006148bd82614a29565b91506148c883614a29565b92508263ffffffff038211156148e1576148e0614bb3565b5b828201905092915050565b60006148f782614a1f565b915061490283614a1f565b92508261491257614911614be2565b5b828204905092915050565b600061492882614a1f565b915061493383614a1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496c5761496b614bb3565b5b828202905092915050565b600061498282614a1f565b915061498d83614a1f565b9250828210156149a05761499f614bb3565b5b828203905092915050565b60006149b6826149ff565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a66578082015181840152602081019050614a4b565b83811115614a75576000848401525b50505050565b60006002820490506001821680614a9357607f821691505b60208210811415614aa757614aa6614c11565b5b50919050565b614ab682614c91565b810181811067ffffffffffffffff82111715614ad557614ad4614c40565b5b80604052505050565b6000614ae982614a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1c57614b1b614bb3565b5b600182019050919050565b6000614b3282614a29565b915063ffffffff821415614b4957614b48614bb3565b5b600182019050919050565b6000614b5f82614b70565b9050919050565b6000819050919050565b6000614b7b82614ca2565b9050919050565b6000614b8d82614a1f565b9150614b9883614a1f565b925082614ba857614ba7614be2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614c8e5760046000803e614c8b600051614caf565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206d696e74656420796574000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652070726573616c65000000000000000000600082015250565b7f4d617820746f74616c206d696e74207265616368656400000000000000000000600082015250565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e7420736f6c64206f757400000000000000000000000000000000000000600082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f50726573616c65206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682066756e642e00000000000000000000000000000000600082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420726561636865642e000000000000000000000000000000600082015250565b7f4d696e74206174206c65617374206f6e652e0000000000000000000000000000600082015250565b600060443d101561526f576152f2565b6152776146fc565b60043d036004823e80513d602482011167ffffffffffffffff8211171561529f5750506152f2565b808201805167ffffffffffffffff8111156152bd57505050506152f2565b80602083010160043d0385018111156152da5750505050506152f2565b6152e982602001850186614aad565b82955050505050505b90565b6152fe816149ab565b811461530957600080fd5b50565b615315816149bd565b811461532057600080fd5b50565b61532c816149c9565b811461533757600080fd5b50565b615343816149d3565b811461534e57600080fd5b50565b61535a81614a1f565b811461536557600080fd5b50565b61537181614a29565b811461537c57600080fd5b5056fea2646970667358221220b01420f1ee329a0ae27445bddfc8ec014bd0ec50766b8cc741e71e47f537220564736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569666e687866747376716e7066366c6266786262696f746a77796175796934356f776763773465326d73637237646f7467677534342f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001754686520476f6f6420446f63746f72732047686f73747300000000000000000000000000000000000000000000000000000000000000000000000000000000045447444700000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _uri (string): ipfs://bafybeifnhxftsvqnpf6lbfxbbiotjwyauyi45owgcw4e2mscr7dotggu44/
Arg [1] : _name (string): The Good Doctors Ghosts
Arg [2] : _symbol (string): TGDG
Arg [3] : _totalSupply (uint32): 1000
Arg [4] : _cost (uint256): 50000000000000000
Arg [5] : _open (bool): False
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [4] : 00000000000000000000000000000000000000000000000000b1a2bc2ec50000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [7] : 697066733a2f2f62616679626569666e687866747376716e7066366c62667862
Arg [8] : 62696f746a77796175796934356f776763773465326d73637237646f74676775
Arg [9] : 34342f0000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [11] : 54686520476f6f6420446f63746f72732047686f737473000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [13] : 5447444700000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40933:4734:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20548:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19571:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41933:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43960:513;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41180:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40986:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45348:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41068:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41211:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22487:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42298:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45148:192;;;:::i;:::-;;42026:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41142:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20945:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41107:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42114:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44614:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35768:103;;;;;;;;;;;;;:::i;:::-;;44904:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35117:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41011:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41038:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42496:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21542:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43790:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41278:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21769:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22009:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36026:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42199:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42399:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41247:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20548:231;20634:7;20681:1;20662:21;;:7;:21;;;;20654:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20749:9;:13;20759:2;20749:13;;;;;;;;;;;:22;20763:7;20749:22;;;;;;;;;;;;;;;;20742:29;;20548:231;;;;:::o;19571:310::-;19673:4;19725:26;19710:41;;;:11;:41;;;;:110;;;;19783:37;19768:52;;;:11;:52;;;;19710:110;:163;;;;19837:36;19861:11;19837:23;:36::i;:::-;19710:163;19690:183;;19571:310;;;:::o;41933:85::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41997:13:::1;42005:4;41997:7;:13::i;:::-;41933:85:::0;:::o;43960:513::-;44072:20;44086:5;44072:13;:20::i;:::-;44111:11;;;;;;;;;;;44103:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44162:16;:10;;:16;;44154:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;44239:144;44276:5;;44239:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44300:10;;44356;44339:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;44329:39;;;;;;44239:18;:144::i;:::-;44217:217;;;;;;;;;;;;:::i;:::-;;;;;;;;;44447:18;44459:5;44447:11;:18::i;:::-;43960:513;;;:::o;41180:24::-;;;;;;;;;;;;:::o;40986:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45348:316::-;45445:13;45496:6;;;;;;;;;;45484:18;;:8;:18;;45476:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;45596:7;45605:26;45622:8;45605:16;:26::i;:::-;45579:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45534:122;;45348:316;;;:::o;41068:32::-;;;;:::o;41211:29::-;;;;;;;;;;;;;:::o;22487:442::-;22728:12;:10;:12::i;:::-;22720:20;;:4;:20;;;:60;;;;22744:36;22761:4;22767:12;:10;:12::i;:::-;22744:16;:36::i;:::-;22720:60;22698:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22869:52;22892:4;22898:2;22902:3;22907:7;22916:4;22869:22;:52::i;:::-;22487:442;;;;;:::o;42298:93::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42379:4:::1;42364:12;;:19;;;;;;;;;;;;;;;;;;42298:93:::0;:::o;45148:192::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45205:12:::1;45231:10;45223:24;;45269:21;45223:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45204:101;;;45324:7;45316:16;;;::::0;::::1;;35408:1;45148:192::o:0;42026:80::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42093:5:::1;42086:4;:12;;;;42026:80:::0;:::o;41142:31::-;;;;;;;;;;;;;:::o;20945:524::-;21101:16;21162:3;:10;21143:8;:15;:29;21135:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21231:30;21278:8;:15;21264:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21231:63;;21312:9;21307:122;21331:8;:15;21327:1;:19;21307:122;;;21387:30;21397:8;21406:1;21397:11;;;;;;;;;;;;;;;;;;;;;;21410:3;21414:1;21410:6;;;;;;;;;;;;;;;;;;;;;;21387:9;:30::i;:::-;21368:13;21382:1;21368:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21348:3;;;;:::i;:::-;;;21307:122;;;;21448:13;21441:20;;;20945:524;;;;:::o;41107:28::-;;;;;;;;;;;;;:::o;42114:77::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42178:5:::1;42171:4;;:12;;;;;;;;;;;;;;;;;;42114:77:::0;:::o;44614:282::-;44671:7;44691:15;44709:1;44691:19;;44726:9;44721:143;44746:6;;;;;;;;;;44741:11;;:1;:11;44721:143;;44803:1;44778:21;44788:7;44797:1;44778:9;:21::i;:::-;:26;44774:79;;;44836:1;44825:12;;;;;:::i;:::-;;;44774:79;44754:3;;;;;:::i;:::-;;;;44721:143;;;;44881:7;44874:14;;;44614:282;;;:::o;35768:103::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35833:30:::1;35860:1;35833:18;:30::i;:::-;35768:103::o:0;44904:236::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44977:8:::1;44972:161;44995:2;;:9;;44991:1;:13;;;44972:161;;;45048:11;;;;;;;;;;;45034:25;;45038:6;::::0;::::1;;;;;;;;45034:1;:10;;;;:::i;:::-;:25;;;;45026:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45092:29;45098:2;;45101:1;45098:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45107:6;::::0;45105:8:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;45092:29;;45115:1;45092:29;;;;;;;;;;;::::0;:5:::1;:29::i;:::-;45006:3;;;;;:::i;:::-;;;;44972:161;;;;44904:236:::0;;:::o;35117:87::-;35163:7;35190:6;;;;;;;;;;;35183:13;;35117:87;:::o;41011:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41038:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42496:96::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42580:4:::1;42567:10;:17;;;;42496:96:::0;:::o;21542:155::-;21637:52;21656:12;:10;:12::i;:::-;21670:8;21680;21637:18;:52::i;:::-;21542:155;;:::o;43790:162::-;43846:20;43860:5;43846:13;:20::i;:::-;43893:4;43885:12;;:4;;;;;;;;;;;:12;;;43877:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43926:18;43938:5;43926:11;:18::i;:::-;43790:162;:::o;41278:31::-;;;;;;;;;;;;;:::o;21769:168::-;21868:4;21892:18;:27;21911:7;21892:27;;;;;;;;;;;;;;;:37;21920:8;21892:37;;;;;;;;;;;;;;;;;;;;;;;;;21885:44;;21769:168;;;;:::o;22009:401::-;22225:12;:10;:12::i;:::-;22217:20;;:4;:20;;;:60;;;;22241:36;22258:4;22264:12;:10;:12::i;:::-;22241:16;:36::i;:::-;22217:60;22195:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22357:45;22375:4;22381:2;22385;22389:6;22397:4;22357:17;:45::i;:::-;22009:401;;;;;:::o;36026:201::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36135:1:::1;36115:22;;:8;:22;;;;36107:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36191:28;36210:8;36191:18;:28::i;:::-;36026:201:::0;:::o;42199:91::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42277:5:::1;42263:11;;:19;;;;;;;;;;;;;;;;;;42199:91:::0;:::o;42399:89::-;35348:12;:10;:12::i;:::-;35337:23;;:7;:5;:7::i;:::-;:23;;;35329:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42476:4:::1;42463:10;;:17;;;;;;;;;;;;;;;;;;42399:89:::0;:::o;41247:24::-;;;;;;;;;;;;;:::o;18326:157::-;18411:4;18450:25;18435:40;;;:11;:40;;;;18428:47;;18326:157;;;:::o;17243:98::-;17296:7;17323:10;17316:17;;17243:98;:::o;26489:88::-;26563:6;26556:4;:13;;;;;;;;;;;;:::i;:::-;;26489:88;:::o;42600:431::-;42673:1;42665:5;:9;;;42657:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42725:10;;;;;;;;;;;42716:19;;:5;:19;;;;42708:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;42796:5;42789:12;;:4;;:12;;;;:::i;:::-;42776:9;:25;;42768:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42859:11;;;;;;;;;;;42841:29;;42850:5;42841:6;;;;;;;;;;:14;;;;:::i;:::-;:29;;;;42833:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42961:12;;;;;;;;;;;42921:52;;42952:5;42921:36;;:16;:28;42938:10;42921:28;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:52;;42899:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;42600:431;:::o;39629:190::-;39754:4;39807;39778:25;39791:5;39798:4;39778:12;:25::i;:::-;:33;39771:40;;39629:190;;;;;:::o;43039:743::-;43106:1;43098:5;:9;;;43094:447;;;43124:20;43169:5;43161:14;;43147:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43124:52;;43191:24;43240:5;43232:14;;43218:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43191:56;;43269:8;43264:140;43287:5;43283:9;;:1;:9;;;43264:140;;;43340:1;43336;43327:6;;;;;;;;;;:10;;;;:::i;:::-;:14;;;;:::i;:::-;43318:23;;:3;43322:1;43318:6;;;;;;;;;;;;;;;;;;;;;;;:23;;;;;43387:1;43374:7;43382:1;43374:10;;;;;;;;;;;;;;;;;;;;;;;:14;;;;;43294:3;;;;;:::i;:::-;;;;43264:140;;;;43420:40;43431:10;43443:3;43448:7;43420:40;;;;;;;;;;;;:10;:40::i;:::-;43094:447;;;;;43493:36;43499:10;43520:1;43511:6;;;;;;;;;;:10;;;;:::i;:::-;43493:36;;43523:1;43493:36;;;;;;;;;;;;:5;:36::i;:::-;43094:447;43563:5;43553:6;;:15;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43611:5;43579:37;;:16;:28;43596:10;43579:28;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;43630:12;43656:17;;;;;;;;;;;43648:31;;43728:4;43714:10;;;;;;;;;;;43702:22;;:9;:22;;;;:::i;:::-;43701:31;;;;:::i;:::-;43648:99;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43629:118;;;43766:7;43758:16;;;;;;43039:743;;:::o;36956:723::-;37012:13;37242:1;37233:5;:10;37229:53;;;37260:10;;;;;;;;;;;;;;;;;;;;;37229:53;37292:12;37307:5;37292:20;;37323:14;37348:78;37363:1;37355:4;:9;37348:78;;37381:8;;;;;:::i;:::-;;;;37412:2;37404:10;;;;;:::i;:::-;;;37348:78;;;37436:19;37468:6;37458:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37436:39;;37486:154;37502:1;37493:5;:10;37486:154;;37530:1;37520:11;;;;;:::i;:::-;;;37597:2;37589:5;:10;;;;:::i;:::-;37576:2;:24;;;;:::i;:::-;37563:39;;37546:6;37553;37546:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;37626:2;37617:11;;;;;:::i;:::-;;;37486:154;;;37664:6;37650:21;;;;;36956:723;;;;:::o;24571:1074::-;24798:7;:14;24784:3;:10;:28;24776:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24890:1;24876:16;;:2;:16;;;;24868:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24947:16;24966:12;:10;:12::i;:::-;24947:31;;24991:60;25012:8;25022:4;25028:2;25032:3;25037:7;25046:4;24991:20;:60::i;:::-;25069:9;25064:421;25088:3;:10;25084:1;:14;25064:421;;;25120:10;25133:3;25137:1;25133:6;;;;;;;;;;;;;;;;;;;;;;25120:19;;25154:14;25171:7;25179:1;25171:10;;;;;;;;;;;;;;;;;;;;;;25154:27;;25198:19;25220:9;:13;25230:2;25220:13;;;;;;;;;;;:19;25234:4;25220:19;;;;;;;;;;;;;;;;25198:41;;25277:6;25262:11;:21;;25254:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25410:6;25396:11;:20;25374:9;:13;25384:2;25374:13;;;;;;;;;;;:19;25388:4;25374:19;;;;;;;;;;;;;;;:42;;;;25467:6;25446:9;:13;25456:2;25446:13;;;;;;;;;;;:17;25460:2;25446:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25064:421;;;25100:3;;;;:::i;:::-;;;25064:421;;;;25532:2;25502:47;;25526:4;25502:47;;25516:8;25502:47;;;25536:3;25541:7;25502:47;;;;;;;:::i;:::-;;;;;;;;25562:75;25598:8;25608:4;25614:2;25618:3;25623:7;25632:4;25562:35;:75::i;:::-;24571:1074;;;;;;:::o;36387:191::-;36461:16;36480:6;;;;;;;;;;;36461:25;;36506:8;36497:6;;:17;;;;;;;;;;;;;;;;;;36561:8;36530:40;;36551:8;36530:40;;;;;;;;;;;;36387:191;;:::o;26963:569::-;27130:1;27116:16;;:2;:16;;;;27108:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27183:16;27202:12;:10;:12::i;:::-;27183:31;;27227:102;27248:8;27266:1;27270:2;27274:21;27292:2;27274:17;:21::i;:::-;27297:25;27315:6;27297:17;:25::i;:::-;27324:4;27227:20;:102::i;:::-;27363:6;27342:9;:13;27352:2;27342:13;;;;;;;;;;;:17;27356:2;27342:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27422:2;27385:52;;27418:1;27385:52;;27400:8;27385:52;;;27426:2;27430:6;27385:52;;;;;;;:::i;:::-;;;;;;;;27450:74;27481:8;27499:1;27503:2;27507;27511:6;27519:4;27450:30;:74::i;:::-;26963:569;;;;;:::o;30757:331::-;30912:8;30903:17;;:5;:17;;;;30895:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31015:8;30977:18;:25;30996:5;30977:25;;;;;;;;;;;;;;;:35;31003:8;30977:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31061:8;31039:41;;31054:5;31039:41;;;31071:8;31039:41;;;;;;:::i;:::-;;;;;;;;30757:331;;;:::o;23393:820::-;23595:1;23581:16;;:2;:16;;;;23573:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23652:16;23671:12;:10;:12::i;:::-;23652:31;;23696:96;23717:8;23727:4;23733:2;23737:21;23755:2;23737:17;:21::i;:::-;23760:25;23778:6;23760:17;:25::i;:::-;23787:4;23696:20;:96::i;:::-;23805:19;23827:9;:13;23837:2;23827:13;;;;;;;;;;;:19;23841:4;23827:19;;;;;;;;;;;;;;;;23805:41;;23880:6;23865:11;:21;;23857:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24005:6;23991:11;:20;23969:9;:13;23979:2;23969:13;;;;;;;;;;;:19;23983:4;23969:19;;;;;;;;;;;;;;;:42;;;;24054:6;24033:9;:13;24043:2;24033:13;;;;;;;;;;;:17;24047:2;24033:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24109:2;24078:46;;24103:4;24078:46;;24093:8;24078:46;;;24113:2;24117:6;24078:46;;;;;;;:::i;:::-;;;;;;;;24137:68;24168:8;24178:4;24184:2;24188;24192:6;24200:4;24137:30;:68::i;:::-;23393:820;;;;;;;:::o;40181:701::-;40264:7;40284:20;40307:4;40284:27;;40327:9;40322:523;40346:5;:12;40342:1;:16;40322:523;;;40380:20;40403:5;40409:1;40403:8;;;;;;;;;;;;;;;;;;;;;;40380:31;;40446:12;40430;:28;40426:408;;40600:12;40614;40583:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40573:55;;;;;;40558:70;;40426:408;;;40790:12;40804;40773:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40763:55;;;;;;40748:70;;40426:408;40322:523;40360:3;;;;;:::i;:::-;;;;40322:523;;;;40862:12;40855:19;;;40181:701;;;;:::o;27888:735::-;28080:1;28066:16;;:2;:16;;;;28058:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28153:7;:14;28139:3;:10;:28;28131:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28225:16;28244:12;:10;:12::i;:::-;28225:31;;28269:66;28290:8;28308:1;28312:2;28316:3;28321:7;28330:4;28269:20;:66::i;:::-;28353:9;28348:103;28372:3;:10;28368:1;:14;28348:103;;;28429:7;28437:1;28429:10;;;;;;;;;;;;;;;;;;;;;;28404:9;:17;28414:3;28418:1;28414:6;;;;;;;;;;;;;;;;;;;;;;28404:17;;;;;;;;;;;:21;28422:2;28404:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;28384:3;;;;;:::i;:::-;;;;28348:103;;;;28504:2;28468:53;;28500:1;28468:53;;28482:8;28468:53;;;28508:3;28513:7;28468:53;;;;;;;:::i;:::-;;;;;;;;28534:81;28570:8;28588:1;28592:2;28596:3;28601:7;28610:4;28534:35;:81::i;:::-;27888:735;;;;;:::o;32044:221::-;;;;;;;:::o;33025:813::-;33265:15;:2;:13;;;:15::i;:::-;33261:570;;;33318:2;33301:43;;;33345:8;33355:4;33361:3;33366:7;33375:4;33301:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33297:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33693:6;33686:14;;;;;;;;;;;:::i;:::-;;;;;;;;33297:523;;;33742:62;;;;;;;;;;:::i;:::-;;;;;;;;33297:523;33474:48;;;33462:60;;;:8;:60;;;;33458:159;;33547:50;;;;;;;;;;:::i;:::-;;;;;;;;33458:159;33381:251;33261:570;33025:813;;;;;;:::o;33846:198::-;33912:16;33941:22;33980:1;33966:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33941:41;;34004:7;33993:5;33999:1;33993:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;34031:5;34024:12;;;33846:198;;;:::o;32273:744::-;32488:15;:2;:13;;;:15::i;:::-;32484:526;;;32541:2;32524:38;;;32563:8;32573:4;32579:2;32583:6;32591:4;32524:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32520:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32872:6;32865:14;;;;;;;;;;;:::i;:::-;;;;;;;;32520:479;;;32921:62;;;;;;;;;;:::i;:::-;;;;;;;;32520:479;32658:43;;;32646:55;;;:8;:55;;;;32642:154;;32726:50;;;;;;;;;;:::i;:::-;;;;;;;;32642:154;32597:214;32484:526;32273:744;;;;;;:::o;9227:387::-;9287:4;9495:12;9562:7;9550:20;9542:28;;9605:1;9598:4;:8;9591:15;;;9227:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655: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:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:367::-;2298:8;2308:6;2358:3;2351:4;2343:6;2339:17;2335:27;2325:2;;2376:1;2373;2366:12;2325:2;2412:6;2399:20;2389:30;;2442:18;2434:6;2431:30;2428:2;;;2474:1;2471;2464:12;2428:2;2511:4;2503:6;2499:17;2487:29;;2565:3;2557:4;2549:6;2545:17;2535:8;2531:32;2528:41;2525:2;;;2582:1;2579;2572:12;2525:2;2315:277;;;;;:::o;2615:303::-;2686:5;2735:3;2728:4;2720:6;2716:17;2712:27;2702:2;;2753:1;2750;2743:12;2702:2;2793:6;2780:20;2818:94;2908:3;2900:6;2893:4;2885:6;2881:17;2818:94;:::i;:::-;2809:103;;2692:226;;;;;:::o;2941:367::-;3014:8;3024:6;3074:3;3067:4;3059:6;3055:17;3051:27;3041:2;;3092:1;3089;3082:12;3041:2;3128:6;3115:20;3105:30;;3158:18;3150:6;3147:30;3144:2;;;3190:1;3187;3180:12;3144:2;3227:4;3219:6;3215:17;3203:29;;3281:3;3273:4;3265:6;3261:17;3251:8;3247:32;3244:41;3241:2;;;3298:1;3295;3288:12;3241:2;3031:277;;;;;:::o;3331:303::-;3402:5;3451:3;3444:4;3436:6;3432:17;3428:27;3418:2;;3469:1;3466;3459:12;3418:2;3509:6;3496:20;3534:94;3624:3;3616:6;3609:4;3601:6;3597:17;3534:94;:::i;:::-;3525:103;;3408:226;;;;;:::o;3640:133::-;3683:5;3721:6;3708:20;3699:29;;3737:30;3761:5;3737:30;:::i;:::-;3689:84;;;;:::o;3779:139::-;3825:5;3863:6;3850:20;3841:29;;3879:33;3906:5;3879:33;:::i;:::-;3831:87;;;;:::o;3924:137::-;3969:5;4007:6;3994:20;3985:29;;4023:32;4049:5;4023:32;:::i;:::-;3975:86;;;;:::o;4067:141::-;4123:5;4154:6;4148:13;4139:22;;4170:32;4196:5;4170:32;:::i;:::-;4129:79;;;;:::o;4227:271::-;4282:5;4331:3;4324:4;4316:6;4312:17;4308:27;4298:2;;4349:1;4346;4339:12;4298:2;4389:6;4376:20;4414:78;4488:3;4480:6;4473:4;4465:6;4461:17;4414:78;:::i;:::-;4405:87;;4288:210;;;;;:::o;4518:273::-;4574:5;4623:3;4616:4;4608:6;4604:17;4600:27;4590:2;;4641:1;4638;4631:12;4590:2;4681:6;4668:20;4706:79;4781:3;4773:6;4766:4;4758:6;4754:17;4706:79;:::i;:::-;4697:88;;4580:211;;;;;:::o;4797:139::-;4843:5;4881:6;4868:20;4859:29;;4897:33;4924:5;4897:33;:::i;:::-;4849:87;;;;:::o;4942:137::-;4987:5;5025:6;5012:20;5003:29;;5041:32;5067:5;5041:32;:::i;:::-;4993:86;;;;:::o;5085:262::-;5144:6;5193:2;5181:9;5172:7;5168:23;5164:32;5161:2;;;5209:1;5206;5199:12;5161:2;5252:1;5277:53;5322:7;5313:6;5302:9;5298:22;5277:53;:::i;:::-;5267:63;;5223:117;5151:196;;;;:::o;5353:407::-;5421:6;5429;5478:2;5466:9;5457:7;5453:23;5449:32;5446:2;;;5494:1;5491;5484:12;5446:2;5537:1;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;:::i;:::-;5552:63;;5508:117;5664:2;5690:53;5735:7;5726:6;5715:9;5711:22;5690:53;:::i;:::-;5680:63;;5635:118;5436:324;;;;;:::o;5766:1241::-;5920:6;5928;5936;5944;5952;6001:3;5989:9;5980:7;5976:23;5972:33;5969:2;;;6018:1;6015;6008:12;5969:2;6061:1;6086:53;6131:7;6122:6;6111:9;6107:22;6086:53;:::i;:::-;6076:63;;6032:117;6188:2;6214:53;6259:7;6250:6;6239:9;6235:22;6214:53;:::i;:::-;6204:63;;6159:118;6344:2;6333:9;6329:18;6316:32;6375:18;6367:6;6364:30;6361:2;;;6407:1;6404;6397:12;6361:2;6435:78;6505:7;6496:6;6485:9;6481:22;6435:78;:::i;:::-;6425:88;;6287:236;6590:2;6579:9;6575:18;6562:32;6621:18;6613:6;6610:30;6607:2;;;6653:1;6650;6643:12;6607:2;6681:78;6751:7;6742:6;6731:9;6727:22;6681:78;:::i;:::-;6671:88;;6533:236;6836:3;6825:9;6821:19;6808:33;6868:18;6860:6;6857:30;6854:2;;;6900:1;6897;6890:12;6854:2;6928:62;6982:7;6973:6;6962:9;6958:22;6928:62;:::i;:::-;6918:72;;6779:221;5959:1048;;;;;;;;:::o;7013:955::-;7117:6;7125;7133;7141;7149;7198:3;7186:9;7177:7;7173:23;7169:33;7166:2;;;7215:1;7212;7205:12;7166:2;7258:1;7283:53;7328:7;7319:6;7308:9;7304:22;7283:53;:::i;:::-;7273:63;;7229:117;7385:2;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7356:118;7513:2;7539:53;7584:7;7575:6;7564:9;7560:22;7539:53;:::i;:::-;7529:63;;7484:118;7641:2;7667:53;7712:7;7703:6;7692:9;7688:22;7667:53;:::i;:::-;7657:63;;7612:118;7797:3;7786:9;7782:19;7769:33;7829:18;7821:6;7818:30;7815:2;;;7861:1;7858;7851:12;7815:2;7889:62;7943:7;7934:6;7923:9;7919:22;7889:62;:::i;:::-;7879:72;;7740:221;7156:812;;;;;;;;:::o;7974:401::-;8039:6;8047;8096:2;8084:9;8075:7;8071:23;8067:32;8064:2;;;8112:1;8109;8102:12;8064:2;8155:1;8180:53;8225:7;8216:6;8205:9;8201:22;8180:53;:::i;:::-;8170:63;;8126:117;8282:2;8308:50;8350:7;8341:6;8330:9;8326:22;8308:50;:::i;:::-;8298:60;;8253:115;8054:321;;;;;:::o;8381:407::-;8449:6;8457;8506:2;8494:9;8485:7;8481:23;8477:32;8474:2;;;8522:1;8519;8512:12;8474:2;8565:1;8590:53;8635:7;8626:6;8615:9;8611:22;8590:53;:::i;:::-;8580:63;;8536:117;8692:2;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8663:118;8464:324;;;;;:::o;8794:425::-;8880:6;8888;8937:2;8925:9;8916:7;8912:23;8908:32;8905:2;;;8953:1;8950;8943:12;8905:2;9024:1;9013:9;9009:17;8996:31;9054:18;9046:6;9043:30;9040:2;;;9086:1;9083;9076:12;9040:2;9122:80;9194:7;9185:6;9174:9;9170:22;9122:80;:::i;:::-;9104:98;;;;8967:245;8895:324;;;;;:::o;9225:693::-;9343:6;9351;9400:2;9388:9;9379:7;9375:23;9371:32;9368:2;;;9416:1;9413;9406:12;9368:2;9487:1;9476:9;9472:17;9459:31;9517:18;9509:6;9506:30;9503:2;;;9549:1;9546;9539:12;9503:2;9577:78;9647:7;9638:6;9627:9;9623:22;9577:78;:::i;:::-;9567:88;;9430:235;9732:2;9721:9;9717:18;9704:32;9763:18;9755:6;9752:30;9749:2;;;9795:1;9792;9785:12;9749:2;9823:78;9893:7;9884:6;9873:9;9869:22;9823:78;:::i;:::-;9813:88;;9675:236;9358:560;;;;;:::o;9924:256::-;9980:6;10029:2;10017:9;10008:7;10004:23;10000:32;9997:2;;;10045:1;10042;10035:12;9997:2;10088:1;10113:50;10155:7;10146:6;10135:9;10131:22;10113:50;:::i;:::-;10103:60;;10059:114;9987:193;;;;:::o;10186:262::-;10245:6;10294:2;10282:9;10273:7;10269:23;10265:32;10262:2;;;10310:1;10307;10300:12;10262:2;10353:1;10378:53;10423:7;10414:6;10403:9;10399:22;10378:53;:::i;:::-;10368:63;;10324:117;10252:196;;;;:::o;10454:260::-;10512:6;10561:2;10549:9;10540:7;10536:23;10532:32;10529:2;;;10577:1;10574;10567:12;10529:2;10620:1;10645:52;10689:7;10680:6;10669:9;10665:22;10645:52;:::i;:::-;10635:62;;10591:116;10519:195;;;;:::o;10720:282::-;10789:6;10838:2;10826:9;10817:7;10813:23;10809:32;10806:2;;;10854:1;10851;10844:12;10806:2;10897:1;10922:63;10977:7;10968:6;10957:9;10953:22;10922:63;:::i;:::-;10912:73;;10868:127;10796:206;;;;:::o;11008:375::-;11077:6;11126:2;11114:9;11105:7;11101:23;11097:32;11094:2;;;11142:1;11139;11132:12;11094:2;11213:1;11202:9;11198:17;11185:31;11243:18;11235:6;11232:30;11229:2;;;11275:1;11272;11265:12;11229:2;11303:63;11358:7;11349:6;11338:9;11334:22;11303:63;:::i;:::-;11293:73;;11156:220;11084:299;;;;:::o;11389:262::-;11448:6;11497:2;11485:9;11476:7;11472:23;11468:32;11465:2;;;11513:1;11510;11503:12;11465:2;11556:1;11581:53;11626:7;11617:6;11606:9;11602:22;11581:53;:::i;:::-;11571:63;;11527:117;11455:196;;;;:::o;11657:260::-;11715:6;11764:2;11752:9;11743:7;11739:23;11735:32;11732:2;;;11780:1;11777;11770:12;11732:2;11823:1;11848:52;11892:7;11883:6;11872:9;11868:22;11848:52;:::i;:::-;11838:62;;11794:116;11722:195;;;;:::o;11923:568::-;12017:6;12025;12033;12082:2;12070:9;12061:7;12057:23;12053:32;12050:2;;;12098:1;12095;12088:12;12050:2;12141:1;12166:52;12210:7;12201:6;12190:9;12186:22;12166:52;:::i;:::-;12156:62;;12112:116;12295:2;12284:9;12280:18;12267:32;12326:18;12318:6;12315:30;12312:2;;;12358:1;12355;12348:12;12312:2;12394:80;12466:7;12457:6;12446:9;12442:22;12394:80;:::i;:::-;12376:98;;;;12238:246;12040:451;;;;;:::o;12497:179::-;12566:10;12587:46;12629:3;12621:6;12587:46;:::i;:::-;12665:4;12660:3;12656:14;12642:28;;12577:99;;;;:::o;12682:118::-;12769:24;12787:5;12769:24;:::i;:::-;12764:3;12757:37;12747:53;;:::o;12806:157::-;12911:45;12931:24;12949:5;12931:24;:::i;:::-;12911:45;:::i;:::-;12906:3;12899:58;12889:74;;:::o;12999:732::-;13118:3;13147:54;13195:5;13147:54;:::i;:::-;13217:86;13296:6;13291:3;13217:86;:::i;:::-;13210:93;;13327:56;13377:5;13327:56;:::i;:::-;13406:7;13437:1;13422:284;13447:6;13444:1;13441:13;13422:284;;;13523:6;13517:13;13550:63;13609:3;13594:13;13550:63;:::i;:::-;13543:70;;13636:60;13689:6;13636:60;:::i;:::-;13626:70;;13482:224;13469:1;13466;13462:9;13457:14;;13422:284;;;13426:14;13722:3;13715:10;;13123:608;;;;;;;:::o;13737:109::-;13818:21;13833:5;13818:21;:::i;:::-;13813:3;13806:34;13796:50;;:::o;13852:157::-;13957:45;13977:24;13995:5;13977:24;:::i;:::-;13957:45;:::i;:::-;13952:3;13945:58;13935:74;;:::o;14015:360::-;14101:3;14129:38;14161:5;14129:38;:::i;:::-;14183:70;14246:6;14241:3;14183:70;:::i;:::-;14176:77;;14262:52;14307:6;14302:3;14295:4;14288:5;14284:16;14262:52;:::i;:::-;14339:29;14361:6;14339:29;:::i;:::-;14334:3;14330:39;14323:46;;14105:270;;;;;:::o;14381:364::-;14469:3;14497:39;14530:5;14497:39;:::i;:::-;14552:71;14616:6;14611:3;14552:71;:::i;:::-;14545:78;;14632:52;14677:6;14672:3;14665:4;14658:5;14654:16;14632:52;:::i;:::-;14709:29;14731:6;14709:29;:::i;:::-;14704:3;14700:39;14693:46;;14473:272;;;;;:::o;14751:377::-;14857:3;14885:39;14918:5;14885:39;:::i;:::-;14940:89;15022:6;15017:3;14940:89;:::i;:::-;14933:96;;15038:52;15083:6;15078:3;15071:4;15064:5;15060:16;15038:52;:::i;:::-;15115:6;15110:3;15106:16;15099:23;;14861:267;;;;;:::o;15158:845::-;15261:3;15298:5;15292:12;15327:36;15353:9;15327:36;:::i;:::-;15379:89;15461:6;15456:3;15379:89;:::i;:::-;15372:96;;15499:1;15488:9;15484:17;15515:1;15510:137;;;;15661:1;15656:341;;;;15477:520;;15510:137;15594:4;15590:9;15579;15575:25;15570:3;15563:38;15630:6;15625:3;15621:16;15614:23;;15510:137;;15656:341;15723:38;15755:5;15723:38;:::i;:::-;15783:1;15797:154;15811:6;15808:1;15805:13;15797:154;;;15885:7;15879:14;15875:1;15870:3;15866:11;15859:35;15935:1;15926:7;15922:15;15911:26;;15833:4;15830:1;15826:12;15821:17;;15797:154;;;15980:6;15975:3;15971:16;15964:23;;15663:334;;15477:520;;15265:738;;;;;;:::o;16009:366::-;16151:3;16172:67;16236:2;16231:3;16172:67;:::i;:::-;16165:74;;16248:93;16337:3;16248:93;:::i;:::-;16366:2;16361:3;16357:12;16350:19;;16155:220;;;:::o;16381:366::-;16523:3;16544:67;16608:2;16603:3;16544:67;:::i;:::-;16537:74;;16620:93;16709:3;16620:93;:::i;:::-;16738:2;16733:3;16729:12;16722:19;;16527:220;;;:::o;16753:366::-;16895:3;16916:67;16980:2;16975:3;16916:67;:::i;:::-;16909:74;;16992:93;17081:3;16992:93;:::i;:::-;17110:2;17105:3;17101:12;17094:19;;16899:220;;;:::o;17125:366::-;17267:3;17288:67;17352:2;17347:3;17288:67;:::i;:::-;17281:74;;17364:93;17453:3;17364:93;:::i;:::-;17482:2;17477:3;17473:12;17466:19;;17271:220;;;:::o;17497:366::-;17639:3;17660:67;17724:2;17719:3;17660:67;:::i;:::-;17653:74;;17736:93;17825:3;17736:93;:::i;:::-;17854:2;17849:3;17845:12;17838:19;;17643:220;;;:::o;17869:366::-;18011:3;18032:67;18096:2;18091:3;18032:67;:::i;:::-;18025:74;;18108:93;18197:3;18108:93;:::i;:::-;18226:2;18221:3;18217:12;18210:19;;18015:220;;;:::o;18241:366::-;18383:3;18404:67;18468:2;18463:3;18404:67;:::i;:::-;18397:74;;18480:93;18569:3;18480:93;:::i;:::-;18598:2;18593:3;18589:12;18582:19;;18387:220;;;:::o;18613:366::-;18755:3;18776:67;18840:2;18835:3;18776:67;:::i;:::-;18769:74;;18852:93;18941:3;18852:93;:::i;:::-;18970:2;18965:3;18961:12;18954:19;;18759:220;;;:::o;18985:366::-;19127:3;19148:67;19212:2;19207:3;19148:67;:::i;:::-;19141:74;;19224:93;19313:3;19224:93;:::i;:::-;19342:2;19337:3;19333:12;19326:19;;19131:220;;;:::o;19357:366::-;19499:3;19520:67;19584:2;19579:3;19520:67;:::i;:::-;19513:74;;19596:93;19685:3;19596:93;:::i;:::-;19714:2;19709:3;19705:12;19698:19;;19503:220;;;:::o;19729:366::-;19871:3;19892:67;19956:2;19951:3;19892:67;:::i;:::-;19885:74;;19968:93;20057:3;19968:93;:::i;:::-;20086:2;20081:3;20077:12;20070:19;;19875:220;;;:::o;20101:366::-;20243:3;20264:67;20328:2;20323:3;20264:67;:::i;:::-;20257:74;;20340:93;20429:3;20340:93;:::i;:::-;20458:2;20453:3;20449:12;20442:19;;20247:220;;;:::o;20473:400::-;20633:3;20654:84;20736:1;20731:3;20654:84;:::i;:::-;20647:91;;20747:93;20836:3;20747:93;:::i;:::-;20865:1;20860:3;20856:11;20849:18;;20637:236;;;:::o;20879:366::-;21021:3;21042:67;21106:2;21101:3;21042:67;:::i;:::-;21035:74;;21118:93;21207:3;21118:93;:::i;:::-;21236:2;21231:3;21227:12;21220:19;;21025:220;;;:::o;21251:366::-;21393:3;21414:67;21478:2;21473:3;21414:67;:::i;:::-;21407:74;;21490:93;21579:3;21490:93;:::i;:::-;21608:2;21603:3;21599:12;21592:19;;21397:220;;;:::o;21623:366::-;21765:3;21786:67;21850:2;21845:3;21786:67;:::i;:::-;21779:74;;21862:93;21951:3;21862:93;:::i;:::-;21980:2;21975:3;21971:12;21964:19;;21769:220;;;:::o;21995:366::-;22137:3;22158:67;22222:2;22217:3;22158:67;:::i;:::-;22151:74;;22234:93;22323:3;22234:93;:::i;:::-;22352:2;22347:3;22343:12;22336:19;;22141:220;;;:::o;22367:398::-;22526:3;22547:83;22628:1;22623:3;22547:83;:::i;:::-;22540:90;;22639:93;22728:3;22639:93;:::i;:::-;22757:1;22752:3;22748:11;22741:18;;22530:235;;;:::o;22771:366::-;22913:3;22934:67;22998:2;22993:3;22934:67;:::i;:::-;22927:74;;23010:93;23099:3;23010:93;:::i;:::-;23128:2;23123:3;23119:12;23112:19;;22917:220;;;:::o;23143:366::-;23285:3;23306:67;23370:2;23365:3;23306:67;:::i;:::-;23299:74;;23382:93;23471:3;23382:93;:::i;:::-;23500:2;23495:3;23491:12;23484:19;;23289:220;;;:::o;23515:366::-;23657:3;23678:67;23742:2;23737:3;23678:67;:::i;:::-;23671:74;;23754:93;23843:3;23754:93;:::i;:::-;23872:2;23867:3;23863:12;23856:19;;23661:220;;;:::o;23887:366::-;24029:3;24050:67;24114:2;24109:3;24050:67;:::i;:::-;24043:74;;24126:93;24215:3;24126:93;:::i;:::-;24244:2;24239:3;24235:12;24228:19;;24033:220;;;:::o;24259:366::-;24401:3;24422:67;24486:2;24481:3;24422:67;:::i;:::-;24415:74;;24498:93;24587:3;24498:93;:::i;:::-;24616:2;24611:3;24607:12;24600:19;;24405:220;;;:::o;24631:366::-;24773:3;24794:67;24858:2;24853:3;24794:67;:::i;:::-;24787:74;;24870:93;24959:3;24870:93;:::i;:::-;24988:2;24983:3;24979:12;24972:19;;24777:220;;;:::o;25003:366::-;25145:3;25166:67;25230:2;25225:3;25166:67;:::i;:::-;25159:74;;25242:93;25331:3;25242:93;:::i;:::-;25360:2;25355:3;25351:12;25344:19;;25149:220;;;:::o;25375:108::-;25452:24;25470:5;25452:24;:::i;:::-;25447:3;25440:37;25430:53;;:::o;25489:118::-;25576:24;25594:5;25576:24;:::i;:::-;25571:3;25564:37;25554:53;;:::o;25613:115::-;25698:23;25715:5;25698:23;:::i;:::-;25693:3;25686:36;25676:52;;:::o;25734:256::-;25846:3;25861:75;25932:3;25923:6;25861:75;:::i;:::-;25961:2;25956:3;25952:12;25945:19;;25981:3;25974:10;;25850:140;;;;:::o;25996:397::-;26136:3;26151:75;26222:3;26213:6;26151:75;:::i;:::-;26251:2;26246:3;26242:12;26235:19;;26264:75;26335:3;26326:6;26264:75;:::i;:::-;26364:2;26359:3;26355:12;26348:19;;26384:3;26377:10;;26140:253;;;;;:::o;26399:695::-;26677:3;26699:92;26787:3;26778:6;26699:92;:::i;:::-;26692:99;;26808:95;26899:3;26890:6;26808:95;:::i;:::-;26801:102;;26920:148;27064:3;26920:148;:::i;:::-;26913:155;;27085:3;27078:10;;26681:413;;;;;:::o;27100:379::-;27284:3;27306:147;27449:3;27306:147;:::i;:::-;27299:154;;27470:3;27463:10;;27288:191;;;:::o;27485:222::-;27578:4;27616:2;27605:9;27601:18;27593:26;;27629:71;27697:1;27686:9;27682:17;27673:6;27629:71;:::i;:::-;27583:124;;;;:::o;27713:1053::-;28036:4;28074:3;28063:9;28059:19;28051:27;;28088:71;28156:1;28145:9;28141:17;28132:6;28088:71;:::i;:::-;28169:72;28237:2;28226:9;28222:18;28213:6;28169:72;:::i;:::-;28288:9;28282:4;28278:20;28273:2;28262:9;28258:18;28251:48;28316:108;28419:4;28410:6;28316:108;:::i;:::-;28308:116;;28471:9;28465:4;28461:20;28456:2;28445:9;28441:18;28434:48;28499:108;28602:4;28593:6;28499:108;:::i;:::-;28491:116;;28655:9;28649:4;28645:20;28639:3;28628:9;28624:19;28617:49;28683:76;28754:4;28745:6;28683:76;:::i;:::-;28675:84;;28041:725;;;;;;;;:::o;28772:751::-;28995:4;29033:3;29022:9;29018:19;29010:27;;29047:71;29115:1;29104:9;29100:17;29091:6;29047:71;:::i;:::-;29128:72;29196:2;29185:9;29181:18;29172:6;29128:72;:::i;:::-;29210;29278:2;29267:9;29263:18;29254:6;29210:72;:::i;:::-;29292;29360:2;29349:9;29345:18;29336:6;29292:72;:::i;:::-;29412:9;29406:4;29402:20;29396:3;29385:9;29381:19;29374:49;29440:76;29511:4;29502:6;29440:76;:::i;:::-;29432:84;;29000:523;;;;;;;;:::o;29529:373::-;29672:4;29710:2;29699:9;29695:18;29687:26;;29759:9;29753:4;29749:20;29745:1;29734:9;29730:17;29723:47;29787:108;29890:4;29881:6;29787:108;:::i;:::-;29779:116;;29677:225;;;;:::o;29908:634::-;30129:4;30167:2;30156:9;30152:18;30144:26;;30216:9;30210:4;30206:20;30202:1;30191:9;30187:17;30180:47;30244:108;30347:4;30338:6;30244:108;:::i;:::-;30236:116;;30399:9;30393:4;30389:20;30384:2;30373:9;30369:18;30362:48;30427:108;30530:4;30521:6;30427:108;:::i;:::-;30419:116;;30134:408;;;;;:::o;30548:210::-;30635:4;30673:2;30662:9;30658:18;30650:26;;30686:65;30748:1;30737:9;30733:17;30724:6;30686:65;:::i;:::-;30640:118;;;;:::o;30764:313::-;30877:4;30915:2;30904:9;30900:18;30892:26;;30964:9;30958:4;30954:20;30950:1;30939:9;30935:17;30928:47;30992:78;31065:4;31056:6;30992:78;:::i;:::-;30984:86;;30882:195;;;;:::o;31083:419::-;31249:4;31287:2;31276:9;31272:18;31264:26;;31336:9;31330:4;31326:20;31322:1;31311:9;31307:17;31300:47;31364:131;31490:4;31364:131;:::i;:::-;31356:139;;31254:248;;;:::o;31508:419::-;31674:4;31712:2;31701:9;31697:18;31689:26;;31761:9;31755:4;31751:20;31747:1;31736:9;31732:17;31725:47;31789:131;31915:4;31789:131;:::i;:::-;31781:139;;31679:248;;;:::o;31933:419::-;32099:4;32137:2;32126:9;32122:18;32114:26;;32186:9;32180:4;32176:20;32172:1;32161:9;32157:17;32150:47;32214:131;32340:4;32214:131;:::i;:::-;32206:139;;32104:248;;;:::o;32358:419::-;32524:4;32562:2;32551:9;32547:18;32539:26;;32611:9;32605:4;32601:20;32597:1;32586:9;32582:17;32575:47;32639:131;32765:4;32639:131;:::i;:::-;32631:139;;32529:248;;;:::o;32783:419::-;32949:4;32987:2;32976:9;32972:18;32964:26;;33036:9;33030:4;33026:20;33022:1;33011:9;33007:17;33000:47;33064:131;33190:4;33064:131;:::i;:::-;33056:139;;32954:248;;;:::o;33208:419::-;33374:4;33412:2;33401:9;33397:18;33389:26;;33461:9;33455:4;33451:20;33447:1;33436:9;33432:17;33425:47;33489:131;33615:4;33489:131;:::i;:::-;33481:139;;33379:248;;;:::o;33633:419::-;33799:4;33837:2;33826:9;33822:18;33814:26;;33886:9;33880:4;33876:20;33872:1;33861:9;33857:17;33850:47;33914:131;34040:4;33914:131;:::i;:::-;33906:139;;33804:248;;;:::o;34058:419::-;34224:4;34262:2;34251:9;34247:18;34239:26;;34311:9;34305:4;34301:20;34297:1;34286:9;34282:17;34275:47;34339:131;34465:4;34339:131;:::i;:::-;34331:139;;34229:248;;;:::o;34483:419::-;34649:4;34687:2;34676:9;34672:18;34664:26;;34736:9;34730:4;34726:20;34722:1;34711:9;34707:17;34700:47;34764:131;34890:4;34764:131;:::i;:::-;34756:139;;34654:248;;;:::o;34908:419::-;35074:4;35112:2;35101:9;35097:18;35089:26;;35161:9;35155:4;35151:20;35147:1;35136:9;35132:17;35125:47;35189:131;35315:4;35189:131;:::i;:::-;35181:139;;35079:248;;;:::o;35333:419::-;35499:4;35537:2;35526:9;35522:18;35514:26;;35586:9;35580:4;35576:20;35572:1;35561:9;35557:17;35550:47;35614:131;35740:4;35614:131;:::i;:::-;35606:139;;35504:248;;;:::o;35758:419::-;35924:4;35962:2;35951:9;35947:18;35939:26;;36011:9;36005:4;36001:20;35997:1;35986:9;35982:17;35975:47;36039:131;36165:4;36039:131;:::i;:::-;36031:139;;35929:248;;;:::o;36183:419::-;36349:4;36387:2;36376:9;36372:18;36364:26;;36436:9;36430:4;36426:20;36422:1;36411:9;36407:17;36400:47;36464:131;36590:4;36464:131;:::i;:::-;36456:139;;36354:248;;;:::o;36608:419::-;36774:4;36812:2;36801:9;36797:18;36789:26;;36861:9;36855:4;36851:20;36847:1;36836:9;36832:17;36825:47;36889:131;37015:4;36889:131;:::i;:::-;36881:139;;36779:248;;;:::o;37033:419::-;37199:4;37237:2;37226:9;37222:18;37214:26;;37286:9;37280:4;37276:20;37272:1;37261:9;37257:17;37250:47;37314:131;37440:4;37314:131;:::i;:::-;37306:139;;37204:248;;;:::o;37458:419::-;37624:4;37662:2;37651:9;37647:18;37639:26;;37711:9;37705:4;37701:20;37697:1;37686:9;37682:17;37675:47;37739:131;37865:4;37739:131;:::i;:::-;37731:139;;37629:248;;;:::o;37883:419::-;38049:4;38087:2;38076:9;38072:18;38064:26;;38136:9;38130:4;38126:20;38122:1;38111:9;38107:17;38100:47;38164:131;38290:4;38164:131;:::i;:::-;38156:139;;38054:248;;;:::o;38308:419::-;38474:4;38512:2;38501:9;38497:18;38489:26;;38561:9;38555:4;38551:20;38547:1;38536:9;38532:17;38525:47;38589:131;38715:4;38589:131;:::i;:::-;38581:139;;38479:248;;;:::o;38733:419::-;38899:4;38937:2;38926:9;38922:18;38914:26;;38986:9;38980:4;38976:20;38972:1;38961:9;38957:17;38950:47;39014:131;39140:4;39014:131;:::i;:::-;39006:139;;38904:248;;;:::o;39158:419::-;39324:4;39362:2;39351:9;39347:18;39339:26;;39411:9;39405:4;39401:20;39397:1;39386:9;39382:17;39375:47;39439:131;39565:4;39439:131;:::i;:::-;39431:139;;39329:248;;;:::o;39583:419::-;39749:4;39787:2;39776:9;39772:18;39764:26;;39836:9;39830:4;39826:20;39822:1;39811:9;39807:17;39800:47;39864:131;39990:4;39864:131;:::i;:::-;39856:139;;39754:248;;;:::o;40008:419::-;40174:4;40212:2;40201:9;40197:18;40189:26;;40261:9;40255:4;40251:20;40247:1;40236:9;40232:17;40225:47;40289:131;40415:4;40289:131;:::i;:::-;40281:139;;40179:248;;;:::o;40433:419::-;40599:4;40637:2;40626:9;40622:18;40614:26;;40686:9;40680:4;40676:20;40672:1;40661:9;40657:17;40650:47;40714:131;40840:4;40714:131;:::i;:::-;40706:139;;40604:248;;;:::o;40858:222::-;40951:4;40989:2;40978:9;40974:18;40966:26;;41002:71;41070:1;41059:9;41055:17;41046:6;41002:71;:::i;:::-;40956:124;;;;:::o;41086:332::-;41207:4;41245:2;41234:9;41230:18;41222:26;;41258:71;41326:1;41315:9;41311:17;41302:6;41258:71;:::i;:::-;41339:72;41407:2;41396:9;41392:18;41383:6;41339:72;:::i;:::-;41212:206;;;;;:::o;41424:218::-;41515:4;41553:2;41542:9;41538:18;41530:26;;41566:69;41632:1;41621:9;41617:17;41608:6;41566:69;:::i;:::-;41520:122;;;;:::o;41648:129::-;41682:6;41709:20;;:::i;:::-;41699:30;;41738:33;41766:4;41758:6;41738:33;:::i;:::-;41689:88;;;:::o;41783:75::-;41816:6;41849:2;41843:9;41833:19;;41823:35;:::o;41864:311::-;41941:4;42031:18;42023:6;42020:30;42017:2;;;42053:18;;:::i;:::-;42017:2;42103:4;42095:6;42091:17;42083:25;;42163:4;42157;42153:15;42145:23;;41946:229;;;:::o;42181:311::-;42258:4;42348:18;42340:6;42337:30;42334:2;;;42370:18;;:::i;:::-;42334:2;42420:4;42412:6;42408:17;42400:25;;42480:4;42474;42470:15;42462:23;;42263:229;;;:::o;42498:307::-;42559:4;42649:18;42641:6;42638:30;42635:2;;;42671:18;;:::i;:::-;42635:2;42709:29;42731:6;42709:29;:::i;:::-;42701:37;;42793:4;42787;42783:15;42775:23;;42564:241;;;:::o;42811:308::-;42873:4;42963:18;42955:6;42952:30;42949:2;;;42985:18;;:::i;:::-;42949:2;43023:29;43045:6;43023:29;:::i;:::-;43015:37;;43107:4;43101;43097:15;43089:23;;42878:241;;;:::o;43125:132::-;43192:4;43215:3;43207:11;;43245:4;43240:3;43236:14;43228:22;;43197:60;;;:::o;43263:141::-;43312:4;43335:3;43327:11;;43358:3;43355:1;43348:14;43392:4;43389:1;43379:18;43371:26;;43317:87;;;:::o;43410:114::-;43477:6;43511:5;43505:12;43495:22;;43484:40;;;:::o;43530:98::-;43581:6;43615:5;43609:12;43599:22;;43588:40;;;:::o;43634:99::-;43686:6;43720:5;43714:12;43704:22;;43693:40;;;:::o;43739:113::-;43809:4;43841;43836:3;43832:14;43824:22;;43814:38;;;:::o;43858:184::-;43957:11;43991:6;43986:3;43979:19;44031:4;44026:3;44022:14;44007:29;;43969:73;;;;:::o;44048:168::-;44131:11;44165:6;44160:3;44153:19;44205:4;44200:3;44196:14;44181:29;;44143:73;;;;:::o;44222:147::-;44323:11;44360:3;44345:18;;44335:34;;;;:::o;44375:169::-;44459:11;44493:6;44488:3;44481:19;44533:4;44528:3;44524:14;44509:29;;44471:73;;;;:::o;44550:148::-;44652:11;44689:3;44674:18;;44664:34;;;;:::o;44704:305::-;44744:3;44763:20;44781:1;44763:20;:::i;:::-;44758:25;;44797:20;44815:1;44797:20;:::i;:::-;44792:25;;44951:1;44883:66;44879:74;44876:1;44873:81;44870:2;;;44957:18;;:::i;:::-;44870:2;45001:1;44998;44994:9;44987:16;;44748:261;;;;:::o;45015:246::-;45054:3;45073:19;45090:1;45073:19;:::i;:::-;45068:24;;45106:19;45123:1;45106:19;:::i;:::-;45101:24;;45203:1;45191:10;45187:18;45184:1;45181:25;45178:2;;;45209:18;;:::i;:::-;45178:2;45253:1;45250;45246:9;45239:16;;45058:203;;;;:::o;45267:185::-;45307:1;45324:20;45342:1;45324:20;:::i;:::-;45319:25;;45358:20;45376:1;45358:20;:::i;:::-;45353:25;;45397:1;45387:2;;45402:18;;:::i;:::-;45387:2;45444:1;45441;45437:9;45432:14;;45309:143;;;;:::o;45458:348::-;45498:7;45521:20;45539:1;45521:20;:::i;:::-;45516:25;;45555:20;45573:1;45555:20;:::i;:::-;45550:25;;45743:1;45675:66;45671:74;45668:1;45665:81;45660:1;45653:9;45646:17;45642:105;45639:2;;;45750:18;;:::i;:::-;45639:2;45798:1;45795;45791:9;45780:20;;45506:300;;;;:::o;45812:191::-;45852:4;45872:20;45890:1;45872:20;:::i;:::-;45867:25;;45906:20;45924:1;45906:20;:::i;:::-;45901:25;;45945:1;45942;45939:8;45936:2;;;45950:18;;:::i;:::-;45936:2;45995:1;45992;45988:9;45980:17;;45857:146;;;;:::o;46009:96::-;46046:7;46075:24;46093:5;46075:24;:::i;:::-;46064:35;;46054:51;;;:::o;46111:90::-;46145:7;46188:5;46181:13;46174:21;46163:32;;46153:48;;;:::o;46207:77::-;46244:7;46273:5;46262:16;;46252:32;;;:::o;46290:149::-;46326:7;46366:66;46359:5;46355:78;46344:89;;46334:105;;;:::o;46445:126::-;46482:7;46522:42;46515:5;46511:54;46500:65;;46490:81;;;:::o;46577:77::-;46614:7;46643:5;46632:16;;46622:32;;;:::o;46660:93::-;46696:7;46736:10;46729:5;46725:22;46714:33;;46704:49;;;:::o;46759:154::-;46843:6;46838:3;46833;46820:30;46905:1;46896:6;46891:3;46887:16;46880:27;46810:103;;;:::o;46919:307::-;46987:1;46997:113;47011:6;47008:1;47005:13;46997:113;;;47096:1;47091:3;47087:11;47081:18;47077:1;47072:3;47068:11;47061:39;47033:2;47030:1;47026:10;47021:15;;46997:113;;;47128:6;47125:1;47122:13;47119:2;;;47208:1;47199:6;47194:3;47190:16;47183:27;47119:2;46968:258;;;;:::o;47232:320::-;47276:6;47313:1;47307:4;47303:12;47293:22;;47360:1;47354:4;47350:12;47381:18;47371:2;;47437:4;47429:6;47425:17;47415:27;;47371:2;47499;47491:6;47488:14;47468:18;47465:38;47462:2;;;47518:18;;:::i;:::-;47462:2;47283:269;;;;:::o;47558:281::-;47641:27;47663:4;47641:27;:::i;:::-;47633:6;47629:40;47771:6;47759:10;47756:22;47735:18;47723:10;47720:34;47717:62;47714:2;;;47782:18;;:::i;:::-;47714:2;47822:10;47818:2;47811:22;47601:238;;;:::o;47845:233::-;47884:3;47907:24;47925:5;47907:24;:::i;:::-;47898:33;;47953:66;47946:5;47943:77;47940:2;;;48023:18;;:::i;:::-;47940:2;48070:1;48063:5;48059:13;48052:20;;47888:190;;;:::o;48084:175::-;48122:3;48145:23;48162:5;48145:23;:::i;:::-;48136:32;;48190:10;48183:5;48180:21;48177:2;;;48204:18;;:::i;:::-;48177:2;48251:1;48244:5;48240:13;48233:20;;48126:133;;;:::o;48265:100::-;48304:7;48333:26;48353:5;48333:26;:::i;:::-;48322:37;;48312:53;;;:::o;48371:79::-;48410:7;48439:5;48428:16;;48418:32;;;:::o;48456:94::-;48495:7;48524:20;48538:5;48524:20;:::i;:::-;48513:31;;48503:47;;;:::o;48556:176::-;48588:1;48605:20;48623:1;48605:20;:::i;:::-;48600:25;;48639:20;48657:1;48639:20;:::i;:::-;48634:25;;48678:1;48668:2;;48683:18;;:::i;:::-;48668:2;48724:1;48721;48717:9;48712:14;;48590:142;;;;:::o;48738:180::-;48786:77;48783:1;48776:88;48883:4;48880:1;48873:15;48907:4;48904:1;48897:15;48924:180;48972:77;48969:1;48962:88;49069:4;49066:1;49059:15;49093:4;49090:1;49083:15;49110:180;49158:77;49155:1;49148:88;49255:4;49252:1;49245:15;49279:4;49276:1;49269:15;49296:180;49344:77;49341:1;49334:88;49441:4;49438:1;49431:15;49465:4;49462:1;49455:15;49482:183;49517:3;49555:1;49537:16;49534:23;49531:2;;;49593:1;49590;49587;49572:23;49615:34;49646:1;49640:8;49615:34;:::i;:::-;49608:41;;49531:2;49521:144;:::o;49671:102::-;49712:6;49763:2;49759:7;49754:2;49747:5;49743:14;49739:28;49729:38;;49719:54;;;:::o;49779:94::-;49812:8;49860:5;49856:2;49852:14;49831:35;;49821:52;;;:::o;49879:106::-;49923:8;49972:5;49967:3;49963:15;49942:36;;49932:53;;;:::o;49991:239::-;50131:34;50127:1;50119:6;50115:14;50108:58;50200:22;50195:2;50187:6;50183:15;50176:47;50097:133;:::o;50236:227::-;50376:34;50372:1;50364:6;50360:14;50353:58;50445:10;50440:2;50432:6;50428:15;50421:35;50342:121;:::o;50469:164::-;50609:16;50605:1;50597:6;50593:14;50586:40;50575:58;:::o;50639:230::-;50779:34;50775:1;50767:6;50763:14;50756:58;50848:13;50843:2;50835:6;50831:15;50824:38;50745:124;:::o;50875:225::-;51015:34;51011:1;51003:6;50999:14;50992:58;51084:8;51079:2;51071:6;51067:15;51060:33;50981:119;:::o;51106:228::-;51246:34;51242:1;51234:6;51230:14;51223:58;51315:11;51310:2;51302:6;51298:15;51291:36;51212:122;:::o;51340:173::-;51480:25;51476:1;51468:6;51464:14;51457:49;51446:67;:::o;51519:172::-;51659:24;51655:1;51647:6;51643:14;51636:48;51625:66;:::o;51697:163::-;51837:15;51833:1;51825:6;51821:14;51814:39;51803:57;:::o;51866:224::-;52006:34;52002:1;51994:6;51990:14;51983:58;52075:7;52070:2;52062:6;52058:15;52051:32;51972:118;:::o;52096:237::-;52236:34;52232:1;52224:6;52220:14;52213:58;52305:20;52300:2;52292:6;52288:15;52281:45;52202:131;:::o;52339:229::-;52479:34;52475:1;52467:6;52463:14;52456:58;52548:12;52543:2;52535:6;52531:15;52524:37;52445:123;:::o;52574:155::-;52714:7;52710:1;52702:6;52698:14;52691:31;52680:49;:::o;52735:182::-;52875:34;52871:1;52863:6;52859:14;52852:58;52841:76;:::o;52923:163::-;53063:15;53059:1;53051:6;53047:14;53040:39;53029:57;:::o;53092:163::-;53232:15;53228:1;53220:6;53216:14;53209:39;53198:57;:::o;53261:166::-;53401:18;53397:1;53389:6;53385:14;53378:42;53367:60;:::o;53433:114::-;53539:8;:::o;53553:228::-;53693:34;53689:1;53681:6;53677:14;53670:58;53762:11;53757:2;53749:6;53745:15;53738:36;53659:122;:::o;53787:166::-;53927:18;53923:1;53915:6;53911:14;53904:42;53893:60;:::o;53959:228::-;54099:34;54095:1;54087:6;54083:14;54076:58;54168:11;54163:2;54155:6;54151:15;54144:36;54065:122;:::o;54193:227::-;54333:34;54329:1;54321:6;54317:14;54310:58;54402:10;54397:2;54389:6;54385:15;54378:35;54299:121;:::o;54426:220::-;54566:34;54562:1;54554:6;54550:14;54543:58;54635:3;54630:2;54622:6;54618:15;54611:28;54532:114;:::o;54652:167::-;54792:19;54788:1;54780:6;54776:14;54769:43;54758:61;:::o;54825:168::-;54965:20;54961:1;54953:6;54949:14;54942:44;54931:62;:::o;54999:711::-;55038:3;55076:4;55058:16;55055:26;55052:2;;;55084:5;;55052:2;55113:20;;:::i;:::-;55188:1;55170:16;55166:24;55163:1;55157:4;55142:49;55221:4;55215:11;55320:16;55313:4;55305:6;55301:17;55298:39;55265:18;55257:6;55254:30;55238:113;55235:2;;;55366:5;;;;55235:2;55412:6;55406:4;55402:17;55448:3;55442:10;55475:18;55467:6;55464:30;55461:2;;;55497:5;;;;;;55461:2;55545:6;55538:4;55533:3;55529:14;55525:27;55604:1;55586:16;55582:24;55576:4;55572:35;55567:3;55564:44;55561:2;;;55611:5;;;;;;;55561:2;55628:57;55676:6;55670:4;55666:17;55658:6;55654:30;55648:4;55628:57;:::i;:::-;55701:3;55694:10;;55042:668;;;;;;;:::o;55716:122::-;55789:24;55807:5;55789:24;:::i;:::-;55782:5;55779:35;55769:2;;55828:1;55825;55818:12;55769:2;55759:79;:::o;55844:116::-;55914:21;55929:5;55914:21;:::i;:::-;55907:5;55904:32;55894:2;;55950:1;55947;55940:12;55894:2;55884:76;:::o;55966:122::-;56039:24;56057:5;56039:24;:::i;:::-;56032:5;56029:35;56019:2;;56078:1;56075;56068:12;56019:2;56009:79;:::o;56094:120::-;56166:23;56183:5;56166:23;:::i;:::-;56159:5;56156:34;56146:2;;56204:1;56201;56194:12;56146:2;56136:78;:::o;56220:122::-;56293:24;56311:5;56293:24;:::i;:::-;56286:5;56283:35;56273:2;;56332:1;56329;56322:12;56273:2;56263:79;:::o;56348:120::-;56420:23;56437:5;56420:23;:::i;:::-;56413:5;56410:34;56400:2;;56458:1;56455;56448:12;56400:2;56390:78;:::o
Swarm Source
ipfs://b01420f1ee329a0ae27445bddfc8ec014bd0ec50766b8cc741e71e47f5372205
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.