Token MiniFrens Generations
Overview ERC-721
Total Supply:
5,309 MFG
Holders:
146 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Breeder
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-23 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity >=0.7.0 <0.9.0; //interfaces interface IBurn { function burn(uint256 _amount) external; } interface IBalance { function balanceOf(address owner) external returns (uint256); } interface IBurner { function lootBurn(address owner, uint _id, uint _amount) external; } interface IOwner { function ownerOf(uint256 tokenId) external returns (address); } contract Breeder is ERC721Enumerable, Ownable, ReentrancyGuard { using SafeERC20 for IERC20; using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 10 ether; uint256 public maxSupply = 8076; uint256 public trueSupply = 0; uint256 public genRate1 = 600000000000000000; uint256 public genRate2 = 800000000000000000; uint256 public genRate3 = 1000000000000000000; uint256 public genRate4 = 1200000000000000000; uint256 public gen1 = 2019; uint256 public gen2 = 4039; uint256 public gen3 = 6059; uint256 public gen4 = 8076; uint256 public limitCount = 3; uint256 public limitCount2 = 1; uint256 public frate0 = 0; uint256 public frate1 = 1; uint256 public frate2 = 2; uint256 public frate3 = 3; uint256 public frate4 = 4; uint256 public frate5 = 5; uint256 public frate6 = 6; uint256 public frate7 = 7; uint256 public frate8 = 8; uint256 public frate9 = 9; uint256 public frate10 = 10; uint256 public frate11 = 11; uint256 public frate12 = 12; uint256 public frate13 = 13; uint256 public frate14 = 14; uint256 public frate15 = 15; uint256 public constant MiniCandy = 0; uint256 public constant unBlacklist = 1; uint256 public constant jobLvlUp = 2; uint256 public constant fusionLvlUp1 = 3; uint256 public constant fusionLvlUp2 = 4; uint256 public constant fusionLvlUp3 = 5; uint256 public constant fusionLvlUp4 = 6; bool public paused = false; bool public genPaused = false; bool public limiter = true; bool public limiter2 = true; address public chillaContract; address public guineaContract; address public treasury; address public erc20Address; address public erc1155Address; mapping (uint256 => bool) public blacklist1; mapping (uint256 => bool) public blacklist2; mapping (uint256 => bool) public blacklist3; mapping (uint256 => uint256) public baseLevel; mapping (uint256 => uint256) public fusionLevel; mapping (uint256 => uint256) public jobLevel; mapping (uint256 => uint256) public bred1; mapping (uint256 => uint256) public bred2; mapping (uint256 => uint256) public bred3; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, address _treasury, address _erc20Address, address _guineaContract, address _chillaContract, address _erc1155Address ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); treasury = _treasury; erc20Address = _erc20Address; guineaContract = _guineaContract; chillaContract = _chillaContract; erc1155Address = _erc1155Address; } // internal function calcTax(uint256 _amount, uint256 taxRate) internal pure returns (uint256){ uint256 taxedAmount; taxedAmount = taxRate * _amount / 100; return taxedAmount; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function erc20Burn(uint256 _amount) internal { IBurn(erc20Address).burn(_amount); } function lootBurn(address owner, uint _id, uint _amount) internal{ IBurner(erc1155Address).lootBurn(owner, _id, _amount); } function balanceChecker1() internal returns (uint256) { uint256 balance; IBalance _balance = IBalance(guineaContract); return balance = _balance.balanceOf(msg.sender); } function balanceChecker2() internal returns (uint256) { uint256 balance2; IBalance _balance2 = IBalance(chillaContract); return balance2 = _balance2.balanceOf(msg.sender); } function erc721Burn(uint256 tokenId) internal { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved"); _burn(tokenId); } // public function mintGuinea (uint256 tokenId) public nonReentrant(){ require(!paused, "the contract is paused"); require(trueSupply + 1 <= maxSupply, "Max Nfts Minted"); uint256 supply = totalSupply(); require(tokenId > 0, "TokenId can't be 0"); require(supply + 1 <= maxSupply, "max NFT limit exceeded"); require(IOwner(guineaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner"); uint256 balance1 = balanceChecker1(); uint256 balance2 = balanceChecker2(); uint256 balance3 = balanceOf(msg.sender); require(balance1 >= 2 || balance2 >= 2 || balance3 >= 2 || (balance1 + balance2 + balance3) >= 2, "Need 2 MiniVerse nfts"); require(blacklist1[tokenId] == false, "MiniGuinea already breeded must unblacklist"); if(limiter == true){ require(bred1[tokenId] < limitCount, "Breed Limited"); } IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId)); erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95)); blacklist1[tokenId] = true; for (uint256 i = 1; i <= 1; i++) { _safeMint(msg.sender, trueSupply + i); baseLevel[trueSupply + i] = 0; fusionLevel[trueSupply + i] = 0; jobLevel[trueSupply + i] = 1; bred1[tokenId]++; trueSupply++; } } function mintChilla (uint256 tokenId) public nonReentrant(){ require(!paused, "the contract is paused"); require(trueSupply + 1 <= maxSupply, "Max Nfts Minted"); uint256 supply = totalSupply(); require(tokenId > 0, "TokenId can't be 0"); require(supply + 1 <= maxSupply, "max NFT limit exceeded"); require(IOwner(chillaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner"); uint256 balance1 = balanceChecker1(); uint256 balance2 = balanceChecker2(); uint256 balance3 = balanceOf(msg.sender); require(balance1 >= 2 || balance2 >= 2 || balance3 >= 2 || (balance1 + balance2 + balance3) >= 2, "Need 2 MiniVerse nfts"); require(blacklist2[tokenId] == false, "MiniChilla already breeded must unblacklist"); if(limiter == true){ require(bred2[tokenId] < limitCount, "Breed Limited"); } IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId)); erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95)); blacklist2[tokenId] = true; for (uint256 i = 1; i <= 1; i++) { _safeMint(msg.sender, trueSupply + i); baseLevel[trueSupply + i] = 0; fusionLevel[trueSupply + i] = 0; jobLevel[trueSupply + i] = 1; bred2[tokenId]++; trueSupply++; } } function mintFren (uint256 tokenId) public nonReentrant(){ require(!paused, "the contract is paused"); require(!genPaused, "the Gen Minting is paused"); require(trueSupply + 1 <= maxSupply, "Max Nfts Minted"); uint256 supply = totalSupply(); require(tokenId > 0, "TokenId can't be 0"); require(supply + 1 <= maxSupply, "max NFT limit exceeded"); require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved"); require(baseLevel[tokenId] >= 12, "need to be atleast baseLevel 12"); uint256 balance1 = balanceChecker1(); uint256 balance2 = balanceChecker2(); uint256 balance3 = balanceOf(msg.sender); require(balance1 >= 2 || balance2 >= 2 || balance3 >= 2 || (balance1 + balance2 + balance3) >= 2, "Need 2 MiniVerse nfts"); require(blacklist3[tokenId] == false, "MiniFren already breeded must unblacklist"); if(limiter2 == true){ require(bred3[tokenId] < limitCount2, "Breed Limited"); } IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), cost + 10 ether * generationCheck(tokenId)); erc20Burn(calcTax(cost + 10 ether * generationCheck(tokenId), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(cost + 10 ether * generationCheck(tokenId), 95)); blacklist3[tokenId] = true; for (uint256 i = 1; i <= 1; i++) { _safeMint(msg.sender, trueSupply + i); baseLevel[trueSupply + i] = 0; fusionLevel[trueSupply + i] = 0; jobLevel[trueSupply + i] = 1; bred3[tokenId]++; trueSupply++; } } function ownerMint() public onlyOwner{ for (uint256 i = 1; i <= 1; i++) { _safeMint(msg.sender, trueSupply + i); baseLevel[trueSupply + i] = 0; fusionLevel[trueSupply + i] = 0; jobLevel[trueSupply + i] = 1; trueSupply++; } } function frenLevelUp(uint256 tokenId) public nonReentrant(){ require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved"); uint256 curLevel = baseLevel[tokenId]; require(curLevel < 100, "Max Level"); lootBurn(msg.sender, MiniCandy, levelCandyRate(tokenId)); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (levelGenRate(tokenId) * curLevel)); IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (levelGenRate(tokenId) * curLevel), 95)); erc20Burn(calcTax(1 ether + (levelGenRate(tokenId) * curLevel), 5)); baseLevel[tokenId]++; } function jobLevelUp(uint256 tokenId) public nonReentrant(){ require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved"); uint256 curLevel = jobLevel[tokenId]; require(curLevel < 8, "Max Level"); lootBurn(msg.sender, jobLvlUp, curLevel); jobLevel[tokenId]++; } function fusionLevelUp(uint256 burning, uint256 leveling) public nonReentrant(){ require(_isApprovedOrOwner(_msgSender(), burning), "burning is not owner nor approved"); require(_isApprovedOrOwner(_msgSender(), leveling), "leveling is not owner nor approved"); uint256 curLevel = fusionLevel[leveling]; uint256 curBase = baseLevel[burning]; if(curLevel == 12){ revert("Max Level"); }else if(curLevel < 2){ require(baseLevel[leveling] >= 25, "baseLevel Must be 25 or higher for leveling"); require(baseLevel[burning] >= 12, "baseLevel Must be 12 or higher for burning"); require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling"); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 4 ether + (500000000000000000 * curBase)); erc20Burn(calcTax(4 ether + (500000000000000000 * curBase), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(4 ether + (500000000000000000 * curBase), 95)); erc721Burn(burning); baseLevel[burning] = 0; fusionLevel[leveling]++; }else if(curLevel < 4){ require(baseLevel[leveling] >= 50, "baseLevel Must be 50 or higher for leveling"); require(baseLevel[burning] >= 25, "baseLevel Must be 25 or higher for burning"); require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling"); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase)); erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95)); erc721Burn(burning); baseLevel[burning] = 0; fusionLevel[leveling]++; }else if(curLevel < 8){ require(baseLevel[leveling] >= 75, "baseLevel Must be 75 or higher for leveling"); require(baseLevel[burning] >= 37, "baseLevel Must be 37 or higher for burning"); require(fusionLevel[burning] == 1, "fusionLevel Must be 1 for burning"); require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling"); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase)); erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95)); erc721Burn(burning); baseLevel[burning] = 0; fusionLevel[leveling]++; }else { require(baseLevel[leveling] >= 100, "baseLevel Must be 100 or higher for leveling"); require(baseLevel[burning] >= 50, "baseLevel Must be 50 or higher for burning"); require(fusionLevel[burning] == 2, "fusionLevel Must be 2 for burning"); require(generationCheck(leveling) <= generationCheck(burning), "Burning must be higher or equal gen to leveling"); IERC20(erc20Address).safeTransferFrom(msg.sender, address(this), 1 ether + (500000000000000000 * curBase)); erc20Burn(calcTax(1 ether + (500000000000000000 * curBase), 5)); IERC20(erc20Address).safeTransfer(treasury, calcTax(1 ether + (500000000000000000 * curBase), 95)); erc721Burn(burning); baseLevel[burning] = 0; fusionLevel[leveling]++; } } function clearBlacklist1(uint256 tokenId) public nonReentrant(){ require(IOwner(guineaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner"); require(blacklist1[tokenId] == true, "Not Blacklisted"); lootBurn(msg.sender, unBlacklist, 1); blacklist1[tokenId] = false; } function clearBlacklist2(uint256 tokenId) public nonReentrant(){ require(IOwner(chillaContract).ownerOf(tokenId) == msg.sender, "Not tokenId owner"); require(blacklist2[tokenId] == true, "Not Blacklisted"); lootBurn(msg.sender, unBlacklist, 1); blacklist2[tokenId] = false; } // generaton blacklist function clearBlacklist3(uint256 tokenId) public nonReentrant(){ require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved"); require(blacklist3[tokenId] == true, "Not Blacklisted"); lootBurn(msg.sender, unBlacklist, 1); blacklist3[tokenId] = false; } //view functions function jobLevelCheck(uint256 tokenId) public view returns(uint256 level){ return jobLevel[tokenId]; } function fusionLevelCheck(uint256 tokenId) public view returns(uint256 level){ return fusionLevel[tokenId]; } function baseLevelCheck(uint256 tokenId) public view returns(uint256 level){ return baseLevel[tokenId]; } function generationCheck(uint256 tokenId) public view returns(uint256 gen){ if(tokenId <= gen1){ return 1; }else if(tokenId <= gen2){ return 2; }else if(tokenId <= gen3){ return 3; }else if(tokenId <= gen4){ return 4; } } function levelGenRate(uint256 tokenId) public view returns(uint256 rate){ if(generationCheck(tokenId) == 1){ return genRate1; }else if(generationCheck(tokenId) == 2){ return genRate2; }else if(generationCheck(tokenId) == 3){ return genRate3; }else if(generationCheck(tokenId) == 4){ return genRate4; } } function levelCandyRate(uint256 tokenId) public view returns(uint256 rate){ if(baseLevel[tokenId] < 1){ return frate0; }else if(baseLevel[tokenId] < 5){ return frate1; }else if(baseLevel[tokenId] < 10){ return frate2; }else if(baseLevel[tokenId] < 15){ return frate3; }else if(baseLevel[tokenId] < 20){ return frate4; }else if(baseLevel[tokenId] < 25){ return frate5; }else if(baseLevel[tokenId] < 30){ return frate6; }else if(baseLevel[tokenId] < 35){ return frate7; }else if(baseLevel[tokenId] < 40){ return frate8; }else if(baseLevel[tokenId] < 45){ return frate9; }else if(baseLevel[tokenId] < 50){ return frate10; }else if(baseLevel[tokenId] < 60){ return frate11; }else if(baseLevel[tokenId] < 70){ return frate12; }else if(baseLevel[tokenId] < 80){ return frate13; }else if(baseLevel[tokenId] < 90){ return frate14; }else { return frate15; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory){ require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function checkBlacklist1(uint256 _tokenId) public view returns (bool) { return blacklist1[_tokenId]; } function checkBlacklist2(uint256 _tokenId) public view returns (bool) { return blacklist2[_tokenId]; } function checkBlacklist3(uint256 _tokenId) public view returns (bool) { return blacklist3[_tokenId]; } function _isApprovedOrOwnerPublic(address spender, uint256 tokenId) public view returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } //only owner function baselevelMaster (uint256 tokenId, uint256 level) public onlyOwner{ baseLevel[tokenId] = level; } function joblevelMaster (uint256 tokenId, uint256 level) public onlyOwner{ jobLevel[tokenId] = level; } function fuslevelMaster (uint256 tokenId, uint256 level) public onlyOwner{ fusionLevel[tokenId] = level; } function setErc20(address _newAddress) public onlyOwner { erc20Address = _newAddress; } function setErc1155(address _newAddress) public onlyOwner { erc1155Address = _newAddress; } function setTreasury(address _newAddress) public onlyOwner { treasury = _newAddress; } function setChillaContract(address _newAddress) public onlyOwner { chillaContract = _newAddress; } function setGuineaContract(address _newAddress) public onlyOwner { guineaContract = _newAddress; } function setMaxSupply(uint256 _newSupply) public onlyOwner { maxSupply = _newSupply; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setLimitCount(uint256 _new) public onlyOwner { limitCount = _new; } function setLimitCount2(uint256 _new) public onlyOwner { limitCount2 = _new; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function limitSet(bool _state) public onlyOwner { limiter = _state; } function limitSet2(bool _state) public onlyOwner { limiter2 = _state; } function genPause(bool _state) public onlyOwner { genPaused = _state; } function levelSwitchSetter(uint[] memory _newRate) public onlyOwner(){ require(_newRate.length == 4, "Need 4"); genRate1 = _newRate[0]; genRate2 = _newRate[1]; genRate3 = _newRate[2]; genRate4 = _newRate[3]; } function genSwitchSetter(uint[] memory _newRate) public onlyOwner(){ require(_newRate.length == 4, "Need 4"); gen1 = _newRate[0]; gen2 = _newRate[1]; gen3 = _newRate[2]; gen4 = _newRate[3]; } function fruitSwitch(uint256[] memory _newRate) public onlyOwner(){ require(_newRate.length == 16, "Need 16"); frate0 = _newRate[0]; frate1 = _newRate[1]; frate2 = _newRate[2]; frate3 = _newRate[3]; frate4 = _newRate[4]; frate5 = _newRate[5]; frate6 = _newRate[6]; frate7 = _newRate[7]; frate8 = _newRate[8]; frate9 = _newRate[9]; frate10 = _newRate[10]; frate11 = _newRate[11]; frate12 = _newRate[12]; frate13 = _newRate[13]; frate14 = _newRate[14]; frate15 = _newRate[15]; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function withdrawTokens(address _erc20Address, uint256 _amount) external onlyOwner() { IERC20(_erc20Address).safeTransfer(msg.sender, _amount); } function withdrawAllTokens() external onlyOwner() { uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this)); IERC20(erc20Address).safeTransfer(msg.sender, tokenSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"address","name":"_guineaContract","type":"address"},{"internalType":"address","name":"_chillaContract","type":"address"},{"internalType":"address","name":"_erc1155Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MiniCandy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"_isApprovedOrOwnerPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"baseLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"baseLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"baselevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklist3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bred3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkBlacklist3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chillaContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearBlacklist3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc1155Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate10","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate11","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate12","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate13","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate14","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate15","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate5","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate6","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate7","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate8","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"frate9","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"frenLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newRate","type":"uint256[]"}],"name":"fruitSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fusionLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"fusionLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burning","type":"uint256"},{"internalType":"uint256","name":"leveling","type":"uint256"}],"name":"fusionLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fusionLvlUp1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fusionLvlUp4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"fuslevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gen1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gen4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"genPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genRate4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newRate","type":"uint256[]"}],"name":"genSwitchSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"generationCheck","outputs":[{"internalType":"uint256","name":"gen","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guineaContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jobLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"jobLevelCheck","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"jobLevelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"jobLvlUp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"joblevelMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"levelCandyRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"levelGenRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_newRate","type":"uint256[]"}],"name":"levelSwitchSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitCount2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"limitSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"limitSet2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limiter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limiter2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintChilla","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintFren","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintGuinea","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":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setChillaContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setErc1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setGuineaContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setLimitCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setLimitCount2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trueSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unBlacklist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600d9190620002d6565b50678ac7230489e80000600e908155611f8c600f81815560006010819055670853a0d2313c0000601155670b1a2bc2ec500000601255670de0b6b3a76400006013556710a741a4627800006014556107e3601555610fc76016556117ab601755601892909255600360198190556001601a819055601b93909355601c929092556002601d55601e919091556004601f5560056020556006602155600760225560086023556009602455600a602555600b602655600c602755600d602855602991909155602a55602b805463ffffffff191663010100001790553480156200010e57600080fd5b506040516200650038038062006500833981016040819052620001319162000450565b8751889088906200014a906000906020850190620002d6565b50805162000160906001906020840190620002d6565b5050506200017d620001776200020860201b60201c565b6200020c565b6001600b556200018d866200025e565b602d80546001600160a01b039687166001600160a01b031991821617909155602e805495871695821695909517909455602c805493861693851693909317909255602b805491851664010000000002600160201b600160c01b0319909216919091179055602f80549190931691161790555062000592915050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620002bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620002d290600c906020840190620002d6565b5050565b828054620002e4906200053f565b90600052602060002090601f01602090048101928262000308576000855562000353565b82601f106200032357805160ff191683800117855562000353565b8280016001018555821562000353579182015b828111156200035357825182559160200191906001019062000336565b506200036192915062000365565b5090565b5b8082111562000361576000815560010162000366565b80516001600160a01b03811681146200039457600080fd5b919050565b600082601f830112620003ab57600080fd5b81516001600160401b0380821115620003c857620003c86200057c565b604051601f8301601f19908116603f01168101908282118183101715620003f357620003f36200057c565b816040528381526020925086838588010111156200041057600080fd5b600091505b8382101562000434578582018301518183018401529082019062000415565b83821115620004465760008385830101525b9695505050505050565b600080600080600080600080610100898b0312156200046e57600080fd5b88516001600160401b03808211156200048657600080fd5b620004948c838d0162000399565b995060208b0151915080821115620004ab57600080fd5b620004b98c838d0162000399565b985060408b0151915080821115620004d057600080fd5b50620004df8b828c0162000399565b965050620004f060608a016200037c565b94506200050060808a016200037c565b93506200051060a08a016200037c565b92506200052060c08a016200037c565b91506200053060e08a016200037c565b90509295985092959890939650565b600181811c908216806200055457607f821691505b602082108114156200057657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b615f5e80620005a26000396000f3fe6080604052600436106106a95760003560e01c8063715018a611610366578063c6682862116101c7578063e491f8ea116100fd578063f2fde38b116100ab578063fb0ecc3b1161007a578063fb0ecc3b146114ac578063fb671d8d146114c2578063fedbad66146114ef578063ff5edb5e1461150557600080fd5b8063f2fde38b14611426578063f36b0b2d14611446578063f7c2421b14611466578063f89441211461147c57600080fd5b8063e491f8ea14611331578063e879c50114611351578063e985e9c514611371578063ee05fedb146113ba578063ee9b80a4146113d0578063f0941398146113f0578063f0f442601461140657600080fd5b8063d51b0c6711610175578063d74c993911610144578063d74c9939146112a4578063d7fb5cc1146112d1578063da3ef23f146112f1578063df47ebc01461131157600080fd5b8063d51b0c671461122b578063d5abeb0114611258578063d6178a671461126e578063d65431cf1461128e57600080fd5b8063c66828621461118b578063c87b56dd146111a0578063cb4b6d9f146111c0578063ce65851f146111d6578063cfec028c146111eb578063d1cefc5414611201578063d4d35a0e1461121657600080fd5b80639a5210a81161029c578063b12dc9911161024a578063b88d4fde11610219578063b88d4fde146110fe578063baea4a241461111e578063bb07afbe1461113e578063c550a4011461116b57600080fd5b8063b12dc9911461109e578063b177bad8146110b3578063b2966838146110c8578063b2e2aa31146110de57600080fd5b80639a5210a814610fbc5780639a5fc62014610fdc5780639bed76eb14610ffc5780639f06549914611029578063a22cb4651461103e578063a585f9211461105e578063accb05671461107e57600080fd5b806389226ebf116103145780638e34510d116102e35780638e34510d14610f44578063933141bb14610f64578063943e0eb114610f9157806395d89b4114610fa757600080fd5b806389226ebf14610ecd5780638d15237414610ee35780638da5cb5b14610f105780638df287d614610f2e57600080fd5b8063715018a614610dfc57806372dea3fa14610e1157806374b87f6714610e3157806377a2068214610e515780637d9a0da514610e815780638686774014610e9757806388bebcf514610ead57600080fd5b806331ed4764116105105780634f6ccce71161044657806361d027b3116103f45780636c4585ce116103c35780636c4585ce14610d865780636f8b44b014610d9c57806370a0823114610dbc57806370a2550814610ddc57600080fd5b806361d027b314610d115780636352211e14610d315780636b9c839b14610d515780636c0360eb14610d7157600080fd5b80634f6ccce714610c4b57806350ddfbb514610c6b57806352591a5f14610c8b57806355f804b314610ca1578063560b87a014610cc157806359edf5ac14610cd75780635c975abb14610cf757600080fd5b80634469842b116104be57806347d9c83d1161048d57806347d9c83d14610bb85780634b4e41ee14610bce5780634c692ce514610bee5780634c89b21814610c1e57600080fd5b80634469842b14610b3c57806344a0d68a14610b5257806344b9917a14610b725780634589657d14610ba257600080fd5b806331ed476414610a9157806337012df514610aa75780633ccfd60b14610abc57806342842e0e14610ac4578063432b095414610ae4578063438b630014610afa578063440ea28714610b2757600080fd5b806316d96138116105e557806323d4c28211610593578063280da6fa11610562578063280da6fa14610a145780632b30c45d14610a295780632e3e3e0914610a495780632f745c5914610a7157600080fd5b806323d4c2821461099e57806325979c35146109be578063276184ae146109de57806327a7a557146109fe57600080fd5b806316d96138146108b257806318160ddd146108d25780631a2a9974146108e757806321005149146108fd5780632178d5d41461091e57806323b872dd1461094e57806323c66a491461096e57600080fd5b80630556127f1161065d57806308347f151161062c57806308347f1514610839578063095ea7b31461084f57806313faede61461086f5780631477595a1461088557600080fd5b80630556127f146107b757806306b091f9146107d757806306fdde03146107f7578063081812fc1461081957600080fd5b806204a1b1146106ae578062922359146106d057806301959b06146106f957806301ffc9a71461070f57806302329a291461073f57806303b4f2e71461075f578063051420021461077f575b600080fd5b3480156106ba57600080fd5b506106ce6106c936600461584f565b611524565b005b3480156106dc57600080fd5b506106e6602a5481565b6040519081526020015b60405180910390f35b34801561070557600080fd5b506106e660295481565b34801561071b57600080fd5b5061072f61072a3660046157cc565b6119af565b60405190151581526020016106f0565b34801561074b57600080fd5b506106ce61075a366004615792565b6119da565b34801561076b57600080fd5b506106ce61077a36600461584f565b611a17565b34801561078b57600080fd5b50602f5461079f906001600160a01b031681565b6040516001600160a01b0390911681526020016106f0565b3480156107c357600080fd5b506106ce6107d236600461584f565b611a46565b3480156107e357600080fd5b506106ce6107f23660046156b9565b611af1565b34801561080357600080fd5b5061080c611b33565b6040516106f09190615a30565b34801561082557600080fd5b5061079f61083436600461584f565b611bc5565b34801561084557600080fd5b506106e660225481565b34801561085b57600080fd5b506106ce61086a3660046156b9565b611c5a565b34801561087b57600080fd5b506106e6600e5481565b34801561089157600080fd5b506106e66108a036600461584f565b60336020526000908152604090205481565b3480156108be57600080fd5b506106ce6108cd3660046156e5565b611d70565b3480156108de57600080fd5b506008546106e6565b3480156108f357600080fd5b506106e660265481565b34801561090957600080fd5b50602b5461072f906301000000900460ff1681565b34801561092a57600080fd5b5061072f61093936600461584f565b60009081526031602052604090205460ff1690565b34801561095a57600080fd5b506106ce6109693660046155ca565b611fe8565b34801561097a57600080fd5b5061072f61098936600461584f565b60306020526000908152604090205460ff1681565b3480156109aa57600080fd5b506106ce6109b9366004615792565b612018565b3480156109ca57600080fd5b5061072f6109d93660046156b9565b61205e565b3480156109ea57600080fd5b50602e5461079f906001600160a01b031681565b348015610a0a57600080fd5b506106e6601a5481565b348015610a2057600080fd5b506106ce612155565b348015610a3557600080fd5b506106ce610a4436600461584f565b612218565b348015610a5557600080fd5b50602b5461079f9064010000000090046001600160a01b031681565b348015610a7d57600080fd5b506106e6610a8c3660046156b9565b612247565b348015610a9d57600080fd5b506106e660125481565b348015610ab357600080fd5b506106e6600481565b6106ce6122dd565b348015610ad057600080fd5b506106ce610adf3660046155ca565b612378565b348015610af057600080fd5b506106e660195481565b348015610b0657600080fd5b50610b1a610b15366004615557565b612393565b6040516106f091906159ec565b348015610b3357600080fd5b506106e6600281565b348015610b4857600080fd5b506106e6601e5481565b348015610b5e57600080fd5b506106ce610b6d36600461584f565b612435565b348015610b7e57600080fd5b5061072f610b8d36600461584f565b60009081526030602052604090205460ff1690565b348015610bae57600080fd5b506106e660155481565b348015610bc457600080fd5b506106e6601c5481565b348015610bda57600080fd5b506106ce610be93660046156e5565b612464565b348015610bfa57600080fd5b5061072f610c0936600461584f565b60009081526032602052604090205460ff1690565b348015610c2a57600080fd5b506106e6610c3936600461584f565b60366020526000908152604090205481565b348015610c5757600080fd5b506106e6610c6636600461584f565b61254f565b348015610c7757600080fd5b506106ce610c86366004615881565b6125e2565b348015610c9757600080fd5b506106e660275481565b348015610cad57600080fd5b506106ce610cbc366004615806565b61261e565b348015610ccd57600080fd5b506106e660115481565b348015610ce357600080fd5b506106ce610cf236600461584f565b61265b565b348015610d0357600080fd5b50602b5461072f9060ff1681565b348015610d1d57600080fd5b50602d5461079f906001600160a01b031681565b348015610d3d57600080fd5b5061079f610d4c36600461584f565b61270b565b348015610d5d57600080fd5b506106e6610d6c36600461584f565b612782565b348015610d7d57600080fd5b5061080c6127cd565b348015610d9257600080fd5b506106e660205481565b348015610da857600080fd5b506106ce610db736600461584f565b61285b565b348015610dc857600080fd5b506106e6610dd7366004615557565b61288a565b348015610de857600080fd5b506106e6610df736600461584f565b612911565b348015610e0857600080fd5b506106ce612aea565b348015610e1d57600080fd5b506106ce610e2c366004615881565b612b20565b348015610e3d57600080fd5b50602b5461072f9062010000900460ff1681565b348015610e5d57600080fd5b5061072f610e6c36600461584f565b60326020526000908152604090205460ff1681565b348015610e8d57600080fd5b506106e660135481565b348015610ea357600080fd5b506106e660105481565b348015610eb957600080fd5b506106ce610ec8366004615881565b613341565b348015610ed957600080fd5b506106e660245481565b348015610eef57600080fd5b506106e6610efe36600461584f565b60009081526033602052604090205490565b348015610f1c57600080fd5b50600a546001600160a01b031661079f565b348015610f3a57600080fd5b506106e660145481565b348015610f5057600080fd5b506106ce610f5f366004615792565b61337d565b348015610f7057600080fd5b506106e6610f7f36600461584f565b60376020526000908152604090205481565b348015610f9d57600080fd5b506106e6601b5481565b348015610fb357600080fd5b5061080c6133c5565b348015610fc857600080fd5b506106ce610fd736600461584f565b6133d4565b348015610fe857600080fd5b506106ce610ff7366004615557565b6137b5565b34801561100857600080fd5b506106e661101736600461584f565b60356020526000908152604090205481565b34801561103557600080fd5b506106e6600381565b34801561104a57600080fd5b506106ce61105936600461568b565b613801565b34801561106a57600080fd5b50602c5461079f906001600160a01b031681565b34801561108a57600080fd5b506106ce6110993660046156e5565b6138c6565b3480156110aa57600080fd5b506106ce6139b1565b3480156110bf57600080fd5b506106e6600081565b3480156110d457600080fd5b506106e660255481565b3480156110ea57600080fd5b506106ce6110f9366004615557565b613a95565b34801561110a57600080fd5b506106ce61111936600461560b565b613aed565b34801561112a57600080fd5b506106ce61113936600461584f565b613b24565b34801561114a57600080fd5b506106e661115936600461584f565b60009081526034602052604090205490565b34801561117757600080fd5b506106ce611186366004615792565b613c54565b34801561119757600080fd5b5061080c613c98565b3480156111ac57600080fd5b5061080c6111bb36600461584f565b613ca5565b3480156111cc57600080fd5b506106e6601f5481565b3480156111e257600080fd5b506106e6600581565b3480156111f757600080fd5b506106e660215481565b34801561120d57600080fd5b506106e6600681565b34801561122257600080fd5b506106e6600181565b34801561123757600080fd5b506106e661124636600461584f565b60009081526035602052604090205490565b34801561126457600080fd5b506106e6600f5481565b34801561127a57600080fd5b506106ce61128936600461584f565b613d83565b34801561129a57600080fd5b506106e660235481565b3480156112b057600080fd5b506106e66112bf36600461584f565b60346020526000908152604090205481565b3480156112dd57600080fd5b506106ce6112ec366004615557565b613eab565b3480156112fd57600080fd5b506106ce61130c366004615806565b613ef7565b34801561131d57600080fd5b506106ce61132c36600461584f565b613f34565b34801561133d57600080fd5b506106ce61134c366004615881565b614344565b34801561135d57600080fd5b506106e661136c36600461584f565b614380565b34801561137d57600080fd5b5061072f61138c366004615591565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156113c657600080fd5b506106e660285481565b3480156113dc57600080fd5b506106ce6113eb366004615557565b6143e6565b3480156113fc57600080fd5b506106e660165481565b34801561141257600080fd5b506106ce611421366004615557565b614432565b34801561143257600080fd5b506106ce611441366004615557565b61447e565b34801561145257600080fd5b506106ce61146136600461584f565b614516565b34801561147257600080fd5b506106e660175481565b34801561148857600080fd5b5061072f61149736600461584f565b60316020526000908152604090205460ff1681565b3480156114b857600080fd5b506106e6601d5481565b3480156114ce57600080fd5b506106e66114dd36600461584f565b60386020526000908152604090205481565b3480156114fb57600080fd5b506106e660185481565b34801561151157600080fd5b50602b5461072f90610100900460ff1681565b6002600b5414156115505760405162461bcd60e51b815260040161154790615d21565b60405180910390fd5b6002600b55602b5460ff16156115785760405162461bcd60e51b815260040161154790615c1c565b600f54601054611589906001615d89565b11156115a75760405162461bcd60e51b815260040161154790615bf3565b60006115b260085490565b9050600082116115d45760405162461bcd60e51b815260040161154790615ae3565b600f546115e2826001615d89565b11156116005760405162461bcd60e51b815260040161154790615b8e565b602c546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381600087803b15801561164657600080fd5b505af115801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190615574565b6001600160a01b0316146116a45760405162461bcd60e51b815260040161154790615a43565b60006116ae61461a565b905060006116ba61469f565b905060006116c73361288a565b90506002831015806116da575060028210155b806116e6575060028110155b8061170657506002816116f98486615d89565b6117039190615d89565b10155b6117225760405162461bcd60e51b815260040161154790615b0f565b60008581526030602052604090205460ff16156117955760405162461bcd60e51b815260206004820152602b60248201527f4d696e694775696e656120616c72656164792062726565646564206d7573742060448201526a1d5b989b1858dadb1a5cdd60aa1b6064820152608401611547565b602b5462010000900460ff161515600114156117da57601954600086815260366020526040902054106117da5760405162461bcd60e51b815260040161154790615b3e565b61181b33306117e888612782565b6117fa90678ac7230489e80000615db5565b600e546118079190615d89565b602e546001600160a01b03169291906146dd565b61185561185061182a87612782565b61183c90678ac7230489e80000615db5565b600e546118499190615d89565b6005614748565b614761565b602d546118aa906001600160a01b031661189761187188612782565b61188390678ac7230489e80000615db5565b600e546118909190615d89565b605f614748565b602e546001600160a01b031691906147c2565b6000858152603060205260409020805460ff191660019081179091555b600181116119a2576118e633826010546118e19190615d89565b6147f2565b600060336000836010546118fa9190615d89565b815260200190815260200160002081905550600060346000836010546119209190615d89565b815260200190815260200160002081905550600160356000836010546119469190615d89565b815260208082019290925260409081016000908120939093558883526036909152812080549161197583615e52565b90915550506010805490600061198a83615e52565b9190505550808061199a90615e52565b9150506118c7565b50506001600b5550505050565b60006001600160e01b0319821663780e9d6360e01b14806119d457506119d48261480c565b92915050565b600a546001600160a01b03163314611a045760405162461bcd60e51b815260040161154790615bbe565b602b805460ff1916911515919091179055565b600a546001600160a01b03163314611a415760405162461bcd60e51b815260040161154790615bbe565b601a55565b6002600b541415611a695760405162461bcd60e51b815260040161154790615d21565b6002600b55611a79335b8261205e565b611a955760405162461bcd60e51b815260040161154790615c4c565b60008181526032602052604090205460ff161515600114611ac85760405162461bcd60e51b815260040161154790615b65565b611ad43360018061485c565b6000908152603260205260409020805460ff191690556001600b55565b600a546001600160a01b03163314611b1b5760405162461bcd60e51b815260040161154790615bbe565b611b2f6001600160a01b03831633836147c2565b5050565b606060008054611b4290615e17565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6e90615e17565b8015611bbb5780601f10611b9057610100808354040283529160200191611bbb565b820191906000526020600020905b815481529060010190602001808311611b9e57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316611c3e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401611547565b506000908152600460205260409020546001600160a01b031690565b6000611c658261270b565b9050806001600160a01b0316836001600160a01b03161415611cd35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401611547565b336001600160a01b0382161480611cef5750611cef813361138c565b611d615760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401611547565b611d6b83836148ce565b505050565b600a546001600160a01b03163314611d9a5760405162461bcd60e51b815260040161154790615bbe565b8051601014611dd55760405162461bcd60e51b81526020600482015260076024820152662732b2b210189b60c91b6044820152606401611547565b80600081518110611de857611de8615ec3565b6020026020010151601b8190555080600181518110611e0957611e09615ec3565b6020026020010151601c8190555080600281518110611e2a57611e2a615ec3565b6020026020010151601d8190555080600381518110611e4b57611e4b615ec3565b6020026020010151601e8190555080600481518110611e6c57611e6c615ec3565b6020026020010151601f8190555080600581518110611e8d57611e8d615ec3565b602002602001015160208190555080600681518110611eae57611eae615ec3565b602002602001015160218190555080600781518110611ecf57611ecf615ec3565b602002602001015160228190555080600881518110611ef057611ef0615ec3565b602002602001015160238190555080600981518110611f1157611f11615ec3565b602002602001015160248190555080600a81518110611f3257611f32615ec3565b602002602001015160258190555080600b81518110611f5357611f53615ec3565b602002602001015160268190555080600c81518110611f7457611f74615ec3565b602002602001015160278190555080600d81518110611f9557611f95615ec3565b602002602001015160288190555080600e81518110611fb657611fb6615ec3565b602002602001015160298190555080600f81518110611fd757611fd7615ec3565b6020026020010151602a8190555050565b611ff133611a73565b61200d5760405162461bcd60e51b815260040161154790615c81565b611d6b83838361493c565b600a546001600160a01b031633146120425760405162461bcd60e51b815260040161154790615bbe565b602b8054911515620100000262ff000019909216919091179055565b6000818152600260205260408120546001600160a01b03166120d75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401611547565b60006120e28361270b565b9050806001600160a01b0316846001600160a01b0316148061211d5750836001600160a01b031661211284611bc5565b6001600160a01b0316145b8061214d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b600a546001600160a01b0316331461217f5760405162461bcd60e51b815260040161154790615bbe565b602e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156121c357600080fd5b505afa1580156121d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fb9190615868565b602e54909150612215906001600160a01b031633836147c2565b50565b600a546001600160a01b031633146122425760405162461bcd60e51b815260040161154790615bbe565b601955565b60006122528361288a565b82106122b45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401611547565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146123075760405162461bcd60e51b815260040161154790615bbe565b600061231b600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612365576040519150601f19603f3d011682016040523d82523d6000602084013e61236a565b606091505b505090508061221557600080fd5b611d6b83838360405180602001604052806000815250613aed565b606060006123a08361288a565b905060008167ffffffffffffffff8111156123bd576123bd615ed9565b6040519080825280602002602001820160405280156123e6578160200160208202803683370190505b50905060005b8281101561242d576123fe8582612247565b82828151811061241057612410615ec3565b60209081029190910101528061242581615e52565b9150506123ec565b509392505050565b600a546001600160a01b0316331461245f5760405162461bcd60e51b815260040161154790615bbe565b600e55565b600a546001600160a01b0316331461248e5760405162461bcd60e51b815260040161154790615bbe565b80516004146124c85760405162461bcd60e51b815260206004820152600660248201526513995959080d60d21b6044820152606401611547565b806000815181106124db576124db615ec3565b6020026020010151601181905550806001815181106124fc576124fc615ec3565b60200260200101516012819055508060028151811061251d5761251d615ec3565b60200260200101516013819055508060038151811061253e5761253e615ec3565b602002602001015160148190555050565b600061255a60085490565b82106125bd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401611547565b600882815481106125d0576125d0615ec3565b90600052602060002001549050919050565b600a546001600160a01b0316331461260c5760405162461bcd60e51b815260040161154790615bbe565b60009182526034602052604090912055565b600a546001600160a01b031633146126485760405162461bcd60e51b815260040161154790615bbe565b8051611b2f90600c906020840190615466565b6002600b54141561267e5760405162461bcd60e51b815260040161154790615d21565b6002600b5561268c33611a73565b6126a85760405162461bcd60e51b815260040161154790615c4c565b600081815260356020526040902054600881106126d75760405162461bcd60e51b815260040161154790615ac0565b6126e33360028361485c565b60008281526035602052604081208054916126fd83615e52565b90915550506001600b555050565b6000818152600260205260408120546001600160a01b0316806119d45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401611547565b6000601554821161279557506001919050565b60165482116127a657506002919050565b60175482116127b757506003919050565b60185482116127c857506004919050565b919050565b600c80546127da90615e17565b80601f016020809104026020016040519081016040528092919081815260200182805461280690615e17565b80156128535780601f1061282857610100808354040283529160200191612853565b820191906000526020600020905b81548152906001019060200180831161283657829003601f168201915b505050505081565b600a546001600160a01b031633146128855760405162461bcd60e51b815260040161154790615bbe565b600f55565b60006001600160a01b0382166128f55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401611547565b506001600160a01b031660009081526003602052604090205490565b60008181526033602052604081205460011115612930575050601b5490565b6000828152603360205260409020546005111561294f575050601c5490565b600082815260336020526040902054600a111561296e575050601d5490565b600082815260336020526040902054600f111561298d575050601e5490565b600082815260336020526040902054601411156129ac575050601f5490565b600082815260336020526040902054601911156129cb57505060205490565b600082815260336020526040902054601e11156129ea57505060215490565b60008281526033602052604090205460231115612a0957505060225490565b60008281526033602052604090205460281115612a2857505060235490565b600082815260336020526040902054602d1115612a4757505060245490565b60008281526033602052604090205460321115612a6657505060255490565b600082815260336020526040902054603c1115612a8557505060265490565b60008281526033602052604090205460461115612aa457505060275490565b60008281526033602052604090205460501115612ac357505060285490565b600082815260336020526040902054605a1115612ae257505060295490565b5050602a5490565b600a546001600160a01b03163314612b145760405162461bcd60e51b815260040161154790615bbe565b612b1e6000614ae7565b565b6002600b541415612b435760405162461bcd60e51b815260040161154790615d21565b6002600b55612b53335b8361205e565b612ba95760405162461bcd60e51b815260206004820152602160248201527f6275726e696e67206973206e6f74206f776e6572206e6f7220617070726f76656044820152601960fa1b6064820152608401611547565b612bb233611a73565b612c095760405162461bcd60e51b815260206004820152602260248201527f6c6576656c696e67206973206e6f74206f776e6572206e6f7220617070726f76604482015261195960f21b6064820152608401611547565b600081815260346020908152604080832054858452603390925290912054600c821415612c485760405162461bcd60e51b815260040161154790615ac0565b6002821015612e2d5760008381526033602052604090205460191115612cc45760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203235206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611547565b600084815260336020526040902054600c1115612d365760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203132206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611547565b612d3f84612782565b612d4884612782565b1115612d665760405162461bcd60e51b815260040161154790615cd2565b612d8f3330612d7d846706f05b59d3b20000615db5565b61180790673782dace9d900000615d89565b612db9611850612da7836706f05b59d3b20000615db5565b61184990673782dace9d900000615d89565b602d54612df0906001600160a01b0316611897612dde846706f05b59d3b20000615db5565b61189090673782dace9d900000615d89565b612df984614b39565b600084815260336020908152604080832083905585835260349091528120805491612e2383615e52565b9190505550613336565b6004821015612fd55760008381526033602052604090205460321115612ea95760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203530206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611547565b60008481526033602052604090205460191115612f1b5760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203235206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611547565b612f2484612782565b612f2d84612782565b1115612f4b5760405162461bcd60e51b815260040161154790615cd2565b612f743330612f62846706f05b59d3b20000615db5565b61180790670de0b6b3a7640000615d89565b612f9e611850612f8c836706f05b59d3b20000615db5565b61184990670de0b6b3a7640000615d89565b602d54612df0906001600160a01b0316611897612fc3846706f05b59d3b20000615db5565b61189090670de0b6b3a7640000615d89565b600882101561312b57600083815260336020526040902054604b11156130515760405162461bcd60e51b815260206004820152602b60248201527f626173654c6576656c204d757374206265203735206f7220686967686572206660448201526a6f72206c6576656c696e6760a81b6064820152608401611547565b600084815260336020526040902054602511156130c35760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203337206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611547565b600084815260346020526040902054600114612f1b5760405162461bcd60e51b815260206004820152602160248201527f667573696f6e4c6576656c204d757374206265203120666f72206275726e696e6044820152606760f81b6064820152608401611547565b6000838152603360205260409020546064111561319f5760405162461bcd60e51b815260206004820152602c60248201527f626173654c6576656c204d75737420626520313030206f72206869676865722060448201526b666f72206c6576656c696e6760a01b6064820152608401611547565b600084815260336020526040902054603211156132115760405162461bcd60e51b815260206004820152602a60248201527f626173654c6576656c204d757374206265203530206f722068696768657220666044820152696f72206275726e696e6760b01b6064820152608401611547565b6000848152603460205260409020546002146132795760405162461bcd60e51b815260206004820152602160248201527f667573696f6e4c6576656c204d757374206265203220666f72206275726e696e6044820152606760f81b6064820152608401611547565b61328284612782565b61328b84612782565b11156132a95760405162461bcd60e51b815260040161154790615cd2565b6132c03330612f62846706f05b59d3b20000615db5565b6132d8611850612f8c836706f05b59d3b20000615db5565b602d546132fd906001600160a01b0316611897612fc3846706f05b59d3b20000615db5565b61330684614b39565b60008481526033602090815260408083208390558583526034909152812080549161333083615e52565b91905055505b50506001600b555050565b600a546001600160a01b0316331461336b5760405162461bcd60e51b815260040161154790615bbe565b60009182526035602052604090912055565b600a546001600160a01b031633146133a75760405162461bcd60e51b815260040161154790615bbe565b602b805491151563010000000263ff00000019909216919091179055565b606060018054611b4290615e17565b6002600b5414156133f75760405162461bcd60e51b815260040161154790615d21565b6002600b55602b5460ff161561341f5760405162461bcd60e51b815260040161154790615c1c565b600f54601054613430906001615d89565b111561344e5760405162461bcd60e51b815260040161154790615bf3565b600061345960085490565b90506000821161347b5760405162461bcd60e51b815260040161154790615ae3565b600f54613489826001615d89565b11156134a75760405162461bcd60e51b815260040161154790615b8e565b602b546040516331a9108f60e11b815260048101849052339164010000000090046001600160a01b031690636352211e90602401602060405180830381600087803b1580156134f557600080fd5b505af1158015613509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352d9190615574565b6001600160a01b0316146135535760405162461bcd60e51b815260040161154790615a43565b600061355d61461a565b9050600061356961469f565b905060006135763361288a565b9050600283101580613589575060028210155b80613595575060028110155b806135b557506002816135a88486615d89565b6135b29190615d89565b10155b6135d15760405162461bcd60e51b815260040161154790615b0f565b60008581526031602052604090205460ff16156136445760405162461bcd60e51b815260206004820152602b60248201527f4d696e694368696c6c6120616c72656164792062726565646564206d7573742060448201526a1d5b989b1858dadb1a5cdd60aa1b6064820152608401611547565b602b5462010000900460ff1615156001141561368957601954600086815260376020526040902054106136895760405162461bcd60e51b815260040161154790615b3e565b61369733306117e888612782565b6136a661185061182a87612782565b602d546136c2906001600160a01b031661189761187188612782565b6000858152603160205260409020805460ff191660019081179091555b600181116119a2576136f933826010546118e19190615d89565b6000603360008360105461370d9190615d89565b815260200190815260200160002081905550600060346000836010546137339190615d89565b815260200190815260200160002081905550600160356000836010546137599190615d89565b815260208082019290925260409081016000908120939093558883526037909152812080549161378883615e52565b90915550506010805490600061379d83615e52565b919050555080806137ad90615e52565b9150506136df565b600a546001600160a01b031633146137df5760405162461bcd60e51b815260040161154790615bbe565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821633141561385a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401611547565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146138f05760405162461bcd60e51b815260040161154790615bbe565b805160041461392a5760405162461bcd60e51b815260206004820152600660248201526513995959080d60d21b6044820152606401611547565b8060008151811061393d5761393d615ec3565b60200260200101516015819055508060018151811061395e5761395e615ec3565b60200260200101516016819055508060028151811061397f5761397f615ec3565b6020026020010151601781905550806003815181106139a0576139a0615ec3565b602002602001015160188190555050565b600a546001600160a01b031633146139db5760405162461bcd60e51b815260040161154790615bbe565b60015b60018111612215576139f833826010546118e19190615d89565b60006033600083601054613a0c9190615d89565b81526020019081526020016000208190555060006034600083601054613a329190615d89565b81526020019081526020016000208190555060016035600083601054613a589190615d89565b81526020019081526020016000208190555060106000815480929190613a7d90615e52565b91905055508080613a8d90615e52565b9150506139de565b600a546001600160a01b03163314613abf5760405162461bcd60e51b815260040161154790615bbe565b602b80546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b613af633612b4d565b613b125760405162461bcd60e51b815260040161154790615c81565b613b1e84848484614b67565b50505050565b6002600b541415613b475760405162461bcd60e51b815260040161154790615d21565b6002600b55602b546040516331a9108f60e11b815260048101839052339164010000000090046001600160a01b031690636352211e90602401602060405180830381600087803b158015613b9a57600080fd5b505af1158015613bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd29190615574565b6001600160a01b031614613bf85760405162461bcd60e51b815260040161154790615a43565b60008181526031602052604090205460ff161515600114613c2b5760405162461bcd60e51b815260040161154790615b65565b613c373360018061485c565b6000908152603160205260409020805460ff191690556001600b55565b600a546001600160a01b03163314613c7e5760405162461bcd60e51b815260040161154790615bbe565b602b80549115156101000261ff0019909216919091179055565b600d80546127da90615e17565b6000818152600260205260409020546060906001600160a01b0316613d245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401611547565b6000613d2e614b9a565b90506000815111613d4e5760405180602001604052806000815250613d7c565b80613d5884614ba9565b600d604051602001613d6c939291906158eb565b6040516020818303038152906040525b9392505050565b6002600b541415613da65760405162461bcd60e51b815260040161154790615d21565b6002600b55602c546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e90602401602060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e299190615574565b6001600160a01b031614613e4f5760405162461bcd60e51b815260040161154790615a43565b60008181526030602052604090205460ff161515600114613e825760405162461bcd60e51b815260040161154790615b65565b613e8e3360018061485c565b6000908152603060205260409020805460ff191690556001600b55565b600a546001600160a01b03163314613ed55760405162461bcd60e51b815260040161154790615bbe565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314613f215760405162461bcd60e51b815260040161154790615bbe565b8051611b2f90600d906020840190615466565b6002600b541415613f575760405162461bcd60e51b815260040161154790615d21565b6002600b55602b5460ff1615613f7f5760405162461bcd60e51b815260040161154790615c1c565b602b54610100900460ff1615613fd75760405162461bcd60e51b815260206004820152601960248201527f7468652047656e204d696e74696e6720697320706175736564000000000000006044820152606401611547565b600f54601054613fe8906001615d89565b11156140065760405162461bcd60e51b815260040161154790615bf3565b600061401160085490565b9050600082116140335760405162461bcd60e51b815260040161154790615ae3565b600f54614041826001615d89565b111561405f5760405162461bcd60e51b815260040161154790615b8e565b61406833612b4d565b6140845760405162461bcd60e51b815260040161154790615c4c565b600082815260336020526040902054600c11156140e35760405162461bcd60e51b815260206004820152601f60248201527f6e65656420746f2062652061746c6561737420626173654c6576656c203132006044820152606401611547565b60006140ed61461a565b905060006140f961469f565b905060006141063361288a565b9050600283101580614119575060028210155b80614125575060028110155b8061414557506002816141388486615d89565b6141429190615d89565b10155b6141615760405162461bcd60e51b815260040161154790615b0f565b60008581526032602052604090205460ff16156141d25760405162461bcd60e51b815260206004820152602960248201527f4d696e694672656e20616c72656164792062726565646564206d75737420756e604482015268189b1858dadb1a5cdd60ba1b6064820152608401611547565b602b546301000000900460ff1615156001141561421857601a54600086815260386020526040902054106142185760405162461bcd60e51b815260040161154790615b3e565b61422633306117e888612782565b61423561185061182a87612782565b602d54614251906001600160a01b031661189761187188612782565b6000858152603260205260409020805460ff191660019081179091555b600181116119a25761428833826010546118e19190615d89565b6000603360008360105461429c9190615d89565b815260200190815260200160002081905550600060346000836010546142c29190615d89565b815260200190815260200160002081905550600160356000836010546142e89190615d89565b815260208082019290925260409081016000908120939093558883526038909152812080549161431783615e52565b90915550506010805490600061432c83615e52565b9190505550808061433c90615e52565b91505061426e565b600a546001600160a01b0316331461436e5760405162461bcd60e51b815260040161154790615bbe565b60009182526033602052604090912055565b600061438b82612782565b6001141561439b57505060115490565b6143a482612782565b600214156143b457505060125490565b6143bd82612782565b600314156143cd57505060135490565b6143d682612782565b600414156127c857505060145490565b600a546001600160a01b031633146144105760405162461bcd60e51b815260040161154790615bbe565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331461445c5760405162461bcd60e51b815260040161154790615bbe565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031633146144a85760405162461bcd60e51b815260040161154790615bbe565b6001600160a01b03811661450d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611547565b61221581614ae7565b6002600b5414156145395760405162461bcd60e51b815260040161154790615d21565b6002600b5561454733611a73565b6145635760405162461bcd60e51b815260040161154790615c4c565b600081815260336020526040902054606481106145925760405162461bcd60e51b815260040161154790615ac0565b6145a63360006145a185612911565b61485c565b6145bf3330836145b586614380565b612f629190615db5565b602d546145e6906001600160a01b0316611897836145dc86614380565b612fc39190615db5565b614600611850826145f685614380565b612f8c9190615db5565b60008281526033602052604081208054916126fd83615e52565b602c546040516370a0823160e01b815233600482015260009182916001600160a01b039091169081906370a08231906024015b602060405180830381600087803b15801561466757600080fd5b505af115801561467b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7c9190615868565b602b546040516370a0823160e01b815233600482015260009182916401000000009091046001600160a01b03169081906370a082319060240161464d565b6040516001600160a01b0380851660248301528316604482015260648101829052613b1e9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614ca7565b60008060646147578585615db5565b61214d9190615da1565b602e54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156147a757600080fd5b505af11580156147bb573d6000803e3d6000fd5b5050505050565b6040516001600160a01b038316602482015260448101829052611d6b90849063a9059cbb60e01b90606401614711565b611b2f828260405180602001604052806000815250614d79565b60006001600160e01b031982166380ac58cd60e01b148061483d57506001600160e01b03198216635b5e139f60e01b145b806119d457506301ffc9a760e01b6001600160e01b03198316146119d4565b602f5460405163cb72427360e01b81526001600160a01b03858116600483015260248201859052604482018490529091169063cb72427390606401600060405180830381600087803b1580156148b157600080fd5b505af11580156148c5573d6000803e3d6000fd5b50505050505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906149038261270b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b826001600160a01b031661494f8261270b565b6001600160a01b0316146149b75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401611547565b6001600160a01b038216614a195760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401611547565b614a24838383614dac565b614a2f6000826148ce565b6001600160a01b0383166000908152600360205260408120805460019290614a58908490615dd4565b90915550506001600160a01b0382166000908152600360205260408120805460019290614a86908490615d89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b614b4233611a73565b614b5e5760405162461bcd60e51b815260040161154790615c4c565b61221581614e64565b614b7284848461493c565b614b7e84848484614f0b565b613b1e5760405162461bcd60e51b815260040161154790615a6e565b6060600c8054611b4290615e17565b606081614bcd5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115614bf75780614be181615e52565b9150614bf09050600a83615da1565b9150614bd1565b60008167ffffffffffffffff811115614c1257614c12615ed9565b6040519080825280601f01601f191660200182016040528015614c3c576020820181803683370190505b5090505b841561214d57614c51600183615dd4565b9150614c5e600a86615e6d565b614c69906030615d89565b60f81b818381518110614c7e57614c7e615ec3565b60200101906001600160f81b031916908160001a905350614ca0600a86615da1565b9450614c40565b6000614cfc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166150189092919063ffffffff16565b805190915015611d6b5780806020019051810190614d1a91906157af565b611d6b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611547565b614d838383615027565b614d906000848484614f0b565b611d6b5760405162461bcd60e51b815260040161154790615a6e565b6001600160a01b038316614e0757614e0281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614e2a565b816001600160a01b0316836001600160a01b031614614e2a57614e2a8382615175565b6001600160a01b038216614e4157611d6b81615212565b826001600160a01b0316826001600160a01b031614611d6b57611d6b82826152c1565b6000614e6f8261270b565b9050614e7d81600084614dac565b614e886000836148ce565b6001600160a01b0381166000908152600360205260408120805460019290614eb1908490615dd4565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561500d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614f4f9033908990889088906004016159af565b602060405180830381600087803b158015614f6957600080fd5b505af1925050508015614f99575060408051601f3d908101601f19168201909252614f96918101906157e9565b60015b614ff3573d808015614fc7576040519150601f19603f3d011682016040523d82523d6000602084013e614fcc565b606091505b508051614feb5760405162461bcd60e51b815260040161154790615a6e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061214d565b506001949350505050565b606061214d8484600085615305565b6001600160a01b03821661507d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401611547565b6000818152600260205260409020546001600160a01b0316156150e25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401611547565b6150ee60008383614dac565b6001600160a01b0382166000908152600360205260408120805460019290615117908490615d89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016151828461288a565b61518c9190615dd4565b6000838152600760205260409020549091508082146151df576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061522490600190615dd4565b6000838152600960205260408120546008805493945090928490811061524c5761524c615ec3565b90600052602060002001549050806008838154811061526d5761526d615ec3565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806152a5576152a5615ead565b6001900381819060005260206000200160009055905550505050565b60006152cc8361288a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6060824710156153665760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611547565b843b6153b45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611547565b600080866001600160a01b031685876040516153d091906158cf565b60006040518083038185875af1925050503d806000811461540d576040519150601f19603f3d011682016040523d82523d6000602084013e615412565b606091505b509150915061542282828661542d565b979650505050505050565b6060831561543c575081613d7c565b82511561544c5782518084602001fd5b8160405162461bcd60e51b81526004016115479190615a30565b82805461547290615e17565b90600052602060002090601f01602090048101928261549457600085556154da565b82601f106154ad57805160ff19168380011785556154da565b828001600101855582156154da579182015b828111156154da5782518255916020019190600101906154bf565b506154e69291506154ea565b5090565b5b808211156154e657600081556001016154eb565b600067ffffffffffffffff83111561551957615519615ed9565b61552c601f8401601f1916602001615d58565b905082815283838301111561554057600080fd5b828260208301376000602084830101529392505050565b60006020828403121561556957600080fd5b8135613d7c81615eef565b60006020828403121561558657600080fd5b8151613d7c81615eef565b600080604083850312156155a457600080fd5b82356155af81615eef565b915060208301356155bf81615eef565b809150509250929050565b6000806000606084860312156155df57600080fd5b83356155ea81615eef565b925060208401356155fa81615eef565b929592945050506040919091013590565b6000806000806080858703121561562157600080fd5b843561562c81615eef565b9350602085013561563c81615eef565b925060408501359150606085013567ffffffffffffffff81111561565f57600080fd5b8501601f8101871361567057600080fd5b61567f878235602084016154ff565b91505092959194509250565b6000806040838503121561569e57600080fd5b82356156a981615eef565b915060208301356155bf81615f04565b600080604083850312156156cc57600080fd5b82356156d781615eef565b946020939093013593505050565b600060208083850312156156f857600080fd5b823567ffffffffffffffff8082111561571057600080fd5b818501915085601f83011261572457600080fd5b81358181111561573657615736615ed9565b8060051b9150615747848301615d58565b8181528481019084860184860187018a101561576257600080fd5b600095505b83861015615785578035835260019590950194918601918601615767565b5098975050505050505050565b6000602082840312156157a457600080fd5b8135613d7c81615f04565b6000602082840312156157c157600080fd5b8151613d7c81615f04565b6000602082840312156157de57600080fd5b8135613d7c81615f12565b6000602082840312156157fb57600080fd5b8151613d7c81615f12565b60006020828403121561581857600080fd5b813567ffffffffffffffff81111561582f57600080fd5b8201601f8101841361584057600080fd5b61214d848235602084016154ff565b60006020828403121561586157600080fd5b5035919050565b60006020828403121561587a57600080fd5b5051919050565b6000806040838503121561589457600080fd5b50508035926020909101359150565b600081518084526158bb816020860160208601615deb565b601f01601f19169290920160200192915050565b600082516158e1818460208701615deb565b9190910192915050565b6000845160206158fe8285838a01615deb565b8551918401916159118184848a01615deb565b8554920191600090600181811c908083168061592e57607f831692505b85831081141561594c57634e487b7160e01b85526022600452602485fd5b80801561596057600181146159715761599e565b60ff1985168852838801955061599e565b60008b81526020902060005b858110156159965781548a82015290840190880161597d565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906159e2908301846158a3565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615a2457835183529284019291840191600101615a08565b50909695505050505050565b602081526000613d7c60208301846158a3565b6020808252601190820152702737ba103a37b5b2b724b21037bbb732b960791b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526009908201526813585e0813195d995b60ba1b604082015260600190565b6020808252601290820152710546f6b656e49642063616e277420626520360741b604082015260600190565b6020808252601590820152744e6565642032204d696e695665727365206e66747360581b604082015260600190565b6020808252600d908201526c109c99595908131a5b5a5d1959609a1b604082015260600190565b6020808252600f908201526e139bdd08109b1858dadb1a5cdd1959608a1b604082015260600190565b6020808252601690820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600f908201526e13585e0813999d1cc8135a5b9d1959608a1b604082015260600190565b6020808252601690820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b6020808252818101527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602f908201527f4275726e696e67206d75737420626520686967686572206f7220657175616c2060408201526e67656e20746f206c6576656c696e6760881b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715615d8157615d81615ed9565b604052919050565b60008219821115615d9c57615d9c615e81565b500190565b600082615db057615db0615e97565b500490565b6000816000190483118215151615615dcf57615dcf615e81565b500290565b600082821015615de657615de6615e81565b500390565b60005b83811015615e06578181015183820152602001615dee565b83811115613b1e5750506000910152565b600181811c90821680615e2b57607f821691505b60208210811415615e4c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615e6657615e66615e81565b5060010190565b600082615e7c57615e7c615e97565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461221557600080fd5b801515811461221557600080fd5b6001600160e01b03198116811461221557600080fdfea2646970667358221220ce7b4fa8eceef97ef91323e70b5919c1f45b5c5fff7d3cd2d9807f92cb68cbf464736f6c6343000807003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000041f38ff9faf1f28c6db65f2c90ace2068725acd000000000000000000000000057976c467608983513c9355238dc6de1b1abbcca000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd000000000000000000000000ef5af209ae811fb759c0d863d7f6ec1af3a0a98600000000000000000000000000000000000000000000000000000000000000154d696e694672656e732047656e65726174696f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d464700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e653470705143687778794c7936553675667343424d76636e33365a48687344717a59517669716a4239724b2f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000041f38ff9faf1f28c6db65f2c90ace2068725acd000000000000000000000000057976c467608983513c9355238dc6de1b1abbcca000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd000000000000000000000000ef5af209ae811fb759c0d863d7f6ec1af3a0a98600000000000000000000000000000000000000000000000000000000000000154d696e694672656e732047656e65726174696f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d464700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e653470705143687778794c7936553675667343424d76636e33365a48687344717a59517669716a4239724b2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): MiniFrens Generations
Arg [1] : _symbol (string): MFG
Arg [2] : _initBaseURI (string): ipfs://QmNe4ppQChwxyLy6U6ufsCBMvcn36ZHhsDqzYQviqjB9rK/
Arg [3] : _treasury (address): 0x41f38ff9faf1f28c6db65f2c90ace2068725acd0
Arg [4] : _erc20Address (address): 0x57976c467608983513c9355238dc6de1b1abbcca
Arg [5] : _guineaContract (address): 0xec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [6] : _chillaContract (address): 0xc2750650cae36385e791bb0f32e9ce568a0c66bd
Arg [7] : _erc1155Address (address): 0xef5af209ae811fb759c0d863d7f6ec1af3a0a986
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 00000000000000000000000041f38ff9faf1f28c6db65f2c90ace2068725acd0
Arg [4] : 00000000000000000000000057976c467608983513c9355238dc6de1b1abbcca
Arg [5] : 000000000000000000000000ec2e4e100b26015dc7dee337b4dc5decfe28db58
Arg [6] : 000000000000000000000000c2750650cae36385e791bb0f32e9ce568a0c66bd
Arg [7] : 000000000000000000000000ef5af209ae811fb759c0d863d7f6ec1af3a0a986
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [9] : 4d696e694672656e732047656e65726174696f6e730000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 4d46470000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [13] : 697066733a2f2f516d4e653470705143687778794c7936553675667343424d76
Arg [14] : 636e33365a48687344717a59517669716a4239724b2f00000000000000000000
Deployed ByteCode Sourcemap
52855:21926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56777:1539;;;;;;;;;;-1:-1:-1;56777:1539:0;;;;;:::i;:::-;;:::i;:::-;;54011:27;;;;;;;;;;;;;;;;;;;31680:25:1;;;31668:2;31653:18;54011:27:0;;;;;;;;53979;;;;;;;;;;;;;;;;34793:224;;;;;;;;;;-1:-1:-1;34793:224:0;;;;;:::i;:::-;;:::i;:::-;;;11132:14:1;;11125:22;11107:41;;11095:2;11080:18;34793:224:0;10967:187:1;72729:73:0;;;;;;;;;;-1:-1:-1;72729:73:0;;;;;:::i;:::-;;:::i;72401:86::-;;;;;;;;;;-1:-1:-1;72401:86:0;;;;;:::i;:::-;;:::i;54608:29::-;;;;;;;;;;-1:-1:-1;54608:29:0;;;;-1:-1:-1;;;;;54608:29:0;;;;;;-1:-1:-1;;;;;8784:32:1;;;8766:51;;8754:2;8739:18;54608:29:0;8620:203:1;67109:313:0;;;;;;;;;;-1:-1:-1;67109:313:0;;;;;:::i;:::-;;:::i;74411:153::-;;;;;;;;;;-1:-1:-1;74411:153:0;;;;;:::i;:::-;;:::i;22636:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24203:222::-;;;;;;;;;;-1:-1:-1;24203:222:0;;;;;:::i;:::-;;:::i;53761:25::-;;;;;;;;;;;;;;;;23723:413;;;;;;;;;;-1:-1:-1;23723:413:0;;;;;:::i;:::-;;:::i;53055:30::-;;;;;;;;;;;;;;;;54786:45;;;;;;;;;;-1:-1:-1;54786:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;73588:651;;;;;;;;;;-1:-1:-1;73588:651:0;;;;;:::i;:::-;;:::i;35435:113::-;;;;;;;;;;-1:-1:-1;35523:10:0;:17;35435:113;;53883:27;;;;;;;;;;;;;;;;54447;;;;;;;;;;-1:-1:-1;54447:27:0;;;;;;;;;;;70605:114;;;;;;;;;;-1:-1:-1;70605:114:0;;;;;:::i;:::-;70669:4;70693:20;;;:10;:20;;;;;;;;;70605:114;25098:340;;;;;;;;;;-1:-1:-1;25098:340:0;;;;;:::i;:::-;;:::i;54642:43::-;;;;;;;;;;-1:-1:-1;54642:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;72809:77;;;;;;;;;;-1:-1:-1;72809:77:0;;;;;:::i;:::-;;:::i;70846:344::-;;;;;;;;;;-1:-1:-1;70846:344:0;;;;;:::i;:::-;;:::i;54576:27::-;;;;;;;;;;-1:-1:-1;54576:27:0;;;;-1:-1:-1;;;;;54576:27:0;;;53516:30;;;;;;;;;;;;;;;;74573:205;;;;;;;;;;;;;:::i;72311:84::-;;;;;;;;;;-1:-1:-1;72311:84:0;;;;;:::i;:::-;;:::i;54480:29::-;;;;;;;;;;-1:-1:-1;54480:29:0;;;;;;;-1:-1:-1;;;;;54480:29:0;;;35102:256;;;;;;;;;;-1:-1:-1;35102:256:0;;;;;:::i;:::-;;:::i;53209:44::-;;;;;;;;;;;;;;;;54215:40;;;;;;;;;;;;54254:1;54215:40;;74251:154;;;:::i;25510:185::-;;;;;;;;;;-1:-1:-1;25510:185:0;;;;;:::i;:::-;;:::i;53482:29::-;;;;;;;;;;;;;;;;69720:352;;;;;;;;;;-1:-1:-1;69720:352:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;54129:36::-;;;;;;;;;;;;54164:1;54129:36;;53641:25;;;;;;;;;;;;;;;;72225:80;;;;;;;;;;-1:-1:-1;72225:80:0;;;;;:::i;:::-;;:::i;70485:114::-;;;;;;;;;;-1:-1:-1;70485:114:0;;;;;:::i;:::-;70549:4;70573:20;;;:10;:20;;;;;;;;;70485:114;53358:26;;;;;;;;;;;;;;;;53581:25;;;;;;;;;;;;;;;;73064:264;;;;;;;;;;-1:-1:-1;73064:264:0;;;;;:::i;:::-;;:::i;70725:114::-;;;;;;;;;;-1:-1:-1;70725:114:0;;;;;:::i;:::-;70789:4;70813:20;;;:10;:20;;;;;;;;;70725:114;54937:41;;;;;;;;;;-1:-1:-1;54937:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;35626:233;;;;;;;;;;-1:-1:-1;35626:233:0;;;;;:::i;:::-;;:::i;71463:118::-;;;;;;;;;;-1:-1:-1;71463:118:0;;;;;:::i;:::-;;:::i;53915:27::-;;;;;;;;;;;;;;;;72494:98;;;;;;;;;;-1:-1:-1;72494:98:0;;;;;:::i;:::-;;:::i;53160:44::-;;;;;;;;;;;;;;;;62538:336;;;;;;;;;;-1:-1:-1;62538:336:0;;;;;:::i;:::-;;:::i;54350:26::-;;;;;;;;;;-1:-1:-1;54350:26:0;;;;;;;;54548:23;;;;;;;;;;-1:-1:-1;54548:23:0;;;;-1:-1:-1;;;;;54548:23:0;;;22329:239;;;;;;;;;;-1:-1:-1;22329:239:0;;;;;:::i;:::-;;:::i;67823:306::-;;;;;;;;;;-1:-1:-1;67823:306:0;;;;;:::i;:::-;;:::i;52987:21::-;;;;;;;;;;;;;:::i;53701:25::-;;;;;;;;;;;;;;;;72125:94;;;;;;;;;;-1:-1:-1;72125:94:0;;;;;:::i;:::-;;:::i;22058:208::-;;;;;;;;;;-1:-1:-1;22058:208:0;;;;;:::i;:::-;;:::i;68535:1178::-;;;;;;;;;;-1:-1:-1;68535:1178:0;;;;;:::i;:::-;;:::i;42606:94::-;;;;;;;;;;;;;:::i;62881:3557::-;;;;;;;;;;-1:-1:-1;62881:3557:0;;;;;:::i;:::-;;:::i;54415:26::-;;;;;;;;;;-1:-1:-1;54415:26:0;;;;;;;;;;;54738:43;;;;;;;;;;-1:-1:-1;54738:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53258:45;;;;;;;;;;;;;;;;53126:29;;;;;;;;;;;;;;;;71340:115;;;;;;;;;;-1:-1:-1;71340:115:0;;;;;:::i;:::-;;:::i;53821:25::-;;;;;;;;;;;;;;;;67700:117;;;;;;;;;;-1:-1:-1;67700:117:0;;;;;:::i;:::-;67761:13;67793:18;;;:9;:18;;;;;;;67700:117;41953:87;;;;;;;;;;-1:-1:-1;42026:6:0;;-1:-1:-1;;;;;42026:6:0;41953:87;;53308:45;;;;;;;;;;;;;;;;72892:79;;;;;;;;;;-1:-1:-1;72892:79:0;;;;;:::i;:::-;;:::i;54983:41::-;;;;;;;;;;-1:-1:-1;54983:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;53551:25;;;;;;;;;;;;;;;;22806:104;;;;;;;;;;;;;:::i;58322:1545::-;;;;;;;;;;-1:-1:-1;58322:1545:0;;;;;:::i;:::-;;:::i;72013:106::-;;;;;;;;;;-1:-1:-1;72013:106:0;;;;;:::i;:::-;;:::i;54888:44::-;;;;;;;;;;-1:-1:-1;54888:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;54170:40;;;;;;;;;;;;54209:1;54170:40;;24498:296;;;;;;;;;;-1:-1:-1;24498:296:0;;;;;:::i;:::-;;:::i;54514:29::-;;;;;;;;;;-1:-1:-1;54514:29:0;;;;-1:-1:-1;;;;;54514:29:0;;;73335:246;;;;;;;;;;-1:-1:-1;73335:246:0;;;;;:::i;:::-;;:::i;61560:290::-;;;;;;;;;;;;;:::i;54043:37::-;;;;;;;;;;;;54079:1;54043:37;;53851:27;;;;;;;;;;;;;;;;71899:106;;;;;;;;;;-1:-1:-1;71899:106:0;;;;;:::i;:::-;;:::i;25767:328::-;;;;;;;;;;-1:-1:-1;25767:328:0;;;;;:::i;:::-;;:::i;66769:310::-;;;;;;;;;;-1:-1:-1;66769:310:0;;;;;:::i;:::-;;:::i;67572:121::-;;;;;;;;;;-1:-1:-1;67572:121:0;;;;;:::i;:::-;67635:13;67667:20;;;:11;:20;;;;;;;67572:121;72977:79;;;;;;;;;;-1:-1:-1;72977:79:0;;;;;:::i;:::-;;:::i;53013:37::-;;;;;;;;;;;;;:::i;70079:400::-;;;;;;;;;;-1:-1:-1;70079:400:0;;;;;:::i;:::-;;:::i;53671:25::-;;;;;;;;;;;;;;;;54260:40;;;;;;;;;;;;54299:1;54260:40;;53731:25;;;;;;;;;;;;;;;;54305:40;;;;;;;;;;;;54344:1;54305:40;;54085:39;;;;;;;;;;;;54123:1;54085:39;;67450:115;;;;;;;;;;-1:-1:-1;67450:115:0;;;;;:::i;:::-;67510:13;67542:17;;;:8;:17;;;;;;;67450:115;53090:31;;;;;;;;;;;;;;;;66448:316;;;;;;;;;;-1:-1:-1;66448:316:0;;;;;:::i;:::-;;:::i;53791:25::-;;;;;;;;;;;;;;;;54836:47;;;;;;;;;;-1:-1:-1;54836:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;71691:100;;;;;;;;;;-1:-1:-1;71691:100:0;;;;;:::i;:::-;;:::i;72599:122::-;;;;;;;;;;-1:-1:-1;72599:122:0;;;;;:::i;:::-;;:::i;59872:1684::-;;;;;;;;;;-1:-1:-1;59872:1684:0;;;;;:::i;:::-;;:::i;71215:118::-;;;;;;;;;;-1:-1:-1;71215:118:0;;;;;:::i;:::-;;:::i;68136:391::-;;;;;;;;;;-1:-1:-1;68136:391:0;;;;;:::i;:::-;;:::i;24866:164::-;;;;;;;;;;-1:-1:-1;24866:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24987:25:0;;;24963:4;24987:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24866:164;53947:27;;;;;;;;;;;;;;;;71588:96;;;;;;;;;;-1:-1:-1;71588:96:0;;;;;:::i;:::-;;:::i;53389:26::-;;;;;;;;;;;;;;;;71799:94;;;;;;;;;;-1:-1:-1;71799:94:0;;;;;:::i;:::-;;:::i;42856:192::-;;;;;;;;;;-1:-1:-1;42856:192:0;;;;;:::i;:::-;;:::i;61856:675::-;;;;;;;;;;-1:-1:-1;61856:675:0;;;;;:::i;:::-;;:::i;53420:26::-;;;;;;;;;;;;;;;;54690:43;;;;;;;;;;-1:-1:-1;54690:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;53611:25;;;;;;;;;;;;;;;;55029:41;;;;;;;;;;-1:-1:-1;55029:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;53451:26;;;;;;;;;;;;;;;;54381:29;;;;;;;;;;-1:-1:-1;54381:29:0;;;;;;;;;;;56777:1539;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;;;;;;;;;48739:1;49470:7;:18;56856:6:::1;::::0;::::1;;56855:7;56847:42;;;;-1:-1:-1::0;;;56847:42:0::1;;;;;;;:::i;:::-;56926:9;::::0;56908:10:::1;::::0;:14:::1;::::0;56921:1:::1;56908:14;:::i;:::-;:27;;56900:55;;;;-1:-1:-1::0;;;56900:55:0::1;;;;;;;:::i;:::-;56966:14;56983:13;35523:10:::0;:17;;35435:113;56983:13:::1;56966:30;;57025:1;57015:7;:11;57007:42;;;;-1:-1:-1::0;;;57007:42:0::1;;;;;;;:::i;:::-;57082:9;::::0;57068:10:::1;:6:::0;57077:1:::1;57068:10;:::i;:::-;:23;;57060:58;;;;-1:-1:-1::0;;;57060:58:0::1;;;;;;;:::i;:::-;57144:14;::::0;57137:39:::1;::::0;-1:-1:-1;;;57137:39:0;;::::1;::::0;::::1;31680:25:1::0;;;57180:10:0::1;::::0;-1:-1:-1;;;;;57144:14:0::1;::::0;57137:30:::1;::::0;31653:18:1;;57137:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57137:53:0::1;;57129:83;;;;-1:-1:-1::0;;;57129:83:0::1;;;;;;;:::i;:::-;57223:17;57243;:15;:17::i;:::-;57223:37;;57271:17;57291;:15;:17::i;:::-;57271:37;;57319:17;57339:21;57349:10;57339:9;:21::i;:::-;57319:41;;57391:1;57379:8;:13;;:30;;;;57408:1;57396:8;:13;;57379:30;:47;;;;57425:1;57413:8;:13;;57379:47;:88;;;-1:-1:-1::0;57466:1:0::1;57453:8:::0;57431:19:::1;57442:8:::0;57431;:19:::1;:::i;:::-;:30;;;;:::i;:::-;57430:37;;57379:88;57371:122;;;;-1:-1:-1::0;;;57371:122:0::1;;;;;;;:::i;:::-;57512:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;57504:84;;;::::0;-1:-1:-1;;;57504:84:0;;20064:2:1;57504:84:0::1;::::0;::::1;20046:21:1::0;20103:2;20083:18;;;20076:30;20142:34;20122:18;;;20115:62;-1:-1:-1;;;20193:18:1;;;20186:41;20244:19;;57504:84:0::1;19862:407:1::0;57504:84:0::1;57602:7;::::0;;;::::1;;;:15;;57613:4;57602:15;57599:95;;;57654:10;::::0;57637:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:27:::1;57629:53;;;;-1:-1:-1::0;;;57629:53:0::1;;;;;;;:::i;:::-;57704:108;57742:10;57762:4;57787:24;57803:7;57787:15;:24::i;:::-;57776:35;::::0;:8:::1;:35;:::i;:::-;57769:4;;:42;;;;:::i;:::-;57711:12;::::0;-1:-1:-1;;;;;57711:12:0::1;::::0;57704:108;;:37:::1;:108::i;:::-;57823:65;57833:54;57859:24;57875:7;57859:15;:24::i;:::-;57848:35;::::0;:8:::1;:35;:::i;:::-;57841:4;;:42;;;;:::i;:::-;57885:1;57833:7;:54::i;:::-;57823:9;:65::i;:::-;57933:8;::::0;57899:100:::1;::::0;-1:-1:-1;;;;;57933:8:0::1;57943:55;57969:24;57985:7:::0;57969:15:::1;:24::i;:::-;57958:35;::::0;:8:::1;:35;:::i;:::-;57951:4;;:42;;;;:::i;:::-;57995:2;57943:7;:55::i;:::-;57906:12;::::0;-1:-1:-1;;;;;57906:12:0::1;::::0;57899:100;:33:::1;:100::i;:::-;58010:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;58010:26:0::1;58032:4;58010:26:::0;;::::1;::::0;;;58047:264:::1;58072:1;58067;:6;58047:264;;58091:37;58101:10;58126:1;58113:10;;:14;;;;:::i;:::-;58091:9;:37::i;:::-;58167:1;58139:9;:25;58162:1;58149:10;;:14;;;;:::i;:::-;58139:25;;;;;;;;;;;:29;;;;58209:1;58179:11;:27;58204:1;58191:10;;:14;;;;:::i;:::-;58179:27;;;;;;;;;;;:31;;;;58248:1;58221:8;:24;58243:1;58230:10;;:14;;;;:::i;:::-;58221:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;58221:24:0;;;:28;;;;58260:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;58287:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;58075:3;;;;;:::i;:::-;;;;58047:264;;;-1:-1:-1::0;;48695:1:0;49649:7;:22;-1:-1:-1;;;;56777:1539:0:o;34793:224::-;34895:4;-1:-1:-1;;;;;;34919:50:0;;-1:-1:-1;;;34919:50:0;;:90;;;34973:36;34997:11;34973:23;:36::i;:::-;34912:97;34793:224;-1:-1:-1;;34793:224:0:o;72729:73::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72781:6:::1;:15:::0;;-1:-1:-1;;72781:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;72729:73::o;72401:86::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72463:11:::1;:18:::0;72401:86::o;67109:313::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;67190:41:::1;20231:10:::0;67209:12:::1;67223:7;67190:18;:41::i;:::-;67182:86;;;;-1:-1:-1::0;;;67182:86:0::1;;;;;;;:::i;:::-;67286:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;67278:55;;;;-1:-1:-1::0;;;67278:55:0::1;;;;;;;:::i;:::-;67343:36;67352:10;54123:1;67377::::0;67343:8:::1;:36::i;:::-;67411:5;67389:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;67389:27:0::1;::::0;;;49649:7;:22;67109:313::o;74411:153::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;74503:55:::1;-1:-1:-1::0;;;;;74503:34:0;::::1;74538:10;74550:7:::0;74503:34:::1;:55::i;:::-;74411:153:::0;;:::o;22636:100::-;22690:13;22723:5;22716:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22636:100;:::o;24203:222::-;24279:7;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;24299:73;;;;-1:-1:-1;;;24299:73:0;;23099:2:1;24299:73:0;;;23081:21:1;23138:2;23118:18;;;23111:30;23177:34;23157:18;;;23150:62;-1:-1:-1;;;23228:18:1;;;23221:42;23280:19;;24299:73:0;22897:408:1;24299:73:0;-1:-1:-1;24393:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24393:24:0;;24203:222::o;23723:413::-;23804:13;23820:23;23835:7;23820:14;:23::i;:::-;23804:39;;23868:5;-1:-1:-1;;;;;23862:11:0;:2;-1:-1:-1;;;;;23862:11:0;;;23854:57;;;;-1:-1:-1;;;23854:57:0;;26166:2:1;23854:57:0;;;26148:21:1;26205:2;26185:18;;;26178:30;26244:34;26224:18;;;26217:62;-1:-1:-1;;;26295:18:1;;;26288:31;26336:19;;23854:57:0;25964:397:1;23854:57:0;20231:10;-1:-1:-1;;;;;23947:21:0;;;;:62;;-1:-1:-1;23972:37:0;23989:5;20231:10;24866:164;:::i;23972:37::-;23925:168;;;;-1:-1:-1;;;23925:168:0;;18886:2:1;23925:168:0;;;18868:21:1;18925:2;18905:18;;;18898:30;18964:34;18944:18;;;18937:62;19035:26;19015:18;;;19008:54;19079:19;;23925:168:0;18684:420:1;23925:168:0;24107:21;24116:2;24120:7;24107:8;:21::i;:::-;23793:343;23723:413;;:::o;73588:651::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73674:8:::1;:15;73693:2;73674:21;73666:41;;;::::0;-1:-1:-1;;;73666:41:0;;22764:2:1;73666:41:0::1;::::0;::::1;22746:21:1::0;22803:1;22783:18;;;22776:29;-1:-1:-1;;;22821:18:1;;;22814:37;22868:18;;73666:41:0::1;22562:330:1::0;73666:41:0::1;73728:8;73737:1;73728:11;;;;;;;;:::i;:::-;;;;;;;73719:6;:20;;;;73760:8;73769:1;73760:11;;;;;;;;:::i;:::-;;;;;;;73751:6;:20;;;;73792:8;73801:1;73792:11;;;;;;;;:::i;:::-;;;;;;;73783:6;:20;;;;73824:8;73833:1;73824:11;;;;;;;;:::i;:::-;;;;;;;73815:6;:20;;;;73856:8;73865:1;73856:11;;;;;;;;:::i;:::-;;;;;;;73847:6;:20;;;;73888:8;73897:1;73888:11;;;;;;;;:::i;:::-;;;;;;;73879:6;:20;;;;73920:8;73929:1;73920:11;;;;;;;;:::i;:::-;;;;;;;73911:6;:20;;;;73952:8;73961:1;73952:11;;;;;;;;:::i;:::-;;;;;;;73943:6;:20;;;;73984:8;73993:1;73984:11;;;;;;;;:::i;:::-;;;;;;;73975:6;:20;;;;74016:8;74025:1;74016:11;;;;;;;;:::i;:::-;;;;;;;74007:6;:20;;;;74049:8;74058:2;74049:12;;;;;;;;:::i;:::-;;;;;;;74039:7;:22;;;;74083:8;74092:2;74083:12;;;;;;;;:::i;:::-;;;;;;;74073:7;:22;;;;74117:8;74126:2;74117:12;;;;;;;;:::i;:::-;;;;;;;74107:7;:22;;;;74151:8;74160:2;74151:12;;;;;;;;:::i;:::-;;;;;;;74141:7;:22;;;;74185:8;74194:2;74185:12;;;;;;;;:::i;:::-;;;;;;;74175:7;:22;;;;74219:8;74228:2;74219:12;;;;;;;;:::i;:::-;;;;;;;74209:7;:22;;;;73588:651:::0;:::o;25098:340::-;25293:41;20231:10;25312:12;20151:98;25293:41;25285:103;;;;-1:-1:-1;;;25285:103:0;;;;;;;:::i;:::-;25402:28;25412:4;25418:2;25422:7;25402:9;:28::i;72809:77::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72864:7:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;72864:16:0;;::::1;::::0;;;::::1;::::0;;72809:77::o;70846:344::-;70935:4;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;70952:73;;;;-1:-1:-1;;;70952:73:0;;17776:2:1;70952:73:0;;;17758:21:1;17815:2;17795:18;;;17788:30;17854:34;17834:18;;;17827:62;-1:-1:-1;;;17905:18:1;;;17898:42;17957:19;;70952:73:0;17574:408:1;70952:73:0;71036:13;71052:23;71067:7;71052:14;:23::i;:::-;71036:39;;71105:5;-1:-1:-1;;;;;71094:16:0;:7;-1:-1:-1;;;;;71094:16:0;;:51;;;;71138:7;-1:-1:-1;;;;;71114:31:0;:20;71126:7;71114:11;:20::i;:::-;-1:-1:-1;;;;;71114:31:0;;71094:51;:87;;;-1:-1:-1;;;;;;24987:25:0;;;24963:4;24987:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;71149:32;71086:96;70846:344;-1:-1:-1;;;;70846:344:0:o;74573:205::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;74663:12:::1;::::0;74656:45:::1;::::0;-1:-1:-1;;;74656:45:0;;74695:4:::1;74656:45;::::0;::::1;8766:51:1::0;74634:19:0::1;::::0;-1:-1:-1;;;;;74663:12:0::1;::::0;74656:30:::1;::::0;8739:18:1;;74656:45:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;74719:12;::::0;74634:67;;-1:-1:-1;74712:58:0::1;::::0;-1:-1:-1;;;;;74719:12:0::1;74746:10;74634:67:::0;74712:33:::1;:58::i;:::-;74623:155;74573:205::o:0;72311:84::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72372:10:::1;:17:::0;72311:84::o;35102:256::-;35199:7;35235:23;35252:5;35235:16;:23::i;:::-;35227:5;:31;35219:87;;;;-1:-1:-1;;;35219:87:0;;12343:2:1;35219:87:0;;;12325:21:1;12382:2;12362:18;;;12355:30;12421:34;12401:18;;;12394:62;-1:-1:-1;;;12472:18:1;;;12465:41;12523:19;;35219:87:0;12141:407:1;35219:87:0;-1:-1:-1;;;;;;35324:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35102:256::o;74251:154::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;74307:7:::1;74328;42026:6:::0;;-1:-1:-1;;;;;42026:6:0;;41953:87;74328:7:::1;-1:-1:-1::0;;;;;74320:21:0::1;74349;74320:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;74306:69;;;74390:2;74382:11;;;::::0;::::1;25510:185:::0;25648:39;25665:4;25671:2;25675:7;25648:39;;;;;;;;;;;;:16;:39::i;69720:352::-;69780:16;69809:23;69835:17;69845:6;69835:9;:17::i;:::-;69809:43;;69863:25;69905:15;69891:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69891:30:0;;69863:58;;69937:9;69932:109;69952:15;69948:1;:19;69932:109;;;69999:30;70019:6;70027:1;69999:19;:30::i;:::-;69985:8;69994:1;69985:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;69969:3;;;;:::i;:::-;;;;69932:109;;;-1:-1:-1;70058:8:0;69720:352;-1:-1:-1;;;69720:352:0:o;72225:80::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72284:4:::1;:15:::0;72225:80::o;73064:264::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73153:8:::1;:15;73172:1;73153:20;73145:39;;;::::0;-1:-1:-1;;;73145:39:0;;16623:2:1;73145:39:0::1;::::0;::::1;16605:21:1::0;16662:1;16642:18;;;16635:29;-1:-1:-1;;;16680:18:1;;;16673:36;16726:18;;73145:39:0::1;16421:329:1::0;73145:39:0::1;73207:8;73216:1;73207:11;;;;;;;;:::i;:::-;;;;;;;73196:8;:22;;;;73241:8;73250:1;73241:11;;;;;;;;:::i;:::-;;;;;;;73230:8;:22;;;;73275:8;73284:1;73275:11;;;;;;;;:::i;:::-;;;;;;;73264:8;:22;;;;73309:8;73318:1;73309:11;;;;;;;;:::i;:::-;;;;;;;73298:8;:22;;;;73064:264:::0;:::o;35626:233::-;35701:7;35737:30;35523:10;:17;;35435:113;35737:30;35729:5;:38;35721:95;;;;-1:-1:-1;;;35721:95:0;;28976:2:1;35721:95:0;;;28958:21:1;29015:2;28995:18;;;28988:30;29054:34;29034:18;;;29027:62;-1:-1:-1;;;29105:18:1;;;29098:42;29157:19;;35721:95:0;28774:408:1;35721:95:0;35834:10;35845:5;35834:17;;;;;;;;:::i;:::-;;;;;;;;;35827:24;;35626:233;;;:::o;71463:118::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71546:20:::1;::::0;;;:11:::1;:20;::::0;;;;;:28;71463:118::o;72494:98::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72565:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;62538:336::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;62615:41:::1;20231:10:::0;62634:12:::1;20151:98:::0;62615:41:::1;62607:86;;;;-1:-1:-1::0;;;62607:86:0::1;;;;;;;:::i;:::-;62704:16;62724:17:::0;;;:8:::1;:17;::::0;;;;;62771:1:::1;62760:12:::0;::::1;62752:34;;;;-1:-1:-1::0;;;62752:34:0::1;;;;;;;:::i;:::-;62797:40;62806:10;54164:1;62828:8;62797;:40::i;:::-;62848:17;::::0;;;:8:::1;:17;::::0;;;;:19;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;48695:1:0;49649:7;:22;-1:-1:-1;;62538:336:0:o;22329:239::-;22401:7;22437:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22437:16:0;22472:19;22464:73;;;;-1:-1:-1;;;22464:73:0;;20887:2:1;22464:73:0;;;20869:21:1;20926:2;20906:18;;;20899:30;20965:34;20945:18;;;20938:62;-1:-1:-1;;;21016:18:1;;;21009:39;21065:19;;22464:73:0;20685:405:1;67823:306:0;67885:11;67922:4;;67911:7;:15;67908:215;;-1:-1:-1;67945:1:0;;67823:306;-1:-1:-1;67823:306:0:o;67908:215::-;67977:4;;67966:7;:15;67963:160;;-1:-1:-1;68000:1:0;;67823:306;-1:-1:-1;67823:306:0:o;67963:160::-;68032:4;;68021:7;:15;68018:105;;-1:-1:-1;68055:1:0;;67823:306;-1:-1:-1;67823:306:0:o;68018:105::-;68087:4;;68076:7;:15;68073:50;;-1:-1:-1;68110:1:0;;67823:306;-1:-1:-1;67823:306:0:o;68073:50::-;67823:306;;;:::o;52987:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;72125:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72191:9:::1;:22:::0;72125:94::o;22058:208::-;22130:7;-1:-1:-1;;;;;22158:19:0;;22150:74;;;;-1:-1:-1;;;22150:74:0;;20476:2:1;22150:74:0;;;20458:21:1;20515:2;20495:18;;;20488:30;20554:34;20534:18;;;20527:62;-1:-1:-1;;;20605:18:1;;;20598:40;20655:19;;22150:74:0;20274:406:1;22150:74:0;-1:-1:-1;;;;;;22242:16:0;;;;;:9;:16;;;;;;;22058:208::o;68535:1178::-;68596:12;68622:18;;;:9;:18;;;;;;68643:1;-1:-1:-1;68619:1088:0;;;-1:-1:-1;;68662:6:0;;;68535:1178::o;68619:1088::-;68687:18;;;;:9;:18;;;;;;68708:1;-1:-1:-1;68684:1023:0;;;-1:-1:-1;;68727:6:0;;;68535:1178::o;68684:1023::-;68756:18;;;;:9;:18;;;;;;68777:2;-1:-1:-1;68753:954:0;;;-1:-1:-1;;68797:6:0;;;68535:1178::o;68753:954::-;68826:18;;;;:9;:18;;;;;;68847:2;-1:-1:-1;68823:884:0;;;-1:-1:-1;;68867:6:0;;;68535:1178::o;68823:884::-;68896:18;;;;:9;:18;;;;;;68917:2;-1:-1:-1;68893:814:0;;;-1:-1:-1;;68937:6:0;;;68535:1178::o;68893:814::-;68966:18;;;;:9;:18;;;;;;68987:2;-1:-1:-1;68963:744:0;;;-1:-1:-1;;69007:6:0;;;68535:1178::o;68963:744::-;69036:18;;;;:9;:18;;;;;;69057:2;-1:-1:-1;69033:674:0;;;-1:-1:-1;;69077:6:0;;;68535:1178::o;69033:674::-;69106:18;;;;:9;:18;;;;;;69127:2;-1:-1:-1;69103:604:0;;;-1:-1:-1;;69147:6:0;;;68535:1178::o;69103:604::-;69176:18;;;;:9;:18;;;;;;69197:2;-1:-1:-1;69173:534:0;;;-1:-1:-1;;69217:6:0;;;68535:1178::o;69173:534::-;69246:18;;;;:9;:18;;;;;;69267:2;-1:-1:-1;69243:464:0;;;-1:-1:-1;;69287:6:0;;;68535:1178::o;69243:464::-;69316:18;;;;:9;:18;;;;;;69337:2;-1:-1:-1;69313:394:0;;;-1:-1:-1;;69357:7:0;;;68535:1178::o;69313:394::-;69387:18;;;;:9;:18;;;;;;69408:2;-1:-1:-1;69384:323:0;;;-1:-1:-1;;69428:7:0;;;68535:1178::o;69384:323::-;69458:18;;;;:9;:18;;;;;;69479:2;-1:-1:-1;69455:252:0;;;-1:-1:-1;;69499:7:0;;;68535:1178::o;69455:252::-;69529:18;;;;:9;:18;;;;;;69550:2;-1:-1:-1;69526:181:0;;;-1:-1:-1;;69570:7:0;;;68535:1178::o;69526:181::-;69600:18;;;;:9;:18;;;;;;69621:2;-1:-1:-1;69597:110:0;;;-1:-1:-1;;69641:7:0;;;68535:1178::o;69597:110::-;-1:-1:-1;;69685:7:0;;;68535:1178::o;42606:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;42671:21:::1;42689:1;42671:9;:21::i;:::-;42606:94::o:0;62881:3557::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;62979:41:::1;20231:10:::0;62998:12:::1;63012:7;62979:18;:41::i;:::-;62971:87;;;::::0;-1:-1:-1;;;62971:87:0;;26980:2:1;62971:87:0::1;::::0;::::1;26962:21:1::0;27019:2;26999:18;;;26992:30;27058:34;27038:18;;;27031:62;-1:-1:-1;;;27109:18:1;;;27102:31;27150:19;;62971:87:0::1;26778:397:1::0;62971:87:0::1;63077:42;20231:10:::0;63096:12:::1;20151:98:::0;63077:42:::1;63069:89;;;::::0;-1:-1:-1;;;63069:89:0;;31333:2:1;63069:89:0::1;::::0;::::1;31315:21:1::0;31372:2;31352:18;;;31345:30;31411:34;31391:18;;;31384:62;-1:-1:-1;;;31462:18:1;;;31455:32;31504:19;;63069:89:0::1;31131:398:1::0;63069:89:0::1;63179:16;63199:21:::0;;;:11:::1;:21;::::0;;;;;;;;63250:18;;;:9:::1;:18:::0;;;;;;;63294:2:::1;63282:14:::0;::::1;63279:3154;;;63308:19;;-1:-1:-1::0;;;63308:19:0::1;;;;;;;:::i;63279:3154::-;63358:1;63347:8;:12;63344:3089;;;63379:19;::::0;;;:9:::1;:19;::::0;;;;;63402:2:::1;-1:-1:-1::0;63379:25:0::1;63371:81;;;::::0;-1:-1:-1;;;63371:81:0;;14348:2:1;63371:81:0::1;::::0;::::1;14330:21:1::0;14387:2;14367:18;;;14360:30;14426:34;14406:18;;;14399:62;-1:-1:-1;;;14477:18:1;;;14470:41;14528:19;;63371:81:0::1;14146:407:1::0;63371:81:0::1;63471:18;::::0;;;:9:::1;:18;::::0;;;;;63493:2:::1;-1:-1:-1::0;63471:24:0::1;63463:79;;;::::0;-1:-1:-1;;;63463:79:0;;21641:2:1;63463:79:0::1;::::0;::::1;21623:21:1::0;21680:2;21660:18;;;21653:30;21719:34;21699:18;;;21692:62;-1:-1:-1;;;21770:18:1;;;21763:40;21820:19;;63463:79:0::1;21439:406:1::0;63463:79:0::1;63590:24;63606:7;63590:15;:24::i;:::-;63561:25;63577:8;63561:15;:25::i;:::-;:53;;63553:113;;;;-1:-1:-1::0;;;63553:113:0::1;;;;;;;:::i;:::-;63677:106;63715:10;63735:4;63753:28;63774:7:::0;63753:18:::1;:28;:::i;:::-;63742:40;::::0;:7:::1;:40;:::i;63677:106::-;63794:63;63804:52;63823:28;63844:7:::0;63823:18:::1;:28;:::i;:::-;63812:40;::::0;:7:::1;:40;:::i;63794:63::-;63902:8;::::0;63868:98:::1;::::0;-1:-1:-1;;;;;63902:8:0::1;63912:53;63931:28;63952:7:::0;63931:18:::1;:28;:::i;:::-;63920:40;::::0;:7:::1;:40;:::i;63868:98::-;63977:19;63988:7;63977:10;:19::i;:::-;64028:1;64007:18:::0;;;:9:::1;:18;::::0;;;;;;;:22;;;64040:21;;;:11:::1;:21:::0;;;;;:23;;;::::1;::::0;::::1;:::i;:::-;;;;;;63344:3089;;;64094:1;64083:8;:12;64080:2353;;;64115:19;::::0;;;:9:::1;:19;::::0;;;;;64138:2:::1;-1:-1:-1::0;64115:25:0::1;64107:81;;;::::0;-1:-1:-1;;;64107:81:0;;17364:2:1;64107:81:0::1;::::0;::::1;17346:21:1::0;17403:2;17383:18;;;17376:30;17442:34;17422:18;;;17415:62;-1:-1:-1;;;17493:18:1;;;17486:41;17544:19;;64107:81:0::1;17162:407:1::0;64107:81:0::1;64207:18;::::0;;;:9:::1;:18;::::0;;;;;64229:2:::1;-1:-1:-1::0;64207:24:0::1;64199:79;;;::::0;-1:-1:-1;;;64199:79:0;;24217:2:1;64199:79:0::1;::::0;::::1;24199:21:1::0;24256:2;24236:18;;;24229:30;24295:34;24275:18;;;24268:62;-1:-1:-1;;;24346:18:1;;;24339:40;24396:19;;64199:79:0::1;24015:406:1::0;64199:79:0::1;64326:24;64342:7;64326:15;:24::i;:::-;64297:25;64313:8;64297:15;:25::i;:::-;:53;;64289:113;;;;-1:-1:-1::0;;;64289:113:0::1;;;;;;;:::i;:::-;64413:106;64451:10;64471:4;64489:28;64510:7:::0;64489:18:::1;:28;:::i;:::-;64478:40;::::0;:7:::1;:40;:::i;64413:106::-;64530:63;64540:52;64559:28;64580:7:::0;64559:18:::1;:28;:::i;:::-;64548:40;::::0;:7:::1;:40;:::i;64530:63::-;64638:8;::::0;64604:98:::1;::::0;-1:-1:-1;;;;;64638:8:0::1;64648:53;64667:28;64688:7:::0;64667:18:::1;:28;:::i;:::-;64656:40;::::0;:7:::1;:40;:::i;64080:2353::-;64830:1;64819:8;:12;64816:1617;;;64851:19;::::0;;;:9:::1;:19;::::0;;;;;64874:2:::1;-1:-1:-1::0;64851:25:0::1;64843:81;;;::::0;-1:-1:-1;;;64843:81:0;;11585:2:1;64843:81:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:34;11643:18;;;11636:62;-1:-1:-1;;;11714:18:1;;;11707:41;11765:19;;64843:81:0::1;11383:407:1::0;64843:81:0::1;64943:18;::::0;;;:9:::1;:18;::::0;;;;;64965:2:::1;-1:-1:-1::0;64943:24:0::1;64935:79;;;::::0;-1:-1:-1;;;64935:79:0;;19311:2:1;64935:79:0::1;::::0;::::1;19293:21:1::0;19350:2;19330:18;;;19323:30;19389:34;19369:18;;;19362:62;-1:-1:-1;;;19440:18:1;;;19433:40;19490:19;;64935:79:0::1;19109:406:1::0;64935:79:0::1;65033:20;::::0;;;:11:::1;:20;::::0;;;;;65057:1:::1;65033:25;65025:71;;;::::0;-1:-1:-1;;;65025:71:0;;30931:2:1;65025:71:0::1;::::0;::::1;30913:21:1::0;30970:2;30950:18;;;30943:30;31009:34;30989:18;;;30982:62;-1:-1:-1;;;31060:18:1;;;31053:31;31101:19;;65025:71:0::1;30729:397:1::0;64816:1617:0::1;65653:19;::::0;;;:9:::1;:19;::::0;;;;;65676:3:::1;-1:-1:-1::0;65653:26:0::1;65645:83;;;::::0;-1:-1:-1;;;65645:83:0;;15114:2:1;65645:83:0::1;::::0;::::1;15096:21:1::0;15153:2;15133:18;;;15126:30;15192:34;15172:18;;;15165:62;-1:-1:-1;;;15243:18:1;;;15236:42;15295:19;;65645:83:0::1;14912:408:1::0;65645:83:0::1;65747:18;::::0;;;:9:::1;:18;::::0;;;;;65769:2:::1;-1:-1:-1::0;65747:24:0::1;65739:79;;;::::0;-1:-1:-1;;;65739:79:0;;30160:2:1;65739:79:0::1;::::0;::::1;30142:21:1::0;30199:2;30179:18;;;30172:30;30238:34;30218:18;;;30211:62;-1:-1:-1;;;30289:18:1;;;30282:40;30339:19;;65739:79:0::1;29958:406:1::0;65739:79:0::1;65837:20;::::0;;;:11:::1;:20;::::0;;;;;65861:1:::1;65837:25;65829:71;;;::::0;-1:-1:-1;;;65829:71:0;;27800:2:1;65829:71:0::1;::::0;::::1;27782:21:1::0;27839:2;27819:18;;;27812:30;27878:34;27858:18;;;27851:62;-1:-1:-1;;;27929:18:1;;;27922:31;27970:19;;65829:71:0::1;27598:397:1::0;65829:71:0::1;65948:24;65964:7;65948:15;:24::i;:::-;65919:25;65935:8;65919:15;:25::i;:::-;:53;;65911:113;;;;-1:-1:-1::0;;;65911:113:0::1;;;;;;;:::i;:::-;66035:106;66073:10;66093:4;66111:28;66132:7:::0;66111:18:::1;:28;:::i;66035:106::-;66152:63;66162:52;66181:28;66202:7:::0;66181:18:::1;:28;:::i;66152:63::-;66260:8;::::0;66226:98:::1;::::0;-1:-1:-1;;;;;66260:8:0::1;66270:53;66289:28;66310:7:::0;66289:18:::1;:28;:::i;66226:98::-;66335:19;66346:7;66335:10;:19::i;:::-;66386:1;66365:18:::0;;;:9:::1;:18;::::0;;;;;;;:22;;;66398:21;;;:11:::1;:21:::0;;;;;:23;;;::::1;::::0;::::1;:::i;:::-;;;;;;64816:1617;-1:-1:-1::0;;48695:1:0;49649:7;:22;-1:-1:-1;;62881:3557:0:o;71340:115::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71423:17:::1;::::0;;;:8:::1;:17;::::0;;;;;:25;71340:115::o;72892:79::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72948:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;72948:17:0;;::::1;::::0;;;::::1;::::0;;72892:79::o;22806:104::-;22862:13;22895:7;22888:14;;;;;:::i;58322:1545::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;58401:6:::1;::::0;::::1;;58400:7;58392:42;;;;-1:-1:-1::0;;;58392:42:0::1;;;;;;;:::i;:::-;58471:9;::::0;58453:10:::1;::::0;:14:::1;::::0;58466:1:::1;58453:14;:::i;:::-;:27;;58445:55;;;;-1:-1:-1::0;;;58445:55:0::1;;;;;;;:::i;:::-;58511:14;58528:13;35523:10:::0;:17;;35435:113;58528:13:::1;58511:30;;58570:1;58560:7;:11;58552:42;;;;-1:-1:-1::0;;;58552:42:0::1;;;;;;;:::i;:::-;58627:9;::::0;58613:10:::1;:6:::0;58622:1:::1;58613:10;:::i;:::-;:23;;58605:58;;;;-1:-1:-1::0;;;58605:58:0::1;;;;;;;:::i;:::-;58689:14;::::0;58682:39:::1;::::0;-1:-1:-1;;;58682:39:0;;58689:14:::1;58682:39:::0;::::1;31680:25:1::0;;;58725:10:0::1;::::0;58689:14;;::::1;-1:-1:-1::0;;;;;58689:14:0::1;::::0;58682:30:::1;::::0;31653:18:1;;58682:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;58682:53:0::1;;58674:83;;;;-1:-1:-1::0;;;58674:83:0::1;;;;;;;:::i;:::-;58768:17;58788;:15;:17::i;:::-;58768:37;;58816:17;58836;:15;:17::i;:::-;58816:37;;58864:17;58884:21;58894:10;58884:9;:21::i;:::-;58864:41;;58936:1;58924:8;:13;;:30;;;;58953:1;58941:8;:13;;58924:30;:47;;;;58970:1;58958:8;:13;;58924:47;:88;;;-1:-1:-1::0;59011:1:0::1;58998:8:::0;58976:19:::1;58987:8:::0;58976;:19:::1;:::i;:::-;:30;;;;:::i;:::-;58975:37;;58924:88;58916:122;;;;-1:-1:-1::0;;;58916:122:0::1;;;;;;;:::i;:::-;59057:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;59049:84;;;::::0;-1:-1:-1;;;59049:84:0;;26568:2:1;59049:84:0::1;::::0;::::1;26550:21:1::0;26607:2;26587:18;;;26580:30;26646:34;26626:18;;;26619:62;-1:-1:-1;;;26697:18:1;;;26690:41;26748:19;;59049:84:0::1;26366:407:1::0;59049:84:0::1;59147:7;::::0;;;::::1;;;:15;;59158:4;59147:15;59144:95;;;59199:10;::::0;59182:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:27:::1;59174:53;;;;-1:-1:-1::0;;;59174:53:0::1;;;;;;;:::i;:::-;59249:108;59287:10;59307:4;59332:24;59348:7;59332:15;:24::i;59249:108::-;59368:65;59378:54;59404:24;59420:7;59404:15;:24::i;59368:65::-;59478:8;::::0;59444:100:::1;::::0;-1:-1:-1;;;;;59478:8:0::1;59488:55;59514:24;59530:7:::0;59514:15:::1;:24::i;59444:100::-;59555:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;59555:26:0::1;59577:4;59555:26:::0;;::::1;::::0;;;59592:264:::1;59617:1;59612;:6;59592:264;;59636:37;59646:10;59671:1;59658:10;;:14;;;;:::i;59636:37::-;59712:1;59684:9;:25;59707:1;59694:10;;:14;;;;:::i;:::-;59684:25;;;;;;;;;;;:29;;;;59754:1;59724:11;:27;59749:1;59736:10;;:14;;;;:::i;:::-;59724:27;;;;;;;;;;;:31;;;;59793:1;59766:8;:24;59788:1;59775:10;;:14;;;;:::i;:::-;59766:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;59766:24:0;;;:28;;;;59805:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;59832:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;59620:3;;;;;:::i;:::-;;;;59592:264;;72013:106:::0;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72085:14:::1;:28:::0;;-1:-1:-1;;;;;;72085:28:0::1;-1:-1:-1::0;;;;;72085:28:0;;;::::1;::::0;;;::::1;::::0;;72013:106::o;24498:296::-;-1:-1:-1;;;;;24601:24:0;;20231:10;24601:24;;24593:62;;;;-1:-1:-1;;;24593:62:0;;16269:2:1;24593:62:0;;;16251:21:1;16308:2;16288:18;;;16281:30;16347:27;16327:18;;;16320:55;16392:18;;24593:62:0;16067:349:1;24593:62:0;20231:10;24669:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24669:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24669:53:0;;;;;;;;;;24738:48;;11107:41:1;;;24669:42:0;;20231:10;24738:48;;11080:18:1;24738:48:0;;;;;;;24498:296;;:::o;73335:246::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73422:8:::1;:15;73441:1;73422:20;73414:39;;;::::0;-1:-1:-1;;;73414:39:0;;16623:2:1;73414:39:0::1;::::0;::::1;16605:21:1::0;16662:1;16642:18;;;16635:29;-1:-1:-1;;;16680:18:1;;;16673:36;16726:18;;73414:39:0::1;16421:329:1::0;73414:39:0::1;73472:8;73481:1;73472:11;;;;;;;;:::i;:::-;;;;;;;73465:4;:18;;;;73502:8;73511:1;73502:11;;;;;;;;:::i;:::-;;;;;;;73495:4;:18;;;;73532:8;73541:1;73532:11;;;;;;;;:::i;:::-;;;;;;;73525:4;:18;;;;73562:8;73571:1;73562:11;;;;;;;;:::i;:::-;;;;;;;73555:4;:18;;;;73335:246:::0;:::o;61560:290::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;61625:1:::1;61608:237;61633:1;61628;:6;61608:237;;61652:37;61662:10;61687:1;61674:10;;:14;;;;:::i;61652:37::-;61728:1;61700:9;:25;61723:1;61710:10;;:14;;;;:::i;:::-;61700:25;;;;;;;;;;;:29;;;;61770:1;61740:11;:27;61765:1;61752:10;;:14;;;;:::i;:::-;61740:27;;;;;;;;;;;:31;;;;61809:1;61782:8;:24;61804:1;61791:10;;:14;;;;:::i;:::-;61782:24;;;;;;;;;;;:28;;;;61821:10;;:12;;;;;;;;;:::i;:::-;;;;;;61636:3;;;;;:::i;:::-;;;;61608:237;;71899:106:::0;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71971:14:::1;:28:::0;;-1:-1:-1;;;;;71971:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;71971:28:0;;::::1;::::0;;;::::1;::::0;;71899:106::o;25767:328::-;25942:41;20231:10;25961:12;20151:98;25942:41;25934:103;;;;-1:-1:-1;;;25934:103:0;;;;;;;:::i;:::-;26048:39;26062:4;26068:2;26072:7;26081:5;26048:13;:39::i;:::-;25767:328;;;;:::o;66769:310::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;66857:14:::1;::::0;66850:39:::1;::::0;-1:-1:-1;;;66850:39:0;;66857:14:::1;66850:39:::0;::::1;31680:25:1::0;;;66893:10:0::1;::::0;66857:14;;::::1;-1:-1:-1::0;;;;;66857:14:0::1;::::0;66850:30:::1;::::0;31653:18:1;;66850:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;66850:53:0::1;;66842:83;;;;-1:-1:-1::0;;;66842:83:0::1;;;;;;;:::i;:::-;66943:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;66935:55;;;;-1:-1:-1::0;;;66935:55:0::1;;;;;;;:::i;:::-;67000:36;67009:10;54123:1;67034::::0;67000:8:::1;:36::i;:::-;67068:5;67046:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;67046:27:0::1;::::0;;;49649:7;:22;66769:310::o;72977:79::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;73032:9:::1;:18:::0;;;::::1;;;;-1:-1:-1::0;;73032:18:0;;::::1;::::0;;;::::1;::::0;;72977:79::o;53013:37::-;;;;;;;:::i;70079:400::-;27672:4;27696:16;;;:7;:16;;;;;;70152:13;;-1:-1:-1;;;;;27696:16:0;70177:75;;;;-1:-1:-1;;;70177:75:0;;25389:2:1;70177:75:0;;;25371:21:1;25428:2;25408:18;;;25401:30;25467:34;25447:18;;;25440:62;-1:-1:-1;;;25518:18:1;;;25511:45;25573:19;;70177:75:0;25187:411:1;70177:75:0;70273:28;70304:10;:8;:10::i;:::-;70273:41;;70363:1;70338:14;70332:28;:32;:141;;;;;;;;;;;;;;;;;70404:14;70420:18;:7;:16;:18::i;:::-;70440:13;70387:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;70332:141;70325:148;70079:400;-1:-1:-1;;;70079:400:0:o;66448:316::-;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;66536:14:::1;::::0;66529:39:::1;::::0;-1:-1:-1;;;66529:39:0;;::::1;::::0;::::1;31680:25:1::0;;;66572:10:0::1;::::0;-1:-1:-1;;;;;66536:14:0::1;::::0;66529:30:::1;::::0;31653:18:1;;66529:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;66529:53:0::1;;66521:83;;;;-1:-1:-1::0;;;66521:83:0::1;;;;;;;:::i;:::-;66622:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;66614:55;;;;-1:-1:-1::0;;;66614:55:0::1;;;;;;;:::i;:::-;66679:36;66688:10;54123:1;66713::::0;66679:8:::1;:36::i;:::-;66747:5;66725:19:::0;;;:10:::1;:19;::::0;;;;:27;;-1:-1:-1;;66725:27:0::1;::::0;;;49649:7;:22;66448:316::o;71691:100::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71756:14:::1;:28:::0;;-1:-1:-1;;;;;;71756:28:0::1;-1:-1:-1::0;;;;;71756:28:0;;;::::1;::::0;;;::::1;::::0;;71691:100::o;72599:122::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;72682:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;59872:1684::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;59949:6:::1;::::0;::::1;;59948:7;59940:42;;;;-1:-1:-1::0;;;59940:42:0::1;;;;;;;:::i;:::-;60002:9;::::0;::::1;::::0;::::1;;;60001:10;59993:48;;;::::0;-1:-1:-1;;;59993:48:0;;14760:2:1;59993:48:0::1;::::0;::::1;14742:21:1::0;14799:2;14779:18;;;14772:30;14838:27;14818:18;;;14811:55;14883:18;;59993:48:0::1;14558:349:1::0;59993:48:0::1;60078:9;::::0;60060:10:::1;::::0;:14:::1;::::0;60073:1:::1;60060:14;:::i;:::-;:27;;60052:55;;;;-1:-1:-1::0;;;60052:55:0::1;;;;;;;:::i;:::-;60118:14;60135:13;35523:10:::0;:17;;35435:113;60135:13:::1;60118:30;;60177:1;60167:7;:11;60159:42;;;;-1:-1:-1::0;;;60159:42:0::1;;;;;;;:::i;:::-;60234:9;::::0;60220:10:::1;:6:::0;60229:1:::1;60220:10;:::i;:::-;:23;;60212:58;;;;-1:-1:-1::0;;;60212:58:0::1;;;;;;;:::i;:::-;60289:41;20231:10:::0;60308:12:::1;20151:98:::0;60289:41:::1;60281:86;;;;-1:-1:-1::0;;;60281:86:0::1;;;;;;;:::i;:::-;60386:18;::::0;;;:9:::1;:18;::::0;;;;;60408:2:::1;-1:-1:-1::0;60386:24:0::1;60378:68;;;::::0;-1:-1:-1;;;60378:68:0;;29389:2:1;60378:68:0::1;::::0;::::1;29371:21:1::0;29428:2;29408:18;;;29401:30;29467:33;29447:18;;;29440:61;29518:18;;60378:68:0::1;29187:355:1::0;60378:68:0::1;60457:17;60477;:15;:17::i;:::-;60457:37;;60505:17;60525;:15;:17::i;:::-;60505:37;;60553:17;60573:21;60583:10;60573:9;:21::i;:::-;60553:41;;60625:1;60613:8;:13;;:30;;;;60642:1;60630:8;:13;;60613:30;:47;;;;60659:1;60647:8;:13;;60613:47;:88;;;-1:-1:-1::0;60700:1:0::1;60687:8:::0;60665:19:::1;60676:8:::0;60665;:19:::1;:::i;:::-;:30;;;;:::i;:::-;60664:37;;60613:88;60605:122;;;;-1:-1:-1::0;;;60605:122:0::1;;;;;;;:::i;:::-;60746:19;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:28;60738:82;;;::::0;-1:-1:-1;;;60738:82:0;;13938:2:1;60738:82:0::1;::::0;::::1;13920:21:1::0;13977:2;13957:18;;;13950:30;14016:34;13996:18;;;13989:62;-1:-1:-1;;;14067:18:1;;;14060:39;14116:19;;60738:82:0::1;13736:405:1::0;60738:82:0::1;60834:8;::::0;;;::::1;;;:16;;60846:4;60834:16;60831:97;;;60887:11;::::0;60870:14:::1;::::0;;;:5:::1;:14;::::0;;;;;:28:::1;60862:54;;;;-1:-1:-1::0;;;60862:54:0::1;;;;;;;:::i;:::-;60938:108;60976:10;60996:4;61021:24;61037:7;61021:15;:24::i;60938:108::-;61057:65;61067:54;61093:24;61109:7;61093:15;:24::i;61057:65::-;61167:8;::::0;61133:100:::1;::::0;-1:-1:-1;;;;;61167:8:0::1;61177:55;61203:24;61219:7:::0;61203:15:::1;:24::i;61133:100::-;61244:19;::::0;;;:10:::1;:19;::::0;;;;:26;;-1:-1:-1;;61244:26:0::1;61266:4;61244:26:::0;;::::1;::::0;;;61281:264:::1;61306:1;61301;:6;61281:264;;61325:37;61335:10;61360:1;61347:10;;:14;;;;:::i;61325:37::-;61401:1;61373:9;:25;61396:1;61383:10;;:14;;;;:::i;:::-;61373:25;;;;;;;;;;;:29;;;;61443:1;61413:11;:27;61438:1;61425:10;;:14;;;;:::i;:::-;61413:27;;;;;;;;;;;:31;;;;61482:1;61455:8;:24;61477:1;61464:10;;:14;;;;:::i;:::-;61455:24:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;61455:24:0;;;:28;;;;61494:14;;;:5:::1;:14:::0;;;;;:16;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;61521:10:0::1;:12:::0;;;:10:::1;:12;::::0;::::1;:::i;:::-;;;;;;61309:3;;;;;:::i;:::-;;;;61281:264;;71215:118:::0;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71300:18:::1;::::0;;;:9:::1;:18;::::0;;;;;:26;71215:118::o;68136:391::-;68195:12;68221:24;68237:7;68221:15;:24::i;:::-;68249:1;68221:29;68218:303;;;-1:-1:-1;;68268:8:0;;;68136:391::o;68218:303::-;68295:24;68311:7;68295:15;:24::i;:::-;68323:1;68295:29;68292:229;;;-1:-1:-1;;68342:8:0;;;68136:391::o;68292:229::-;68373:24;68389:7;68373:15;:24::i;:::-;68401:1;68373:29;68370:151;;;-1:-1:-1;;68420:8:0;;;68136:391::o;68370:151::-;68451:24;68467:7;68451:15;:24::i;:::-;68479:1;68451:29;68448:73;;;-1:-1:-1;;68498:8:0;;;68136:391::o;71588:96::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71651:12:::1;:26:::0;;-1:-1:-1;;;;;;71651:26:0::1;-1:-1:-1::0;;;;;71651:26:0;;;::::1;::::0;;;::::1;::::0;;71588:96::o;71799:94::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;71865:8:::1;:22:::0;;-1:-1:-1;;;;;;71865:22:0::1;-1:-1:-1::0;;;;;71865:22:0;;;::::1;::::0;;;::::1;::::0;;71799:94::o;42856:192::-;42026:6;;-1:-1:-1;;;;;42026:6:0;20231:10;42174:23;42166:68;;;;-1:-1:-1;;;42166:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42945:22:0;::::1;42937:73;;;::::0;-1:-1:-1;;;42937:73:0;;13174:2:1;42937:73:0::1;::::0;::::1;13156:21:1::0;13213:2;13193:18;;;13186:30;13252:34;13232:18;;;13225:62;-1:-1:-1;;;13303:18:1;;;13296:36;13349:19;;42937:73:0::1;12972:402:1::0;42937:73:0::1;43021:19;43031:8;43021:9;:19::i;61856:675::-:0;48739:1;49337:7;;:19;;49329:63;;;;-1:-1:-1;;;49329:63:0;;;;;;;:::i;:::-;48739:1;49470:7;:18;61934:41:::1;20231:10:::0;61953:12:::1;20151:98:::0;61934:41:::1;61926:86;;;;-1:-1:-1::0;;;61926:86:0::1;;;;;;;:::i;:::-;62023:16;62043:18:::0;;;:9:::1;:18;::::0;;;;;62091:3:::1;62080:14:::0;::::1;62072:36;;;;-1:-1:-1::0;;;62072:36:0::1;;;;;;;:::i;:::-;62119:56;62128:10;54079:1;62151:23;62166:7;62151:14;:23::i;:::-;62119:8;:56::i;:::-;62186:110;62224:10;62244:4;62286:8;62262:21;62275:7;62262:12;:21::i;:::-;:32;;;;:::i;62186:110::-;62341:8;::::0;62307:102:::1;::::0;-1:-1:-1;;;;;62341:8:0::1;62351:57;62394:8:::0;62370:21:::1;62383:7:::0;62370:12:::1;:21::i;:::-;:32;;;;:::i;62307:102::-;62420:67;62430:56;62473:8;62449:21;62462:7;62449:12;:21::i;:::-;:32;;;;:::i;62420:67::-;62498:18;::::0;;;:9:::1;:18;::::0;;;;:20;;;::::1;::::0;::::1;:::i;56130:188::-:0;56243:14;;56282:30;;-1:-1:-1;;;56282:30:0;;56301:10;56282:30;;;8766:51:1;56175:7:0;;;;-1:-1:-1;;;;;56243:14:0;;;;;;56282:18;;8739::1;;56282:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;56323:192::-;56438:14;;56478:31;;-1:-1:-1;;;56478:31:0;;56498:10;56438:14;56478:31;;8766:51:1;56368:7:0;;;;56438:14;;;;-1:-1:-1;;;;;56438:14:0;;;;56478:19;;8739:18:1;;56478:31:0;8620:203:1;43984:248:0;44155:68;;-1:-1:-1;;;;;9086:15:1;;;44155:68:0;;;9068:34:1;9138:15;;9118:18;;;9111:43;9170:18;;;9163:34;;;44128:96:0;;44148:5;;-1:-1:-1;;;44178:27:0;9003:18:1;;44155:68:0;;;;-1:-1:-1;;44155:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;44155:68:0;-1:-1:-1;;;;;;44155:68:0;;;;;;;;;;44128:19;:96::i;55599:183::-;55673:7;;55748:3;55728:17;55738:7;55728;:17;:::i;:::-;:23;;;;:::i;55894:93::-;55954:12;;55948:33;;-1:-1:-1;;;55948:33:0;;;;;31680:25:1;;;-1:-1:-1;;;;;55954:12:0;;;;55948:24;;31653:18:1;;55948:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55894:93;:::o;43765:211::-;43909:58;;-1:-1:-1;;;;;9893:32:1;;43909:58:0;;;9875:51:1;9942:18;;;9935:34;;;43882:86:0;;43902:5;;-1:-1:-1;;;43932:23:0;9848:18:1;;43909:58:0;9701:274:1;28593:110:0;28669:26;28679:2;28683:7;28669:26;;;;;;;;;;;;:9;:26::i;21688:305::-;21790:4;-1:-1:-1;;;;;;21827:40:0;;-1:-1:-1;;;21827:40:0;;:105;;-1:-1:-1;;;;;;;21884:48:0;;-1:-1:-1;;;21884:48:0;21827:105;:158;;;-1:-1:-1;;;;;;;;;;7573:40:0;;;21949:36;7464:157;55991:133;56073:14;;56065:53;;-1:-1:-1;;;56065:53:0;;-1:-1:-1;;;;;10200:32:1;;;56065:53:0;;;10182:51:1;10249:18;;;10242:34;;;10292:18;;;10285:34;;;56073:14:0;;;;56065:32;;10155:18:1;;56065:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55991:133;;;:::o;31607:174::-;31682:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31682:29:0;-1:-1:-1;;;;;31682:29:0;;;;;;;;:24;;31736:23;31682:24;31736:14;:23::i;:::-;-1:-1:-1;;;;;31727:46:0;;;;;;;;;;;31607:174;;:::o;30906:582::-;31065:4;-1:-1:-1;;;;;31038:31:0;:23;31053:7;31038:14;:23::i;:::-;-1:-1:-1;;;;;31038:31:0;;31030:85;;;;-1:-1:-1;;;31030:85:0;;24979:2:1;31030:85:0;;;24961:21:1;25018:2;24998:18;;;24991:30;25057:34;25037:18;;;25030:62;-1:-1:-1;;;25108:18:1;;;25101:39;25157:19;;31030:85:0;24777:405:1;31030:85:0;-1:-1:-1;;;;;31134:16:0;;31126:65;;;;-1:-1:-1;;;31126:65:0;;15864:2:1;31126:65:0;;;15846:21:1;15903:2;15883:18;;;15876:30;15942:34;15922:18;;;15915:62;-1:-1:-1;;;15993:18:1;;;15986:34;16037:19;;31126:65:0;15662:400:1;31126:65:0;31205:39;31226:4;31232:2;31236:7;31205:20;:39::i;:::-;31310:29;31327:1;31331:7;31310:8;:29::i;:::-;-1:-1:-1;;;;;31353:15:0;;;;;;:9;:15;;;;;:20;;31372:1;;31353:15;:20;;31372:1;;31353:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31384:13:0;;;;;;:9;:13;;;;;:18;;31401:1;;31384:13;:18;;31401:1;;31384:18;:::i;:::-;;;;-1:-1:-1;;31413:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31413:21:0;-1:-1:-1;;;;;31413:21:0;;;;;;;;;31453:27;;31413:16;;31453:27;;;;;;;30906:582;;;:::o;43057:173::-;43132:6;;;-1:-1:-1;;;;;43149:17:0;;;-1:-1:-1;;;;;;43149:17:0;;;;;;;43182:40;;43132:6;;;43149:17;43132:6;;43182:40;;43113:16;;43182:40;43102:128;43057:173;:::o;56521:229::-;56639:41;20231:10;56658:12;20151:98;56639:41;56631:86;;;;-1:-1:-1;;;56631:86:0;;;;;;;:::i;:::-;56728:14;56734:7;56728:5;:14::i;26978:315::-;27135:28;27145:4;27151:2;27155:7;27135:9;:28::i;:::-;27182:48;27205:4;27211:2;27215:7;27224:5;27182:22;:48::i;:::-;27174:111;;;;-1:-1:-1;;;27174:111:0;;;;;;;:::i;55786:102::-;55846:13;55875:7;55868:14;;;;;:::i;7945:724::-;8001:13;8223:10;8219:53;;-1:-1:-1;;8250:10:0;;;;;;;;;;;;-1:-1:-1;;;8250:10:0;;;;;7945:724::o;8219:53::-;8297:5;8282:12;8338:78;8345:9;;8338:78;;8371:8;;;;:::i;:::-;;-1:-1:-1;8394:10:0;;-1:-1:-1;8402:2:0;8394:10;;:::i;:::-;;;8338:78;;;8426:19;8458:6;8448:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8448:17:0;;8426:39;;8476:154;8483:10;;8476:154;;8510:11;8520:1;8510:11;;:::i;:::-;;-1:-1:-1;8579:10:0;8587:2;8579:5;:10;:::i;:::-;8566:24;;:2;:24;:::i;:::-;8553:39;;8536:6;8543;8536:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8536:56:0;;;;;;;;-1:-1:-1;8607:11:0;8616:2;8607:11;;:::i;:::-;;;8476:154;;46338:716;46762:23;46788:69;46816:4;46788:69;;;;;;;;;;;;;;;;;46796:5;-1:-1:-1;;;;;46788:27:0;;;:69;;;;;:::i;:::-;46872:17;;46762:95;;-1:-1:-1;46872:21:0;46868:179;;46969:10;46958:30;;;;;;;;;;;;:::i;:::-;46950:85;;;;-1:-1:-1;;;46950:85:0;;29749:2:1;46950:85:0;;;29731:21:1;29788:2;29768:18;;;29761:30;29827:34;29807:18;;;29800:62;-1:-1:-1;;;29878:18:1;;;29871:40;29928:19;;46950:85:0;29547:406:1;28931:321:0;29061:18;29067:2;29071:7;29061:5;:18::i;:::-;29112:54;29143:1;29147:2;29151:7;29160:5;29112:22;:54::i;:::-;29090:154;;;;-1:-1:-1;;;29090:154:0;;;;;;;:::i;36473:590::-;-1:-1:-1;;;;;36680:18:0;;36676:187;;36715:40;36747:7;37892:10;:17;;37865:24;;;;:15;:24;;;;;:44;;;37920:24;;;;;;;;;;;;37788:164;36715:40;36676:187;;;36785:2;-1:-1:-1;;;;;36777:10:0;:4;-1:-1:-1;;;;;36777:10:0;;36773:90;;36804:47;36837:4;36843:7;36804:32;:47::i;:::-;-1:-1:-1;;;;;36877:16:0;;36873:183;;36910:45;36947:7;36910:36;:45::i;36873:183::-;36983:4;-1:-1:-1;;;;;36977:10:0;:2;-1:-1:-1;;;;;36977:10:0;;36973:83;;37004:40;37032:2;37036:7;37004:27;:40::i;30204:364::-;30264:13;30280:23;30295:7;30280:14;:23::i;:::-;30264:39;;30317:48;30338:5;30353:1;30357:7;30317:20;:48::i;:::-;30407:29;30424:1;30428:7;30407:8;:29::i;:::-;-1:-1:-1;;;;;30450:16:0;;;;;;:9;:16;;;;;:21;;30470:1;;30450:16;:21;;30470:1;;30450:21;:::i;:::-;;;;-1:-1:-1;;30489:16:0;;;;:7;:16;;;;;;30482:23;;-1:-1:-1;;;;;;30482:23:0;;;30524:36;30497:7;;30489:16;-1:-1:-1;;;;;30524:36:0;;;;;30489:16;;30524:36;30253:315;30204:364;:::o;32347:799::-;32502:4;-1:-1:-1;;;;;32523:13:0;;10802:20;10850:8;32519:620;;32559:72;;-1:-1:-1;;;32559:72:0;;-1:-1:-1;;;;;32559:36:0;;;;;:72;;20231:10;;32610:4;;32616:7;;32625:5;;32559:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32559:72:0;;;;;;;;-1:-1:-1;;32559:72:0;;;;;;;;;;;;:::i;:::-;;;32555:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32801:13:0;;32797:272;;32844:60;;-1:-1:-1;;;32844:60:0;;;;;;;:::i;32797:272::-;33019:6;33013:13;33004:6;33000:2;32996:15;32989:38;32555:529;-1:-1:-1;;;;;;32682:51:0;-1:-1:-1;;;32682:51:0;;-1:-1:-1;32675:58:0;;32519:620;-1:-1:-1;33123:4:0;32347:799;;;;;;:::o;13289:229::-;13426:12;13458:52;13480:6;13488:4;13494:1;13497:12;13458:21;:52::i;29589:385::-;-1:-1:-1;;;;;29669:16:0;;29661:61;;;;-1:-1:-1;;;29661:61:0;;22403:2:1;29661:61:0;;;22385:21:1;;;22422:18;;;22415:30;22481:34;22461:18;;;22454:62;22533:18;;29661:61:0;22201:356:1;29661:61:0;27672:4;27696:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27696:16:0;:30;29733:58;;;;-1:-1:-1;;;29733:58:0;;13581:2:1;29733:58:0;;;13563:21:1;13620:2;13600:18;;;13593:30;13659;13639:18;;;13632:58;13707:18;;29733:58:0;13379:352:1;29733:58:0;29805:45;29834:1;29838:2;29842:7;29805:20;:45::i;:::-;-1:-1:-1;;;;;29864:13:0;;;;;;:9;:13;;;;;:18;;29881:1;;29864:13;:18;;29881:1;;29864:18;:::i;:::-;;;;-1:-1:-1;;29893:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29893:21:0;-1:-1:-1;;;;;29893:21:0;;;;;;;;29933:33;;29893:16;;;29933:33;;29893:16;;29933:33;29589:385;;:::o;38580:992::-;38847:22;38897:1;38872:22;38889:4;38872:16;:22::i;:::-;:26;;;;:::i;:::-;38909:18;38930:26;;;:17;:26;;;;;;38847:51;;-1:-1:-1;39064:28:0;;;39060:329;;-1:-1:-1;;;;;39131:18:0;;39109:19;39131:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39183:30;;;;;;:44;;;39300:30;;:17;:30;;;;;:43;;;39060:329;-1:-1:-1;39486:26:0;;;;:17;:26;;;;;;;;39479:33;;;-1:-1:-1;;;;;39530:18:0;;;;;:12;:18;;;;;:34;;;;;;;39523:41;38580:992::o;39868:1083::-;40147:10;:17;40122:22;;40147:21;;40167:1;;40147:21;:::i;:::-;40179:18;40200:24;;;:15;:24;;;;;;40574:10;:26;;40122:46;;-1:-1:-1;40200:24:0;;40122:46;;40574:26;;;;;;:::i;:::-;;;;;;;;;40552:48;;40639:11;40614:10;40625;40614:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40719:28;;;:15;:28;;;;;;;:41;;;40892:24;;;;;40885:31;40927:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39939:1012;;;39868:1083;:::o;37365:221::-;37450:14;37467:20;37484:2;37467:16;:20::i;:::-;-1:-1:-1;;;;;37498:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37543:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37365:221:0:o;14411:511::-;14581:12;14639:5;14614:21;:30;;14606:81;;;;-1:-1:-1;;;14606:81:0;;16957:2:1;14606:81:0;;;16939:21:1;16996:2;16976:18;;;16969:30;17035:34;17015:18;;;17008:62;-1:-1:-1;;;17086:18:1;;;17079:36;17132:19;;14606:81:0;16755:402:1;14606:81:0;10802:20;;14698:60;;;;-1:-1:-1;;;14698:60:0;;28618:2:1;14698:60:0;;;28600:21:1;28657:2;28637:18;;;28630:30;28696:31;28676:18;;;28669:59;28745:18;;14698:60:0;28416:353:1;14698:60:0;14773:12;14787:23;14814:6;-1:-1:-1;;;;;14814:11:0;14833:5;14840:4;14814:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14772:73;;;;14863:51;14880:7;14889:10;14901:12;14863:16;:51::i;:::-;14856:58;14411:511;-1:-1:-1;;;;;;;14411:511:0:o;17105:713::-;17255:12;17284:7;17280:531;;;-1:-1:-1;17315:10:0;17308:17;;17280:531;17429:17;;:21;17425:375;;17628:10;17622:17;17689:15;17676:10;17672:2;17668:19;17661:44;17425:375;17771:12;17764:20;;-1:-1:-1;;;17764:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:247::-;484:6;537:2;525:9;516:7;512:23;508:32;505:52;;;553:1;550;543:12;505:52;592:9;579:23;611:31;636:5;611:31;:::i;677:251::-;747:6;800:2;788:9;779:7;775:23;771:32;768:52;;;816:1;813;806:12;768:52;848:9;842:16;867:31;892:5;867:31;:::i;933:388::-;1001:6;1009;1062:2;1050:9;1041:7;1037:23;1033:32;1030:52;;;1078:1;1075;1068:12;1030:52;1117:9;1104:23;1136:31;1161:5;1136:31;:::i;:::-;1186:5;-1:-1:-1;1243:2:1;1228:18;;1215:32;1256:33;1215:32;1256:33;:::i;:::-;1308:7;1298:17;;;933:388;;;;;:::o;1326:456::-;1403:6;1411;1419;1472:2;1460:9;1451:7;1447:23;1443:32;1440:52;;;1488:1;1485;1478:12;1440:52;1527:9;1514:23;1546:31;1571:5;1546:31;:::i;:::-;1596:5;-1:-1:-1;1653:2:1;1638:18;;1625:32;1666:33;1625:32;1666:33;:::i;:::-;1326:456;;1718:7;;-1:-1:-1;;;1772:2:1;1757:18;;;;1744:32;;1326:456::o;1787:794::-;1882:6;1890;1898;1906;1959:3;1947:9;1938:7;1934:23;1930:33;1927:53;;;1976:1;1973;1966:12;1927:53;2015:9;2002:23;2034:31;2059:5;2034:31;:::i;:::-;2084:5;-1:-1:-1;2141:2:1;2126:18;;2113:32;2154:33;2113:32;2154:33;:::i;:::-;2206:7;-1:-1:-1;2260:2:1;2245:18;;2232:32;;-1:-1:-1;2315:2:1;2300:18;;2287:32;2342:18;2331:30;;2328:50;;;2374:1;2371;2364:12;2328:50;2397:22;;2450:4;2442:13;;2438:27;-1:-1:-1;2428:55:1;;2479:1;2476;2469:12;2428:55;2502:73;2567:7;2562:2;2549:16;2544:2;2540;2536:11;2502:73;:::i;:::-;2492:83;;;1787:794;;;;;;;:::o;2586:382::-;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:31;2811:5;2786:31;:::i;:::-;2836:5;-1:-1:-1;2893:2:1;2878:18;;2865:32;2906:30;2865:32;2906:30;:::i;2973:315::-;3041:6;3049;3102:2;3090:9;3081:7;3077:23;3073:32;3070:52;;;3118:1;3115;3108:12;3070:52;3157:9;3144:23;3176:31;3201:5;3176:31;:::i;:::-;3226:5;3278:2;3263:18;;;;3250:32;;-1:-1:-1;;;2973:315:1:o;3293:957::-;3377:6;3408:2;3451;3439:9;3430:7;3426:23;3422:32;3419:52;;;3467:1;3464;3457:12;3419:52;3507:9;3494:23;3536:18;3577:2;3569:6;3566:14;3563:34;;;3593:1;3590;3583:12;3563:34;3631:6;3620:9;3616:22;3606:32;;3676:7;3669:4;3665:2;3661:13;3657:27;3647:55;;3698:1;3695;3688:12;3647:55;3734:2;3721:16;3756:2;3752;3749:10;3746:36;;;3762:18;;:::i;:::-;3808:2;3805:1;3801:10;3791:20;;3831:28;3855:2;3851;3847:11;3831:28;:::i;:::-;3893:15;;;3924:12;;;;3956:11;;;3986;;;3982:20;;3979:33;-1:-1:-1;3976:53:1;;;4025:1;4022;4015:12;3976:53;4047:1;4038:10;;4057:163;4071:2;4068:1;4065:9;4057:163;;;4128:17;;4116:30;;4089:1;4082:9;;;;;4166:12;;;;4198;;4057:163;;;-1:-1:-1;4239:5:1;3293:957;-1:-1:-1;;;;;;;;3293:957:1:o;4255:241::-;4311:6;4364:2;4352:9;4343:7;4339:23;4335:32;4332:52;;;4380:1;4377;4370:12;4332:52;4419:9;4406:23;4438:28;4460:5;4438:28;:::i;4501:245::-;4568:6;4621:2;4609:9;4600:7;4596:23;4592:32;4589:52;;;4637:1;4634;4627:12;4589:52;4669:9;4663:16;4688:28;4710:5;4688:28;:::i;4751:245::-;4809:6;4862:2;4850:9;4841:7;4837:23;4833:32;4830:52;;;4878:1;4875;4868:12;4830:52;4917:9;4904:23;4936:30;4960:5;4936:30;:::i;5001:249::-;5070:6;5123:2;5111:9;5102:7;5098:23;5094:32;5091:52;;;5139:1;5136;5129:12;5091:52;5171:9;5165:16;5190:30;5214:5;5190:30;:::i;5255:450::-;5324:6;5377:2;5365:9;5356:7;5352:23;5348:32;5345:52;;;5393:1;5390;5383:12;5345:52;5433:9;5420:23;5466:18;5458:6;5455:30;5452:50;;;5498:1;5495;5488:12;5452:50;5521:22;;5574:4;5566:13;;5562:27;-1:-1:-1;5552:55:1;;5603:1;5600;5593:12;5552:55;5626:73;5691:7;5686:2;5673:16;5668:2;5664;5660:11;5626:73;:::i;5710:180::-;5769:6;5822:2;5810:9;5801:7;5797:23;5793:32;5790:52;;;5838:1;5835;5828:12;5790:52;-1:-1:-1;5861:23:1;;5710:180;-1:-1:-1;5710:180:1:o;5895:184::-;5965:6;6018:2;6006:9;5997:7;5993:23;5989:32;5986:52;;;6034:1;6031;6024:12;5986:52;-1:-1:-1;6057:16:1;;5895:184;-1:-1:-1;5895:184:1:o;6084:248::-;6152:6;6160;6213:2;6201:9;6192:7;6188:23;6184:32;6181:52;;;6229:1;6226;6219:12;6181:52;-1:-1:-1;;6252:23:1;;;6322:2;6307:18;;;6294:32;;-1:-1:-1;6084:248:1:o;6337:257::-;6378:3;6416:5;6410:12;6443:6;6438:3;6431:19;6459:63;6515:6;6508:4;6503:3;6499:14;6492:4;6485:5;6481:16;6459:63;:::i;:::-;6576:2;6555:15;-1:-1:-1;;6551:29:1;6542:39;;;;6583:4;6538:50;;6337:257;-1:-1:-1;;6337:257:1:o;6599:274::-;6728:3;6766:6;6760:13;6782:53;6828:6;6823:3;6816:4;6808:6;6804:17;6782:53;:::i;:::-;6851:16;;;;;6599:274;-1:-1:-1;;6599:274:1:o;6878:1527::-;7102:3;7140:6;7134:13;7166:4;7179:51;7223:6;7218:3;7213:2;7205:6;7201:15;7179:51;:::i;:::-;7293:13;;7252:16;;;;7315:55;7293:13;7252:16;7337:15;;;7315:55;:::i;:::-;7459:13;;7392:20;;;7432:1;;7519;7541:18;;;;7594;;;;7621:93;;7699:4;7689:8;7685:19;7673:31;;7621:93;7762:2;7752:8;7749:16;7729:18;7726:40;7723:167;;;-1:-1:-1;;;7789:33:1;;7845:4;7842:1;7835:15;7875:4;7796:3;7863:17;7723:167;7906:18;7933:110;;;;8057:1;8052:328;;;;7899:481;;7933:110;-1:-1:-1;;7968:24:1;;7954:39;;8013:20;;;;-1:-1:-1;7933:110:1;;8052:328;32069:1;32062:14;;;32106:4;32093:18;;8147:1;8161:169;8175:8;8172:1;8169:15;8161:169;;;8257:14;;8242:13;;;8235:37;8300:16;;;;8192:10;;8161:169;;;8165:3;;8361:8;8354:5;8350:20;8343:27;;7899:481;-1:-1:-1;8396:3:1;;6878:1527;-1:-1:-1;;;;;;;;;;;6878:1527:1:o;9208:488::-;-1:-1:-1;;;;;9477:15:1;;;9459:34;;9529:15;;9524:2;9509:18;;9502:43;9576:2;9561:18;;9554:34;;;9624:3;9619:2;9604:18;;9597:31;;;9402:4;;9645:45;;9670:19;;9662:6;9645:45;:::i;:::-;9637:53;9208:488;-1:-1:-1;;;;;;9208:488:1:o;10330:632::-;10501:2;10553:21;;;10623:13;;10526:18;;;10645:22;;;10472:4;;10501:2;10724:15;;;;10698:2;10683:18;;;10472:4;10767:169;10781:6;10778:1;10775:13;10767:169;;;10842:13;;10830:26;;10911:15;;;;10876:12;;;;10803:1;10796:9;10767:169;;;-1:-1:-1;10953:3:1;;10330:632;-1:-1:-1;;;;;;10330:632:1:o;11159:219::-;11308:2;11297:9;11290:21;11271:4;11328:44;11368:2;11357:9;11353:18;11345:6;11328:44;:::i;11795:341::-;11997:2;11979:21;;;12036:2;12016:18;;;12009:30;-1:-1:-1;;;12070:2:1;12055:18;;12048:47;12127:2;12112:18;;11795:341::o;12553:414::-;12755:2;12737:21;;;12794:2;12774:18;;;12767:30;12833:34;12828:2;12813:18;;12806:62;-1:-1:-1;;;12899:2:1;12884:18;;12877:48;12957:3;12942:19;;12553:414::o;15325:332::-;15527:2;15509:21;;;15566:1;15546:18;;;15539:29;-1:-1:-1;;;15599:2:1;15584:18;;15577:39;15648:2;15633:18;;15325:332::o;17987:342::-;18189:2;18171:21;;;18228:2;18208:18;;;18201:30;-1:-1:-1;;;18262:2:1;18247:18;;18240:48;18320:2;18305:18;;17987:342::o;18334:345::-;18536:2;18518:21;;;18575:2;18555:18;;;18548:30;-1:-1:-1;;;18609:2:1;18594:18;;18587:51;18670:2;18655:18;;18334:345::o;19520:337::-;19722:2;19704:21;;;19761:2;19741:18;;;19734:30;-1:-1:-1;;;19795:2:1;19780:18;;19773:43;19848:2;19833:18;;19520:337::o;21095:339::-;21297:2;21279:21;;;21336:2;21316:18;;;21309:30;-1:-1:-1;;;21370:2:1;21355:18;;21348:45;21425:2;21410:18;;21095:339::o;21850:346::-;22052:2;22034:21;;;22091:2;22071:18;;;22064:30;-1:-1:-1;;;22125:2:1;22110:18;;22103:52;22187:2;22172:18;;21850:346::o;23310:356::-;23512:2;23494:21;;;23531:18;;;23524:30;23590:34;23585:2;23570:18;;23563:62;23657:2;23642:18;;23310:356::o;23671:339::-;23873:2;23855:21;;;23912:2;23892:18;;;23885:30;-1:-1:-1;;;23946:2:1;23931:18;;23924:45;24001:2;23986:18;;23671:339::o;24426:346::-;24628:2;24610:21;;;24667:2;24647:18;;;24640:30;-1:-1:-1;;;24701:2:1;24686:18;;24679:52;24763:2;24748:18;;24426:346::o;25603:356::-;25805:2;25787:21;;;25824:18;;;25817:30;25883:34;25878:2;25863:18;;25856:62;25950:2;25935:18;;25603:356::o;27180:413::-;27382:2;27364:21;;;27421:2;27401:18;;;27394:30;27460:34;27455:2;27440:18;;27433:62;-1:-1:-1;;;27526:2:1;27511:18;;27504:47;27583:3;27568:19;;27180:413::o;28000:411::-;28202:2;28184:21;;;28241:2;28221:18;;;28214:30;28280:34;28275:2;28260:18;;28253:62;-1:-1:-1;;;28346:2:1;28331:18;;28324:45;28401:3;28386:19;;28000:411::o;30369:355::-;30571:2;30553:21;;;30610:2;30590:18;;;30583:30;30649:33;30644:2;30629:18;;30622:61;30715:2;30700:18;;30369:355::o;31716:275::-;31787:2;31781:9;31852:2;31833:13;;-1:-1:-1;;31829:27:1;31817:40;;31887:18;31872:34;;31908:22;;;31869:62;31866:88;;;31934:18;;:::i;:::-;31970:2;31963:22;31716:275;;-1:-1:-1;31716:275:1:o;32122:128::-;32162:3;32193:1;32189:6;32186:1;32183:13;32180:39;;;32199:18;;:::i;:::-;-1:-1:-1;32235:9:1;;32122:128::o;32255:120::-;32295:1;32321;32311:35;;32326:18;;:::i;:::-;-1:-1:-1;32360:9:1;;32255:120::o;32380:168::-;32420:7;32486:1;32482;32478:6;32474:14;32471:1;32468:21;32463:1;32456:9;32449:17;32445:45;32442:71;;;32493:18;;:::i;:::-;-1:-1:-1;32533:9:1;;32380:168::o;32553:125::-;32593:4;32621:1;32618;32615:8;32612:34;;;32626:18;;:::i;:::-;-1:-1:-1;32663:9:1;;32553:125::o;32683:258::-;32755:1;32765:113;32779:6;32776:1;32773:13;32765:113;;;32855:11;;;32849:18;32836:11;;;32829:39;32801:2;32794:10;32765:113;;;32896:6;32893:1;32890:13;32887:48;;;-1:-1:-1;;32931:1:1;32913:16;;32906:27;32683:258::o;32946:380::-;33025:1;33021:12;;;;33068;;;33089:61;;33143:4;33135:6;33131:17;33121:27;;33089:61;33196:2;33188:6;33185:14;33165:18;33162:38;33159:161;;;33242:10;33237:3;33233:20;33230:1;33223:31;33277:4;33274:1;33267:15;33305:4;33302:1;33295:15;33159:161;;32946:380;;;:::o;33331:135::-;33370:3;-1:-1:-1;;33391:17:1;;33388:43;;;33411:18;;:::i;:::-;-1:-1:-1;33458:1:1;33447:13;;33331:135::o;33471:112::-;33503:1;33529;33519:35;;33534:18;;:::i;:::-;-1:-1:-1;33568:9:1;;33471:112::o;33588:127::-;33649:10;33644:3;33640:20;33637:1;33630:31;33680:4;33677:1;33670:15;33704:4;33701:1;33694:15;33720:127;33781:10;33776:3;33772:20;33769:1;33762:31;33812:4;33809:1;33802:15;33836:4;33833:1;33826:15;33852:127;33913:10;33908:3;33904:20;33901:1;33894:31;33944:4;33941:1;33934:15;33968:4;33965:1;33958:15;33984:127;34045:10;34040:3;34036:20;34033:1;34026:31;34076:4;34073:1;34066:15;34100:4;34097:1;34090:15;34116:127;34177:10;34172:3;34168:20;34165:1;34158:31;34208:4;34205:1;34198:15;34232:4;34229:1;34222:15;34248:131;-1:-1:-1;;;;;34323:31:1;;34313:42;;34303:70;;34369:1;34366;34359:12;34384:118;34470:5;34463:13;34456:21;34449:5;34446:32;34436:60;;34492:1;34489;34482:12;34507:131;-1:-1:-1;;;;;;34581:32:1;;34571:43;;34561:71;;34628:1;34625;34618:12
Swarm Source
ipfs://ce7b4fa8eceef97ef91323e70b5919c1f45b5c5fff7d3cd2d9807f92cb68cbf4