ERC-1155
Overview
Max Total Supply
3,333 HOLY
Holders
1,855
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:
HolyHeroes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-26 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* ██ ██ ██████ ██ ██ ██ ██ ██ ███████ ██████ ██████ ███████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ██ ██ ██ ████ ███████ █████ ██████ ██ ██ █████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ███████ ██ ██ ██ ███████ ██ ██ ██████ ███████ ███████ Holy Heroes / [email protected] */ // File: @openzeppelin/contracts/utils/Context.sol /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol /** * @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 { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, 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 account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: contracts/HolyHeroes.sol // Author: [email protected] contract HolyHeroes is ERC1155, Ownable { string public constant name = "Holy Heroes"; string public constant symbol = "HOLY"; uint32 public totalSupply = 0; uint256 public constant unitPrice = 0.0777 ether; uint32 public preSaleStart = 1638043200; uint32 public constant preSaleMaxSupply = 1000; uint32 public publicSaleStart = 1638054000; uint32 public constant publicSaleMaxSupply = 3333; address private signerAddress = 0xbc4f847004FA914F6Fe82BEa27A9dFBdbE295401; constructor(string memory uri) ERC1155(uri) {} function setURI(string memory uri) public onlyOwner { _setURI(uri); } function setSignerAddress(address addr) external onlyOwner { signerAddress = addr; } function setPreSaleStart(uint32 timestamp) public onlyOwner { preSaleStart = timestamp; } function setPublicSaleStart(uint32 timestamp) public onlyOwner { publicSaleStart = timestamp; } function preSaleIsActive() public view returns (bool) { return preSaleStart <= block.timestamp && publicSaleStart >= block.timestamp; } function publicSaleIsActive() public view returns (bool) { return publicSaleStart <= block.timestamp; } function isValidAccessMessage(uint8 v, bytes32 r, bytes32 s) internal view returns (bool) { bytes32 hash = keccak256(abi.encodePacked(msg.sender)); return signerAddress == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), v, r, s); } function mint(address to, uint32 count) internal { if (count > 1) { uint256[] memory ids = new uint256[](uint256(count)); uint256[] memory amounts = new uint256[](uint256(count)); for (uint32 i = 0; i < count; i++) { ids[i] = totalSupply + i; amounts[i] = 1; } _mintBatch(to, ids, amounts, ""); } else { _mint(to, totalSupply, 1, ""); } totalSupply += count; } function preSaleMint(uint8 v, bytes32 r, bytes32 s, uint32 count) external payable { require(preSaleIsActive(), "Pre-sale is not active."); require(isValidAccessMessage(v, r, s), "Not whitelisted."); require(count > 0, "Count must be greater than 0."); require(totalSupply + count <= preSaleMaxSupply, "Count exceeds the maximum allowed supply."); require(msg.value >= unitPrice * count, "Not enough ether."); mint(msg.sender, count); } function publicSaleMint(uint32 count) external payable { require(publicSaleIsActive(), "Public sale is not active."); require(count > 0, "Count must be greater than 0."); require(totalSupply + count <= publicSaleMaxSupply, "Count exceeds the maximum allowed supply."); require(msg.value >= unitPrice * count, "Not enough ether."); mint(msg.sender, count); } function batchMint(address[] memory addresses) external onlyOwner { require(totalSupply + addresses.length <= publicSaleMaxSupply, "Count exceeds the maximum allowed supply."); for (uint i = 0; i < addresses.length; i++) { mint(addresses[i], 1); } } function withdraw() external onlyOwner { address[7] memory addresses = [ 0x94017Dd41fD42E6812b74E6E675ad5B48562929E, 0xFe2E2c1206eD98e37871819FFE0156392F1fFc08, 0x8c349e3c568f2F69a736C76b6a239280Ea1cc4C8, 0x7FDbb61440985e094F2d2BfcC86B2aAe976e96D0, 0xA81CfedA5Fb92FDDa1c2bb5bBd47B149a11Bd927, 0xe8791f7dAb20B4EE60A85DEC9a3bF11b0B29aBc5, 0x1F9fa3F21f92b5579c4e4d7232d9E412b0E89399 ]; uint32[7] memory shares = [ uint32(1800), uint32(1800), uint32(1800), uint32(800), uint32(400), uint32(400), uint32(3000) ]; uint256 balance = address(this).balance; for (uint32 i = 0; i < addresses.length; i++) { uint256 amount = i == addresses.length - 1 ? address(this).balance : balance * shares[i] / 10000; payable(addresses[i]).transfer(amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600360146101000a81548163ffffffff021916908363ffffffff1602179055506361a28e40600360186101000a81548163ffffffff021916908363ffffffff1602179055506361a2b8706003601c6101000a81548163ffffffff021916908363ffffffff16021790555073bc4f847004fa914f6fe82bea27a9dfbdbe295401600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d257600080fd5b5060405162004f6138038062004f618339818101604052810190620000f891906200034a565b806200010a816200013260201b60201c565b506200012b6200011f6200014e60201b60201c565b6200015660201b60201c565b506200051f565b80600290805190602001906200014a9291906200021c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000430565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002e3620002dd84620003c4565b6200039b565b905082815260208101848484011115620003025762000301620004ff565b5b6200030f848285620003fa565b509392505050565b600082601f8301126200032f576200032e620004fa565b5b815162000341848260208601620002cc565b91505092915050565b60006020828403121562000363576200036262000509565b5b600082015167ffffffffffffffff81111562000384576200038362000504565b5b620003928482850162000317565b91505092915050565b6000620003a7620003ba565b9050620003b5828262000466565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e257620003e1620004cb565b5b620003ed826200050e565b9050602081019050919050565b60005b838110156200041a578082015181840152602081019050620003fd565b838111156200042a576000848401525b50505050565b600060028204905060018216806200044957607f821691505b6020821081141562000460576200045f6200049c565b5b50919050565b62000471826200050e565b810181811067ffffffffffffffff82111715620004935762000492620004cb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614a32806200052f6000396000f3fe6080604052600436106101c15760003560e01c80634e1273f4116100f7578063a1dd2c0711610095578063e73faa2d11610064578063e73faa2d146105ed578063e985e9c514610618578063f242432a14610655578063f2fde38b1461067e576101c1565b8063a1dd2c0714610554578063a22cb4651461057f578063cc21f485146105a8578063d67b06c1146105c4576101c1565b80638da5cb5b116100d15780638da5cb5b146104aa5780639039903c146104d557806395d89b41146104fe578063a18116f114610529576101c1565b80634e1273f41461043a578063715018a614610477578063892f5f6f1461048e576101c1565b80630fcf2e75116101645780632eb2c2d61161013e5780632eb2c2d6146103a65780633360caa0146103cf5780633ccfd60b146103fa57806340fa89d914610411576101c1565b80630fcf2e751461032557806318160ddd146103505780631f0234d81461037b576101c1565b8063046dc166116101a0578063046dc1661461026957806306fdde03146102925780630d5624b3146102bd5780630e89341c146102e8576101c1565b8062fdd58e146101c657806301ffc9a71461020357806302fe530514610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e8919061326c565b6106a7565b6040516101fa9190613d65565b60405180910390f35b34801561020f57600080fd5b5061022a6004803603810190610225919061336d565b610770565b6040516102379190613a83565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906133c7565b610852565b005b34801561027557600080fd5b50610290600480360381019061028b9190613059565b6108da565b005b34801561029e57600080fd5b506102a761099a565b6040516102b49190613ae3565b60405180910390f35b3480156102c957600080fd5b506102d26109d3565b6040516102df9190613da9565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190613410565b6109e9565b60405161031c9190613ae3565b60405180910390f35b34801561033157600080fd5b5061033a610a7d565b6040516103479190613a83565b60405180910390f35b34801561035c57600080fd5b50610365610aa0565b6040516103729190613da9565b60405180910390f35b34801561038757600080fd5b50610390610ab6565b60405161039d9190613a83565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906130c6565b610afd565b005b3480156103db57600080fd5b506103e4610b9e565b6040516103f19190613da9565b60405180910390f35b34801561040657600080fd5b5061040f610bb4565b005b34801561041d57600080fd5b506104386004803603810190610433919061343d565b610fb6565b005b34801561044657600080fd5b50610461600480360381019061045c91906132f5565b611056565b60405161046e9190613a2a565b60405180910390f35b34801561048357600080fd5b5061048c61116f565b005b6104a860048036038101906104a3919061343d565b6111f7565b005b3480156104b657600080fd5b506104bf61135e565b6040516104cc919061394d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f7919061343d565b611388565b005b34801561050a57600080fd5b50610513611428565b6040516105209190613ae3565b60405180910390f35b34801561053557600080fd5b5061053e611461565b60405161054b9190613da9565b60405180910390f35b34801561056057600080fd5b50610569611467565b6040516105769190613da9565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a1919061322c565b61146d565b005b6105c260048036038101906105bd919061346a565b6115ee565b005b3480156105d057600080fd5b506105eb60048036038101906105e691906132ac565b6117a2565b005b3480156105f957600080fd5b506106026118d5565b60405161060f9190613d65565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613086565b6118e1565b60405161064c9190613a83565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613195565b611975565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613059565b611a16565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f90613b45565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084b575061084a82611b0e565b5b9050919050565b61085a611b78565b73ffffffffffffffffffffffffffffffffffffffff1661087861135e565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613ca5565b60405180910390fd5b6108d781611b80565b50565b6108e2611b78565b73ffffffffffffffffffffffffffffffffffffffff1661090061135e565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613ca5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600b81526020017f486f6c79204865726f657300000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b6060600280546109f89061414b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a249061414b565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610af85750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610b05611b78565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4b5750610b4a85610b45611b78565b6118e1565b5b610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8190613c25565b60405180910390fd5b610b978585858585611b9a565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bbc611b78565b73ffffffffffffffffffffffffffffffffffffffff16610bda61135e565b73ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790613ca5565b60405180910390fd5b60006040518060e001604052807394017dd41fd42e6812b74e6e675ad5b48562929e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fe2e2c1206ed98e37871819ffe0156392f1ffc0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738c349e3c568f2f69a736c76b6a239280ea1cc4c873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737fdbb61440985e094f2d2bfcc86b2aae976e96d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a81cfeda5fb92fdda1c2bb5bbd47b149a11bd92773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e8791f7dab20b4ee60a85dec9a3bf11b0b29abc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e0016040528061070863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff16815260200161032063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff168152602001610bb863ffffffff1663ffffffff168152509050600047905060005b60078163ffffffff161015610fb057600060016007610ee7919061403a565b8263ffffffff1614610f3457612710848363ffffffff1660078110610f0f57610f0e6142df565b5b602002015163ffffffff1684610f259190613fe0565b610f2f9190613faf565b610f36565b475b9050848263ffffffff1660078110610f5157610f506142df565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9b573d6000803e3d6000fd5b50508080610fa8906141f7565b915050610ec8565b50505050565b610fbe611b78565b73ffffffffffffffffffffffffffffffffffffffff16610fdc61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990613ca5565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b6060815183511461109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613d05565b60405180910390fd5b6000835167ffffffffffffffff8111156110b9576110b861430e565b5b6040519080825280602002602001820160405280156110e75781602001602082028036833780820191505090505b50905060005b84518110156111645761113485828151811061110c5761110b6142df565b5b6020026020010151858381518110611127576111266142df565b5b60200260200101516106a7565b828281518110611147576111466142df565b5b6020026020010181815250508061115d906141ae565b90506110ed565b508091505092915050565b611177611b78565b73ffffffffffffffffffffffffffffffffffffffff1661119561135e565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613ca5565b60405180910390fd5b6111f56000611eae565b565b6111ff610a7d565b61123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613ba5565b60405180910390fd5b60008163ffffffff1611611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613bc5565b60405180910390fd5b610d0563ffffffff1681600360149054906101000a900463ffffffff166112ae9190613f75565b63ffffffff1611156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613c85565b60405180910390fd5b8063ffffffff166701140bbd030c400061130f9190613fe0565b341015611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890613be5565b60405180910390fd5b61135b3382611f74565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611390611b78565b73ffffffffffffffffffffffffffffffffffffffff166113ae61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613ca5565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600481526020017f484f4c590000000000000000000000000000000000000000000000000000000081525081565b6103e881565b610d0581565b8173ffffffffffffffffffffffffffffffffffffffff1661148c611b78565b73ffffffffffffffffffffffffffffffffffffffff1614156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613ce5565b60405180910390fd5b80600160006114f0611b78565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159d611b78565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e29190613a83565b60405180910390a35050565b6115f6610ab6565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c45565b60405180910390fd5b61164084848461215e565b61167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613cc5565b60405180910390fd5b60008163ffffffff16116116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90613bc5565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166116ef9190613f75565b63ffffffff161115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90613c85565b60405180910390fd5b8063ffffffff166701140bbd030c40006117509190613fe0565b341015611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613be5565b60405180910390fd5b61179c3382611f74565b50505050565b6117aa611b78565b73ffffffffffffffffffffffffffffffffffffffff166117c861135e565b73ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590613ca5565b60405180910390fd5b610d0563ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661184c9190613f1f565b111561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613c85565b60405180910390fd5b60005b81518110156118d1576118be8282815181106118af576118ae6142df565b5b60200260200101516001611f74565b80806118c9906141ae565b915050611890565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61197d611b78565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806119c357506119c2856119bd611b78565b6118e1565b5b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613b85565b60405180910390fd5b611a0f8585858585612259565b5050505050565b611a1e611b78565b73ffffffffffffffffffffffffffffffffffffffff16611a3c61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af990613b65565b60405180910390fd5b611b0b81611eae565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611b96929190612cf2565b5050565b8151835114611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613d25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4590613c05565b60405180910390fd5b6000611c58611b78565b9050611c688187878787876124db565b60005b8451811015611e19576000858281518110611c8957611c886142df565b5b602002602001015190506000858381518110611ca857611ca76142df565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090613c65565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfe9190613f1f565b9250508190555050505080611e12906141ae565b9050611c6b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e90929190613a4c565b60405180910390a4611ea68187878787876124e3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156120e65760008163ffffffff1667ffffffffffffffff811115611fa557611fa461430e565b5b604051908082528060200260200182016040528015611fd35781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611ff857611ff761430e565b5b6040519080825280602002602001820160405280156120265781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156120c35780600360149054906101000a900463ffffffff1661205e9190613f75565b63ffffffff16838263ffffffff168151811061207d5761207c6142df565b5b6020026020010181815250506001828263ffffffff16815181106120a4576120a36142df565b5b60200260200101818152505080806120bb906141f7565b91505061202c565b506120df848383604051806020016040528060008152506126ca565b505061211b565b61211a82600360149054906101000a900463ffffffff1663ffffffff166001604051806020016040528060008152506128e8565b5b80600360148282829054906101000a900463ffffffff1661213c9190613f75565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b60008033604051602001612172919061390c565b60405160208183030381529060405280519060200120905060018160405160200161219d9190613927565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516121d39493929190613a9e565b6020604051602081039080840390855afa1580156121f5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090613c05565b60405180910390fd5b60006122d3611b78565b90506122f38187876122e488612a7e565b6122ed88612a7e565b876124db565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190613c65565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243f9190613f1f565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124bc929190613d80565b60405180910390a46124d2828888888888612af8565b50505050505050565b505050505050565b6125028473ffffffffffffffffffffffffffffffffffffffff16612cdf565b156126c2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612548959493929190613968565b602060405180830381600087803b15801561256257600080fd5b505af192505050801561259357506040513d601f19601f82011682018060405250810190612590919061339a565b60015b6126395761259f61433d565b806308c379a014156125fc57506125b46148c5565b806125bf57506125fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f39190613ae3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090613b05565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b790613b25565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190613d45565b60405180910390fd5b815183511461277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590613d25565b60405180910390fd5b6000612788611b78565b9050612799816000878787876124db565b60005b8451811015612852578381815181106127b8576127b76142df565b5b60200260200101516000808784815181106127d6576127d56142df565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128389190613f1f565b92505081905550808061284a906141ae565b91505061279c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516128ca929190613a4c565b60405180910390a46128e1816000878787876124e3565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90613d45565b60405180910390fd5b6000612962611b78565b90506129838160008761297488612a7e565b61297d88612a7e565b876124db565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e29190613f1f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612a60929190613d80565b60405180910390a4612a7781600087878787612af8565b5050505050565b60606000600167ffffffffffffffff811115612a9d57612a9c61430e565b5b604051908082528060200260200182016040528015612acb5781602001602082028036833780820191505090505b5090508281600081518110612ae357612ae26142df565b5b60200260200101818152505080915050919050565b612b178473ffffffffffffffffffffffffffffffffffffffff16612cdf565b15612cd7578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b5d9594939291906139d0565b602060405180830381600087803b158015612b7757600080fd5b505af1925050508015612ba857506040513d601f19601f82011682018060405250810190612ba5919061339a565b60015b612c4e57612bb461433d565b806308c379a01415612c115750612bc96148c5565b80612bd45750612c13565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c089190613ae3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590613b05565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc90613b25565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612cfe9061414b565b90600052602060002090601f016020900481019282612d205760008555612d67565b82601f10612d3957805160ff1916838001178555612d67565b82800160010185558215612d67579182015b82811115612d66578251825591602001919060010190612d4b565b5b509050612d749190612d78565b5090565b5b80821115612d91576000816000905550600101612d79565b5090565b6000612da8612da384613de9565b613dc4565b90508083825260208201905082856020860282011115612dcb57612dca614364565b5b60005b85811015612dfb5781612de18882612ef9565b845260208401935060208301925050600181019050612dce565b5050509392505050565b6000612e18612e1384613e15565b613dc4565b90508083825260208201905082856020860282011115612e3b57612e3a614364565b5b60005b85811015612e6b5781612e51888261301a565b845260208401935060208301925050600181019050612e3e565b5050509392505050565b6000612e88612e8384613e41565b613dc4565b905082815260208101848484011115612ea457612ea3614369565b5b612eaf848285614109565b509392505050565b6000612eca612ec584613e72565b613dc4565b905082815260208101848484011115612ee657612ee5614369565b5b612ef1848285614109565b509392505050565b600081359050612f088161495b565b92915050565b600082601f830112612f2357612f2261435f565b5b8135612f33848260208601612d95565b91505092915050565b600082601f830112612f5157612f5061435f565b5b8135612f61848260208601612e05565b91505092915050565b600081359050612f7981614972565b92915050565b600081359050612f8e81614989565b92915050565b600081359050612fa3816149a0565b92915050565b600081519050612fb8816149a0565b92915050565b600082601f830112612fd357612fd261435f565b5b8135612fe3848260208601612e75565b91505092915050565b600082601f8301126130015761300061435f565b5b8135613011848260208601612eb7565b91505092915050565b600081359050613029816149b7565b92915050565b60008135905061303e816149ce565b92915050565b600081359050613053816149e5565b92915050565b60006020828403121561306f5761306e614373565b5b600061307d84828501612ef9565b91505092915050565b6000806040838503121561309d5761309c614373565b5b60006130ab85828601612ef9565b92505060206130bc85828601612ef9565b9150509250929050565b600080600080600060a086880312156130e2576130e1614373565b5b60006130f088828901612ef9565b955050602061310188828901612ef9565b945050604086013567ffffffffffffffff8111156131225761312161436e565b5b61312e88828901612f3c565b935050606086013567ffffffffffffffff81111561314f5761314e61436e565b5b61315b88828901612f3c565b925050608086013567ffffffffffffffff81111561317c5761317b61436e565b5b61318888828901612fbe565b9150509295509295909350565b600080600080600060a086880312156131b1576131b0614373565b5b60006131bf88828901612ef9565b95505060206131d088828901612ef9565b94505060406131e18882890161301a565b93505060606131f28882890161301a565b925050608086013567ffffffffffffffff8111156132135761321261436e565b5b61321f88828901612fbe565b9150509295509295909350565b6000806040838503121561324357613242614373565b5b600061325185828601612ef9565b925050602061326285828601612f6a565b9150509250929050565b6000806040838503121561328357613282614373565b5b600061329185828601612ef9565b92505060206132a28582860161301a565b9150509250929050565b6000602082840312156132c2576132c1614373565b5b600082013567ffffffffffffffff8111156132e0576132df61436e565b5b6132ec84828501612f0e565b91505092915050565b6000806040838503121561330c5761330b614373565b5b600083013567ffffffffffffffff81111561332a5761332961436e565b5b61333685828601612f0e565b925050602083013567ffffffffffffffff8111156133575761335661436e565b5b61336385828601612f3c565b9150509250929050565b60006020828403121561338357613382614373565b5b600061339184828501612f94565b91505092915050565b6000602082840312156133b0576133af614373565b5b60006133be84828501612fa9565b91505092915050565b6000602082840312156133dd576133dc614373565b5b600082013567ffffffffffffffff8111156133fb576133fa61436e565b5b61340784828501612fec565b91505092915050565b60006020828403121561342657613425614373565b5b60006134348482850161301a565b91505092915050565b60006020828403121561345357613452614373565b5b60006134618482850161302f565b91505092915050565b6000806000806080858703121561348457613483614373565b5b600061349287828801613044565b94505060206134a387828801612f7f565b93505060406134b487828801612f7f565b92505060606134c58782880161302f565b91505092959194509250565b60006134dd83836138d0565b60208301905092915050565b6134f28161406e565b82525050565b6135096135048261406e565b614224565b82525050565b600061351a82613eb3565b6135248185613ee1565b935061352f83613ea3565b8060005b8381101561356057815161354788826134d1565b975061355283613ed4565b925050600181019050613533565b5085935050505092915050565b61357681614080565b82525050565b6135858161408c565b82525050565b61359c6135978261408c565b614236565b82525050565b60006135ad82613ebe565b6135b78185613ef2565b93506135c7818560208601614118565b6135d081614378565b840191505092915050565b60006135e682613ec9565b6135f08185613f03565b9350613600818560208601614118565b61360981614378565b840191505092915050565b6000613621603483613f03565b915061362c826143a3565b604082019050919050565b6000613644602883613f03565b915061364f826143f2565b604082019050919050565b6000613667601c83613f14565b915061367282614441565b601c82019050919050565b600061368a602b83613f03565b91506136958261446a565b604082019050919050565b60006136ad602683613f03565b91506136b8826144b9565b604082019050919050565b60006136d0602983613f03565b91506136db82614508565b604082019050919050565b60006136f3601a83613f03565b91506136fe82614557565b602082019050919050565b6000613716601d83613f03565b915061372182614580565b602082019050919050565b6000613739601183613f03565b9150613744826145a9565b602082019050919050565b600061375c602583613f03565b9150613767826145d2565b604082019050919050565b600061377f603283613f03565b915061378a82614621565b604082019050919050565b60006137a2601783613f03565b91506137ad82614670565b602082019050919050565b60006137c5602a83613f03565b91506137d082614699565b604082019050919050565b60006137e8602983613f03565b91506137f3826146e8565b604082019050919050565b600061380b602083613f03565b915061381682614737565b602082019050919050565b600061382e601083613f03565b915061383982614760565b602082019050919050565b6000613851602983613f03565b915061385c82614789565b604082019050919050565b6000613874602983613f03565b915061387f826147d8565b604082019050919050565b6000613897602883613f03565b91506138a282614827565b604082019050919050565b60006138ba602183613f03565b91506138c582614876565b604082019050919050565b6138d9816140e2565b82525050565b6138e8816140e2565b82525050565b6138f7816140ec565b82525050565b613906816140fc565b82525050565b600061391882846134f8565b60148201915081905092915050565b60006139328261365a565b915061393e828461358b565b60208201915081905092915050565b600060208201905061396260008301846134e9565b92915050565b600060a08201905061397d60008301886134e9565b61398a60208301876134e9565b818103604083015261399c818661350f565b905081810360608301526139b0818561350f565b905081810360808301526139c481846135a2565b90509695505050505050565b600060a0820190506139e560008301886134e9565b6139f260208301876134e9565b6139ff60408301866138df565b613a0c60608301856138df565b8181036080830152613a1e81846135a2565b90509695505050505050565b60006020820190508181036000830152613a44818461350f565b905092915050565b60006040820190508181036000830152613a66818561350f565b90508181036020830152613a7a818461350f565b90509392505050565b6000602082019050613a98600083018461356d565b92915050565b6000608082019050613ab3600083018761357c565b613ac060208301866138fd565b613acd604083018561357c565b613ada606083018461357c565b95945050505050565b60006020820190508181036000830152613afd81846135db565b905092915050565b60006020820190508181036000830152613b1e81613614565b9050919050565b60006020820190508181036000830152613b3e81613637565b9050919050565b60006020820190508181036000830152613b5e8161367d565b9050919050565b60006020820190508181036000830152613b7e816136a0565b9050919050565b60006020820190508181036000830152613b9e816136c3565b9050919050565b60006020820190508181036000830152613bbe816136e6565b9050919050565b60006020820190508181036000830152613bde81613709565b9050919050565b60006020820190508181036000830152613bfe8161372c565b9050919050565b60006020820190508181036000830152613c1e8161374f565b9050919050565b60006020820190508181036000830152613c3e81613772565b9050919050565b60006020820190508181036000830152613c5e81613795565b9050919050565b60006020820190508181036000830152613c7e816137b8565b9050919050565b60006020820190508181036000830152613c9e816137db565b9050919050565b60006020820190508181036000830152613cbe816137fe565b9050919050565b60006020820190508181036000830152613cde81613821565b9050919050565b60006020820190508181036000830152613cfe81613844565b9050919050565b60006020820190508181036000830152613d1e81613867565b9050919050565b60006020820190508181036000830152613d3e8161388a565b9050919050565b60006020820190508181036000830152613d5e816138ad565b9050919050565b6000602082019050613d7a60008301846138df565b92915050565b6000604082019050613d9560008301856138df565b613da260208301846138df565b9392505050565b6000602082019050613dbe60008301846138ee565b92915050565b6000613dce613ddf565b9050613dda828261417d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e0457613e0361430e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e3057613e2f61430e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e5c57613e5b61430e565b5b613e6582614378565b9050602081019050919050565b600067ffffffffffffffff821115613e8d57613e8c61430e565b5b613e9682614378565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f2a826140e2565b9150613f35836140e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6a57613f69614252565b5b828201905092915050565b6000613f80826140ec565b9150613f8b836140ec565b92508263ffffffff03821115613fa457613fa3614252565b5b828201905092915050565b6000613fba826140e2565b9150613fc5836140e2565b925082613fd557613fd4614281565b5b828204905092915050565b6000613feb826140e2565b9150613ff6836140e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402f5761402e614252565b5b828202905092915050565b6000614045826140e2565b9150614050836140e2565b92508282101561406357614062614252565b5b828203905092915050565b6000614079826140c2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561413657808201518184015260208101905061411b565b83811115614145576000848401525b50505050565b6000600282049050600182168061416357607f821691505b60208210811415614177576141766142b0565b5b50919050565b61418682614378565b810181811067ffffffffffffffff821117156141a5576141a461430e565b5b80604052505050565b60006141b9826140e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141ec576141eb614252565b5b600182019050919050565b6000614202826140ec565b915063ffffffff82141561421957614218614252565b5b600182019050919050565b600061422f82614240565b9050919050565b6000819050919050565b600061424b82614389565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561435c5760046000803e614359600051614396565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156148d557614958565b6148dd613ddf565b60043d036004823e80513d602482011167ffffffffffffffff82111715614905575050614958565b808201805167ffffffffffffffff8111156149235750505050614958565b80602083010160043d038501811115614940575050505050614958565b61494f8260200185018661417d565b82955050505050505b90565b6149648161406e565b811461496f57600080fd5b50565b61497b81614080565b811461498657600080fd5b50565b6149928161408c565b811461499d57600080fd5b50565b6149a981614096565b81146149b457600080fd5b50565b6149c0816140e2565b81146149cb57600080fd5b50565b6149d7816140ec565b81146149e257600080fd5b50565b6149ee816140fc565b81146149f957600080fd5b5056fea2646970667358221220f201ce97c81faa7cfc86078d6b9f46b44cc373ce7505c6612fbcbb01376ef52464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f75642f697066732f516d5261597673487a6a4535567750355738714e4b37545237455147467a734269673167514874426f69383158312f7b69647d00000000000000
Deployed Bytecode
0x6080604052600436106101c15760003560e01c80634e1273f4116100f7578063a1dd2c0711610095578063e73faa2d11610064578063e73faa2d146105ed578063e985e9c514610618578063f242432a14610655578063f2fde38b1461067e576101c1565b8063a1dd2c0714610554578063a22cb4651461057f578063cc21f485146105a8578063d67b06c1146105c4576101c1565b80638da5cb5b116100d15780638da5cb5b146104aa5780639039903c146104d557806395d89b41146104fe578063a18116f114610529576101c1565b80634e1273f41461043a578063715018a614610477578063892f5f6f1461048e576101c1565b80630fcf2e75116101645780632eb2c2d61161013e5780632eb2c2d6146103a65780633360caa0146103cf5780633ccfd60b146103fa57806340fa89d914610411576101c1565b80630fcf2e751461032557806318160ddd146103505780631f0234d81461037b576101c1565b8063046dc166116101a0578063046dc1661461026957806306fdde03146102925780630d5624b3146102bd5780630e89341c146102e8576101c1565b8062fdd58e146101c657806301ffc9a71461020357806302fe530514610240575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e8919061326c565b6106a7565b6040516101fa9190613d65565b60405180910390f35b34801561020f57600080fd5b5061022a6004803603810190610225919061336d565b610770565b6040516102379190613a83565b60405180910390f35b34801561024c57600080fd5b50610267600480360381019061026291906133c7565b610852565b005b34801561027557600080fd5b50610290600480360381019061028b9190613059565b6108da565b005b34801561029e57600080fd5b506102a761099a565b6040516102b49190613ae3565b60405180910390f35b3480156102c957600080fd5b506102d26109d3565b6040516102df9190613da9565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190613410565b6109e9565b60405161031c9190613ae3565b60405180910390f35b34801561033157600080fd5b5061033a610a7d565b6040516103479190613a83565b60405180910390f35b34801561035c57600080fd5b50610365610aa0565b6040516103729190613da9565b60405180910390f35b34801561038757600080fd5b50610390610ab6565b60405161039d9190613a83565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906130c6565b610afd565b005b3480156103db57600080fd5b506103e4610b9e565b6040516103f19190613da9565b60405180910390f35b34801561040657600080fd5b5061040f610bb4565b005b34801561041d57600080fd5b506104386004803603810190610433919061343d565b610fb6565b005b34801561044657600080fd5b50610461600480360381019061045c91906132f5565b611056565b60405161046e9190613a2a565b60405180910390f35b34801561048357600080fd5b5061048c61116f565b005b6104a860048036038101906104a3919061343d565b6111f7565b005b3480156104b657600080fd5b506104bf61135e565b6040516104cc919061394d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f7919061343d565b611388565b005b34801561050a57600080fd5b50610513611428565b6040516105209190613ae3565b60405180910390f35b34801561053557600080fd5b5061053e611461565b60405161054b9190613da9565b60405180910390f35b34801561056057600080fd5b50610569611467565b6040516105769190613da9565b60405180910390f35b34801561058b57600080fd5b506105a660048036038101906105a1919061322c565b61146d565b005b6105c260048036038101906105bd919061346a565b6115ee565b005b3480156105d057600080fd5b506105eb60048036038101906105e691906132ac565b6117a2565b005b3480156105f957600080fd5b506106026118d5565b60405161060f9190613d65565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613086565b6118e1565b60405161064c9190613a83565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613195565b611975565b005b34801561068a57600080fd5b506106a560048036038101906106a09190613059565b611a16565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070f90613b45565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061084b575061084a82611b0e565b5b9050919050565b61085a611b78565b73ffffffffffffffffffffffffffffffffffffffff1661087861135e565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613ca5565b60405180910390fd5b6108d781611b80565b50565b6108e2611b78565b73ffffffffffffffffffffffffffffffffffffffff1661090061135e565b73ffffffffffffffffffffffffffffffffffffffff1614610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613ca5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600b81526020017f486f6c79204865726f657300000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b6060600280546109f89061414b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a249061414b565b8015610a715780601f10610a4657610100808354040283529160200191610a71565b820191906000526020600020905b815481529060010190602001808311610a5457829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610af85750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610b05611b78565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b4b5750610b4a85610b45611b78565b6118e1565b5b610b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8190613c25565b60405180910390fd5b610b978585858585611b9a565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bbc611b78565b73ffffffffffffffffffffffffffffffffffffffff16610bda61135e565b73ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790613ca5565b60405180910390fd5b60006040518060e001604052807394017dd41fd42e6812b74e6e675ad5b48562929e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173fe2e2c1206ed98e37871819ffe0156392f1ffc0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001738c349e3c568f2f69a736c76b6a239280ea1cc4c873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737fdbb61440985e094f2d2bfcc86b2aae976e96d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173a81cfeda5fb92fdda1c2bb5bbd47b149a11bd92773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173e8791f7dab20b4ee60a85dec9a3bf11b0b29abc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001731f9fa3f21f92b5579c4e4d7232d9e412b0e8939973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060e0016040528061070863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff16815260200161032063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff16815260200161019063ffffffff1663ffffffff168152602001610bb863ffffffff1663ffffffff168152509050600047905060005b60078163ffffffff161015610fb057600060016007610ee7919061403a565b8263ffffffff1614610f3457612710848363ffffffff1660078110610f0f57610f0e6142df565b5b602002015163ffffffff1684610f259190613fe0565b610f2f9190613faf565b610f36565b475b9050848263ffffffff1660078110610f5157610f506142df565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f9b573d6000803e3d6000fd5b50508080610fa8906141f7565b915050610ec8565b50505050565b610fbe611b78565b73ffffffffffffffffffffffffffffffffffffffff16610fdc61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990613ca5565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b6060815183511461109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109390613d05565b60405180910390fd5b6000835167ffffffffffffffff8111156110b9576110b861430e565b5b6040519080825280602002602001820160405280156110e75781602001602082028036833780820191505090505b50905060005b84518110156111645761113485828151811061110c5761110b6142df565b5b6020026020010151858381518110611127576111266142df565b5b60200260200101516106a7565b828281518110611147576111466142df565b5b6020026020010181815250508061115d906141ae565b90506110ed565b508091505092915050565b611177611b78565b73ffffffffffffffffffffffffffffffffffffffff1661119561135e565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613ca5565b60405180910390fd5b6111f56000611eae565b565b6111ff610a7d565b61123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613ba5565b60405180910390fd5b60008163ffffffff1611611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613bc5565b60405180910390fd5b610d0563ffffffff1681600360149054906101000a900463ffffffff166112ae9190613f75565b63ffffffff1611156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613c85565b60405180910390fd5b8063ffffffff166701140bbd030c400061130f9190613fe0565b341015611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134890613be5565b60405180910390fd5b61135b3382611f74565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611390611b78565b73ffffffffffffffffffffffffffffffffffffffff166113ae61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fb90613ca5565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600481526020017f484f4c590000000000000000000000000000000000000000000000000000000081525081565b6103e881565b610d0581565b8173ffffffffffffffffffffffffffffffffffffffff1661148c611b78565b73ffffffffffffffffffffffffffffffffffffffff1614156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613ce5565b60405180910390fd5b80600160006114f0611b78565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159d611b78565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e29190613a83565b60405180910390a35050565b6115f6610ab6565b611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c90613c45565b60405180910390fd5b61164084848461215e565b61167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690613cc5565b60405180910390fd5b60008163ffffffff16116116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf90613bc5565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166116ef9190613f75565b63ffffffff161115611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90613c85565b60405180910390fd5b8063ffffffff166701140bbd030c40006117509190613fe0565b341015611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613be5565b60405180910390fd5b61179c3382611f74565b50505050565b6117aa611b78565b73ffffffffffffffffffffffffffffffffffffffff166117c861135e565b73ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590613ca5565b60405180910390fd5b610d0563ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661184c9190613f1f565b111561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613c85565b60405180910390fd5b60005b81518110156118d1576118be8282815181106118af576118ae6142df565b5b60200260200101516001611f74565b80806118c9906141ae565b915050611890565b5050565b6701140bbd030c400081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61197d611b78565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806119c357506119c2856119bd611b78565b6118e1565b5b611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613b85565b60405180910390fd5b611a0f8585858585612259565b5050505050565b611a1e611b78565b73ffffffffffffffffffffffffffffffffffffffff16611a3c61135e565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990613ca5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af990613b65565b60405180910390fd5b611b0b81611eae565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611b96929190612cf2565b5050565b8151835114611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613d25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4590613c05565b60405180910390fd5b6000611c58611b78565b9050611c688187878787876124db565b60005b8451811015611e19576000858281518110611c8957611c886142df565b5b602002602001015190506000858381518110611ca857611ca76142df565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090613c65565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfe9190613f1f565b9250508190555050505080611e12906141ae565b9050611c6b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611e90929190613a4c565b60405180910390a4611ea68187878787876124e3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156120e65760008163ffffffff1667ffffffffffffffff811115611fa557611fa461430e565b5b604051908082528060200260200182016040528015611fd35781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611ff857611ff761430e565b5b6040519080825280602002602001820160405280156120265781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156120c35780600360149054906101000a900463ffffffff1661205e9190613f75565b63ffffffff16838263ffffffff168151811061207d5761207c6142df565b5b6020026020010181815250506001828263ffffffff16815181106120a4576120a36142df565b5b60200260200101818152505080806120bb906141f7565b91505061202c565b506120df848383604051806020016040528060008152506126ca565b505061211b565b61211a82600360149054906101000a900463ffffffff1663ffffffff166001604051806020016040528060008152506128e8565b5b80600360148282829054906101000a900463ffffffff1661213c9190613f75565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b60008033604051602001612172919061390c565b60405160208183030381529060405280519060200120905060018160405160200161219d9190613927565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516121d39493929190613a9e565b6020604051602081039080840390855afa1580156121f5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c090613c05565b60405180910390fd5b60006122d3611b78565b90506122f38187876122e488612a7e565b6122ed88612a7e565b876124db565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561238a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238190613c65565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461243f9190613f1f565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516124bc929190613d80565b60405180910390a46124d2828888888888612af8565b50505050505050565b505050505050565b6125028473ffffffffffffffffffffffffffffffffffffffff16612cdf565b156126c2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612548959493929190613968565b602060405180830381600087803b15801561256257600080fd5b505af192505050801561259357506040513d601f19601f82011682018060405250810190612590919061339a565b60015b6126395761259f61433d565b806308c379a014156125fc57506125b46148c5565b806125bf57506125fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f39190613ae3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090613b05565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146126c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b790613b25565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190613d45565b60405180910390fd5b815183511461277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590613d25565b60405180910390fd5b6000612788611b78565b9050612799816000878787876124db565b60005b8451811015612852578381815181106127b8576127b76142df565b5b60200260200101516000808784815181106127d6576127d56142df565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128389190613f1f565b92505081905550808061284a906141ae565b91505061279c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516128ca929190613a4c565b60405180910390a46128e1816000878787876124e3565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90613d45565b60405180910390fd5b6000612962611b78565b90506129838160008761297488612a7e565b61297d88612a7e565b876124db565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129e29190613f1f565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612a60929190613d80565b60405180910390a4612a7781600087878787612af8565b5050505050565b60606000600167ffffffffffffffff811115612a9d57612a9c61430e565b5b604051908082528060200260200182016040528015612acb5781602001602082028036833780820191505090505b5090508281600081518110612ae357612ae26142df565b5b60200260200101818152505080915050919050565b612b178473ffffffffffffffffffffffffffffffffffffffff16612cdf565b15612cd7578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b5d9594939291906139d0565b602060405180830381600087803b158015612b7757600080fd5b505af1925050508015612ba857506040513d601f19601f82011682018060405250810190612ba5919061339a565b60015b612c4e57612bb461433d565b806308c379a01415612c115750612bc96148c5565b80612bd45750612c13565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c089190613ae3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4590613b05565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc90613b25565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612cfe9061414b565b90600052602060002090601f016020900481019282612d205760008555612d67565b82601f10612d3957805160ff1916838001178555612d67565b82800160010185558215612d67579182015b82811115612d66578251825591602001919060010190612d4b565b5b509050612d749190612d78565b5090565b5b80821115612d91576000816000905550600101612d79565b5090565b6000612da8612da384613de9565b613dc4565b90508083825260208201905082856020860282011115612dcb57612dca614364565b5b60005b85811015612dfb5781612de18882612ef9565b845260208401935060208301925050600181019050612dce565b5050509392505050565b6000612e18612e1384613e15565b613dc4565b90508083825260208201905082856020860282011115612e3b57612e3a614364565b5b60005b85811015612e6b5781612e51888261301a565b845260208401935060208301925050600181019050612e3e565b5050509392505050565b6000612e88612e8384613e41565b613dc4565b905082815260208101848484011115612ea457612ea3614369565b5b612eaf848285614109565b509392505050565b6000612eca612ec584613e72565b613dc4565b905082815260208101848484011115612ee657612ee5614369565b5b612ef1848285614109565b509392505050565b600081359050612f088161495b565b92915050565b600082601f830112612f2357612f2261435f565b5b8135612f33848260208601612d95565b91505092915050565b600082601f830112612f5157612f5061435f565b5b8135612f61848260208601612e05565b91505092915050565b600081359050612f7981614972565b92915050565b600081359050612f8e81614989565b92915050565b600081359050612fa3816149a0565b92915050565b600081519050612fb8816149a0565b92915050565b600082601f830112612fd357612fd261435f565b5b8135612fe3848260208601612e75565b91505092915050565b600082601f8301126130015761300061435f565b5b8135613011848260208601612eb7565b91505092915050565b600081359050613029816149b7565b92915050565b60008135905061303e816149ce565b92915050565b600081359050613053816149e5565b92915050565b60006020828403121561306f5761306e614373565b5b600061307d84828501612ef9565b91505092915050565b6000806040838503121561309d5761309c614373565b5b60006130ab85828601612ef9565b92505060206130bc85828601612ef9565b9150509250929050565b600080600080600060a086880312156130e2576130e1614373565b5b60006130f088828901612ef9565b955050602061310188828901612ef9565b945050604086013567ffffffffffffffff8111156131225761312161436e565b5b61312e88828901612f3c565b935050606086013567ffffffffffffffff81111561314f5761314e61436e565b5b61315b88828901612f3c565b925050608086013567ffffffffffffffff81111561317c5761317b61436e565b5b61318888828901612fbe565b9150509295509295909350565b600080600080600060a086880312156131b1576131b0614373565b5b60006131bf88828901612ef9565b95505060206131d088828901612ef9565b94505060406131e18882890161301a565b93505060606131f28882890161301a565b925050608086013567ffffffffffffffff8111156132135761321261436e565b5b61321f88828901612fbe565b9150509295509295909350565b6000806040838503121561324357613242614373565b5b600061325185828601612ef9565b925050602061326285828601612f6a565b9150509250929050565b6000806040838503121561328357613282614373565b5b600061329185828601612ef9565b92505060206132a28582860161301a565b9150509250929050565b6000602082840312156132c2576132c1614373565b5b600082013567ffffffffffffffff8111156132e0576132df61436e565b5b6132ec84828501612f0e565b91505092915050565b6000806040838503121561330c5761330b614373565b5b600083013567ffffffffffffffff81111561332a5761332961436e565b5b61333685828601612f0e565b925050602083013567ffffffffffffffff8111156133575761335661436e565b5b61336385828601612f3c565b9150509250929050565b60006020828403121561338357613382614373565b5b600061339184828501612f94565b91505092915050565b6000602082840312156133b0576133af614373565b5b60006133be84828501612fa9565b91505092915050565b6000602082840312156133dd576133dc614373565b5b600082013567ffffffffffffffff8111156133fb576133fa61436e565b5b61340784828501612fec565b91505092915050565b60006020828403121561342657613425614373565b5b60006134348482850161301a565b91505092915050565b60006020828403121561345357613452614373565b5b60006134618482850161302f565b91505092915050565b6000806000806080858703121561348457613483614373565b5b600061349287828801613044565b94505060206134a387828801612f7f565b93505060406134b487828801612f7f565b92505060606134c58782880161302f565b91505092959194509250565b60006134dd83836138d0565b60208301905092915050565b6134f28161406e565b82525050565b6135096135048261406e565b614224565b82525050565b600061351a82613eb3565b6135248185613ee1565b935061352f83613ea3565b8060005b8381101561356057815161354788826134d1565b975061355283613ed4565b925050600181019050613533565b5085935050505092915050565b61357681614080565b82525050565b6135858161408c565b82525050565b61359c6135978261408c565b614236565b82525050565b60006135ad82613ebe565b6135b78185613ef2565b93506135c7818560208601614118565b6135d081614378565b840191505092915050565b60006135e682613ec9565b6135f08185613f03565b9350613600818560208601614118565b61360981614378565b840191505092915050565b6000613621603483613f03565b915061362c826143a3565b604082019050919050565b6000613644602883613f03565b915061364f826143f2565b604082019050919050565b6000613667601c83613f14565b915061367282614441565b601c82019050919050565b600061368a602b83613f03565b91506136958261446a565b604082019050919050565b60006136ad602683613f03565b91506136b8826144b9565b604082019050919050565b60006136d0602983613f03565b91506136db82614508565b604082019050919050565b60006136f3601a83613f03565b91506136fe82614557565b602082019050919050565b6000613716601d83613f03565b915061372182614580565b602082019050919050565b6000613739601183613f03565b9150613744826145a9565b602082019050919050565b600061375c602583613f03565b9150613767826145d2565b604082019050919050565b600061377f603283613f03565b915061378a82614621565b604082019050919050565b60006137a2601783613f03565b91506137ad82614670565b602082019050919050565b60006137c5602a83613f03565b91506137d082614699565b604082019050919050565b60006137e8602983613f03565b91506137f3826146e8565b604082019050919050565b600061380b602083613f03565b915061381682614737565b602082019050919050565b600061382e601083613f03565b915061383982614760565b602082019050919050565b6000613851602983613f03565b915061385c82614789565b604082019050919050565b6000613874602983613f03565b915061387f826147d8565b604082019050919050565b6000613897602883613f03565b91506138a282614827565b604082019050919050565b60006138ba602183613f03565b91506138c582614876565b604082019050919050565b6138d9816140e2565b82525050565b6138e8816140e2565b82525050565b6138f7816140ec565b82525050565b613906816140fc565b82525050565b600061391882846134f8565b60148201915081905092915050565b60006139328261365a565b915061393e828461358b565b60208201915081905092915050565b600060208201905061396260008301846134e9565b92915050565b600060a08201905061397d60008301886134e9565b61398a60208301876134e9565b818103604083015261399c818661350f565b905081810360608301526139b0818561350f565b905081810360808301526139c481846135a2565b90509695505050505050565b600060a0820190506139e560008301886134e9565b6139f260208301876134e9565b6139ff60408301866138df565b613a0c60608301856138df565b8181036080830152613a1e81846135a2565b90509695505050505050565b60006020820190508181036000830152613a44818461350f565b905092915050565b60006040820190508181036000830152613a66818561350f565b90508181036020830152613a7a818461350f565b90509392505050565b6000602082019050613a98600083018461356d565b92915050565b6000608082019050613ab3600083018761357c565b613ac060208301866138fd565b613acd604083018561357c565b613ada606083018461357c565b95945050505050565b60006020820190508181036000830152613afd81846135db565b905092915050565b60006020820190508181036000830152613b1e81613614565b9050919050565b60006020820190508181036000830152613b3e81613637565b9050919050565b60006020820190508181036000830152613b5e8161367d565b9050919050565b60006020820190508181036000830152613b7e816136a0565b9050919050565b60006020820190508181036000830152613b9e816136c3565b9050919050565b60006020820190508181036000830152613bbe816136e6565b9050919050565b60006020820190508181036000830152613bde81613709565b9050919050565b60006020820190508181036000830152613bfe8161372c565b9050919050565b60006020820190508181036000830152613c1e8161374f565b9050919050565b60006020820190508181036000830152613c3e81613772565b9050919050565b60006020820190508181036000830152613c5e81613795565b9050919050565b60006020820190508181036000830152613c7e816137b8565b9050919050565b60006020820190508181036000830152613c9e816137db565b9050919050565b60006020820190508181036000830152613cbe816137fe565b9050919050565b60006020820190508181036000830152613cde81613821565b9050919050565b60006020820190508181036000830152613cfe81613844565b9050919050565b60006020820190508181036000830152613d1e81613867565b9050919050565b60006020820190508181036000830152613d3e8161388a565b9050919050565b60006020820190508181036000830152613d5e816138ad565b9050919050565b6000602082019050613d7a60008301846138df565b92915050565b6000604082019050613d9560008301856138df565b613da260208301846138df565b9392505050565b6000602082019050613dbe60008301846138ee565b92915050565b6000613dce613ddf565b9050613dda828261417d565b919050565b6000604051905090565b600067ffffffffffffffff821115613e0457613e0361430e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e3057613e2f61430e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613e5c57613e5b61430e565b5b613e6582614378565b9050602081019050919050565b600067ffffffffffffffff821115613e8d57613e8c61430e565b5b613e9682614378565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f2a826140e2565b9150613f35836140e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f6a57613f69614252565b5b828201905092915050565b6000613f80826140ec565b9150613f8b836140ec565b92508263ffffffff03821115613fa457613fa3614252565b5b828201905092915050565b6000613fba826140e2565b9150613fc5836140e2565b925082613fd557613fd4614281565b5b828204905092915050565b6000613feb826140e2565b9150613ff6836140e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402f5761402e614252565b5b828202905092915050565b6000614045826140e2565b9150614050836140e2565b92508282101561406357614062614252565b5b828203905092915050565b6000614079826140c2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561413657808201518184015260208101905061411b565b83811115614145576000848401525b50505050565b6000600282049050600182168061416357607f821691505b60208210811415614177576141766142b0565b5b50919050565b61418682614378565b810181811067ffffffffffffffff821117156141a5576141a461430e565b5b80604052505050565b60006141b9826140e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141ec576141eb614252565b5b600182019050919050565b6000614202826140ec565b915063ffffffff82141561421957614218614252565b5b600182019050919050565b600061422f82614240565b9050919050565b6000819050919050565b600061424b82614389565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561435c5760046000803e614359600051614396565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156148d557614958565b6148dd613ddf565b60043d036004823e80513d602482011167ffffffffffffffff82111715614905575050614958565b808201805167ffffffffffffffff8111156149235750505050614958565b80602083010160043d038501811115614940575050505050614958565b61494f8260200185018661417d565b82955050505050505b90565b6149648161406e565b811461496f57600080fd5b50565b61497b81614080565b811461498657600080fd5b50565b6149928161408c565b811461499d57600080fd5b50565b6149a981614096565b81146149b457600080fd5b50565b6149c0816140e2565b81146149cb57600080fd5b50565b6149d7816140ec565b81146149e257600080fd5b50565b6149ee816140fc565b81146149f957600080fd5b5056fea2646970667358221220f201ce97c81faa7cfc86078d6b9f46b44cc373ce7505c6612fbcbb01376ef52464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f75642f697066732f516d5261597673487a6a4535567750355738714e4b37545237455147467a734269673167514874426f69383158312f7b69647d00000000000000
-----Decoded View---------------
Arg [0] : uri (string): https://holyverse.mypinata.cloud/ipfs/QmRaYvsHzjE5VwP5W8qNK7TR7EQGFzsBig1gQHtBoi81X1/{id}
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [2] : 68747470733a2f2f686f6c7976657273652e6d7970696e6174612e636c6f7564
Arg [3] : 2f697066732f516d5261597673487a6a4535567750355738714e4b3754523745
Arg [4] : 5147467a734269673167514874426f69383158312f7b69647d00000000000000
Deployed Bytecode Sourcemap
36284:4384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22922:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21945:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36870:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36961:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36331:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36521:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22666:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37456:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36428:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37295:149;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25017:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36626:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39645:1020;;;;;;;;;;;;;:::i;:::-;;37067:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23319:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3443:94;;;;;;;;;;;;;:::i;:::-;;38916:409;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2792:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37178:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36381:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36567:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36675:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23916:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38407:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39333:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36464:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24299:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24539:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3692:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22922:231;23008:7;23055:1;23036:21;;:7;:21;;;;23028:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23123:9;:13;23133:2;23123:13;;;;;;;;;;;:22;23137:7;23123:22;;;;;;;;;;;;;;;;23116:29;;22922:231;;;;:::o;21945:310::-;22047:4;22099:26;22084:41;;;:11;:41;;;;:110;;;;22157:37;22142:52;;;:11;:52;;;;22084:110;:163;;;;22211:36;22235:11;22211:23;:36::i;:::-;22084:163;22064:183;;21945:310;;;:::o;36870:83::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36933:12:::1;36941:3;36933:7;:12::i;:::-;36870:83:::0;:::o;36961:98::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37047:4:::1;37031:13;;:20;;;;;;;;;;;;;;;;;;36961:98:::0;:::o;36331:43::-;;;;;;;;;;;;;;;;;;;:::o;36521:39::-;;;;;;;;;;;;;:::o;22666:105::-;22726:13;22759:4;22752:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22666:105;;;:::o;37456:117::-;37507:4;37550:15;37531;;;;;;;;;;;:34;;;;37524:41;;37456:117;:::o;36428:29::-;;;;;;;;;;;;;:::o;37295:149::-;37343:4;37383:15;37367:12;;;;;;;;;;;:31;;;;:69;;;;;37421:15;37402;;;;;;;;;;;:34;;;;37367:69;37360:76;;37295:149;:::o;25017:442::-;25258:12;:10;:12::i;:::-;25250:20;;:4;:20;;;:60;;;;25274:36;25291:4;25297:12;:10;:12::i;:::-;25274:16;:36::i;:::-;25250:60;25228:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25399:52;25422:4;25428:2;25432:3;25437:7;25446:4;25399:22;:52::i;:::-;25017:442;;;;;:::o;36626:42::-;;;;;;;;;;;;;:::o;39645:1020::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39695:27:::1;:440;;;;;;;;39740:42;39695:440;;;;;;;;39797:42;39695:440;;;;;;;;39854:42;39695:440;;;;;;;;39911:42;39695:440;;;;;;;;39968:42;39695:440;;;;;;;;40025:42;39695:440;;;;;;;;40082:42;39695:440;;;;;;::::0;::::1;;40148:23;:223;;;;;;;;40196:4;40148:223;;;;;;;;40223:4;40148:223;;;;;;;;40250:4;40148:223;;;;;;;;40277:3;40148:223;;;;;;;;40303:3;40148:223;;;;;;;;40329:3;40148:223;;;;;;;;40355:4;40148:223;;;;;;::::0;::::1;;40384:15;40402:21;40384:39;;40441:8;40436:222;40459:16;40455:1;:20;;;40436:222;;;40497:14;40538:1;40519:16;:20;;;;:::i;:::-;40514:1;:25;;;:79;;40588:5;40576:6;40583:1;40576:9;;;;;;;;;:::i;:::-;;;;;;40566:19;;:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;40514:79;;;40542:21;40514:79;40497:96;;40616:9;40626:1;40616:12;;;;;;;;;:::i;:::-;;;;;;40608:30;;:38;40639:6;40608:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40482:176;40477:3;;;;;:::i;:::-;;;;40436:222;;;;39684:981;;;39645:1020::o:0;37067:103::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37153:9:::1;37138:12;;:24;;;;;;;;;;;;;;;;;;37067:103:::0;:::o;23319:524::-;23475:16;23536:3;:10;23517:8;:15;:29;23509:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23605:30;23652:8;:15;23638:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23605:63;;23686:9;23681:122;23705:8;:15;23701:1;:19;23681:122;;;23761:30;23771:8;23780:1;23771:11;;;;;;;;:::i;:::-;;;;;;;;23784:3;23788:1;23784:6;;;;;;;;:::i;:::-;;;;;;;;23761:9;:30::i;:::-;23742:13;23756:1;23742:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23722:3;;;;:::i;:::-;;;23681:122;;;;23822:13;23815:20;;;23319:524;;;;:::o;3443:94::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3508:21:::1;3526:1;3508:9;:21::i;:::-;3443:94::o:0;38916:409::-;38990:20;:18;:20::i;:::-;38982:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39068:1;39060:5;:9;;;39052:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36720:4;39122:42;;39136:5;39122:11;;;;;;;;;;;:19;;;;:::i;:::-;:42;;;;39114:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39254:5;39242:17;;36500:12;39242:17;;;;:::i;:::-;39229:9;:30;;39221:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39294:23;39299:10;39311:5;39294:4;:23::i;:::-;38916:409;:::o;2792:87::-;2838:7;2865:6;;;;;;;;;;;2858:13;;2792:87;:::o;37178:109::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37270:9:::1;37252:15;;:27;;;;;;;;;;;;;;;;;;37178:109:::0;:::o;36381:38::-;;;;;;;;;;;;;;;;;;;:::o;36567:46::-;36609:4;36567:46;:::o;36675:49::-;36720:4;36675:49;:::o;23916:311::-;24035:8;24019:24;;:12;:10;:12::i;:::-;:24;;;;24011:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24147:8;24102:18;:32;24121:12;:10;:12::i;:::-;24102:32;;;;;;;;;;;;;;;:42;24135:8;24102:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24200:8;24171:48;;24186:12;:10;:12::i;:::-;24171:48;;;24210:8;24171:48;;;;;;:::i;:::-;;;;;;;;23916:311;;:::o;38407:497::-;38509:17;:15;:17::i;:::-;38501:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38573:29;38594:1;38597;38600;38573:20;:29::i;:::-;38565:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38650:1;38642:5;:9;;;38634:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36609:4;38704:39;;38718:5;38704:11;;;;;;;;;;;:19;;;;:::i;:::-;:39;;;;38696:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:5;38821:17;;36500:12;38821:17;;;;:::i;:::-;38808:9;:30;;38800:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38873:23;38878:10;38890:5;38873:4;:23::i;:::-;38407:497;;;;:::o;39333:304::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36720:4:::1;39418:53;;39432:9;:16;39418:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:53;;39410:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;39543:6;39538:92;39559:9;:16;39555:1;:20;39538:92;;;39597:21;39602:9;39612:1;39602:12;;;;;;;;:::i;:::-;;;;;;;;39616:1;39597:4;:21::i;:::-;39577:3;;;;;:::i;:::-;;;;39538:92;;;;39333:304:::0;:::o;36464:48::-;36500:12;36464:48;:::o;24299:168::-;24398:4;24422:18;:27;24441:7;24422:27;;;;;;;;;;;;;;;:37;24450:8;24422:37;;;;;;;;;;;;;;;;;;;;;;;;;24415:44;;24299:168;;;;:::o;24539:401::-;24755:12;:10;:12::i;:::-;24747:20;;:4;:20;;;:60;;;;24771:36;24788:4;24794:12;:10;:12::i;:::-;24771:16;:36::i;:::-;24747:60;24725:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24887:45;24905:4;24911:2;24915;24919:6;24927:4;24887:17;:45::i;:::-;24539:401;;;;;:::o;3692:192::-;3023:12;:10;:12::i;:::-;3012:23;;:7;:5;:7::i;:::-;:23;;;3004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3801:1:::1;3781:22;;:8;:22;;;;3773:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3857:19;3867:8;3857:9;:19::i;:::-;3692:192:::0;:::o;13723:157::-;13808:4;13847:25;13832:40;;;:11;:40;;;;13825:47;;13723:157;;;:::o;1613:98::-;1666:7;1693:10;1686:17;;1613:98;:::o;29019:88::-;29093:6;29086:4;:13;;;;;;;;;;;;:::i;:::-;;29019:88;:::o;27101:1074::-;27328:7;:14;27314:3;:10;:28;27306:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27420:1;27406:16;;:2;:16;;;;27398:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27477:16;27496:12;:10;:12::i;:::-;27477:31;;27521:60;27542:8;27552:4;27558:2;27562:3;27567:7;27576:4;27521:20;:60::i;:::-;27599:9;27594:421;27618:3;:10;27614:1;:14;27594:421;;;27650:10;27663:3;27667:1;27663:6;;;;;;;;:::i;:::-;;;;;;;;27650:19;;27684:14;27701:7;27709:1;27701:10;;;;;;;;:::i;:::-;;;;;;;;27684:27;;27728:19;27750:9;:13;27760:2;27750:13;;;;;;;;;;;:19;27764:4;27750:19;;;;;;;;;;;;;;;;27728:41;;27807:6;27792:11;:21;;27784:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27940:6;27926:11;:20;27904:9;:13;27914:2;27904:13;;;;;;;;;;;:19;27918:4;27904:19;;;;;;;;;;;;;;;:42;;;;27997:6;27976:9;:13;27986:2;27976:13;;;;;;;;;;;:17;27990:2;27976:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27635:380;;;27630:3;;;;:::i;:::-;;;27594:421;;;;28062:2;28032:47;;28056:4;28032:47;;28046:8;28032:47;;;28066:3;28071:7;28032:47;;;;;;;:::i;:::-;;;;;;;;28092:75;28128:8;28138:4;28144:2;28148:3;28153:7;28162:4;28092:35;:75::i;:::-;27295:880;27101:1074;;;;;:::o;3892:173::-;3948:16;3967:6;;;;;;;;;;;3948:25;;3993:8;3984:6;;:17;;;;;;;;;;;;;;;;;;4048:8;4017:40;;4038:8;4017:40;;;;;;;;;;;;3937:128;3892:173;:::o;37876:519::-;37948:1;37940:5;:9;;;37936:419;;;37966:20;38011:5;38003:14;;37989:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37966:52;;38033:24;38082:5;38074:14;;38060:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38033:56;;38111:8;38106:127;38129:5;38125:9;;:1;:9;;;38106:127;;;38183:1;38169:11;;;;;;;;;;;:15;;;;:::i;:::-;38160:24;;:3;38164:1;38160:6;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;;38216:1;38203:7;38211:1;38203:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;38136:3;;;;;:::i;:::-;;;;38106:127;;;;38249:32;38260:2;38264:3;38269:7;38249:32;;;;;;;;;;;;:10;:32::i;:::-;37951:342;;37936:419;;;38314:29;38320:2;38324:11;;;;;;;;;;;38314:29;;38337:1;38314:29;;;;;;;;;;;;:5;:29::i;:::-;37936:419;38382:5;38367:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37876:519;;:::o;37581:287::-;37665:4;37682:12;37724:10;37707:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;37697:39;;;;;;37682:54;;37771:89;37844:4;37791:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;37781:69;;;;;;37852:1;37855;37858;37771:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37754:106;;:13;;;;;;;;;;;:106;;;37747:113;;;37581:287;;;;;:::o;25923:820::-;26125:1;26111:16;;:2;:16;;;;26103:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26182:16;26201:12;:10;:12::i;:::-;26182:31;;26226:96;26247:8;26257:4;26263:2;26267:21;26285:2;26267:17;:21::i;:::-;26290:25;26308:6;26290:17;:25::i;:::-;26317:4;26226:20;:96::i;:::-;26335:19;26357:9;:13;26367:2;26357:13;;;;;;;;;;;:19;26371:4;26357:19;;;;;;;;;;;;;;;;26335:41;;26410:6;26395:11;:21;;26387:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26535:6;26521:11;:20;26499:9;:13;26509:2;26499:13;;;;;;;;;;;:19;26513:4;26499:19;;;;;;;;;;;;;;;:42;;;;26584:6;26563:9;:13;26573:2;26563:13;;;;;;;;;;;:17;26577:2;26563:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26639:2;26608:46;;26633:4;26608:46;;26623:8;26608:46;;;26643:2;26647:6;26608:46;;;;;;;:::i;:::-;;;;;;;;26667:68;26698:8;26708:4;26714:2;26718;26722:6;26730:4;26667:30;:68::i;:::-;26092:651;;25923:820;;;;;:::o;34209:221::-;;;;;;;:::o;35190:813::-;35430:15;:2;:13;;;:15::i;:::-;35426:570;;;35483:2;35466:43;;;35510:8;35520:4;35526:3;35531:7;35540:4;35466:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35462:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35858:6;35851:14;;;;;;;;;;;:::i;:::-;;;;;;;;35462:523;;;35907:62;;;;;;;;;;:::i;:::-;;;;;;;;35462:523;35639:48;;;35627:60;;;:8;:60;;;;35623:159;;35712:50;;;;;;;;;;:::i;:::-;;;;;;;;35623:159;35546:251;35426:570;35190:813;;;;;;:::o;30463:735::-;30655:1;30641:16;;:2;:16;;;;30633:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30728:7;:14;30714:3;:10;:28;30706:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30800:16;30819:12;:10;:12::i;:::-;30800:31;;30844:66;30865:8;30883:1;30887:2;30891:3;30896:7;30905:4;30844:20;:66::i;:::-;30928:9;30923:103;30947:3;:10;30943:1;:14;30923:103;;;31004:7;31012:1;31004:10;;;;;;;;:::i;:::-;;;;;;;;30979:9;:17;30989:3;30993:1;30989:6;;;;;;;;:::i;:::-;;;;;;;;30979:17;;;;;;;;;;;:21;30997:2;30979:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30959:3;;;;;:::i;:::-;;;;30923:103;;;;31079:2;31043:53;;31075:1;31043:53;;31057:8;31043:53;;;31083:3;31088:7;31043:53;;;;;;;:::i;:::-;;;;;;;;31109:81;31145:8;31163:1;31167:2;31171:3;31176:7;31185:4;31109:35;:81::i;:::-;30622:576;30463:735;;;;:::o;29508:599::-;29685:1;29666:21;;:7;:21;;;;29658:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29738:16;29757:12;:10;:12::i;:::-;29738:31;;29782:107;29803:8;29821:1;29825:7;29834:21;29852:2;29834:17;:21::i;:::-;29857:25;29875:6;29857:17;:25::i;:::-;29884:4;29782:20;:107::i;:::-;29928:6;29902:9;:13;29912:2;29902:13;;;;;;;;;;;:22;29916:7;29902:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;29987:7;29950:57;;29983:1;29950:57;;29965:8;29950:57;;;29996:2;30000:6;29950:57;;;;;;;:::i;:::-;;;;;;;;30020:79;30051:8;30069:1;30073:7;30082:2;30086:6;30094:4;30020:30;:79::i;:::-;29647:460;29508:599;;;;:::o;36011:198::-;36077:16;36106:22;36145:1;36131:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36106:41;;36169:7;36158:5;36164:1;36158:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36196:5;36189:12;;;36011:198;;;:::o;34438:744::-;34653:15;:2;:13;;;:15::i;:::-;34649:526;;;34706:2;34689:38;;;34728:8;34738:4;34744:2;34748:6;34756:4;34689:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34685:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35037:6;35030:14;;;;;;;;;;;:::i;:::-;;;;;;;;34685:479;;;35086:62;;;;;;;;;;:::i;:::-;;;;;;;;34685:479;34823:43;;;34811:55;;;:8;:55;;;;34807:154;;34891:50;;;;;;;;;;:::i;:::-;;;;;;;;34807:154;34762:214;34649:526;34438:744;;;;;;:::o;4807:387::-;4867:4;5075:12;5142:7;5130:20;5122:28;;5185:1;5178:4;:8;5171:15;;;4807:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:137::-;4743:5;4781:6;4768:20;4759:29;;4797:32;4823:5;4797:32;:::i;:::-;4698:137;;;;:::o;4841:135::-;4885:5;4923:6;4910:20;4901:29;;4939:31;4964:5;4939:31;:::i;:::-;4841:135;;;;:::o;4982:329::-;5041:6;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;4982:329;;;;:::o;5317:474::-;5385:6;5393;5442:2;5430:9;5421:7;5417:23;5413:32;5410:119;;;5448:79;;:::i;:::-;5410:119;5568:1;5593:53;5638:7;5629:6;5618:9;5614:22;5593:53;:::i;:::-;5583:63;;5539:117;5695:2;5721:53;5766:7;5757:6;5746:9;5742:22;5721:53;:::i;:::-;5711:63;;5666:118;5317:474;;;;;:::o;5797:1509::-;5951:6;5959;5967;5975;5983;6032:3;6020:9;6011:7;6007:23;6003:33;6000:120;;;6039:79;;:::i;:::-;6000:120;6159:1;6184:53;6229:7;6220:6;6209:9;6205:22;6184:53;:::i;:::-;6174:63;;6130:117;6286:2;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;:::i;:::-;6302:63;;6257:118;6442:2;6431:9;6427:18;6414:32;6473:18;6465:6;6462:30;6459:117;;;6495:79;;:::i;:::-;6459:117;6600:78;6670:7;6661:6;6650:9;6646:22;6600:78;:::i;:::-;6590:88;;6385:303;6755:2;6744:9;6740:18;6727:32;6786:18;6778:6;6775:30;6772:117;;;6808:79;;:::i;:::-;6772:117;6913:78;6983:7;6974:6;6963:9;6959:22;6913:78;:::i;:::-;6903:88;;6698:303;7068:3;7057:9;7053:19;7040:33;7100:18;7092:6;7089:30;7086:117;;;7122:79;;:::i;:::-;7086:117;7227:62;7281:7;7272:6;7261:9;7257:22;7227:62;:::i;:::-;7217:72;;7011:288;5797:1509;;;;;;;;:::o;7312:1089::-;7416:6;7424;7432;7440;7448;7497:3;7485:9;7476:7;7472:23;7468:33;7465:120;;;7504:79;;:::i;:::-;7465:120;7624:1;7649:53;7694:7;7685:6;7674:9;7670:22;7649:53;:::i;:::-;7639:63;;7595:117;7751:2;7777:53;7822:7;7813:6;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;7722:118;7879:2;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7850:118;8007:2;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7978:118;8163:3;8152:9;8148:19;8135:33;8195:18;8187:6;8184:30;8181:117;;;8217:79;;:::i;:::-;8181:117;8322:62;8376:7;8367:6;8356:9;8352:22;8322:62;:::i;:::-;8312:72;;8106:288;7312:1089;;;;;;;;:::o;8407:468::-;8472:6;8480;8529:2;8517:9;8508:7;8504:23;8500:32;8497:119;;;8535:79;;:::i;:::-;8497:119;8655:1;8680:53;8725:7;8716:6;8705:9;8701:22;8680:53;:::i;:::-;8670:63;;8626:117;8782:2;8808:50;8850:7;8841:6;8830:9;8826:22;8808:50;:::i;:::-;8798:60;;8753:115;8407:468;;;;;:::o;8881:474::-;8949:6;8957;9006:2;8994:9;8985:7;8981:23;8977:32;8974:119;;;9012:79;;:::i;:::-;8974:119;9132:1;9157:53;9202:7;9193:6;9182:9;9178:22;9157:53;:::i;:::-;9147:63;;9103:117;9259:2;9285:53;9330:7;9321:6;9310:9;9306:22;9285:53;:::i;:::-;9275:63;;9230:118;8881:474;;;;;:::o;9361:539::-;9445:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:119;;;9500:79;;:::i;:::-;9462:119;9648:1;9637:9;9633:17;9620:31;9678:18;9670:6;9667:30;9664:117;;;9700:79;;:::i;:::-;9664:117;9805:78;9875:7;9866:6;9855:9;9851:22;9805:78;:::i;:::-;9795:88;;9591:302;9361:539;;;;:::o;9906:894::-;10024:6;10032;10081:2;10069:9;10060:7;10056:23;10052:32;10049:119;;;10087:79;;:::i;:::-;10049:119;10235:1;10224:9;10220:17;10207:31;10265:18;10257:6;10254:30;10251:117;;;10287:79;;:::i;:::-;10251:117;10392:78;10462:7;10453:6;10442:9;10438:22;10392:78;:::i;:::-;10382:88;;10178:302;10547:2;10536:9;10532:18;10519:32;10578:18;10570:6;10567:30;10564:117;;;10600:79;;:::i;:::-;10564:117;10705:78;10775:7;10766:6;10755:9;10751:22;10705:78;:::i;:::-;10695:88;;10490:303;9906:894;;;;;:::o;10806:327::-;10864:6;10913:2;10901:9;10892:7;10888:23;10884:32;10881:119;;;10919:79;;:::i;:::-;10881:119;11039:1;11064:52;11108:7;11099:6;11088:9;11084:22;11064:52;:::i;:::-;11054:62;;11010:116;10806:327;;;;:::o;11139:349::-;11208:6;11257:2;11245:9;11236:7;11232:23;11228:32;11225:119;;;11263:79;;:::i;:::-;11225:119;11383:1;11408:63;11463:7;11454:6;11443:9;11439:22;11408:63;:::i;:::-;11398:73;;11354:127;11139:349;;;;:::o;11494:509::-;11563:6;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11766:1;11755:9;11751:17;11738:31;11796:18;11788:6;11785:30;11782:117;;;11818:79;;:::i;:::-;11782:117;11923:63;11978:7;11969:6;11958:9;11954:22;11923:63;:::i;:::-;11913:73;;11709:287;11494:509;;;;:::o;12009:329::-;12068:6;12117:2;12105:9;12096:7;12092:23;12088:32;12085:119;;;12123:79;;:::i;:::-;12085:119;12243:1;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12214:117;12009:329;;;;:::o;12344:327::-;12402:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12577:1;12602:52;12646:7;12637:6;12626:9;12622:22;12602:52;:::i;:::-;12592:62;;12548:116;12344:327;;;;:::o;12677:759::-;12760:6;12768;12776;12784;12833:3;12821:9;12812:7;12808:23;12804:33;12801:120;;;12840:79;;:::i;:::-;12801:120;12960:1;12985:51;13028:7;13019:6;13008:9;13004:22;12985:51;:::i;:::-;12975:61;;12931:115;13085:2;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13056:118;13213:2;13239:53;13284:7;13275:6;13264:9;13260:22;13239:53;:::i;:::-;13229:63;;13184:118;13341:2;13367:52;13411:7;13402:6;13391:9;13387:22;13367:52;:::i;:::-;13357:62;;13312:117;12677:759;;;;;;;:::o;13442:179::-;13511:10;13532:46;13574:3;13566:6;13532:46;:::i;:::-;13610:4;13605:3;13601:14;13587:28;;13442:179;;;;:::o;13627:118::-;13714:24;13732:5;13714:24;:::i;:::-;13709:3;13702:37;13627:118;;:::o;13751:157::-;13856:45;13876:24;13894:5;13876:24;:::i;:::-;13856:45;:::i;:::-;13851:3;13844:58;13751:157;;:::o;13944:732::-;14063:3;14092:54;14140:5;14092:54;:::i;:::-;14162:86;14241:6;14236:3;14162:86;:::i;:::-;14155:93;;14272:56;14322:5;14272:56;:::i;:::-;14351:7;14382:1;14367:284;14392:6;14389:1;14386:13;14367:284;;;14468:6;14462:13;14495:63;14554:3;14539:13;14495:63;:::i;:::-;14488:70;;14581:60;14634:6;14581:60;:::i;:::-;14571:70;;14427:224;14414:1;14411;14407:9;14402:14;;14367:284;;;14371:14;14667:3;14660:10;;14068:608;;;13944:732;;;;:::o;14682:109::-;14763:21;14778:5;14763:21;:::i;:::-;14758:3;14751:34;14682:109;;:::o;14797:118::-;14884:24;14902:5;14884:24;:::i;:::-;14879:3;14872:37;14797:118;;:::o;14921:157::-;15026:45;15046:24;15064:5;15046:24;:::i;:::-;15026:45;:::i;:::-;15021:3;15014:58;14921:157;;:::o;15084:360::-;15170:3;15198:38;15230:5;15198:38;:::i;:::-;15252:70;15315:6;15310:3;15252:70;:::i;:::-;15245:77;;15331:52;15376:6;15371:3;15364:4;15357:5;15353:16;15331:52;:::i;:::-;15408:29;15430:6;15408:29;:::i;:::-;15403:3;15399:39;15392:46;;15174:270;15084:360;;;;:::o;15450:364::-;15538:3;15566:39;15599:5;15566:39;:::i;:::-;15621:71;15685:6;15680:3;15621:71;:::i;:::-;15614:78;;15701:52;15746:6;15741:3;15734:4;15727:5;15723:16;15701:52;:::i;:::-;15778:29;15800:6;15778:29;:::i;:::-;15773:3;15769:39;15762:46;;15542:272;15450:364;;;;:::o;15820:366::-;15962:3;15983:67;16047:2;16042:3;15983:67;:::i;:::-;15976:74;;16059:93;16148:3;16059:93;:::i;:::-;16177:2;16172:3;16168:12;16161:19;;15820:366;;;:::o;16192:::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:402::-;16724:3;16745:85;16827:2;16822:3;16745:85;:::i;:::-;16738:92;;16839:93;16928:3;16839:93;:::i;:::-;16957:2;16952:3;16948:12;16941:19;;16564:402;;;:::o;16972:366::-;17114:3;17135:67;17199:2;17194:3;17135:67;:::i;:::-;17128:74;;17211:93;17300:3;17211:93;:::i;:::-;17329:2;17324:3;17320:12;17313:19;;16972:366;;;:::o;17344:::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17344:366;;;:::o;17716:::-;17858:3;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17955:93;18044:3;17955:93;:::i;:::-;18073:2;18068:3;18064:12;18057:19;;17716:366;;;:::o;18088:::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18088:366;;;:::o;18460:::-;18602:3;18623:67;18687:2;18682:3;18623:67;:::i;:::-;18616:74;;18699:93;18788:3;18699:93;:::i;:::-;18817:2;18812:3;18808:12;18801:19;;18460:366;;;:::o;18832:::-;18974:3;18995:67;19059:2;19054:3;18995:67;:::i;:::-;18988:74;;19071:93;19160:3;19071:93;:::i;:::-;19189:2;19184:3;19180:12;19173:19;;18832:366;;;:::o;19204:::-;19346:3;19367:67;19431:2;19426:3;19367:67;:::i;:::-;19360:74;;19443:93;19532:3;19443:93;:::i;:::-;19561:2;19556:3;19552:12;19545:19;;19204:366;;;:::o;19576:::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19576:366;;;:::o;19948:::-;20090:3;20111:67;20175:2;20170:3;20111:67;:::i;:::-;20104:74;;20187:93;20276:3;20187:93;:::i;:::-;20305:2;20300:3;20296:12;20289:19;;19948:366;;;:::o;20320:::-;20462:3;20483:67;20547:2;20542:3;20483:67;:::i;:::-;20476:74;;20559:93;20648:3;20559:93;:::i;:::-;20677:2;20672:3;20668:12;20661:19;;20320:366;;;:::o;20692:::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20692:366;;;:::o;21064:::-;21206:3;21227:67;21291:2;21286:3;21227:67;:::i;:::-;21220:74;;21303:93;21392:3;21303:93;:::i;:::-;21421:2;21416:3;21412:12;21405:19;;21064:366;;;:::o;21436:::-;21578:3;21599:67;21663:2;21658:3;21599:67;:::i;:::-;21592:74;;21675:93;21764:3;21675:93;:::i;:::-;21793:2;21788:3;21784:12;21777:19;;21436:366;;;:::o;21808:::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:108::-;23373:24;23391:5;23373:24;:::i;:::-;23368:3;23361:37;23296:108;;:::o;23410:118::-;23497:24;23515:5;23497:24;:::i;:::-;23492:3;23485:37;23410:118;;:::o;23534:115::-;23619:23;23636:5;23619:23;:::i;:::-;23614:3;23607:36;23534:115;;:::o;23655:112::-;23738:22;23754:5;23738:22;:::i;:::-;23733:3;23726:35;23655:112;;:::o;23773:256::-;23885:3;23900:75;23971:3;23962:6;23900:75;:::i;:::-;24000:2;23995:3;23991:12;23984:19;;24020:3;24013:10;;23773:256;;;;:::o;24035:522::-;24248:3;24270:148;24414:3;24270:148;:::i;:::-;24263:155;;24428:75;24499:3;24490:6;24428:75;:::i;:::-;24528:2;24523:3;24519:12;24512:19;;24548:3;24541:10;;24035:522;;;;:::o;24563:222::-;24656:4;24694:2;24683:9;24679:18;24671:26;;24707:71;24775:1;24764:9;24760:17;24751:6;24707:71;:::i;:::-;24563:222;;;;:::o;24791:1053::-;25114:4;25152:3;25141:9;25137:19;25129:27;;25166:71;25234:1;25223:9;25219:17;25210:6;25166:71;:::i;:::-;25247:72;25315:2;25304:9;25300:18;25291:6;25247:72;:::i;:::-;25366:9;25360:4;25356:20;25351:2;25340:9;25336:18;25329:48;25394:108;25497:4;25488:6;25394:108;:::i;:::-;25386:116;;25549:9;25543:4;25539:20;25534:2;25523:9;25519:18;25512:48;25577:108;25680:4;25671:6;25577:108;:::i;:::-;25569:116;;25733:9;25727:4;25723:20;25717:3;25706:9;25702:19;25695:49;25761:76;25832:4;25823:6;25761:76;:::i;:::-;25753:84;;24791:1053;;;;;;;;:::o;25850:751::-;26073:4;26111:3;26100:9;26096:19;26088:27;;26125:71;26193:1;26182:9;26178:17;26169:6;26125:71;:::i;:::-;26206:72;26274:2;26263:9;26259:18;26250:6;26206:72;:::i;:::-;26288;26356:2;26345:9;26341:18;26332:6;26288:72;:::i;:::-;26370;26438:2;26427:9;26423:18;26414:6;26370:72;:::i;:::-;26490:9;26484:4;26480:20;26474:3;26463:9;26459:19;26452:49;26518:76;26589:4;26580:6;26518:76;:::i;:::-;26510:84;;25850:751;;;;;;;;:::o;26607:373::-;26750:4;26788:2;26777:9;26773:18;26765:26;;26837:9;26831:4;26827:20;26823:1;26812:9;26808:17;26801:47;26865:108;26968:4;26959:6;26865:108;:::i;:::-;26857:116;;26607:373;;;;:::o;26986:634::-;27207:4;27245:2;27234:9;27230:18;27222:26;;27294:9;27288:4;27284:20;27280:1;27269:9;27265:17;27258:47;27322:108;27425:4;27416:6;27322:108;:::i;:::-;27314:116;;27477:9;27471:4;27467:20;27462:2;27451:9;27447:18;27440:48;27505:108;27608:4;27599:6;27505:108;:::i;:::-;27497:116;;26986:634;;;;;:::o;27626:210::-;27713:4;27751:2;27740:9;27736:18;27728:26;;27764:65;27826:1;27815:9;27811:17;27802:6;27764:65;:::i;:::-;27626:210;;;;:::o;27842:545::-;28015:4;28053:3;28042:9;28038:19;28030:27;;28067:71;28135:1;28124:9;28120:17;28111:6;28067:71;:::i;:::-;28148:68;28212:2;28201:9;28197:18;28188:6;28148:68;:::i;:::-;28226:72;28294:2;28283:9;28279:18;28270:6;28226:72;:::i;:::-;28308;28376:2;28365:9;28361:18;28352:6;28308:72;:::i;:::-;27842:545;;;;;;;:::o;28393:313::-;28506:4;28544:2;28533:9;28529:18;28521:26;;28593:9;28587:4;28583:20;28579:1;28568:9;28564:17;28557:47;28621:78;28694:4;28685:6;28621:78;:::i;:::-;28613:86;;28393:313;;;;:::o;28712:419::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28965:9;28959:4;28955:20;28951:1;28940:9;28936:17;28929:47;28993:131;29119:4;28993:131;:::i;:::-;28985:139;;28712:419;;;:::o;29137:::-;29303:4;29341:2;29330:9;29326:18;29318:26;;29390:9;29384:4;29380:20;29376:1;29365:9;29361:17;29354:47;29418:131;29544:4;29418:131;:::i;:::-;29410:139;;29137:419;;;:::o;29562:::-;29728:4;29766:2;29755:9;29751:18;29743:26;;29815:9;29809:4;29805:20;29801:1;29790:9;29786:17;29779:47;29843:131;29969:4;29843:131;:::i;:::-;29835:139;;29562:419;;;:::o;29987:::-;30153:4;30191:2;30180:9;30176:18;30168:26;;30240:9;30234:4;30230:20;30226:1;30215:9;30211:17;30204:47;30268:131;30394:4;30268:131;:::i;:::-;30260:139;;29987:419;;;:::o;30412:::-;30578:4;30616:2;30605:9;30601:18;30593:26;;30665:9;30659:4;30655:20;30651:1;30640:9;30636:17;30629:47;30693:131;30819:4;30693:131;:::i;:::-;30685:139;;30412:419;;;:::o;30837:::-;31003:4;31041:2;31030:9;31026:18;31018:26;;31090:9;31084:4;31080:20;31076:1;31065:9;31061:17;31054:47;31118:131;31244:4;31118:131;:::i;:::-;31110:139;;30837:419;;;:::o;31262:::-;31428:4;31466:2;31455:9;31451:18;31443:26;;31515:9;31509:4;31505:20;31501:1;31490:9;31486:17;31479:47;31543:131;31669:4;31543:131;:::i;:::-;31535:139;;31262:419;;;:::o;31687:::-;31853:4;31891:2;31880:9;31876:18;31868:26;;31940:9;31934:4;31930:20;31926:1;31915:9;31911:17;31904:47;31968:131;32094:4;31968:131;:::i;:::-;31960:139;;31687:419;;;:::o;32112:::-;32278:4;32316:2;32305:9;32301:18;32293:26;;32365:9;32359:4;32355:20;32351:1;32340:9;32336:17;32329:47;32393:131;32519:4;32393:131;:::i;:::-;32385:139;;32112:419;;;:::o;32537:::-;32703:4;32741:2;32730:9;32726:18;32718:26;;32790:9;32784:4;32780:20;32776:1;32765:9;32761:17;32754:47;32818:131;32944:4;32818:131;:::i;:::-;32810:139;;32537:419;;;:::o;32962:::-;33128:4;33166:2;33155:9;33151:18;33143:26;;33215:9;33209:4;33205:20;33201:1;33190:9;33186:17;33179:47;33243:131;33369:4;33243:131;:::i;:::-;33235:139;;32962:419;;;:::o;33387:::-;33553:4;33591:2;33580:9;33576:18;33568:26;;33640:9;33634:4;33630:20;33626:1;33615:9;33611:17;33604:47;33668:131;33794:4;33668:131;:::i;:::-;33660:139;;33387:419;;;:::o;33812:::-;33978:4;34016:2;34005:9;34001:18;33993:26;;34065:9;34059:4;34055:20;34051:1;34040:9;34036:17;34029:47;34093:131;34219:4;34093:131;:::i;:::-;34085:139;;33812:419;;;:::o;34237:::-;34403:4;34441:2;34430:9;34426:18;34418:26;;34490:9;34484:4;34480:20;34476:1;34465:9;34461:17;34454:47;34518:131;34644:4;34518:131;:::i;:::-;34510:139;;34237:419;;;:::o;34662:::-;34828:4;34866:2;34855:9;34851:18;34843:26;;34915:9;34909:4;34905:20;34901:1;34890:9;34886:17;34879:47;34943:131;35069:4;34943:131;:::i;:::-;34935:139;;34662:419;;;:::o;35087:::-;35253:4;35291:2;35280:9;35276:18;35268:26;;35340:9;35334:4;35330:20;35326:1;35315:9;35311:17;35304:47;35368:131;35494:4;35368:131;:::i;:::-;35360:139;;35087:419;;;:::o;35512:::-;35678:4;35716:2;35705:9;35701:18;35693:26;;35765:9;35759:4;35755:20;35751:1;35740:9;35736:17;35729:47;35793:131;35919:4;35793:131;:::i;:::-;35785:139;;35512:419;;;:::o;35937:::-;36103:4;36141:2;36130:9;36126:18;36118:26;;36190:9;36184:4;36180:20;36176:1;36165:9;36161:17;36154:47;36218:131;36344:4;36218:131;:::i;:::-;36210:139;;35937:419;;;:::o;36362:::-;36528:4;36566:2;36555:9;36551:18;36543:26;;36615:9;36609:4;36605:20;36601:1;36590:9;36586:17;36579:47;36643:131;36769:4;36643:131;:::i;:::-;36635:139;;36362:419;;;:::o;36787:222::-;36880:4;36918:2;36907:9;36903:18;36895:26;;36931:71;36999:1;36988:9;36984:17;36975:6;36931:71;:::i;:::-;36787:222;;;;:::o;37015:332::-;37136:4;37174:2;37163:9;37159:18;37151:26;;37187:71;37255:1;37244:9;37240:17;37231:6;37187:71;:::i;:::-;37268:72;37336:2;37325:9;37321:18;37312:6;37268:72;:::i;:::-;37015:332;;;;;:::o;37353:218::-;37444:4;37482:2;37471:9;37467:18;37459:26;;37495:69;37561:1;37550:9;37546:17;37537:6;37495:69;:::i;:::-;37353:218;;;;:::o;37577:129::-;37611:6;37638:20;;:::i;:::-;37628:30;;37667:33;37695:4;37687:6;37667:33;:::i;:::-;37577:129;;;:::o;37712:75::-;37745:6;37778:2;37772:9;37762:19;;37712:75;:::o;37793:311::-;37870:4;37960:18;37952:6;37949:30;37946:56;;;37982:18;;:::i;:::-;37946:56;38032:4;38024:6;38020:17;38012:25;;38092:4;38086;38082:15;38074:23;;37793:311;;;:::o;38110:::-;38187:4;38277:18;38269:6;38266:30;38263:56;;;38299:18;;:::i;:::-;38263:56;38349:4;38341:6;38337:17;38329:25;;38409:4;38403;38399:15;38391:23;;38110:311;;;:::o;38427:307::-;38488:4;38578:18;38570:6;38567:30;38564:56;;;38600:18;;:::i;:::-;38564:56;38638:29;38660:6;38638:29;:::i;:::-;38630:37;;38722:4;38716;38712:15;38704:23;;38427:307;;;:::o;38740:308::-;38802:4;38892:18;38884:6;38881:30;38878:56;;;38914:18;;:::i;:::-;38878:56;38952:29;38974:6;38952:29;:::i;:::-;38944:37;;39036:4;39030;39026:15;39018:23;;38740:308;;;:::o;39054:132::-;39121:4;39144:3;39136:11;;39174:4;39169:3;39165:14;39157:22;;39054:132;;;:::o;39192:114::-;39259:6;39293:5;39287:12;39277:22;;39192:114;;;:::o;39312:98::-;39363:6;39397:5;39391:12;39381:22;;39312:98;;;:::o;39416:99::-;39468:6;39502:5;39496:12;39486:22;;39416:99;;;:::o;39521:113::-;39591:4;39623;39618:3;39614:14;39606:22;;39521:113;;;:::o;39640:184::-;39739:11;39773:6;39768:3;39761:19;39813:4;39808:3;39804:14;39789:29;;39640:184;;;;:::o;39830:168::-;39913:11;39947:6;39942:3;39935:19;39987:4;39982:3;39978:14;39963:29;;39830:168;;;;:::o;40004:169::-;40088:11;40122:6;40117:3;40110:19;40162:4;40157:3;40153:14;40138:29;;40004:169;;;;:::o;40179:148::-;40281:11;40318:3;40303:18;;40179:148;;;;:::o;40333:305::-;40373:3;40392:20;40410:1;40392:20;:::i;:::-;40387:25;;40426:20;40444:1;40426:20;:::i;:::-;40421:25;;40580:1;40512:66;40508:74;40505:1;40502:81;40499:107;;;40586:18;;:::i;:::-;40499:107;40630:1;40627;40623:9;40616:16;;40333:305;;;;:::o;40644:246::-;40683:3;40702:19;40719:1;40702:19;:::i;:::-;40697:24;;40735:19;40752:1;40735:19;:::i;:::-;40730:24;;40832:1;40820:10;40816:18;40813:1;40810:25;40807:51;;;40838:18;;:::i;:::-;40807:51;40882:1;40879;40875:9;40868:16;;40644:246;;;;:::o;40896:185::-;40936:1;40953:20;40971:1;40953:20;:::i;:::-;40948:25;;40987:20;41005:1;40987:20;:::i;:::-;40982:25;;41026:1;41016:35;;41031:18;;:::i;:::-;41016:35;41073:1;41070;41066:9;41061:14;;40896:185;;;;:::o;41087:348::-;41127:7;41150:20;41168:1;41150:20;:::i;:::-;41145:25;;41184:20;41202:1;41184:20;:::i;:::-;41179:25;;41372:1;41304:66;41300:74;41297:1;41294:81;41289:1;41282:9;41275:17;41271:105;41268:131;;;41379:18;;:::i;:::-;41268:131;41427:1;41424;41420:9;41409:20;;41087:348;;;;:::o;41441:191::-;41481:4;41501:20;41519:1;41501:20;:::i;:::-;41496:25;;41535:20;41553:1;41535:20;:::i;:::-;41530:25;;41574:1;41571;41568:8;41565:34;;;41579:18;;:::i;:::-;41565:34;41624:1;41621;41617:9;41609:17;;41441:191;;;;:::o;41638:96::-;41675:7;41704:24;41722:5;41704:24;:::i;:::-;41693:35;;41638:96;;;:::o;41740:90::-;41774:7;41817:5;41810:13;41803:21;41792:32;;41740:90;;;:::o;41836:77::-;41873:7;41902:5;41891:16;;41836:77;;;:::o;41919:149::-;41955:7;41995:66;41988:5;41984:78;41973:89;;41919:149;;;:::o;42074:126::-;42111:7;42151:42;42144:5;42140:54;42129:65;;42074:126;;;:::o;42206:77::-;42243:7;42272:5;42261:16;;42206:77;;;:::o;42289:93::-;42325:7;42365:10;42358:5;42354:22;42343:33;;42289:93;;;:::o;42388:86::-;42423:7;42463:4;42456:5;42452:16;42441:27;;42388:86;;;:::o;42480:154::-;42564:6;42559:3;42554;42541:30;42626:1;42617:6;42612:3;42608:16;42601:27;42480:154;;;:::o;42640:307::-;42708:1;42718:113;42732:6;42729:1;42726:13;42718:113;;;42817:1;42812:3;42808:11;42802:18;42798:1;42793:3;42789:11;42782:39;42754:2;42751:1;42747:10;42742:15;;42718:113;;;42849:6;42846:1;42843:13;42840:101;;;42929:1;42920:6;42915:3;42911:16;42904:27;42840:101;42689:258;42640:307;;;:::o;42953:320::-;42997:6;43034:1;43028:4;43024:12;43014:22;;43081:1;43075:4;43071:12;43102:18;43092:81;;43158:4;43150:6;43146:17;43136:27;;43092:81;43220:2;43212:6;43209:14;43189:18;43186:38;43183:84;;;43239:18;;:::i;:::-;43183:84;43004:269;42953:320;;;:::o;43279:281::-;43362:27;43384:4;43362:27;:::i;:::-;43354:6;43350:40;43492:6;43480:10;43477:22;43456:18;43444:10;43441:34;43438:62;43435:88;;;43503:18;;:::i;:::-;43435:88;43543:10;43539:2;43532:22;43322:238;43279:281;;:::o;43566:233::-;43605:3;43628:24;43646:5;43628:24;:::i;:::-;43619:33;;43674:66;43667:5;43664:77;43661:103;;;43744:18;;:::i;:::-;43661:103;43791:1;43784:5;43780:13;43773:20;;43566:233;;;:::o;43805:175::-;43843:3;43866:23;43883:5;43866:23;:::i;:::-;43857:32;;43911:10;43904:5;43901:21;43898:47;;;43925:18;;:::i;:::-;43898:47;43972:1;43965:5;43961:13;43954:20;;43805:175;;;:::o;43986:100::-;44025:7;44054:26;44074:5;44054:26;:::i;:::-;44043:37;;43986:100;;;:::o;44092:79::-;44131:7;44160:5;44149:16;;44092:79;;;:::o;44177:94::-;44216:7;44245:20;44259:5;44245:20;:::i;:::-;44234:31;;44177:94;;;:::o;44277:180::-;44325:77;44322:1;44315:88;44422:4;44419:1;44412:15;44446:4;44443:1;44436:15;44463:180;44511:77;44508:1;44501:88;44608:4;44605:1;44598:15;44632:4;44629:1;44622:15;44649:180;44697:77;44694:1;44687:88;44794:4;44791:1;44784:15;44818:4;44815:1;44808:15;44835:180;44883:77;44880:1;44873:88;44980:4;44977:1;44970:15;45004:4;45001:1;44994:15;45021:180;45069:77;45066:1;45059:88;45166:4;45163:1;45156:15;45190:4;45187:1;45180:15;45207:183;45242:3;45280:1;45262:16;45259:23;45256:128;;;45318:1;45315;45312;45297:23;45340:34;45371:1;45365:8;45340:34;:::i;:::-;45333:41;;45256:128;45207:183;:::o;45396:117::-;45505:1;45502;45495:12;45519:117;45628:1;45625;45618:12;45642:117;45751:1;45748;45741:12;45765:117;45874:1;45871;45864:12;45888:117;45997:1;45994;45987:12;46011:102;46052:6;46103:2;46099:7;46094:2;46087:5;46083:14;46079:28;46069:38;;46011:102;;;:::o;46119:94::-;46152:8;46200:5;46196:2;46192:14;46171:35;;46119:94;;;:::o;46219:106::-;46263:8;46312:5;46307:3;46303:15;46282:36;;46219:106;;;:::o;46331:239::-;46471:34;46467:1;46459:6;46455:14;46448:58;46540:22;46535:2;46527:6;46523:15;46516:47;46331:239;:::o;46576:227::-;46716:34;46712:1;46704:6;46700:14;46693:58;46785:10;46780:2;46772:6;46768:15;46761:35;46576:227;:::o;46809:214::-;46949:66;46945:1;46937:6;46933:14;46926:90;46809:214;:::o;47029:230::-;47169:34;47165:1;47157:6;47153:14;47146:58;47238:13;47233:2;47225:6;47221:15;47214:38;47029:230;:::o;47265:225::-;47405:34;47401:1;47393:6;47389:14;47382:58;47474:8;47469:2;47461:6;47457:15;47450:33;47265:225;:::o;47496:228::-;47636:34;47632:1;47624:6;47620:14;47613:58;47705:11;47700:2;47692:6;47688:15;47681:36;47496:228;:::o;47730:176::-;47870:28;47866:1;47858:6;47854:14;47847:52;47730:176;:::o;47912:179::-;48052:31;48048:1;48040:6;48036:14;48029:55;47912:179;:::o;48097:167::-;48237:19;48233:1;48225:6;48221:14;48214:43;48097:167;:::o;48270:224::-;48410:34;48406:1;48398:6;48394:14;48387:58;48479:7;48474:2;48466:6;48462:15;48455:32;48270:224;:::o;48500:237::-;48640:34;48636:1;48628:6;48624:14;48617:58;48709:20;48704:2;48696:6;48692:15;48685:45;48500:237;:::o;48743:173::-;48883:25;48879:1;48871:6;48867:14;48860:49;48743:173;:::o;48922:229::-;49062:34;49058:1;49050:6;49046:14;49039:58;49131:12;49126:2;49118:6;49114:15;49107:37;48922:229;:::o;49157:228::-;49297:34;49293:1;49285:6;49281:14;49274:58;49366:11;49361:2;49353:6;49349:15;49342:36;49157:228;:::o;49391:182::-;49531:34;49527:1;49519:6;49515:14;49508:58;49391:182;:::o;49579:166::-;49719:18;49715:1;49707:6;49703:14;49696:42;49579:166;:::o;49751:228::-;49891:34;49887:1;49879:6;49875:14;49868:58;49960:11;49955:2;49947:6;49943:15;49936:36;49751:228;:::o;49985:::-;50125:34;50121:1;50113:6;50109:14;50102:58;50194:11;50189:2;50181:6;50177:15;50170:36;49985:228;:::o;50219:227::-;50359:34;50355:1;50347:6;50343:14;50336:58;50428:10;50423:2;50415:6;50411:15;50404:35;50219:227;:::o;50452:220::-;50592:34;50588:1;50580:6;50576:14;50569:58;50661:3;50656:2;50648:6;50644:15;50637:28;50452:220;:::o;50678:711::-;50717:3;50755:4;50737:16;50734:26;50731:39;;;50763:5;;50731:39;50792:20;;:::i;:::-;50867:1;50849:16;50845:24;50842:1;50836:4;50821:49;50900:4;50894:11;50999:16;50992:4;50984:6;50980:17;50977:39;50944:18;50936:6;50933:30;50917:113;50914:146;;;51045:5;;;;50914:146;51091:6;51085:4;51081:17;51127:3;51121:10;51154:18;51146:6;51143:30;51140:43;;;51176:5;;;;;;51140:43;51224:6;51217:4;51212:3;51208:14;51204:27;51283:1;51265:16;51261:24;51255:4;51251:35;51246:3;51243:44;51240:57;;;51290:5;;;;;;;51240:57;51307;51355:6;51349:4;51345:17;51337:6;51333:30;51327:4;51307:57;:::i;:::-;51380:3;51373:10;;50721:668;;;;;50678:711;;:::o;51395:122::-;51468:24;51486:5;51468:24;:::i;:::-;51461:5;51458:35;51448:63;;51507:1;51504;51497:12;51448:63;51395:122;:::o;51523:116::-;51593:21;51608:5;51593:21;:::i;:::-;51586:5;51583:32;51573:60;;51629:1;51626;51619:12;51573:60;51523:116;:::o;51645:122::-;51718:24;51736:5;51718:24;:::i;:::-;51711:5;51708:35;51698:63;;51757:1;51754;51747:12;51698:63;51645:122;:::o;51773:120::-;51845:23;51862:5;51845:23;:::i;:::-;51838:5;51835:34;51825:62;;51883:1;51880;51873:12;51825:62;51773:120;:::o;51899:122::-;51972:24;51990:5;51972:24;:::i;:::-;51965:5;51962:35;51952:63;;52011:1;52008;52001:12;51952:63;51899:122;:::o;52027:120::-;52099:23;52116:5;52099:23;:::i;:::-;52092:5;52089:34;52079:62;;52137:1;52134;52127:12;52079:62;52027:120;:::o;52153:118::-;52224:22;52240:5;52224:22;:::i;:::-;52217:5;52214:33;52204:61;;52261:1;52258;52251:12;52204:61;52153:118;:::o
Swarm Source
ipfs://f201ce97c81faa7cfc86078d6b9f46b44cc373ce7505c6612fbcbb01376ef524
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.