Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
NFT
Overview
Max Total Supply
807 ANTI
Holders
260
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:
CornyJuice
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-15 */ pragma solidity 0.8.16; // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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); } // OpenZeppelin Contracts v4.4.1 (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; } // OpenZeppelin Contracts (last updated v4.5.0) (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. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (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); } // OpenZeppelin Contracts (last updated v4.5.0) (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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (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; } } // OpenZeppelin Contracts v4.4.1 (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; } } // OpenZeppelin Contracts (last updated v4.6.0) (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 { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract CornyJuice is Ownable, ERC1155 { using Strings for uint256; string public baseURI; address public cornyJuiceOperator; address public burnerOperator; event BaseURI(string baseUri); string public constant name = "Corny Juice"; string public constant symbol = "ANTI"; constructor(address treasury, uint256 initialSupply) ERC1155("") { _mint(treasury, 0, initialSupply, ""); } modifier onlyCornyJuiceOperator() { require(msg.sender == cornyJuiceOperator, "onlyCornyJuiceOperator"); _; } modifier onlyBurnerOperator() { require(msg.sender == burnerOperator, "onlyBurnerOperator"); _; } function setBaseURI(string memory _baseUri) external onlyOwner { baseURI = _baseUri; } function uri(uint256 tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(baseURI, tokenId.toString())); } function mint( address initialOwner, uint256 tokenId, uint256 amount, bytes memory data ) external onlyCornyJuiceOperator { _mint(initialOwner, tokenId, amount, data); } function burn( address from, uint256 tokenId, uint256 amount ) external onlyBurnerOperator { _burn(from, tokenId, amount); } function burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) external onlyBurnerOperator { _burnBatch(from, ids, amounts); } /// @notice Set the address for the corntract1155Operator /// @param _cornyJuiceOperator: address of the corntract1155Operator /// @param _burnerOperator: address of the burner contract that can burn tokens on user behalf function setOperators(address _cornyJuiceOperator, address _burnerOperator) external onlyOwner { cornyJuiceOperator = _cornyJuiceOperator; burnerOperator = _burnerOperator; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"treasury","type":"address"},{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"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":false,"internalType":"string","name":"baseUri","type":"string"}],"name":"BaseURI","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnerOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cornyJuiceOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cornyJuiceOperator","type":"address"},{"internalType":"address","name":"_burnerOperator","type":"address"}],"name":"setOperators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200510c3803806200510c8339818101604052810190620000379190620006ca565b60405180602001604052806000815250620000676200005b620000a560201b60201c565b620000ad60201b60201c565b62000078816200017160201b60201c565b506200009d82600083604051806020016040528060008152506200018660201b60201c565b50506200101e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806003908162000182919062000981565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620001f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ef9062000aef565b60405180910390fd5b60006200020a620000a560201b60201c565b905060006200021f856200036e60201b60201c565b9050600062000234856200036e60201b60201c565b90506200024d83600089858589620003ef60201b60201c565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002af919062000b40565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516200032f92919062000b8c565b60405180910390a46200034e83600089858589620003f760201b60201c565b6200036583600089898989620003ff60201b60201c565b50505050505050565b60606000600167ffffffffffffffff81111562000390576200038f6200071c565b5b604051908082528060200260200182016040528015620003bf5781602001602082028036833780820191505090505b5090508281600081518110620003da57620003d962000bb9565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b6200042b8473ffffffffffffffffffffffffffffffffffffffff16620005f860201b62000f301760201c565b15620005f0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200047495949392919062000c93565b6020604051808303816000875af1925050508015620004b357506040513d601f19601f82011682018060405250810190620004b0919062000d54565b60015b6200056457620004c262000d93565b806308c379a003620005255750620004d962000dee565b80620004e6575062000527565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051c919062000eca565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055b9062000f64565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620005ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e59062000ffc565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000657826200062a565b9050919050565b62000669816200064a565b81146200067557600080fd5b50565b60008151905062000689816200065e565b92915050565b6000819050919050565b620006a4816200068f565b8114620006b057600080fd5b50565b600081519050620006c48162000699565b92915050565b60008060408385031215620006e457620006e362000625565b5b6000620006f48582860162000678565b92505060206200070785828601620006b3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079357607f821691505b602082108103620007a957620007a86200074b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007d4565b6200081f8683620007d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008626200085c62000856846200068f565b62000837565b6200068f565b9050919050565b6000819050919050565b6200087e8362000841565b620008966200088d8262000869565b848454620007e1565b825550505050565b600090565b620008ad6200089e565b620008ba81848462000873565b505050565b5b81811015620008e257620008d6600082620008a3565b600181019050620008c0565b5050565b601f8211156200093157620008fb81620007af565b6200090684620007c4565b8101602085101562000916578190505b6200092e6200092585620007c4565b830182620008bf565b50505b505050565b600082821c905092915050565b6000620009566000198460080262000936565b1980831691505092915050565b600062000971838362000943565b9150826002028217905092915050565b6200098c8262000711565b67ffffffffffffffff811115620009a857620009a76200071c565b5b620009b482546200077a565b620009c1828285620008e6565b600060209050601f831160018114620009f95760008415620009e4578287015190505b620009f0858262000963565b86555062000a60565b601f19841662000a0986620007af565b60005b8281101562000a335784890151825560018201915060208501945060208101905062000a0c565b8683101562000a53578489015162000a4f601f89168262000943565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ad760218362000a68565b915062000ae48262000a79565b604082019050919050565b6000602082019050818103600083015262000b0a8162000ac8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b4d826200068f565b915062000b5a836200068f565b925082820190508082111562000b755762000b7462000b11565b5b92915050565b62000b86816200068f565b82525050565b600060408201905062000ba3600083018562000b7b565b62000bb2602083018462000b7b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b62000bf3816200064a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000c3557808201518184015260208101905062000c18565b60008484015250505050565b6000601f19601f8301169050919050565b600062000c5f8262000bf9565b62000c6b818562000c04565b935062000c7d81856020860162000c15565b62000c888162000c41565b840191505092915050565b600060a08201905062000caa600083018862000be8565b62000cb9602083018762000be8565b62000cc8604083018662000b7b565b62000cd7606083018562000b7b565b818103608083015262000ceb818462000c52565b90509695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000d2e8162000cf7565b811462000d3a57600080fd5b50565b60008151905062000d4e8162000d23565b92915050565b60006020828403121562000d6d5762000d6c62000625565b5b600062000d7d8482850162000d3d565b91505092915050565b60008160e01c9050919050565b600060033d111562000db55760046000803e62000db260005162000d86565b90505b90565b62000dc38262000c41565b810181811067ffffffffffffffff8211171562000de55762000de46200071c565b5b80604052505050565b600060443d1062000e865762000e036200061b565b60043d036004823e80513d602482011167ffffffffffffffff8211171562000e2d57505062000e86565b808201805167ffffffffffffffff81111562000e4d575050505062000e86565b80602083010160043d03850181111562000e6c57505050505062000e86565b62000e7d8260200185018662000db8565b82955050505050505b90565b600062000e968262000711565b62000ea2818562000a68565b935062000eb481856020860162000c15565b62000ebf8162000c41565b840191505092915050565b6000602082019050818103600083015262000ee6818462000e89565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600062000f4c60348362000a68565b915062000f598262000eee565b604082019050919050565b6000602082019050818103600083015262000f7f8162000f3d565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600062000fe460288362000a68565b915062000ff18262000f86565b604082019050919050565b60006020820190508181036000830152620010178162000fd5565b9050919050565b6140de806200102e6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063731133e9116100b8578063dfa571f71161007c578063dfa571f714610327578063e2de54b114610343578063e985e9c514610361578063f242432a14610391578063f2fde38b146103ad578063f5298aca146103c957610136565b8063731133e91461029557806376f41cd2146102b15780638da5cb5b146102cf57806395d89b41146102ed578063a22cb4651461030b57610136565b80634e1273f4116100ff5780634e1273f41461020557806355f804b3146102355780636b20c454146102515780636c0360eb1461026d578063715018a61461028b57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b95780632eb2c2d6146101e9575b600080fd5b610155600480360381019061015091906124c0565b6103e5565b604051610162919061250f565b60405180910390f35b61018560048036038101906101809190612582565b6104ae565b60405161019291906125ca565b60405180910390f35b6101a3610590565b6040516101b09190612675565b60405180910390f35b6101d360048036038101906101ce9190612697565b6105c9565b6040516101e09190612675565b60405180910390f35b61020360048036038101906101fe91906128c1565b6105fd565b005b61021f600480360381019061021a9190612a53565b61069e565b60405161022c9190612b89565b60405180910390f35b61024f600480360381019061024a9190612c4c565b6107b7565b005b61026b60048036038101906102669190612c95565b610846565b005b6102756108e6565b6040516102829190612675565b60405180910390f35b610293610974565b005b6102af60048036038101906102aa9190612d20565b6109fc565b005b6102b9610a9e565b6040516102c69190612db2565b60405180910390f35b6102d7610ac4565b6040516102e49190612db2565b60405180910390f35b6102f5610aed565b6040516103029190612675565b60405180910390f35b61032560048036038101906103209190612df9565b610b26565b005b610341600480360381019061033c9190612e39565b610b3c565b005b61034b610c3e565b6040516103589190612db2565b60405180910390f35b61037b60048036038101906103769190612e39565b610c64565b60405161038891906125ca565b60405180910390f35b6103ab60048036038101906103a69190612e79565b610cf8565b005b6103c760048036038101906103c29190612f10565b610d99565b005b6103e360048036038101906103de9190612f3d565b610e90565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044c90613002565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610589575061058882610f53565b5b9050919050565b6040518060400160405280600b81526020017f436f726e79204a7569636500000000000000000000000000000000000000000081525081565b606060046105d683610fbd565b6040516020016105e7929190613156565b6040516020818303038152906040529050919050565b61060561111d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061064b575061064a8561064561111d565b610c64565b5b61068a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610681906131ec565b60405180910390fd5b6106978585858585611125565b5050505050565b606081518351146106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db9061327e565b60405180910390fd5b6000835167ffffffffffffffff811115610701576107006126c9565b5b60405190808252806020026020018201604052801561072f5781602001602082028036833780820191505090505b50905060005b84518110156107ac5761077c8582815181106107545761075361329e565b5b602002602001015185838151811061076f5761076e61329e565b5b60200260200101516103e5565b82828151811061078f5761078e61329e565b5b602002602001018181525050806107a5906132fc565b9050610735565b508091505092915050565b6107bf61111d565b73ffffffffffffffffffffffffffffffffffffffff166107dd610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90613390565b60405180910390fd5b80600490816108429190613547565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90613665565b60405180910390fd5b6108e1838383611449565b505050565b600480546108f390613051565b80601f016020809104026020016040519081016040528092919081815260200182805461091f90613051565b801561096c5780601f106109415761010080835404028352916020019161096c565b820191906000526020600020905b81548152906001019060200180831161094f57829003601f168201915b505050505081565b61097c61111d565b73ffffffffffffffffffffffffffffffffffffffff1661099a610ac4565b73ffffffffffffffffffffffffffffffffffffffff16146109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e790613390565b60405180910390fd5b6109fa6000611719565b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906136d1565b60405180910390fd5b610a98848484846117dd565b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f414e54490000000000000000000000000000000000000000000000000000000081525081565b610b38610b3161111d565b838361198e565b5050565b610b4461111d565b73ffffffffffffffffffffffffffffffffffffffff16610b62610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90613390565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d0061111d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d465750610d4585610d4061111d565b610c64565b5b610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613763565b60405180910390fd5b610d928585858585611afa565b5050505050565b610da161111d565b73ffffffffffffffffffffffffffffffffffffffff16610dbf610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90613390565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906137f5565b60405180910390fd5b610e8d81611719565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613665565b60405180910390fd5b610f2b838383611d98565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008203611004576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611118565b600082905060005b6000821461103657808061101f906132fc565b915050600a8261102f9190613844565b915061100c565b60008167ffffffffffffffff811115611052576110516126c9565b5b6040519080825280601f01601f1916602001820160405280156110845781602001600182028036833780820191505090505b5090505b600085146111115760018261109d9190613875565b9150600a856110ac91906138a9565b60306110b891906138da565b60f81b8183815181106110ce576110cd61329e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561110a9190613844565b9450611088565b8093505050505b919050565b600033905090565b8151835114611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090613980565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613a12565b60405180910390fd5b60006111e261111d565b90506111f2818787878787611fe0565b60005b84518110156113a65760008582815181106112135761121261329e565b5b6020026020010151905060008583815181106112325761123161329e565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613aa4565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138b91906138da565b925050819055505050508061139f906132fc565b90506111f5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161141d929190613ac4565b60405180910390a4611433818787878787611fe8565b611441818787878787611ff0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613b6d565b60405180910390fd5b80518251146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613980565b60405180910390fd5b600061150661111d565b905061152681856000868660405180602001604052806000815250611fe0565b60005b83518110156116755760008482815181106115475761154661329e565b5b6020026020010151905060008483815181106115665761156561329e565b5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613bff565b60405180910390fd5b8181036001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061166d906132fc565b915050611529565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516116ed929190613ac4565b60405180910390a461171381856000868660405180602001604052806000815250611fe8565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613c91565b60405180910390fd5b600061185661111d565b90506000611863856121c7565b90506000611870856121c7565b905061188183600089858589611fe0565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e191906138da565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161195f929190613cb1565b60405180910390a461197683600089858589611fe8565b61198583600089898989612241565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613d4c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aed91906125ca565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090613a12565b60405180910390fd5b6000611b7361111d565b90506000611b80856121c7565b90506000611b8d856121c7565b9050611b9d838989858589611fe0565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613aa4565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cec91906138da565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611d69929190613cb1565b60405180910390a4611d7f848a8a86868a611fe8565b611d8d848a8a8a8a8a612241565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90613b6d565b60405180910390fd5b6000611e1161111d565b90506000611e1e846121c7565b90506000611e2b846121c7565b9050611e4b83876000858560405180602001604052806000815250611fe0565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613bff565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fb1929190613cb1565b60405180910390a4611fd784886000868660405180602001604052806000815250611fe8565b50505050505050565b505050505050565b505050505050565b61200f8473ffffffffffffffffffffffffffffffffffffffff16610f30565b156121bf578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612055959493929190613dc1565b6020604051808303816000875af192505050801561209157506040513d601f19601f8201168201806040525081019061208e9190613e3e565b60015b6121365761209d613e78565b806308c379a0036120f957506120b1613e9a565b806120bc57506120fb565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f09190612675565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90613f9c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061402e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156121e6576121e56126c9565b5b6040519080825280602002602001820160405280156122145781602001602082028036833780820191505090505b509050828160008151811061222c5761222b61329e565b5b60200260200101818152505080915050919050565b6122608473ffffffffffffffffffffffffffffffffffffffff16610f30565b15612410578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122a695949392919061404e565b6020604051808303816000875af19250505080156122e257506040513d601f19601f820116820180604052508101906122df9190613e3e565b60015b612387576122ee613e78565b806308c379a00361234a5750612302613e9a565b8061230d575061234c565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123419190612675565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90613f9c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461240e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124059061402e565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124578261242c565b9050919050565b6124678161244c565b811461247257600080fd5b50565b6000813590506124848161245e565b92915050565b6000819050919050565b61249d8161248a565b81146124a857600080fd5b50565b6000813590506124ba81612494565b92915050565b600080604083850312156124d7576124d6612422565b5b60006124e585828601612475565b92505060206124f6858286016124ab565b9150509250929050565b6125098161248a565b82525050565b60006020820190506125246000830184612500565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61255f8161252a565b811461256a57600080fd5b50565b60008135905061257c81612556565b92915050565b60006020828403121561259857612597612422565b5b60006125a68482850161256d565b91505092915050565b60008115159050919050565b6125c4816125af565b82525050565b60006020820190506125df60008301846125bb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561261f578082015181840152602081019050612604565b60008484015250505050565b6000601f19601f8301169050919050565b6000612647826125e5565b61265181856125f0565b9350612661818560208601612601565b61266a8161262b565b840191505092915050565b6000602082019050818103600083015261268f818461263c565b905092915050565b6000602082840312156126ad576126ac612422565b5b60006126bb848285016124ab565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127018261262b565b810181811067ffffffffffffffff821117156127205761271f6126c9565b5b80604052505050565b6000612733612418565b905061273f82826126f8565b919050565b600067ffffffffffffffff82111561275f5761275e6126c9565b5b602082029050602081019050919050565b600080fd5b600061278861278384612744565b612729565b905080838252602082019050602084028301858111156127ab576127aa612770565b5b835b818110156127d457806127c088826124ab565b8452602084019350506020810190506127ad565b5050509392505050565b600082601f8301126127f3576127f26126c4565b5b8135612803848260208601612775565b91505092915050565b600080fd5b600067ffffffffffffffff82111561282c5761282b6126c9565b5b6128358261262b565b9050602081019050919050565b82818337600083830152505050565b600061286461285f84612811565b612729565b9050828152602081018484840111156128805761287f61280c565b5b61288b848285612842565b509392505050565b600082601f8301126128a8576128a76126c4565b5b81356128b8848260208601612851565b91505092915050565b600080600080600060a086880312156128dd576128dc612422565b5b60006128eb88828901612475565b95505060206128fc88828901612475565b945050604086013567ffffffffffffffff81111561291d5761291c612427565b5b612929888289016127de565b935050606086013567ffffffffffffffff81111561294a57612949612427565b5b612956888289016127de565b925050608086013567ffffffffffffffff81111561297757612976612427565b5b61298388828901612893565b9150509295509295909350565b600067ffffffffffffffff8211156129ab576129aa6126c9565b5b602082029050602081019050919050565b60006129cf6129ca84612990565b612729565b905080838252602082019050602084028301858111156129f2576129f1612770565b5b835b81811015612a1b5780612a078882612475565b8452602084019350506020810190506129f4565b5050509392505050565b600082601f830112612a3a57612a396126c4565b5b8135612a4a8482602086016129bc565b91505092915050565b60008060408385031215612a6a57612a69612422565b5b600083013567ffffffffffffffff811115612a8857612a87612427565b5b612a9485828601612a25565b925050602083013567ffffffffffffffff811115612ab557612ab4612427565b5b612ac1858286016127de565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b008161248a565b82525050565b6000612b128383612af7565b60208301905092915050565b6000602082019050919050565b6000612b3682612acb565b612b408185612ad6565b9350612b4b83612ae7565b8060005b83811015612b7c578151612b638882612b06565b9750612b6e83612b1e565b925050600181019050612b4f565b5085935050505092915050565b60006020820190508181036000830152612ba38184612b2b565b905092915050565b600067ffffffffffffffff821115612bc657612bc56126c9565b5b612bcf8261262b565b9050602081019050919050565b6000612bef612bea84612bab565b612729565b905082815260208101848484011115612c0b57612c0a61280c565b5b612c16848285612842565b509392505050565b600082601f830112612c3357612c326126c4565b5b8135612c43848260208601612bdc565b91505092915050565b600060208284031215612c6257612c61612422565b5b600082013567ffffffffffffffff811115612c8057612c7f612427565b5b612c8c84828501612c1e565b91505092915050565b600080600060608486031215612cae57612cad612422565b5b6000612cbc86828701612475565b935050602084013567ffffffffffffffff811115612cdd57612cdc612427565b5b612ce9868287016127de565b925050604084013567ffffffffffffffff811115612d0a57612d09612427565b5b612d16868287016127de565b9150509250925092565b60008060008060808587031215612d3a57612d39612422565b5b6000612d4887828801612475565b9450506020612d59878288016124ab565b9350506040612d6a878288016124ab565b925050606085013567ffffffffffffffff811115612d8b57612d8a612427565b5b612d9787828801612893565b91505092959194509250565b612dac8161244c565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b612dd6816125af565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b60008060408385031215612e1057612e0f612422565b5b6000612e1e85828601612475565b9250506020612e2f85828601612de4565b9150509250929050565b60008060408385031215612e5057612e4f612422565b5b6000612e5e85828601612475565b9250506020612e6f85828601612475565b9150509250929050565b600080600080600060a08688031215612e9557612e94612422565b5b6000612ea388828901612475565b9550506020612eb488828901612475565b9450506040612ec5888289016124ab565b9350506060612ed6888289016124ab565b925050608086013567ffffffffffffffff811115612ef757612ef6612427565b5b612f0388828901612893565b9150509295509295909350565b600060208284031215612f2657612f25612422565b5b6000612f3484828501612475565b91505092915050565b600080600060608486031215612f5657612f55612422565b5b6000612f6486828701612475565b9350506020612f75868287016124ab565b9250506040612f86868287016124ab565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612fec602b836125f0565b9150612ff782612f90565b604082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306957607f821691505b60208210810361307c5761307b613022565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546130af81613051565b6130b98186613082565b945060018216600081146130d457600181146130e95761311c565b60ff198316865281151582028601935061311c565b6130f28561308d565b60005b83811015613114578154818901526001820191506020810190506130f5565b838801955050505b50505092915050565b6000613130826125e5565b61313a8185613082565b935061314a818560208601612601565b80840191505092915050565b600061316282856130a2565b915061316e8284613125565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006131d66032836125f0565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006132686029836125f0565b91506132738261320c565b604082019050919050565b600060208201905081810360008301526132978161325b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133078261248a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613339576133386132cd565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061337a6020836125f0565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133c0565b61340786836133c0565b95508019841693508086168417925050509392505050565b6000819050919050565b600061344461343f61343a8461248a565b61341f565b61248a565b9050919050565b6000819050919050565b61345e83613429565b61347261346a8261344b565b8484546133cd565b825550505050565b600090565b61348761347a565b613492818484613455565b505050565b5b818110156134b6576134ab60008261347f565b600181019050613498565b5050565b601f8211156134fb576134cc8161308d565b6134d5846133b0565b810160208510156134e4578190505b6134f86134f0856133b0565b830182613497565b50505b505050565b600082821c905092915050565b600061351e60001984600802613500565b1980831691505092915050565b6000613537838361350d565b9150826002028217905092915050565b613550826125e5565b67ffffffffffffffff811115613569576135686126c9565b5b6135738254613051565b61357e8282856134ba565b600060209050601f8311600181146135b1576000841561359f578287015190505b6135a9858261352b565b865550613611565b601f1984166135bf8661308d565b60005b828110156135e7578489015182556001820191506020850194506020810190506135c2565b868310156136045784890151613600601f89168261350d565b8355505b6001600288020188555050505b505050505050565b7f6f6e6c794275726e65724f70657261746f720000000000000000000000000000600082015250565b600061364f6012836125f0565b915061365a82613619565b602082019050919050565b6000602082019050818103600083015261367e81613642565b9050919050565b7f6f6e6c79436f726e794a756963654f70657261746f7200000000000000000000600082015250565b60006136bb6016836125f0565b91506136c682613685565b602082019050919050565b600060208201905081810360008301526136ea816136ae565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061374d6029836125f0565b9150613758826136f1565b604082019050919050565b6000602082019050818103600083015261377c81613740565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137df6026836125f0565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061384f8261248a565b915061385a8361248a565b92508261386a57613869613815565b5b828204905092915050565b60006138808261248a565b915061388b8361248a565b92508282039050818111156138a3576138a26132cd565b5b92915050565b60006138b48261248a565b91506138bf8361248a565b9250826138cf576138ce613815565b5b828206905092915050565b60006138e58261248a565b91506138f08361248a565b9250828201905080821115613908576139076132cd565b5b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061396a6028836125f0565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139fc6025836125f0565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613a8e602a836125f0565b9150613a9982613a32565b604082019050919050565b60006020820190508181036000830152613abd81613a81565b9050919050565b60006040820190508181036000830152613ade8185612b2b565b90508181036020830152613af28184612b2b565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b576023836125f0565b9150613b6282613afb565b604082019050919050565b60006020820190508181036000830152613b8681613b4a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613be96024836125f0565b9150613bf482613b8d565b604082019050919050565b60006020820190508181036000830152613c1881613bdc565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7b6021836125f0565b9150613c8682613c1f565b604082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b6000604082019050613cc66000830185612500565b613cd36020830184612500565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613d366029836125f0565b9150613d4182613cda565b604082019050919050565b60006020820190508181036000830152613d6581613d29565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d9382613d6c565b613d9d8185613d77565b9350613dad818560208601612601565b613db68161262b565b840191505092915050565b600060a082019050613dd66000830188612da3565b613de36020830187612da3565b8181036040830152613df58186612b2b565b90508181036060830152613e098185612b2b565b90508181036080830152613e1d8184613d88565b90509695505050505050565b600081519050613e3881612556565b92915050565b600060208284031215613e5457613e53612422565b5b6000613e6284828501613e29565b91505092915050565b60008160e01c9050919050565b600060033d1115613e975760046000803e613e94600051613e6b565b90505b90565b600060443d10613f2757613eac612418565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ed4575050613f27565b808201805167ffffffffffffffff811115613ef25750505050613f27565b80602083010160043d038501811115613f0f575050505050613f27565b613f1e826020018501866126f8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f866034836125f0565b9150613f9182613f2a565b604082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006140186028836125f0565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b600060a0820190506140636000830188612da3565b6140706020830187612da3565b61407d6040830186612500565b61408a6060830185612500565b818103608083015261409c8184613d88565b9050969550505050505056fea2646970667358221220623814179a1f72b2286c74e7e9a8caff139bef2e8956e7cb6db21a0a316873bb64736f6c63430008100033000000000000000000000000c0518f0ed94ad4c9ed579e156be47a43b97dbe1100000000000000000000000000000000000000000000000000000000000001fa
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063731133e9116100b8578063dfa571f71161007c578063dfa571f714610327578063e2de54b114610343578063e985e9c514610361578063f242432a14610391578063f2fde38b146103ad578063f5298aca146103c957610136565b8063731133e91461029557806376f41cd2146102b15780638da5cb5b146102cf57806395d89b41146102ed578063a22cb4651461030b57610136565b80634e1273f4116100ff5780634e1273f41461020557806355f804b3146102355780636b20c454146102515780636c0360eb1461026d578063715018a61461028b57610136565b8062fdd58e1461013b57806301ffc9a71461016b57806306fdde031461019b5780630e89341c146101b95780632eb2c2d6146101e9575b600080fd5b610155600480360381019061015091906124c0565b6103e5565b604051610162919061250f565b60405180910390f35b61018560048036038101906101809190612582565b6104ae565b60405161019291906125ca565b60405180910390f35b6101a3610590565b6040516101b09190612675565b60405180910390f35b6101d360048036038101906101ce9190612697565b6105c9565b6040516101e09190612675565b60405180910390f35b61020360048036038101906101fe91906128c1565b6105fd565b005b61021f600480360381019061021a9190612a53565b61069e565b60405161022c9190612b89565b60405180910390f35b61024f600480360381019061024a9190612c4c565b6107b7565b005b61026b60048036038101906102669190612c95565b610846565b005b6102756108e6565b6040516102829190612675565b60405180910390f35b610293610974565b005b6102af60048036038101906102aa9190612d20565b6109fc565b005b6102b9610a9e565b6040516102c69190612db2565b60405180910390f35b6102d7610ac4565b6040516102e49190612db2565b60405180910390f35b6102f5610aed565b6040516103029190612675565b60405180910390f35b61032560048036038101906103209190612df9565b610b26565b005b610341600480360381019061033c9190612e39565b610b3c565b005b61034b610c3e565b6040516103589190612db2565b60405180910390f35b61037b60048036038101906103769190612e39565b610c64565b60405161038891906125ca565b60405180910390f35b6103ab60048036038101906103a69190612e79565b610cf8565b005b6103c760048036038101906103c29190612f10565b610d99565b005b6103e360048036038101906103de9190612f3d565b610e90565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044c90613002565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610589575061058882610f53565b5b9050919050565b6040518060400160405280600b81526020017f436f726e79204a7569636500000000000000000000000000000000000000000081525081565b606060046105d683610fbd565b6040516020016105e7929190613156565b6040516020818303038152906040529050919050565b61060561111d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061064b575061064a8561064561111d565b610c64565b5b61068a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610681906131ec565b60405180910390fd5b6106978585858585611125565b5050505050565b606081518351146106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db9061327e565b60405180910390fd5b6000835167ffffffffffffffff811115610701576107006126c9565b5b60405190808252806020026020018201604052801561072f5781602001602082028036833780820191505090505b50905060005b84518110156107ac5761077c8582815181106107545761075361329e565b5b602002602001015185838151811061076f5761076e61329e565b5b60200260200101516103e5565b82828151811061078f5761078e61329e565b5b602002602001018181525050806107a5906132fc565b9050610735565b508091505092915050565b6107bf61111d565b73ffffffffffffffffffffffffffffffffffffffff166107dd610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90613390565b60405180910390fd5b80600490816108429190613547565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90613665565b60405180910390fd5b6108e1838383611449565b505050565b600480546108f390613051565b80601f016020809104026020016040519081016040528092919081815260200182805461091f90613051565b801561096c5780601f106109415761010080835404028352916020019161096c565b820191906000526020600020905b81548152906001019060200180831161094f57829003601f168201915b505050505081565b61097c61111d565b73ffffffffffffffffffffffffffffffffffffffff1661099a610ac4565b73ffffffffffffffffffffffffffffffffffffffff16146109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e790613390565b60405180910390fd5b6109fa6000611719565b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906136d1565b60405180910390fd5b610a98848484846117dd565b50505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f414e54490000000000000000000000000000000000000000000000000000000081525081565b610b38610b3161111d565b838361198e565b5050565b610b4461111d565b73ffffffffffffffffffffffffffffffffffffffff16610b62610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf90613390565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d0061111d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d465750610d4585610d4061111d565b610c64565b5b610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613763565b60405180910390fd5b610d928585858585611afa565b5050505050565b610da161111d565b73ffffffffffffffffffffffffffffffffffffffff16610dbf610ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90613390565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906137f5565b60405180910390fd5b610e8d81611719565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613665565b60405180910390fd5b610f2b838383611d98565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008203611004576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611118565b600082905060005b6000821461103657808061101f906132fc565b915050600a8261102f9190613844565b915061100c565b60008167ffffffffffffffff811115611052576110516126c9565b5b6040519080825280601f01601f1916602001820160405280156110845781602001600182028036833780820191505090505b5090505b600085146111115760018261109d9190613875565b9150600a856110ac91906138a9565b60306110b891906138da565b60f81b8183815181106110ce576110cd61329e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561110a9190613844565b9450611088565b8093505050505b919050565b600033905090565b8151835114611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090613980565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90613a12565b60405180910390fd5b60006111e261111d565b90506111f2818787878787611fe0565b60005b84518110156113a65760008582815181106112135761121261329e565b5b6020026020010151905060008583815181106112325761123161329e565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613aa4565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138b91906138da565b925050819055505050508061139f906132fc565b90506111f5565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161141d929190613ac4565b60405180910390a4611433818787878787611fe8565b611441818787878787611ff0565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90613b6d565b60405180910390fd5b80518251146114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613980565b60405180910390fd5b600061150661111d565b905061152681856000868660405180602001604052806000815250611fe0565b60005b83518110156116755760008482815181106115475761154661329e565b5b6020026020010151905060008483815181106115665761156561329e565b5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90613bff565b60405180910390fd5b8181036001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061166d906132fc565b915050611529565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516116ed929190613ac4565b60405180910390a461171381856000868660405180602001604052806000815250611fe8565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184390613c91565b60405180910390fd5b600061185661111d565b90506000611863856121c7565b90506000611870856121c7565b905061188183600089858589611fe0565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e191906138da565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161195f929190613cb1565b60405180910390a461197683600089858589611fe8565b61198583600089898989612241565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f390613d4c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aed91906125ca565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090613a12565b60405180910390fd5b6000611b7361111d565b90506000611b80856121c7565b90506000611b8d856121c7565b9050611b9d838989858589611fe0565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613aa4565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cec91906138da565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611d69929190613cb1565b60405180910390a4611d7f848a8a86868a611fe8565b611d8d848a8a8a8a8a612241565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe90613b6d565b60405180910390fd5b6000611e1161111d565b90506000611e1e846121c7565b90506000611e2b846121c7565b9050611e4b83876000858560405180602001604052806000815250611fe0565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613bff565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611fb1929190613cb1565b60405180910390a4611fd784886000868660405180602001604052806000815250611fe8565b50505050505050565b505050505050565b505050505050565b61200f8473ffffffffffffffffffffffffffffffffffffffff16610f30565b156121bf578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612055959493929190613dc1565b6020604051808303816000875af192505050801561209157506040513d601f19601f8201168201806040525081019061208e9190613e3e565b60015b6121365761209d613e78565b806308c379a0036120f957506120b1613e9a565b806120bc57506120fb565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f09190612675565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90613f9c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b49061402e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156121e6576121e56126c9565b5b6040519080825280602002602001820160405280156122145781602001602082028036833780820191505090505b509050828160008151811061222c5761222b61329e565b5b60200260200101818152505080915050919050565b6122608473ffffffffffffffffffffffffffffffffffffffff16610f30565b15612410578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016122a695949392919061404e565b6020604051808303816000875af19250505080156122e257506040513d601f19601f820116820180604052508101906122df9190613e3e565b60015b612387576122ee613e78565b806308c379a00361234a5750612302613e9a565b8061230d575061234c565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123419190612675565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e90613f9c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461240e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124059061402e565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124578261242c565b9050919050565b6124678161244c565b811461247257600080fd5b50565b6000813590506124848161245e565b92915050565b6000819050919050565b61249d8161248a565b81146124a857600080fd5b50565b6000813590506124ba81612494565b92915050565b600080604083850312156124d7576124d6612422565b5b60006124e585828601612475565b92505060206124f6858286016124ab565b9150509250929050565b6125098161248a565b82525050565b60006020820190506125246000830184612500565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61255f8161252a565b811461256a57600080fd5b50565b60008135905061257c81612556565b92915050565b60006020828403121561259857612597612422565b5b60006125a68482850161256d565b91505092915050565b60008115159050919050565b6125c4816125af565b82525050565b60006020820190506125df60008301846125bb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561261f578082015181840152602081019050612604565b60008484015250505050565b6000601f19601f8301169050919050565b6000612647826125e5565b61265181856125f0565b9350612661818560208601612601565b61266a8161262b565b840191505092915050565b6000602082019050818103600083015261268f818461263c565b905092915050565b6000602082840312156126ad576126ac612422565b5b60006126bb848285016124ab565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127018261262b565b810181811067ffffffffffffffff821117156127205761271f6126c9565b5b80604052505050565b6000612733612418565b905061273f82826126f8565b919050565b600067ffffffffffffffff82111561275f5761275e6126c9565b5b602082029050602081019050919050565b600080fd5b600061278861278384612744565b612729565b905080838252602082019050602084028301858111156127ab576127aa612770565b5b835b818110156127d457806127c088826124ab565b8452602084019350506020810190506127ad565b5050509392505050565b600082601f8301126127f3576127f26126c4565b5b8135612803848260208601612775565b91505092915050565b600080fd5b600067ffffffffffffffff82111561282c5761282b6126c9565b5b6128358261262b565b9050602081019050919050565b82818337600083830152505050565b600061286461285f84612811565b612729565b9050828152602081018484840111156128805761287f61280c565b5b61288b848285612842565b509392505050565b600082601f8301126128a8576128a76126c4565b5b81356128b8848260208601612851565b91505092915050565b600080600080600060a086880312156128dd576128dc612422565b5b60006128eb88828901612475565b95505060206128fc88828901612475565b945050604086013567ffffffffffffffff81111561291d5761291c612427565b5b612929888289016127de565b935050606086013567ffffffffffffffff81111561294a57612949612427565b5b612956888289016127de565b925050608086013567ffffffffffffffff81111561297757612976612427565b5b61298388828901612893565b9150509295509295909350565b600067ffffffffffffffff8211156129ab576129aa6126c9565b5b602082029050602081019050919050565b60006129cf6129ca84612990565b612729565b905080838252602082019050602084028301858111156129f2576129f1612770565b5b835b81811015612a1b5780612a078882612475565b8452602084019350506020810190506129f4565b5050509392505050565b600082601f830112612a3a57612a396126c4565b5b8135612a4a8482602086016129bc565b91505092915050565b60008060408385031215612a6a57612a69612422565b5b600083013567ffffffffffffffff811115612a8857612a87612427565b5b612a9485828601612a25565b925050602083013567ffffffffffffffff811115612ab557612ab4612427565b5b612ac1858286016127de565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b008161248a565b82525050565b6000612b128383612af7565b60208301905092915050565b6000602082019050919050565b6000612b3682612acb565b612b408185612ad6565b9350612b4b83612ae7565b8060005b83811015612b7c578151612b638882612b06565b9750612b6e83612b1e565b925050600181019050612b4f565b5085935050505092915050565b60006020820190508181036000830152612ba38184612b2b565b905092915050565b600067ffffffffffffffff821115612bc657612bc56126c9565b5b612bcf8261262b565b9050602081019050919050565b6000612bef612bea84612bab565b612729565b905082815260208101848484011115612c0b57612c0a61280c565b5b612c16848285612842565b509392505050565b600082601f830112612c3357612c326126c4565b5b8135612c43848260208601612bdc565b91505092915050565b600060208284031215612c6257612c61612422565b5b600082013567ffffffffffffffff811115612c8057612c7f612427565b5b612c8c84828501612c1e565b91505092915050565b600080600060608486031215612cae57612cad612422565b5b6000612cbc86828701612475565b935050602084013567ffffffffffffffff811115612cdd57612cdc612427565b5b612ce9868287016127de565b925050604084013567ffffffffffffffff811115612d0a57612d09612427565b5b612d16868287016127de565b9150509250925092565b60008060008060808587031215612d3a57612d39612422565b5b6000612d4887828801612475565b9450506020612d59878288016124ab565b9350506040612d6a878288016124ab565b925050606085013567ffffffffffffffff811115612d8b57612d8a612427565b5b612d9787828801612893565b91505092959194509250565b612dac8161244c565b82525050565b6000602082019050612dc76000830184612da3565b92915050565b612dd6816125af565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b60008060408385031215612e1057612e0f612422565b5b6000612e1e85828601612475565b9250506020612e2f85828601612de4565b9150509250929050565b60008060408385031215612e5057612e4f612422565b5b6000612e5e85828601612475565b9250506020612e6f85828601612475565b9150509250929050565b600080600080600060a08688031215612e9557612e94612422565b5b6000612ea388828901612475565b9550506020612eb488828901612475565b9450506040612ec5888289016124ab565b9350506060612ed6888289016124ab565b925050608086013567ffffffffffffffff811115612ef757612ef6612427565b5b612f0388828901612893565b9150509295509295909350565b600060208284031215612f2657612f25612422565b5b6000612f3484828501612475565b91505092915050565b600080600060608486031215612f5657612f55612422565b5b6000612f6486828701612475565b9350506020612f75868287016124ab565b9250506040612f86868287016124ab565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612fec602b836125f0565b9150612ff782612f90565b604082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306957607f821691505b60208210810361307c5761307b613022565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546130af81613051565b6130b98186613082565b945060018216600081146130d457600181146130e95761311c565b60ff198316865281151582028601935061311c565b6130f28561308d565b60005b83811015613114578154818901526001820191506020810190506130f5565b838801955050505b50505092915050565b6000613130826125e5565b61313a8185613082565b935061314a818560208601612601565b80840191505092915050565b600061316282856130a2565b915061316e8284613125565b91508190509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006131d66032836125f0565b91506131e18261317a565b604082019050919050565b60006020820190508181036000830152613205816131c9565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006132686029836125f0565b91506132738261320c565b604082019050919050565b600060208201905081810360008301526132978161325b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133078261248a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613339576133386132cd565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061337a6020836125f0565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133c0565b61340786836133c0565b95508019841693508086168417925050509392505050565b6000819050919050565b600061344461343f61343a8461248a565b61341f565b61248a565b9050919050565b6000819050919050565b61345e83613429565b61347261346a8261344b565b8484546133cd565b825550505050565b600090565b61348761347a565b613492818484613455565b505050565b5b818110156134b6576134ab60008261347f565b600181019050613498565b5050565b601f8211156134fb576134cc8161308d565b6134d5846133b0565b810160208510156134e4578190505b6134f86134f0856133b0565b830182613497565b50505b505050565b600082821c905092915050565b600061351e60001984600802613500565b1980831691505092915050565b6000613537838361350d565b9150826002028217905092915050565b613550826125e5565b67ffffffffffffffff811115613569576135686126c9565b5b6135738254613051565b61357e8282856134ba565b600060209050601f8311600181146135b1576000841561359f578287015190505b6135a9858261352b565b865550613611565b601f1984166135bf8661308d565b60005b828110156135e7578489015182556001820191506020850194506020810190506135c2565b868310156136045784890151613600601f89168261350d565b8355505b6001600288020188555050505b505050505050565b7f6f6e6c794275726e65724f70657261746f720000000000000000000000000000600082015250565b600061364f6012836125f0565b915061365a82613619565b602082019050919050565b6000602082019050818103600083015261367e81613642565b9050919050565b7f6f6e6c79436f726e794a756963654f70657261746f7200000000000000000000600082015250565b60006136bb6016836125f0565b91506136c682613685565b602082019050919050565b600060208201905081810360008301526136ea816136ae565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061374d6029836125f0565b9150613758826136f1565b604082019050919050565b6000602082019050818103600083015261377c81613740565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006137df6026836125f0565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061384f8261248a565b915061385a8361248a565b92508261386a57613869613815565b5b828204905092915050565b60006138808261248a565b915061388b8361248a565b92508282039050818111156138a3576138a26132cd565b5b92915050565b60006138b48261248a565b91506138bf8361248a565b9250826138cf576138ce613815565b5b828206905092915050565b60006138e58261248a565b91506138f08361248a565b9250828201905080821115613908576139076132cd565b5b92915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061396a6028836125f0565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006139fc6025836125f0565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613a8e602a836125f0565b9150613a9982613a32565b604082019050919050565b60006020820190508181036000830152613abd81613a81565b9050919050565b60006040820190508181036000830152613ade8185612b2b565b90508181036020830152613af28184612b2b565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b576023836125f0565b9150613b6282613afb565b604082019050919050565b60006020820190508181036000830152613b8681613b4a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613be96024836125f0565b9150613bf482613b8d565b604082019050919050565b60006020820190508181036000830152613c1881613bdc565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c7b6021836125f0565b9150613c8682613c1f565b604082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b6000604082019050613cc66000830185612500565b613cd36020830184612500565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613d366029836125f0565b9150613d4182613cda565b604082019050919050565b60006020820190508181036000830152613d6581613d29565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d9382613d6c565b613d9d8185613d77565b9350613dad818560208601612601565b613db68161262b565b840191505092915050565b600060a082019050613dd66000830188612da3565b613de36020830187612da3565b8181036040830152613df58186612b2b565b90508181036060830152613e098185612b2b565b90508181036080830152613e1d8184613d88565b90509695505050505050565b600081519050613e3881612556565b92915050565b600060208284031215613e5457613e53612422565b5b6000613e6284828501613e29565b91505092915050565b60008160e01c9050919050565b600060033d1115613e975760046000803e613e94600051613e6b565b90505b90565b600060443d10613f2757613eac612418565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ed4575050613f27565b808201805167ffffffffffffffff811115613ef25750505050613f27565b80602083010160043d038501811115613f0f575050505050613f27565b613f1e826020018501866126f8565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f866034836125f0565b9150613f9182613f2a565b604082019050919050565b60006020820190508181036000830152613fb581613f79565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006140186028836125f0565b915061402382613fbc565b604082019050919050565b600060208201905081810360008301526140478161400b565b9050919050565b600060a0820190506140636000830188612da3565b6140706020830187612da3565b61407d6040830186612500565b61408a6060830185612500565b818103608083015261409c8184613d88565b9050969550505050505056fea2646970667358221220623814179a1f72b2286c74e7e9a8caff139bef2e8956e7cb6db21a0a316873bb64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c0518f0ed94ad4c9ed579e156be47a43b97dbe1100000000000000000000000000000000000000000000000000000000000001fa
-----Decoded View---------------
Arg [0] : treasury (address): 0xc0518F0Ed94ad4c9ED579e156bE47a43B97Dbe11
Arg [1] : initialSupply (uint256): 506
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0518f0ed94ad4c9ed579e156be47a43b97dbe11
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001fa
Deployed Bytecode Sourcemap
39991:1894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20130:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19153:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40204:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40762:156;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22069:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20527:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40662:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41286:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40068:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39174:103;;;:::i;:::-;;40924:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40094:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38523:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40252:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21124:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41695:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40132:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21351:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21591:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39432:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41130:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20130:231;20216:7;20263:1;20244:21;;:7;:21;;;20236:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20331:9;:13;20341:2;20331:13;;;;;;;;;;;:22;20345:7;20331:22;;;;;;;;;;;;;;;;20324:29;;20130:231;;;;:::o;19153:310::-;19255:4;19307:26;19292:41;;;:11;:41;;;;:110;;;;19365:37;19350:52;;;:11;:52;;;;19292:110;:163;;;;19419:36;19443:11;19419:23;:36::i;:::-;19292:163;19272:183;;19153:310;;;:::o;40204:43::-;;;;;;;;;;;;;;;;;;;:::o;40762:156::-;40830:13;40883:7;40892:18;:7;:16;:18::i;:::-;40866:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40852:60;;40762:156;;;:::o;22069:442::-;22310:12;:10;:12::i;:::-;22302:20;;:4;:20;;;:60;;;;22326:36;22343:4;22349:12;:10;:12::i;:::-;22326:16;:36::i;:::-;22302:60;22280:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22451:52;22474:4;22480:2;22484:3;22489:7;22498:4;22451:22;:52::i;:::-;22069:442;;;;;:::o;20527:524::-;20683:16;20744:3;:10;20725:8;:15;:29;20717:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20813:30;20860:8;:15;20846:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20813:63;;20894:9;20889:122;20913:8;:15;20909:1;:19;20889:122;;;20969:30;20979:8;20988:1;20979:11;;;;;;;;:::i;:::-;;;;;;;;20992:3;20996:1;20992:6;;;;;;;;:::i;:::-;;;;;;;;20969:9;:30::i;:::-;20950:13;20964:1;20950:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20930:3;;;;:::i;:::-;;;20889:122;;;;21030:13;21023:20;;;20527:524;;;;:::o;40662:94::-;38754:12;:10;:12::i;:::-;38743:23;;:7;:5;:7::i;:::-;:23;;;38735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40742:8:::1;40732:7;:18;;;;;;:::i;:::-;;40662:94:::0;:::o;41286:172::-;40605:14;;;;;;;;;;;40591:28;;:10;:28;;;40583:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41422:30:::1;41433:4;41439:3;41444:7;41422:10;:30::i;:::-;41286:172:::0;;;:::o;40068:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39174:103::-;38754:12;:10;:12::i;:::-;38743:23;;:7;:5;:7::i;:::-;:23;;;38735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39239:30:::1;39266:1;39239:18;:30::i;:::-;39174:103::o:0;40924:200::-;40481:18;;;;;;;;;;;40467:32;;:10;:32;;;40459:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41076:42:::1;41082:12;41096:7;41105:6;41113:4;41076:5;:42::i;:::-;40924:200:::0;;;;:::o;40094:33::-;;;;;;;;;;;;;:::o;38523:87::-;38569:7;38596:6;;;;;;;;;;;38589:13;;38523:87;:::o;40252:38::-;;;;;;;;;;;;;;;;;;;:::o;21124:155::-;21219:52;21238:12;:10;:12::i;:::-;21252:8;21262;21219:18;:52::i;:::-;21124:155;;:::o;41695:187::-;38754:12;:10;:12::i;:::-;38743:23;;:7;:5;:7::i;:::-;:23;;;38735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41818:19:::1;41797:18;;:40;;;;;;;;;;;;;;;;;;41861:15;41844:14;;:32;;;;;;;;;;;;;;;;;;41695:187:::0;;:::o;40132:29::-;;;;;;;;;;;;;:::o;21351:168::-;21450:4;21474:18;:27;21493:7;21474:27;;;;;;;;;;;;;;;:37;21502:8;21474:37;;;;;;;;;;;;;;;;;;;;;;;;;21467:44;;21351:168;;;;:::o;21591:401::-;21807:12;:10;:12::i;:::-;21799:20;;:4;:20;;;:60;;;;21823:36;21840:4;21846:12;:10;:12::i;:::-;21823:16;:36::i;:::-;21799:60;21777:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;21939:45;21957:4;21963:2;21967;21971:6;21979:4;21939:17;:45::i;:::-;21591:401;;;;;:::o;39432:201::-;38754:12;:10;:12::i;:::-;38743:23;;:7;:5;:7::i;:::-;:23;;;38735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39541:1:::1;39521:22;;:8;:22;;::::0;39513:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39597:28;39616:8;39597:18;:28::i;:::-;39432:201:::0;:::o;41130:150::-;40605:14;;;;;;;;;;;40591:28;;:10;:28;;;40583:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41246:28:::1;41252:4;41258:7;41267:6;41246:5;:28::i;:::-;41130:150:::0;;;:::o;9159:326::-;9219:4;9476:1;9454:7;:19;;;:23;9447:30;;9159:326;;;:::o;18002:157::-;18087:4;18126:25;18111:40;;;:11;:40;;;;18104:47;;18002:157;;;:::o;35790:723::-;35846:13;36076:1;36067:5;:10;36063:53;;36094:10;;;;;;;;;;;;;;;;;;;;;36063:53;36126:12;36141:5;36126:20;;36157:14;36182:78;36197:1;36189:4;:9;36182:78;;36215:8;;;;;:::i;:::-;;;;36246:2;36238:10;;;;;:::i;:::-;;;36182:78;;;36270:19;36302:6;36292:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36270:39;;36320:154;36336:1;36327:5;:10;36320:154;;36364:1;36354:11;;;;;:::i;:::-;;;36431:2;36423:5;:10;;;;:::i;:::-;36410:2;:24;;;;:::i;:::-;36397:39;;36380:6;36387;36380:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;36460:2;36451:11;;;;;:::i;:::-;;;36320:154;;;36498:6;36484:21;;;;;35790:723;;;;:::o;17023:98::-;17076:7;17103:10;17096:17;;17023:98;:::o;24307:1146::-;24534:7;:14;24520:3;:10;:28;24512:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24626:1;24612:16;;:2;:16;;;24604:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24683:16;24702:12;:10;:12::i;:::-;24683:31;;24727:60;24748:8;24758:4;24764:2;24768:3;24773:7;24782:4;24727:20;:60::i;:::-;24805:9;24800:421;24824:3;:10;24820:1;:14;24800:421;;;24856:10;24869:3;24873:1;24869:6;;;;;;;;:::i;:::-;;;;;;;;24856:19;;24890:14;24907:7;24915:1;24907:10;;;;;;;;:::i;:::-;;;;;;;;24890:27;;24934:19;24956:9;:13;24966:2;24956:13;;;;;;;;;;;:19;24970:4;24956:19;;;;;;;;;;;;;;;;24934:41;;25013:6;24998:11;:21;;24990:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25146:6;25132:11;:20;25110:9;:13;25120:2;25110:13;;;;;;;;;;;:19;25124:4;25110:19;;;;;;;;;;;;;;;:42;;;;25203:6;25182:9;:13;25192:2;25182:13;;;;;;;;;;;:17;25196:2;25182:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24841:380;;;24836:3;;;;:::i;:::-;;;24800:421;;;;25268:2;25238:47;;25262:4;25238:47;;25252:8;25238:47;;;25272:3;25277:7;25238:47;;;;;;;:::i;:::-;;;;;;;;25298:59;25318:8;25328:4;25334:2;25338:3;25343:7;25352:4;25298:19;:59::i;:::-;25370:75;25406:8;25416:4;25422:2;25426:3;25431:7;25440:4;25370:35;:75::i;:::-;24501:952;24307:1146;;;;;:::o;29930:969::-;30098:1;30082:18;;:4;:18;;;30074:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30173:7;:14;30159:3;:10;:28;30151:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30245:16;30264:12;:10;:12::i;:::-;30245:31;;30289:66;30310:8;30320:4;30334:1;30338:3;30343:7;30289:66;;;;;;;;;;;;:20;:66::i;:::-;30373:9;30368:373;30392:3;:10;30388:1;:14;30368:373;;;30424:10;30437:3;30441:1;30437:6;;;;;;;;:::i;:::-;;;;;;;;30424:19;;30458:14;30475:7;30483:1;30475:10;;;;;;;;:::i;:::-;;;;;;;;30458:27;;30502:19;30524:9;:13;30534:2;30524:13;;;;;;;;;;;:19;30538:4;30524:19;;;;;;;;;;;;;;;;30502:41;;30581:6;30566:11;:21;;30558:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30708:6;30694:11;:20;30672:9;:13;30682:2;30672:13;;;;;;;;;;;:19;30686:4;30672:19;;;;;;;;;;;;;;;:42;;;;30409:332;;;30404:3;;;;;:::i;:::-;;;;30368:373;;;;30796:1;30758:55;;30782:4;30758:55;;30772:8;30758:55;;;30800:3;30805:7;30758:55;;;;;;;:::i;:::-;;;;;;;;30826:65;30846:8;30856:4;30870:1;30874:3;30879:7;30826:65;;;;;;;;;;;;:19;:65::i;:::-;30063:836;29930:969;;;:::o;39793:191::-;39867:16;39886:6;;;;;;;;;;;39867:25;;39912:8;39903:6;;:17;;;;;;;;;;;;;;;;;;39967:8;39936:40;;39957:8;39936:40;;;;;;;;;;;;39856:128;39793:191;:::o;26771:729::-;26938:1;26924:16;;:2;:16;;;26916:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26991:16;27010:12;:10;:12::i;:::-;26991:31;;27033:20;27056:21;27074:2;27056:17;:21::i;:::-;27033:44;;27088:24;27115:25;27133:6;27115:17;:25::i;:::-;27088:52;;27153:66;27174:8;27192:1;27196:2;27200:3;27205:7;27214:4;27153:20;:66::i;:::-;27253:6;27232:9;:13;27242:2;27232:13;;;;;;;;;;;:17;27246:2;27232:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27312:2;27275:52;;27308:1;27275:52;;27290:8;27275:52;;;27316:2;27320:6;27275:52;;;;;;;:::i;:::-;;;;;;;;27340:65;27360:8;27378:1;27382:2;27386:3;27391:7;27400:4;27340:19;:65::i;:::-;27418:74;27449:8;27467:1;27471:2;27475;27479:6;27487:4;27418:30;:74::i;:::-;26905:595;;;26771:729;;;;:::o;31041:331::-;31196:8;31187:17;;:5;:17;;;31179:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31299:8;31261:18;:25;31280:5;31261:25;;;;;;;;;;;;;;;:35;31287:8;31261:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31345:8;31323:41;;31338:5;31323:41;;;31355:8;31323:41;;;;;;:::i;:::-;;;;;;;;31041:331;;;:::o;22975:974::-;23177:1;23163:16;;:2;:16;;;23155:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23234:16;23253:12;:10;:12::i;:::-;23234:31;;23276:20;23299:21;23317:2;23299:17;:21::i;:::-;23276:44;;23331:24;23358:25;23376:6;23358:17;:25::i;:::-;23331:52;;23396:60;23417:8;23427:4;23433:2;23437:3;23442:7;23451:4;23396:20;:60::i;:::-;23469:19;23491:9;:13;23501:2;23491:13;;;;;;;;;;;:19;23505:4;23491:19;;;;;;;;;;;;;;;;23469:41;;23544:6;23529:11;:21;;23521:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23669:6;23655:11;:20;23633:9;:13;23643:2;23633:13;;;;;;;;;;;:19;23647:4;23633:19;;;;;;;;;;;;;;;:42;;;;23718:6;23697:9;:13;23707:2;23697:13;;;;;;;;;;;:17;23711:2;23697:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23773:2;23742:46;;23767:4;23742:46;;23757:8;23742:46;;;23777:2;23781:6;23742:46;;;;;;;:::i;:::-;;;;;;;;23801:59;23821:8;23831:4;23837:2;23841:3;23846:7;23855:4;23801:19;:59::i;:::-;23873:68;23904:8;23914:4;23920:2;23924;23928:6;23936:4;23873:30;:68::i;:::-;23144:805;;;;22975:974;;;;;:::o;28919:808::-;29062:1;29046:18;;:4;:18;;;29038:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29117:16;29136:12;:10;:12::i;:::-;29117:31;;29159:20;29182:21;29200:2;29182:17;:21::i;:::-;29159:44;;29214:24;29241:25;29259:6;29241:17;:25::i;:::-;29214:52;;29279:66;29300:8;29310:4;29324:1;29328:3;29333:7;29279:66;;;;;;;;;;;;:20;:66::i;:::-;29358:19;29380:9;:13;29390:2;29380:13;;;;;;;;;;;:19;29394:4;29380:19;;;;;;;;;;;;;;;;29358:41;;29433:6;29418:11;:21;;29410:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29552:6;29538:11;:20;29516:9;:13;29526:2;29516:13;;;;;;;;;;;:19;29530:4;29516:19;;;;;;;;;;;;;;;:42;;;;29626:1;29587:54;;29612:4;29587:54;;29602:8;29587:54;;;29630:2;29634:6;29587:54;;;;;;;:::i;:::-;;;;;;;;29654:65;29674:8;29684:4;29698:1;29702:3;29707:7;29654:65;;;;;;;;;;;;:19;:65::i;:::-;29027:700;;;;28919:808;;;:::o;32328:221::-;;;;;;;:::o;33504:220::-;;;;;;;:::o;34484:813::-;34724:15;:2;:13;;;:15::i;:::-;34720:570;;;34777:2;34760:43;;;34804:8;34814:4;34820:3;34825:7;34834:4;34760:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34756:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;35152:6;35145:14;;;;;;;;;;;:::i;:::-;;;;;;;;34756:523;;;35201:62;;;;;;;;;;:::i;:::-;;;;;;;;34756:523;34933:48;;;34921:60;;;:8;:60;;;;34917:159;;35006:50;;;;;;;;;;:::i;:::-;;;;;;;;34917:159;34840:251;34720:570;34484:813;;;;;;:::o;35305:198::-;35371:16;35400:22;35439:1;35425:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35400:41;;35463:7;35452:5;35458:1;35452:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;35490:5;35483:12;;;35305:198;;;:::o;33732:744::-;33947:15;:2;:13;;;:15::i;:::-;33943:526;;;34000:2;33983:38;;;34022:8;34032:4;34038:2;34042:6;34050:4;33983:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33979:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;34331:6;34324:14;;;;;;;;;;;:::i;:::-;;;;;;;;33979:479;;;34380:62;;;;;;;;;;:::i;:::-;;;;;;;;33979:479;34117:43;;;34105:55;;;:8;:55;;;;34101:154;;34185:50;;;;;;;;;;:::i;:::-;;;;;;;;34101:154;34056:214;33943:526;33732:744;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10410:710::-;10506:5;10531:81;10547:64;10604:6;10547:64;:::i;:::-;10531:81;:::i;:::-;10522:90;;10632:5;10661:6;10654:5;10647:21;10695:4;10688:5;10684:16;10677:23;;10748:4;10740:6;10736:17;10728:6;10724:30;10777:3;10769:6;10766:15;10763:122;;;10796:79;;:::i;:::-;10763:122;10911:6;10894:220;10928:6;10923:3;10920:15;10894:220;;;11003:3;11032:37;11065:3;11053:10;11032:37;:::i;:::-;11027:3;11020:50;11099:4;11094:3;11090:14;11083:21;;10970:144;10954:4;10949:3;10945:14;10938:21;;10894:220;;;10898:21;10512:608;;10410:710;;;;;:::o;11143:370::-;11214:5;11263:3;11256:4;11248:6;11244:17;11240:27;11230:122;;11271:79;;:::i;:::-;11230:122;11388:6;11375:20;11413:94;11503:3;11495:6;11488:4;11480:6;11476:17;11413:94;:::i;:::-;11404:103;;11220:293;11143:370;;;;:::o;11519:894::-;11637:6;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;11519:894;;;;;:::o;12419:114::-;12486:6;12520:5;12514:12;12504:22;;12419:114;;;:::o;12539:184::-;12638:11;12672:6;12667:3;12660:19;12712:4;12707:3;12703:14;12688:29;;12539:184;;;;:::o;12729:132::-;12796:4;12819:3;12811:11;;12849:4;12844:3;12840:14;12832:22;;12729:132;;;:::o;12867:108::-;12944:24;12962:5;12944:24;:::i;:::-;12939:3;12932:37;12867:108;;:::o;12981:179::-;13050:10;13071:46;13113:3;13105:6;13071:46;:::i;:::-;13149:4;13144:3;13140:14;13126:28;;12981:179;;;;:::o;13166:113::-;13236:4;13268;13263:3;13259:14;13251:22;;13166:113;;;:::o;13315:732::-;13434:3;13463:54;13511:5;13463:54;:::i;:::-;13533:86;13612:6;13607:3;13533:86;:::i;:::-;13526:93;;13643:56;13693:5;13643:56;:::i;:::-;13722:7;13753:1;13738:284;13763:6;13760:1;13757:13;13738:284;;;13839:6;13833:13;13866:63;13925:3;13910:13;13866:63;:::i;:::-;13859:70;;13952:60;14005:6;13952:60;:::i;:::-;13942:70;;13798:224;13785:1;13782;13778:9;13773:14;;13738:284;;;13742:14;14038:3;14031:10;;13439:608;;;13315:732;;;;:::o;14053:373::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:108;14414:4;14405:6;14311:108;:::i;:::-;14303:116;;14053:373;;;;:::o;14432:308::-;14494:4;14584:18;14576:6;14573:30;14570:56;;;14606:18;;:::i;:::-;14570:56;14644:29;14666:6;14644:29;:::i;:::-;14636:37;;14728:4;14722;14718:15;14710:23;;14432:308;;;:::o;14746:425::-;14824:5;14849:66;14865:49;14907:6;14865:49;:::i;:::-;14849:66;:::i;:::-;14840:75;;14938:6;14931:5;14924:21;14976:4;14969:5;14965:16;15014:3;15005:6;15000:3;14996:16;14993:25;14990:112;;;15021:79;;:::i;:::-;14990:112;15111:54;15158:6;15153:3;15148;15111:54;:::i;:::-;14830:341;14746:425;;;;;:::o;15191:340::-;15247:5;15296:3;15289:4;15281:6;15277:17;15273:27;15263:122;;15304:79;;:::i;:::-;15263:122;15421:6;15408:20;15446:79;15521:3;15513:6;15506:4;15498:6;15494:17;15446:79;:::i;:::-;15437:88;;15253:278;15191:340;;;;:::o;15537:509::-;15606:6;15655:2;15643:9;15634:7;15630:23;15626:32;15623:119;;;15661:79;;:::i;:::-;15623:119;15809:1;15798:9;15794:17;15781:31;15839:18;15831:6;15828:30;15825:117;;;15861:79;;:::i;:::-;15825:117;15966:63;16021:7;16012:6;16001:9;15997:22;15966:63;:::i;:::-;15956:73;;15752:287;15537:509;;;;:::o;16052:1039::-;16179:6;16187;16195;16244:2;16232:9;16223:7;16219:23;16215:32;16212:119;;;16250:79;;:::i;:::-;16212:119;16370:1;16395:53;16440:7;16431:6;16420:9;16416:22;16395:53;:::i;:::-;16385:63;;16341:117;16525:2;16514:9;16510:18;16497:32;16556:18;16548:6;16545:30;16542:117;;;16578:79;;:::i;:::-;16542:117;16683:78;16753:7;16744:6;16733:9;16729:22;16683:78;:::i;:::-;16673:88;;16468:303;16838:2;16827:9;16823:18;16810:32;16869:18;16861:6;16858:30;16855:117;;;16891:79;;:::i;:::-;16855:117;16996:78;17066:7;17057:6;17046:9;17042:22;16996:78;:::i;:::-;16986:88;;16781:303;16052:1039;;;;;:::o;17097:943::-;17192:6;17200;17208;17216;17265:3;17253:9;17244:7;17240:23;17236:33;17233:120;;;17272:79;;:::i;:::-;17233:120;17392:1;17417:53;17462:7;17453:6;17442:9;17438:22;17417:53;:::i;:::-;17407:63;;17363:117;17519:2;17545:53;17590:7;17581:6;17570:9;17566:22;17545:53;:::i;:::-;17535:63;;17490:118;17647:2;17673:53;17718:7;17709:6;17698:9;17694:22;17673:53;:::i;:::-;17663:63;;17618:118;17803:2;17792:9;17788:18;17775:32;17834:18;17826:6;17823:30;17820:117;;;17856:79;;:::i;:::-;17820:117;17961:62;18015:7;18006:6;17995:9;17991:22;17961:62;:::i;:::-;17951:72;;17746:287;17097:943;;;;;;;:::o;18046:118::-;18133:24;18151:5;18133:24;:::i;:::-;18128:3;18121:37;18046:118;;:::o;18170:222::-;18263:4;18301:2;18290:9;18286:18;18278:26;;18314:71;18382:1;18371:9;18367:17;18358:6;18314:71;:::i;:::-;18170:222;;;;:::o;18398:116::-;18468:21;18483:5;18468:21;:::i;:::-;18461:5;18458:32;18448:60;;18504:1;18501;18494:12;18448:60;18398:116;:::o;18520:133::-;18563:5;18601:6;18588:20;18579:29;;18617:30;18641:5;18617:30;:::i;:::-;18520:133;;;;:::o;18659:468::-;18724:6;18732;18781:2;18769:9;18760:7;18756:23;18752:32;18749:119;;;18787:79;;:::i;:::-;18749:119;18907:1;18932:53;18977:7;18968:6;18957:9;18953:22;18932:53;:::i;:::-;18922:63;;18878:117;19034:2;19060:50;19102:7;19093:6;19082:9;19078:22;19060:50;:::i;:::-;19050:60;;19005:115;18659:468;;;;;:::o;19133:474::-;19201:6;19209;19258:2;19246:9;19237:7;19233:23;19229:32;19226:119;;;19264:79;;:::i;:::-;19226:119;19384:1;19409:53;19454:7;19445:6;19434:9;19430:22;19409:53;:::i;:::-;19399:63;;19355:117;19511:2;19537:53;19582:7;19573:6;19562:9;19558:22;19537:53;:::i;:::-;19527:63;;19482:118;19133:474;;;;;:::o;19613:1089::-;19717:6;19725;19733;19741;19749;19798:3;19786:9;19777:7;19773:23;19769:33;19766:120;;;19805:79;;:::i;:::-;19766:120;19925:1;19950:53;19995:7;19986:6;19975:9;19971:22;19950:53;:::i;:::-;19940:63;;19896:117;20052:2;20078:53;20123:7;20114:6;20103:9;20099:22;20078:53;:::i;:::-;20068:63;;20023:118;20180:2;20206:53;20251:7;20242:6;20231:9;20227:22;20206:53;:::i;:::-;20196:63;;20151:118;20308:2;20334:53;20379:7;20370:6;20359:9;20355:22;20334:53;:::i;:::-;20324:63;;20279:118;20464:3;20453:9;20449:19;20436:33;20496:18;20488:6;20485:30;20482:117;;;20518:79;;:::i;:::-;20482:117;20623:62;20677:7;20668:6;20657:9;20653:22;20623:62;:::i;:::-;20613:72;;20407:288;19613:1089;;;;;;;;:::o;20708:329::-;20767:6;20816:2;20804:9;20795:7;20791:23;20787:32;20784:119;;;20822:79;;:::i;:::-;20784:119;20942:1;20967:53;21012:7;21003:6;20992:9;20988:22;20967:53;:::i;:::-;20957:63;;20913:117;20708:329;;;;:::o;21043:619::-;21120:6;21128;21136;21185:2;21173:9;21164:7;21160:23;21156:32;21153:119;;;21191:79;;:::i;:::-;21153:119;21311:1;21336:53;21381:7;21372:6;21361:9;21357:22;21336:53;:::i;:::-;21326:63;;21282:117;21438:2;21464:53;21509:7;21500:6;21489:9;21485:22;21464:53;:::i;:::-;21454:63;;21409:118;21566:2;21592:53;21637:7;21628:6;21617:9;21613:22;21592:53;:::i;:::-;21582:63;;21537:118;21043:619;;;;;:::o;21668:230::-;21808:34;21804:1;21796:6;21792:14;21785:58;21877:13;21872:2;21864:6;21860:15;21853:38;21668:230;:::o;21904:366::-;22046:3;22067:67;22131:2;22126:3;22067:67;:::i;:::-;22060:74;;22143:93;22232:3;22143:93;:::i;:::-;22261:2;22256:3;22252:12;22245:19;;21904:366;;;:::o;22276:419::-;22442:4;22480:2;22469:9;22465:18;22457:26;;22529:9;22523:4;22519:20;22515:1;22504:9;22500:17;22493:47;22557:131;22683:4;22557:131;:::i;:::-;22549:139;;22276:419;;;:::o;22701:180::-;22749:77;22746:1;22739:88;22846:4;22843:1;22836:15;22870:4;22867:1;22860:15;22887:320;22931:6;22968:1;22962:4;22958:12;22948:22;;23015:1;23009:4;23005:12;23036:18;23026:81;;23092:4;23084:6;23080:17;23070:27;;23026:81;23154:2;23146:6;23143:14;23123:18;23120:38;23117:84;;23173:18;;:::i;:::-;23117:84;22938:269;22887:320;;;:::o;23213:148::-;23315:11;23352:3;23337:18;;23213:148;;;;:::o;23367:141::-;23416:4;23439:3;23431:11;;23462:3;23459:1;23452:14;23496:4;23493:1;23483:18;23475:26;;23367:141;;;:::o;23538:874::-;23641:3;23678:5;23672:12;23707:36;23733:9;23707:36;:::i;:::-;23759:89;23841:6;23836:3;23759:89;:::i;:::-;23752:96;;23879:1;23868:9;23864:17;23895:1;23890:166;;;;24070:1;24065:341;;;;23857:549;;23890:166;23974:4;23970:9;23959;23955:25;23950:3;23943:38;24036:6;24029:14;24022:22;24014:6;24010:35;24005:3;24001:45;23994:52;;23890:166;;24065:341;24132:38;24164:5;24132:38;:::i;:::-;24192:1;24206:154;24220:6;24217:1;24214:13;24206:154;;;24294:7;24288:14;24284:1;24279:3;24275:11;24268:35;24344:1;24335:7;24331:15;24320:26;;24242:4;24239:1;24235:12;24230:17;;24206:154;;;24389:6;24384:3;24380:16;24373:23;;24072:334;;23857:549;;23645:767;;23538:874;;;;:::o;24418:390::-;24524:3;24552:39;24585:5;24552:39;:::i;:::-;24607:89;24689:6;24684:3;24607:89;:::i;:::-;24600:96;;24705:65;24763:6;24758:3;24751:4;24744:5;24740:16;24705:65;:::i;:::-;24795:6;24790:3;24786:16;24779:23;;24528:280;24418:390;;;;:::o;24814:429::-;24991:3;25013:92;25101:3;25092:6;25013:92;:::i;:::-;25006:99;;25122:95;25213:3;25204:6;25122:95;:::i;:::-;25115:102;;25234:3;25227:10;;24814:429;;;;;:::o;25249:237::-;25389:34;25385:1;25377:6;25373:14;25366:58;25458:20;25453:2;25445:6;25441:15;25434:45;25249:237;:::o;25492:366::-;25634:3;25655:67;25719:2;25714:3;25655:67;:::i;:::-;25648:74;;25731:93;25820:3;25731:93;:::i;:::-;25849:2;25844:3;25840:12;25833:19;;25492:366;;;:::o;25864:419::-;26030:4;26068:2;26057:9;26053:18;26045:26;;26117:9;26111:4;26107:20;26103:1;26092:9;26088:17;26081:47;26145:131;26271:4;26145:131;:::i;:::-;26137:139;;25864:419;;;:::o;26289:228::-;26429:34;26425:1;26417:6;26413:14;26406:58;26498:11;26493:2;26485:6;26481:15;26474:36;26289:228;:::o;26523:366::-;26665:3;26686:67;26750:2;26745:3;26686:67;:::i;:::-;26679:74;;26762:93;26851:3;26762:93;:::i;:::-;26880:2;26875:3;26871:12;26864:19;;26523:366;;;:::o;26895:419::-;27061:4;27099:2;27088:9;27084:18;27076:26;;27148:9;27142:4;27138:20;27134:1;27123:9;27119:17;27112:47;27176:131;27302:4;27176:131;:::i;:::-;27168:139;;26895:419;;;:::o;27320:180::-;27368:77;27365:1;27358:88;27465:4;27462:1;27455:15;27489:4;27486:1;27479:15;27506:180;27554:77;27551:1;27544:88;27651:4;27648:1;27641:15;27675:4;27672:1;27665:15;27692:233;27731:3;27754:24;27772:5;27754:24;:::i;:::-;27745:33;;27800:66;27793:5;27790:77;27787:103;;27870:18;;:::i;:::-;27787:103;27917:1;27910:5;27906:13;27899:20;;27692:233;;;:::o;27931:182::-;28071:34;28067:1;28059:6;28055:14;28048:58;27931:182;:::o;28119:366::-;28261:3;28282:67;28346:2;28341:3;28282:67;:::i;:::-;28275:74;;28358:93;28447:3;28358:93;:::i;:::-;28476:2;28471:3;28467:12;28460:19;;28119:366;;;:::o;28491:419::-;28657:4;28695:2;28684:9;28680:18;28672:26;;28744:9;28738:4;28734:20;28730:1;28719:9;28715:17;28708:47;28772:131;28898:4;28772:131;:::i;:::-;28764:139;;28491:419;;;:::o;28916:93::-;28953:6;29000:2;28995;28988:5;28984:14;28980:23;28970:33;;28916:93;;;:::o;29015:107::-;29059:8;29109:5;29103:4;29099:16;29078:37;;29015:107;;;;:::o;29128:393::-;29197:6;29247:1;29235:10;29231:18;29270:97;29300:66;29289:9;29270:97;:::i;:::-;29388:39;29418:8;29407:9;29388:39;:::i;:::-;29376:51;;29460:4;29456:9;29449:5;29445:21;29436:30;;29509:4;29499:8;29495:19;29488:5;29485:30;29475:40;;29204:317;;29128:393;;;;;:::o;29527:60::-;29555:3;29576:5;29569:12;;29527:60;;;:::o;29593:142::-;29643:9;29676:53;29694:34;29703:24;29721:5;29703:24;:::i;:::-;29694:34;:::i;:::-;29676:53;:::i;:::-;29663:66;;29593:142;;;:::o;29741:75::-;29784:3;29805:5;29798:12;;29741:75;;;:::o;29822:269::-;29932:39;29963:7;29932:39;:::i;:::-;29993:91;30042:41;30066:16;30042:41;:::i;:::-;30034:6;30027:4;30021:11;29993:91;:::i;:::-;29987:4;29980:105;29898:193;29822:269;;;:::o;30097:73::-;30142:3;30097:73;:::o;30176:189::-;30253:32;;:::i;:::-;30294:65;30352:6;30344;30338:4;30294:65;:::i;:::-;30229:136;30176:189;;:::o;30371:186::-;30431:120;30448:3;30441:5;30438:14;30431:120;;;30502:39;30539:1;30532:5;30502:39;:::i;:::-;30475:1;30468:5;30464:13;30455:22;;30431:120;;;30371:186;;:::o;30563:543::-;30664:2;30659:3;30656:11;30653:446;;;30698:38;30730:5;30698:38;:::i;:::-;30782:29;30800:10;30782:29;:::i;:::-;30772:8;30768:44;30965:2;30953:10;30950:18;30947:49;;;30986:8;30971:23;;30947:49;31009:80;31065:22;31083:3;31065:22;:::i;:::-;31055:8;31051:37;31038:11;31009:80;:::i;:::-;30668:431;;30653:446;30563:543;;;:::o;31112:117::-;31166:8;31216:5;31210:4;31206:16;31185:37;;31112:117;;;;:::o;31235:169::-;31279:6;31312:51;31360:1;31356:6;31348:5;31345:1;31341:13;31312:51;:::i;:::-;31308:56;31393:4;31387;31383:15;31373:25;;31286:118;31235:169;;;;:::o;31409:295::-;31485:4;31631:29;31656:3;31650:4;31631:29;:::i;:::-;31623:37;;31693:3;31690:1;31686:11;31680:4;31677:21;31669:29;;31409:295;;;;:::o;31709:1395::-;31826:37;31859:3;31826:37;:::i;:::-;31928:18;31920:6;31917:30;31914:56;;;31950:18;;:::i;:::-;31914:56;31994:38;32026:4;32020:11;31994:38;:::i;:::-;32079:67;32139:6;32131;32125:4;32079:67;:::i;:::-;32173:1;32197:4;32184:17;;32229:2;32221:6;32218:14;32246:1;32241:618;;;;32903:1;32920:6;32917:77;;;32969:9;32964:3;32960:19;32954:26;32945:35;;32917:77;33020:67;33080:6;33073:5;33020:67;:::i;:::-;33014:4;33007:81;32876:222;32211:887;;32241:618;32293:4;32289:9;32281:6;32277:22;32327:37;32359:4;32327:37;:::i;:::-;32386:1;32400:208;32414:7;32411:1;32408:14;32400:208;;;32493:9;32488:3;32484:19;32478:26;32470:6;32463:42;32544:1;32536:6;32532:14;32522:24;;32591:2;32580:9;32576:18;32563:31;;32437:4;32434:1;32430:12;32425:17;;32400:208;;;32636:6;32627:7;32624:19;32621:179;;;32694:9;32689:3;32685:19;32679:26;32737:48;32779:4;32771:6;32767:17;32756:9;32737:48;:::i;:::-;32729:6;32722:64;32644:156;32621:179;32846:1;32842;32834:6;32830:14;32826:22;32820:4;32813:36;32248:611;;;32211:887;;31801:1303;;;31709:1395;;:::o;33110:168::-;33250:20;33246:1;33238:6;33234:14;33227:44;33110:168;:::o;33284:366::-;33426:3;33447:67;33511:2;33506:3;33447:67;:::i;:::-;33440:74;;33523:93;33612:3;33523:93;:::i;:::-;33641:2;33636:3;33632:12;33625:19;;33284:366;;;:::o;33656:419::-;33822:4;33860:2;33849:9;33845:18;33837:26;;33909:9;33903:4;33899:20;33895:1;33884:9;33880:17;33873:47;33937:131;34063:4;33937:131;:::i;:::-;33929:139;;33656:419;;;:::o;34081:172::-;34221:24;34217:1;34209:6;34205:14;34198:48;34081:172;:::o;34259:366::-;34401:3;34422:67;34486:2;34481:3;34422:67;:::i;:::-;34415:74;;34498:93;34587:3;34498:93;:::i;:::-;34616:2;34611:3;34607:12;34600:19;;34259:366;;;:::o;34631:419::-;34797:4;34835:2;34824:9;34820:18;34812:26;;34884:9;34878:4;34874:20;34870:1;34859:9;34855:17;34848:47;34912:131;35038:4;34912:131;:::i;:::-;34904:139;;34631:419;;;:::o;35056:228::-;35196:34;35192:1;35184:6;35180:14;35173:58;35265:11;35260:2;35252:6;35248:15;35241:36;35056:228;:::o;35290:366::-;35432:3;35453:67;35517:2;35512:3;35453:67;:::i;:::-;35446:74;;35529:93;35618:3;35529:93;:::i;:::-;35647:2;35642:3;35638:12;35631:19;;35290:366;;;:::o;35662:419::-;35828:4;35866:2;35855:9;35851:18;35843:26;;35915:9;35909:4;35905:20;35901:1;35890:9;35886:17;35879:47;35943:131;36069:4;35943:131;:::i;:::-;35935:139;;35662:419;;;:::o;36087:225::-;36227:34;36223:1;36215:6;36211:14;36204:58;36296:8;36291:2;36283:6;36279:15;36272:33;36087:225;:::o;36318:366::-;36460:3;36481:67;36545:2;36540:3;36481:67;:::i;:::-;36474:74;;36557:93;36646:3;36557:93;:::i;:::-;36675:2;36670:3;36666:12;36659:19;;36318:366;;;:::o;36690:419::-;36856:4;36894:2;36883:9;36879:18;36871:26;;36943:9;36937:4;36933:20;36929:1;36918:9;36914:17;36907:47;36971:131;37097:4;36971:131;:::i;:::-;36963:139;;36690:419;;;:::o;37115:180::-;37163:77;37160:1;37153:88;37260:4;37257:1;37250:15;37284:4;37281:1;37274:15;37301:185;37341:1;37358:20;37376:1;37358:20;:::i;:::-;37353:25;;37392:20;37410:1;37392:20;:::i;:::-;37387:25;;37431:1;37421:35;;37436:18;;:::i;:::-;37421:35;37478:1;37475;37471:9;37466:14;;37301:185;;;;:::o;37492:194::-;37532:4;37552:20;37570:1;37552:20;:::i;:::-;37547:25;;37586:20;37604:1;37586:20;:::i;:::-;37581:25;;37630:1;37627;37623:9;37615:17;;37654:1;37648:4;37645:11;37642:37;;;37659:18;;:::i;:::-;37642:37;37492:194;;;;:::o;37692:176::-;37724:1;37741:20;37759:1;37741:20;:::i;:::-;37736:25;;37775:20;37793:1;37775:20;:::i;:::-;37770:25;;37814:1;37804:35;;37819:18;;:::i;:::-;37804:35;37860:1;37857;37853:9;37848:14;;37692:176;;;;:::o;37874:191::-;37914:3;37933:20;37951:1;37933:20;:::i;:::-;37928:25;;37967:20;37985:1;37967:20;:::i;:::-;37962:25;;38010:1;38007;38003:9;37996:16;;38031:3;38028:1;38025:10;38022:36;;;38038:18;;:::i;:::-;38022:36;37874:191;;;;:::o;38071:227::-;38211:34;38207:1;38199:6;38195:14;38188:58;38280:10;38275:2;38267:6;38263:15;38256:35;38071:227;:::o;38304:366::-;38446:3;38467:67;38531:2;38526:3;38467:67;:::i;:::-;38460:74;;38543:93;38632:3;38543:93;:::i;:::-;38661:2;38656:3;38652:12;38645:19;;38304:366;;;:::o;38676:419::-;38842:4;38880:2;38869:9;38865:18;38857:26;;38929:9;38923:4;38919:20;38915:1;38904:9;38900:17;38893:47;38957:131;39083:4;38957:131;:::i;:::-;38949:139;;38676:419;;;:::o;39101:224::-;39241:34;39237:1;39229:6;39225:14;39218:58;39310:7;39305:2;39297:6;39293:15;39286:32;39101:224;:::o;39331:366::-;39473:3;39494:67;39558:2;39553:3;39494:67;:::i;:::-;39487:74;;39570:93;39659:3;39570:93;:::i;:::-;39688:2;39683:3;39679:12;39672:19;;39331:366;;;:::o;39703:419::-;39869:4;39907:2;39896:9;39892:18;39884:26;;39956:9;39950:4;39946:20;39942:1;39931:9;39927:17;39920:47;39984:131;40110:4;39984:131;:::i;:::-;39976:139;;39703:419;;;:::o;40128:229::-;40268:34;40264:1;40256:6;40252:14;40245:58;40337:12;40332:2;40324:6;40320:15;40313:37;40128:229;:::o;40363:366::-;40505:3;40526:67;40590:2;40585:3;40526:67;:::i;:::-;40519:74;;40602:93;40691:3;40602:93;:::i;:::-;40720:2;40715:3;40711:12;40704:19;;40363:366;;;:::o;40735:419::-;40901:4;40939:2;40928:9;40924:18;40916:26;;40988:9;40982:4;40978:20;40974:1;40963:9;40959:17;40952:47;41016:131;41142:4;41016:131;:::i;:::-;41008:139;;40735:419;;;:::o;41160:634::-;41381:4;41419:2;41408:9;41404:18;41396:26;;41468:9;41462:4;41458:20;41454:1;41443:9;41439:17;41432:47;41496:108;41599:4;41590:6;41496:108;:::i;:::-;41488:116;;41651:9;41645:4;41641:20;41636:2;41625:9;41621:18;41614:48;41679:108;41782:4;41773:6;41679:108;:::i;:::-;41671:116;;41160:634;;;;;:::o;41800:222::-;41940:34;41936:1;41928:6;41924:14;41917:58;42009:5;42004:2;41996:6;41992:15;41985:30;41800:222;:::o;42028:366::-;42170:3;42191:67;42255:2;42250:3;42191:67;:::i;:::-;42184:74;;42267:93;42356:3;42267:93;:::i;:::-;42385:2;42380:3;42376:12;42369:19;;42028:366;;;:::o;42400:419::-;42566:4;42604:2;42593:9;42589:18;42581:26;;42653:9;42647:4;42643:20;42639:1;42628:9;42624:17;42617:47;42681:131;42807:4;42681:131;:::i;:::-;42673:139;;42400:419;;;:::o;42825:223::-;42965:34;42961:1;42953:6;42949:14;42942:58;43034:6;43029:2;43021:6;43017:15;43010:31;42825:223;:::o;43054:366::-;43196:3;43217:67;43281:2;43276:3;43217:67;:::i;:::-;43210:74;;43293:93;43382:3;43293:93;:::i;:::-;43411:2;43406:3;43402:12;43395:19;;43054:366;;;:::o;43426:419::-;43592:4;43630:2;43619:9;43615:18;43607:26;;43679:9;43673:4;43669:20;43665:1;43654:9;43650:17;43643:47;43707:131;43833:4;43707:131;:::i;:::-;43699:139;;43426:419;;;:::o;43851:220::-;43991:34;43987:1;43979:6;43975:14;43968:58;44060:3;44055:2;44047:6;44043:15;44036:28;43851:220;:::o;44077:366::-;44219:3;44240:67;44304:2;44299:3;44240:67;:::i;:::-;44233:74;;44316:93;44405:3;44316:93;:::i;:::-;44434:2;44429:3;44425:12;44418:19;;44077:366;;;:::o;44449:419::-;44615:4;44653:2;44642:9;44638:18;44630:26;;44702:9;44696:4;44692:20;44688:1;44677:9;44673:17;44666:47;44730:131;44856:4;44730:131;:::i;:::-;44722:139;;44449:419;;;:::o;44874:332::-;44995:4;45033:2;45022:9;45018:18;45010:26;;45046:71;45114:1;45103:9;45099:17;45090:6;45046:71;:::i;:::-;45127:72;45195:2;45184:9;45180:18;45171:6;45127:72;:::i;:::-;44874:332;;;;;:::o;45212:228::-;45352:34;45348:1;45340:6;45336:14;45329:58;45421:11;45416:2;45408:6;45404:15;45397:36;45212:228;:::o;45446:366::-;45588:3;45609:67;45673:2;45668:3;45609:67;:::i;:::-;45602:74;;45685:93;45774:3;45685:93;:::i;:::-;45803:2;45798:3;45794:12;45787:19;;45446:366;;;:::o;45818:419::-;45984:4;46022:2;46011:9;46007:18;45999:26;;46071:9;46065:4;46061:20;46057:1;46046:9;46042:17;46035:47;46099:131;46225:4;46099:131;:::i;:::-;46091:139;;45818:419;;;:::o;46243:98::-;46294:6;46328:5;46322:12;46312:22;;46243:98;;;:::o;46347:168::-;46430:11;46464:6;46459:3;46452:19;46504:4;46499:3;46495:14;46480:29;;46347:168;;;;:::o;46521:373::-;46607:3;46635:38;46667:5;46635:38;:::i;:::-;46689:70;46752:6;46747:3;46689:70;:::i;:::-;46682:77;;46768:65;46826:6;46821:3;46814:4;46807:5;46803:16;46768:65;:::i;:::-;46858:29;46880:6;46858:29;:::i;:::-;46853:3;46849:39;46842:46;;46611:283;46521:373;;;;:::o;46900:1053::-;47223:4;47261:3;47250:9;47246:19;47238:27;;47275:71;47343:1;47332:9;47328:17;47319:6;47275:71;:::i;:::-;47356:72;47424:2;47413:9;47409:18;47400:6;47356:72;:::i;:::-;47475:9;47469:4;47465:20;47460:2;47449:9;47445:18;47438:48;47503:108;47606:4;47597:6;47503:108;:::i;:::-;47495:116;;47658:9;47652:4;47648:20;47643:2;47632:9;47628:18;47621:48;47686:108;47789:4;47780:6;47686:108;:::i;:::-;47678:116;;47842:9;47836:4;47832:20;47826:3;47815:9;47811:19;47804:49;47870:76;47941:4;47932:6;47870:76;:::i;:::-;47862:84;;46900:1053;;;;;;;;:::o;47959:141::-;48015:5;48046:6;48040:13;48031:22;;48062:32;48088:5;48062:32;:::i;:::-;47959:141;;;;:::o;48106:349::-;48175:6;48224:2;48212:9;48203:7;48199:23;48195:32;48192:119;;;48230:79;;:::i;:::-;48192:119;48350:1;48375:63;48430:7;48421:6;48410:9;48406:22;48375:63;:::i;:::-;48365:73;;48321:127;48106:349;;;;:::o;48461:106::-;48505:8;48554:5;48549:3;48545:15;48524:36;;48461:106;;;:::o;48573:183::-;48608:3;48646:1;48628:16;48625:23;48622:128;;;48684:1;48681;48678;48663:23;48706:34;48737:1;48731:8;48706:34;:::i;:::-;48699:41;;48622:128;48573:183;:::o;48762:711::-;48801:3;48839:4;48821:16;48818:26;48847:5;48815:39;48876:20;;:::i;:::-;48951:1;48933:16;48929:24;48926:1;48920:4;48905:49;48984:4;48978:11;49083:16;49076:4;49068:6;49064:17;49061:39;49028:18;49020:6;49017:30;49001:113;48998:146;;;49129:5;;;;48998:146;49175:6;49169:4;49165:17;49211:3;49205:10;49238:18;49230:6;49227:30;49224:43;;;49260:5;;;;;;49224:43;49308:6;49301:4;49296:3;49292:14;49288:27;49367:1;49349:16;49345:24;49339:4;49335:35;49330:3;49327:44;49324:57;;;49374:5;;;;;;;49324:57;49391;49439:6;49433:4;49429:17;49421:6;49417:30;49411:4;49391:57;:::i;:::-;49464:3;49457:10;;48805:668;;;;;48762:711;;:::o;49479:239::-;49619:34;49615:1;49607:6;49603:14;49596:58;49688:22;49683:2;49675:6;49671:15;49664:47;49479:239;:::o;49724:366::-;49866:3;49887:67;49951:2;49946:3;49887:67;:::i;:::-;49880:74;;49963:93;50052:3;49963:93;:::i;:::-;50081:2;50076:3;50072:12;50065:19;;49724:366;;;:::o;50096:419::-;50262:4;50300:2;50289:9;50285:18;50277:26;;50349:9;50343:4;50339:20;50335:1;50324:9;50320:17;50313:47;50377:131;50503:4;50377:131;:::i;:::-;50369:139;;50096:419;;;:::o;50521:227::-;50661:34;50657:1;50649:6;50645:14;50638:58;50730:10;50725:2;50717:6;50713:15;50706:35;50521:227;:::o;50754:366::-;50896:3;50917:67;50981:2;50976:3;50917:67;:::i;:::-;50910:74;;50993:93;51082:3;50993:93;:::i;:::-;51111:2;51106:3;51102:12;51095:19;;50754:366;;;:::o;51126:419::-;51292:4;51330:2;51319:9;51315:18;51307:26;;51379:9;51373:4;51369:20;51365:1;51354:9;51350:17;51343:47;51407:131;51533:4;51407:131;:::i;:::-;51399:139;;51126:419;;;:::o;51551:751::-;51774:4;51812:3;51801:9;51797:19;51789:27;;51826:71;51894:1;51883:9;51879:17;51870:6;51826:71;:::i;:::-;51907:72;51975:2;51964:9;51960:18;51951:6;51907:72;:::i;:::-;51989;52057:2;52046:9;52042:18;52033:6;51989:72;:::i;:::-;52071;52139:2;52128:9;52124:18;52115:6;52071:72;:::i;:::-;52191:9;52185:4;52181:20;52175:3;52164:9;52160:19;52153:49;52219:76;52290:4;52281:6;52219:76;:::i;:::-;52211:84;;51551:751;;;;;;;;:::o
Swarm Source
ipfs://623814179a1f72b2286c74e7e9a8caff139bef2e8956e7cb6db21a0a316873bb
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.