Contract Overview
[ Download CSV Export ]
Contract Name:
ManekiArcade
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-11-17 */ // The following contract was created with love for the Lucky Maneki Community by Ryan Meyers // Twitter: @sreyeMnayR // My daughter and I also started a 100% Charity NFT Called F**K HUNGER (Non-Fungible Forks) // Please check out the website to mint https://forkhunger.art // According the the USDA, at least 10.5% of all households in the United States // are food insecure. Their definition for food insecurity is "uncertain of having, // or unable to acquire, enough food to meet the needs of all their members because // they had insufficient money or other resources for food. // [https://www.ers.usda.gov/topics/food-nutrition-assistance/food-security-in-the-us/key-statistics-graphics.aspx] // Other "developed" countries have similar challenges making sure everyone has // enough to eat. An estimated 7.2% of the population in high income countries // used food banks in 2013. [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6572174/] // We can do better than this! While we wait and work for social structures to // improve, however, it's super important to support the existing systems of // food banks and other charitable organizations focused on feeding people. // F**K HUNGER! // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT 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/[email protected] // License-Identifier: MIT 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/[email protected] // License-Identifier: MIT 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/token/ERC721/extensions/[email protected] // License-Identifier: MIT 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/utils/[email protected] // License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] // License-Identifier: MIT 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/introspection/[email protected] // License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] // License-Identifier: MIT 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/[email protected] // License-Identifier: MIT 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/token/ERC721/extensions/[email protected] // License-Identifier: MIT 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 contracts/Sh1take.sol // contracts/Sh1take.sol // License-Identifier: MIT pragma solidity ^0.8.0; interface ISh1take is IERC721Enumerable {} // File @openzeppelin/contracts/access/[email protected] // License-Identifier: MIT 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); } } // File @openzeppelin/contracts/security/[email protected] // License-Identifier: MIT 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 make 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; } } // File contracts/ManekiArcade.sol // contracts/ManekiArcade.sol // License-Identifier: MIT pragma solidity ^0.8.0; // Welcome to the Maneki Arcade Smart Contract! // Built with love by Ryan Meyers (@sreyeMnayR on the Tweeter) // F**K HUNGER! contract ManekiArcade is ERC721Enumerable, Ownable, ReentrancyGuard { uint public constant MAX_CABINETS = 141590; uint public PRICE = 40000000000000000000; // 40 MATIC string public METADATA_PROVENANCE_HASH = ""; string public baseURI = "https://nyfti.xyz/api/v1/nft/metadata/"; uint private _curIndex = 0; uint private _reservationIndex = 0; bool public hasSaleStarted = false; constructor() ERC721("Lucky Maneki Arcade NFT","ARCADE") { } /** NFT */ function tokensOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function mintOneCabinet() external payable nonReentrant() { require(hasSaleStarted, "Sale is not active."); require(totalSupply() < MAX_CABINETS, "Sale has ended."); require((msg.value >= PRICE), "Minimum price not met."); _safeMint(msg.sender, _curIndex); _adjustIndex(); } function mintCabinets(uint256 numCabinets) external payable nonReentrant() { require(hasSaleStarted, "Sale is not active."); require(totalSupply() < MAX_CABINETS, "Sale has ended."); require(totalSupply() + numCabinets <= MAX_CABINETS, "Not enough Cabinets remain!"); require((msg.value >= numCabinets * PRICE), "Minimum price not met."); for (uint i = 0; i < numCabinets; i++) { _safeMint(msg.sender, _curIndex); _adjustIndex(); } } function _adjustIndex() private { _curIndex++; } function getCurrentIndex() public view returns (uint) { return _curIndex; } function setProvenanceHash(string memory _hash) external onlyOwner { METADATA_PROVENANCE_HASH = _hash; } function setBaseURI(string memory newBaseURI) external onlyOwner { baseURI = newBaseURI; } function setPrice(uint newPrice) external onlyOwner { PRICE = newPrice; } function _baseURI() internal view virtual override returns (string memory) { return getBaseURI(); } function getBaseURI() public view returns (string memory) { return baseURI; } function flipSaleState() external onlyOwner { hasSaleStarted = !hasSaleStarted; } function withdrawAll() external payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } // Claim = mint to owner wallet function claimMany(uint256 numCabinets) external onlyOwner { require(totalSupply() < MAX_CABINETS, "Sale has already ended"); require(totalSupply() + numCabinets < MAX_CABINETS, "Not enough available"); for (uint i = 0; i < numCabinets; i++) { _safeMint(owner(), _curIndex); _adjustIndex(); } } function claimAllRemaining() external onlyOwner { // send remaining shrooms to owner wallet for (uint i = 0; i <= MAX_CABINETS - totalSupply(); i++) { _safeMint(owner(), _curIndex); _adjustIndex(); } } // Give away = mint to another wallet function giveAwayOne(address recipient) external nonReentrant() onlyOwner { require(totalSupply() < MAX_CABINETS, "Sale has already ended"); _safeMint(recipient, _curIndex); _adjustIndex(); } function giveAwayMany(address[] memory recipients) external nonReentrant() onlyOwner { require(totalSupply() + recipients.length < MAX_CABINETS, "Not enough shrooms remain."); for (uint i = 0; i < recipients.length; i++) { _safeMint(recipients[i], _curIndex); _adjustIndex(); } } function burn(uint256 tokenId) external { require(_isApprovedOrOwner(msg.sender, tokenId), "Caller is not owner nor approved"); _burn(tokenId); } function contractURI() public view returns (string memory) { return string(abi.encodePacked(baseURI, "contract_metadata.json")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"MAX_CABINETS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAllRemaining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numCabinets","type":"uint256"}],"name":"claimMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"giveAwayMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"giveAwayOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"numCabinets","type":"uint256"}],"name":"mintCabinets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOneCabinet","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
68022b1c8c1227a00000600c5560a06040819052600060808190526200002891600d9162000173565b5060405180606001604052806026815260200162002d226026913980516200005991600e9160209091019062000173565b506000600f8190556010556011805460ff191690553480156200007b57600080fd5b50604080518082018252601781527f4c75636b79204d616e656b6920417263616465204e465400000000000000000060208083019182528351808501909452600684526541524341444560d01b908401528151919291620000df9160009162000173565b508051620000f590600190602084019062000173565b505050620001126200010c6200011d60201b60201c565b62000121565b6001600b5562000256565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001819062000219565b90600052602060002090601f016020900481019282620001a55760008555620001f0565b82601f10620001c057805160ff1916838001178555620001f0565b82800160010185558215620001f0579182015b82811115620001f0578251825591602001919060010190620001d3565b50620001fe92915062000202565b5090565b5b80821115620001fe576000815560010162000203565b600181811c908216806200022e57607f821691505b602082108114156200025057634e487b7160e01b600052602260045260246000fd5b50919050565b612abc80620002666000396000f3fe60806040526004361061023b5760003560e01c8063714c53981161012e578063ad6db417116100ab578063e985e9c51161006f578063e985e9c51461063a578063f0c9dc6014610683578063f2fde38b14610698578063f5a999f9146106b8578063fc119fb1146106cb57600080fd5b8063ad6db417146105b9578063b71914ce146105d0578063b88d4fde146105e5578063c87b56dd14610605578063e8a3d4851461062557600080fd5b80638d859f3e116100f25780638d859f3e146105305780638da5cb5b1461054657806391b7f5ed1461056457806395d89b4114610584578063a22cb4651461059957600080fd5b8063714c5398146104c9578063715018a6146104de5780638462151c146104f3578063853828b6146105205780638c5ebea41461052857600080fd5b80632afa678b116101bc5780634f6ccce7116101805780634f6ccce71461043457806355f804b3146104545780636352211e146104745780636c0360eb1461049457806370a08231146104a957600080fd5b80632afa678b1461039f5780632f745c59146103bf57806334918dfd146103df57806342842e0e146103f457806342966c681461041457600080fd5b80630d9005ae116102035780630d9005ae14610311578063109695231461033057806318160ddd146103505780631c8b232d1461036557806323b872dd1461037f57600080fd5b806301ffc9a71461024057806306c40cd61461027557806306fdde0314610297578063081812fc146102b9578063095ea7b3146102f1575b600080fd5b34801561024c57600080fd5b5061026061025b366004612314565b6106eb565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b50610295610290366004612394565b610716565b005b3480156102a357600080fd5b506102ac61082b565b60405161026c9190612499565b3480156102c557600080fd5b506102d96102d43660046124ac565b6108bd565b6040516001600160a01b03909116815260200161026c565b3480156102fd57600080fd5b5061029561030c3660046124c5565b610952565b34801561031d57600080fd5b50600f545b60405190815260200161026c565b34801561033c57600080fd5b5061029561034b366004612547565b610a68565b34801561035c57600080fd5b50600854610322565b34801561037157600080fd5b506011546102609060ff1681565b34801561038b57600080fd5b5061029561039a366004612590565b610aa9565b3480156103ab57600080fd5b506102956103ba3660046125cc565b610ada565b3480156103cb57600080fd5b506103226103da3660046124c5565b610b9b565b3480156103eb57600080fd5b50610295610c31565b34801561040057600080fd5b5061029561040f366004612590565b610c6f565b34801561042057600080fd5b5061029561042f3660046124ac565b610c8a565b34801561044057600080fd5b5061032261044f3660046124ac565b610cec565b34801561046057600080fd5b5061029561046f366004612547565b610d7f565b34801561048057600080fd5b506102d961048f3660046124ac565b610dbc565b3480156104a057600080fd5b506102ac610e33565b3480156104b557600080fd5b506103226104c43660046125cc565b610ec1565b3480156104d557600080fd5b506102ac610f48565b3480156104ea57600080fd5b50610295610f57565b3480156104ff57600080fd5b5061051361050e3660046125cc565b610f8d565b60405161026c91906125e7565b61029561104c565b61029561109a565b34801561053c57600080fd5b50610322600c5481565b34801561055257600080fd5b50600a546001600160a01b03166102d9565b34801561057057600080fd5b5061029561057f3660046124ac565b6111bc565b34801561059057600080fd5b506102ac6111eb565b3480156105a557600080fd5b506102956105b436600461262b565b6111fa565b3480156105c557600080fd5b506103226202291681565b3480156105dc57600080fd5b506102956112bf565b3480156105f157600080fd5b50610295610600366004612667565b611339565b34801561061157600080fd5b506102ac6106203660046124ac565b611371565b34801561063157600080fd5b506102ac61144c565b34801561064657600080fd5b506102606106553660046126e3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561068f57600080fd5b506102ac611474565b3480156106a457600080fd5b506102956106b33660046125cc565b611481565b6102956106c63660046124ac565b611519565b3480156106d757600080fd5b506102956106e63660046124ac565b6116c1565b60006001600160e01b0319821663780e9d6360e01b14806107105750610710826117d4565b92915050565b6002600b5414156107425760405162461bcd60e51b815260040161073990612716565b60405180910390fd5b6002600b55600a546001600160a01b031633146107715760405162461bcd60e51b81526004016107399061274d565b62022916815161078060085490565b61078a9190612798565b106107d75760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420656e6f756768207368726f6f6d732072656d61696e2e0000000000006044820152606401610739565b60005b8151811015610822576108088282815181106107f8576107f86127b0565b6020026020010151600f54611824565b61081061183e565b8061081a816127c6565b9150506107da565b50506001600b55565b60606000805461083a906127e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610866906127e1565b80156108b35780601f10610888576101008083540402835291602001916108b3565b820191906000526020600020905b81548152906001019060200180831161089657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109365760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610739565b506000908152600460205260409020546001600160a01b031690565b600061095d82610dbc565b9050806001600160a01b0316836001600160a01b031614156109cb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610739565b336001600160a01b03821614806109e757506109e78133610655565b610a595760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610739565b610a638383611855565b505050565b600a546001600160a01b03163314610a925760405162461bcd60e51b81526004016107399061274d565b8051610aa590600d906020840190612265565b5050565b610ab333826118c3565b610acf5760405162461bcd60e51b815260040161073990612816565b610a638383836119ba565b6002600b541415610afd5760405162461bcd60e51b815260040161073990612716565b6002600b55600a546001600160a01b03163314610b2c5760405162461bcd60e51b81526004016107399061274d565b62022916610b3960085490565b10610b7f5760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b6044820152606401610739565b610b8b81600f54611824565b610b9361183e565b506001600b55565b6000610ba683610ec1565b8210610c085760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610739565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c5b5760405162461bcd60e51b81526004016107399061274d565b6011805460ff19811660ff90911615179055565b610a6383838360405180602001604052806000815250611339565b610c9433826118c3565b610ce05760405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610739565b610ce981611b65565b50565b6000610cf760085490565b8210610d5a5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610739565b60088281548110610d6d57610d6d6127b0565b90600052602060002001549050919050565b600a546001600160a01b03163314610da95760405162461bcd60e51b81526004016107399061274d565b8051610aa590600e906020840190612265565b6000818152600260205260408120546001600160a01b0316806107105760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610739565b600e8054610e40906127e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906127e1565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b505050505081565b60006001600160a01b038216610f2c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610739565b506001600160a01b031660009081526003602052604090205490565b6060600e805461083a906127e1565b600a546001600160a01b03163314610f815760405162461bcd60e51b81526004016107399061274d565b610f8b6000611c0c565b565b60606000610f9a83610ec1565b905080610fbb5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115610fd657610fd6612331565b604051908082528060200260200182016040528015610fff578160200160208202803683370190505b50905060005b82811015610fb3576110178582610b9b565b828281518110611029576110296127b0565b60209081029190910101528061103e816127c6565b915050611005565b50919050565b600a546001600160a01b031633146110765760405162461bcd60e51b81526004016107399061274d565b60405133904780156108fc02916000818181858888f19350505050610f8b57600080fd5b6002600b5414156110bd5760405162461bcd60e51b815260040161073990612716565b6002600b5560115460ff1661110a5760405162461bcd60e51b815260206004820152601360248201527229b0b6329034b9903737ba1030b1ba34bb329760691b6044820152606401610739565b6202291661111760085490565b106111565760405162461bcd60e51b815260206004820152600f60248201526e29b0b632903430b99032b73232b21760891b6044820152606401610739565b600c543410156111a15760405162461bcd60e51b815260206004820152601660248201527526b4b734b6bab690383934b1b2903737ba1036b2ba1760511b6044820152606401610739565b6111ad33600f54611824565b6111b561183e565b6001600b55565b600a546001600160a01b031633146111e65760405162461bcd60e51b81526004016107399061274d565b600c55565b60606001805461083a906127e1565b6001600160a01b0382163314156112535760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610739565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146112e95760405162461bcd60e51b81526004016107399061274d565b60005b6008546112fc9062022916612867565b8111610ce95761131f611317600a546001600160a01b031690565b600f54611824565b61132761183e565b80611331816127c6565b9150506112ec565b61134333836118c3565b61135f5760405162461bcd60e51b815260040161073990612816565b61136b84848484611c5e565b50505050565b6000818152600260205260409020546060906001600160a01b03166113f05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610739565b60006113fa611c91565b9050600081511161141a5760405180602001604052806000815250611445565b8061142484611ca0565b60405160200161143592919061287e565b6040516020818303038152906040525b9392505050565b6060600e60405160200161146091906128ad565b604051602081830303815290604052905090565b600d8054610e40906127e1565b600a546001600160a01b031633146114ab5760405162461bcd60e51b81526004016107399061274d565b6001600160a01b0381166115105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610739565b610ce981611c0c565b6002600b54141561153c5760405162461bcd60e51b815260040161073990612716565b6002600b5560115460ff166115895760405162461bcd60e51b815260206004820152601360248201527229b0b6329034b9903737ba1030b1ba34bb329760691b6044820152606401610739565b6202291661159660085490565b106115d55760405162461bcd60e51b815260206004820152600f60248201526e29b0b632903430b99032b73232b21760891b6044820152606401610739565b62022916816115e360085490565b6115ed9190612798565b111561163b5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820436162696e6574732072656d61696e2100000000006044820152606401610739565b600c546116489082612967565b3410156116905760405162461bcd60e51b815260206004820152601660248201527526b4b734b6bab690383934b1b2903737ba1036b2ba1760511b6044820152606401610739565b60005b81811015610822576116a733600f54611824565b6116af61183e565b806116b9816127c6565b915050611693565b600a546001600160a01b031633146116eb5760405162461bcd60e51b81526004016107399061274d565b620229166116f860085490565b1061173e5760405162461bcd60e51b815260206004820152601660248201527514d85b19481a185cc8185b1c9958591e48195b99195960521b6044820152606401610739565b620229168161174c60085490565b6117569190612798565b1061179a5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820617661696c61626c6560601b6044820152606401610739565b60005b81811015610aa5576117ba611317600a546001600160a01b031690565b6117c261183e565b806117cc816127c6565b91505061179d565b60006001600160e01b031982166380ac58cd60e01b148061180557506001600160e01b03198216635b5e139f60e01b145b8061071057506301ffc9a760e01b6001600160e01b0319831614610710565b610aa5828260405180602001604052806000815250611d9e565b600f805490600061184e836127c6565b9190505550565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061188a82610dbc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661193c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610739565b600061194783610dbc565b9050806001600160a01b0316846001600160a01b031614806119825750836001600160a01b0316611977846108bd565b6001600160a01b0316145b806119b257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166119cd82610dbc565b6001600160a01b031614611a355760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610739565b6001600160a01b038216611a975760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610739565b611aa2838383611dd1565b611aad600082611855565b6001600160a01b0383166000908152600360205260408120805460019290611ad6908490612867565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b04908490612798565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611b7082610dbc565b9050611b7e81600084611dd1565b611b89600083611855565b6001600160a01b0381166000908152600360205260408120805460019290611bb2908490612867565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611c698484846119ba565b611c7584848484611e89565b61136b5760405162461bcd60e51b815260040161073990612986565b6060611c9b610f48565b905090565b606081611cc45750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cee5780611cd8816127c6565b9150611ce79050600a836129ee565b9150611cc8565b60008167ffffffffffffffff811115611d0957611d09612331565b6040519080825280601f01601f191660200182016040528015611d33576020820181803683370190505b5090505b84156119b257611d48600183612867565b9150611d55600a86612a02565b611d60906030612798565b60f81b818381518110611d7557611d756127b0565b60200101906001600160f81b031916908160001a905350611d97600a866129ee565b9450611d37565b611da88383611f87565b611db56000848484611e89565b610a635760405162461bcd60e51b815260040161073990612986565b6001600160a01b038316611e2c57611e2781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611e4f565b816001600160a01b0316836001600160a01b031614611e4f57611e4f83826120d5565b6001600160a01b038216611e6657610a6381612172565b826001600160a01b0316826001600160a01b031614610a6357610a638282612221565b60006001600160a01b0384163b15611f7c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ecd903390899088908890600401612a16565b6020604051808303816000875af1925050508015611f08575060408051601f3d908101601f19168201909252611f0591810190612a53565b60015b611f62573d808015611f36576040519150601f19603f3d011682016040523d82523d6000602084013e611f3b565b606091505b508051611f5a5760405162461bcd60e51b815260040161073990612986565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119b2565b506001949350505050565b6001600160a01b038216611fdd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610739565b6000818152600260205260409020546001600160a01b0316156120425760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610739565b61204e60008383611dd1565b6001600160a01b0382166000908152600360205260408120805460019290612077908490612798565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016120e284610ec1565b6120ec9190612867565b60008381526007602052604090205490915080821461213f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061218490600190612867565b600083815260096020526040812054600880549394509092849081106121ac576121ac6127b0565b9060005260206000200154905080600883815481106121cd576121cd6127b0565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061220557612205612a70565b6001900381819060005260206000200160009055905550505050565b600061222c83610ec1565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612271906127e1565b90600052602060002090601f01602090048101928261229357600085556122d9565b82601f106122ac57805160ff19168380011785556122d9565b828001600101855582156122d9579182015b828111156122d95782518255916020019190600101906122be565b506122e59291506122e9565b5090565b5b808211156122e557600081556001016122ea565b6001600160e01b031981168114610ce957600080fd5b60006020828403121561232657600080fd5b8135611445816122fe565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561237057612370612331565b604052919050565b80356001600160a01b038116811461238f57600080fd5b919050565b600060208083850312156123a757600080fd5b823567ffffffffffffffff808211156123bf57600080fd5b818501915085601f8301126123d357600080fd5b8135818111156123e5576123e5612331565b8060051b91506123f6848301612347565b818152918301840191848101908884111561241057600080fd5b938501935b838510156124355761242685612378565b82529385019390850190612415565b98975050505050505050565b60005b8381101561245c578181015183820152602001612444565b8381111561136b5750506000910152565b60008151808452612485816020860160208601612441565b601f01601f19169290920160200192915050565b602081526000611445602083018461246d565b6000602082840312156124be57600080fd5b5035919050565b600080604083850312156124d857600080fd5b6124e183612378565b946020939093013593505050565b600067ffffffffffffffff83111561250957612509612331565b61251c601f8401601f1916602001612347565b905082815283838301111561253057600080fd5b828260208301376000602084830101529392505050565b60006020828403121561255957600080fd5b813567ffffffffffffffff81111561257057600080fd5b8201601f8101841361258157600080fd5b6119b2848235602084016124ef565b6000806000606084860312156125a557600080fd5b6125ae84612378565b92506125bc60208501612378565b9150604084013590509250925092565b6000602082840312156125de57600080fd5b61144582612378565b6020808252825182820181905260009190848201906040850190845b8181101561261f57835183529284019291840191600101612603565b50909695505050505050565b6000806040838503121561263e57600080fd5b61264783612378565b91506020830135801515811461265c57600080fd5b809150509250929050565b6000806000806080858703121561267d57600080fd5b61268685612378565b935061269460208601612378565b925060408501359150606085013567ffffffffffffffff8111156126b757600080fd5b8501601f810187136126c857600080fd5b6126d7878235602084016124ef565b91505092959194509250565b600080604083850312156126f657600080fd5b6126ff83612378565b915061270d60208401612378565b90509250929050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156127ab576127ab612782565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156127da576127da612782565b5060010190565b600181811c908216806127f557607f821691505b6020821081141561104657634e487b7160e01b600052602260045260246000fd5b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008282101561287957612879612782565b500390565b60008351612890818460208801612441565b8351908301906128a4818360208801612441565b01949350505050565b600080835481600182811c9150808316806128c957607f831692505b60208084108214156128e957634e487b7160e01b86526022600452602486fd5b8180156128fd576001811461290e5761293b565b60ff1986168952848901965061293b565b60008a81526020902060005b868110156129335781548b82015290850190830161291a565b505084890196505b5050505050506119b2817531b7b73a3930b1ba2fb6b2ba30b230ba30973539b7b760511b815260160190565b600081600019048311821515161561298157612981612782565b500290565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826129fd576129fd6129d8565b500490565b600082612a1157612a116129d8565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a499083018461246d565b9695505050505050565b600060208284031215612a6557600080fd5b8151611445816122fe565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208a715e2a313fb2763f61f2df3ed250073ddd0e3c8dfa461f8e7539e5108bfbb964736f6c634300080a003368747470733a2f2f6e796674692e78797a2f6170692f76312f6e66742f6d657461646174612f
Deployed ByteCode Sourcemap
47889:4490:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36277:224;;;;;;;;;;-1:-1:-1;36277:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;36277:224:0;;;;;;;;51711:337;;;;;;;;;;-1:-1:-1;51711:337:0;;;;;:::i;:::-;;:::i;:::-;;23114:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24673:221::-;;;;;;;;;;-1:-1:-1;24673:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3239:32:1;;;3221:51;;3209:2;3194:18;24673:221:0;3075:203:1;24196:411:0;;;;;;;;;;-1:-1:-1;24196:411:0;;;;;:::i;:::-;;:::i;49870:89::-;;;;;;;;;;-1:-1:-1;49942:9:0;;49870:89;;;3688:25:1;;;3676:2;3661:18;49870:89:0;3542:177:1;49967:118:0;;;;;;;;;;-1:-1:-1;49967:118:0;;;;;:::i;:::-;;:::i;36917:113::-;;;;;;;;;;-1:-1:-1;37005:10:0;:17;36917:113;;48287:34;;;;;;;;;;-1:-1:-1;48287:34:0;;;;;;;;25563:339;;;;;;;;;;-1:-1:-1;25563:339:0;;;;;:::i;:::-;;:::i;51480:223::-;;;;;;;;;;-1:-1:-1;51480:223:0;;;;;:::i;:::-;;:::i;36585:256::-;;;;;;;;;;-1:-1:-1;36585:256:0;;;;;:::i;:::-;;:::i;50524:95::-;;;;;;;;;;;;;:::i;25973:185::-;;;;;;;;;;-1:-1:-1;25973:185:0;;;;;:::i;:::-;;:::i;52056:168::-;;;;;;;;;;-1:-1:-1;52056:168:0;;;;;:::i;:::-;;:::i;37107:233::-;;;;;;;;;;-1:-1:-1;37107:233:0;;;;;:::i;:::-;;:::i;50093:104::-;;;;;;;;;;-1:-1:-1;50093:104:0;;;;;:::i;:::-;;:::i;22808:239::-;;;;;;;;;;-1:-1:-1;22808:239:0;;;;;:::i;:::-;;:::i;48130:64::-;;;;;;;;;;;;;:::i;22538:208::-;;;;;;;;;;-1:-1:-1;22538:208:0;;;;;:::i;:::-;;:::i;50425:91::-;;;;;;;;;;;;;:::i;44270:94::-;;;;;;;;;;;;;:::i;48432:502::-;;;;;;;;;;-1:-1:-1;48432:502:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50627:125::-;;;:::i;48942:324::-;;;:::i;48019:40::-;;;;;;;;;;;;;;;;43619:87;;;;;;;;;;-1:-1:-1;43692:6:0;;-1:-1:-1;;;;;43692:6:0;43619:87;;50205;;;;;;;;;;-1:-1:-1;50205:87:0;;;;;:::i;:::-;;:::i;23283:104::-;;;;;;;;;;;;;:::i;24966:295::-;;;;;;;;;;-1:-1:-1;24966:295:0;;;;;:::i;:::-;;:::i;47970:42::-;;;;;;;;;;;;48006:6;47970:42;;51170:259;;;;;;;;;;;;;:::i;26229:328::-;;;;;;;;;;-1:-1:-1;26229:328:0;;;;;:::i;:::-;;:::i;23458:334::-;;;;;;;;;;-1:-1:-1;23458:334:0;;;;;:::i;:::-;;:::i;52232:144::-;;;;;;;;;;;;;:::i;25332:164::-;;;;;;;;;;-1:-1:-1;25332:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;25453:25:0;;;25429:4;25453:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25332:164;48078:43;;;;;;;;;;;;;:::i;44519:192::-;;;;;;;;;;-1:-1:-1;44519:192:0;;;;;:::i;:::-;;:::i;49274:518::-;;;;;;:::i;:::-;;:::i;50799:361::-;;;;;;;;;;-1:-1:-1;50799:361:0;;;;;:::i;:::-;;:::i;36277:224::-;36379:4;-1:-1:-1;;;;;;36403:50:0;;-1:-1:-1;;;36403:50:0;;:90;;;36457:36;36481:11;36457:23;:36::i;:::-;36396:97;36277:224;-1:-1:-1;;36277:224:0:o;51711:337::-;46680:1;47276:7;;:19;;47268:63;;;;-1:-1:-1;;;47268:63:0;;;;;;;:::i;:::-;;;;;;;;;46680:1;47409:7;:18;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23:::1;43831:68;;;;-1:-1:-1::0;;;43831:68:0::1;;;;;;;:::i;:::-;48006:6:::2;51831:10;:17;51815:13;37005:10:::0;:17;;36917:113;51815:13:::2;:33;;;;:::i;:::-;:48;51807:87;;;::::0;-1:-1:-1;;;51807:87:0;;8230:2:1;51807:87:0::2;::::0;::::2;8212:21:1::0;8269:2;8249:18;;;8242:30;8308:28;8288:18;;;8281:56;8354:18;;51807:87:0::2;8028:350:1::0;51807:87:0::2;51910:6;51905:136;51926:10;:17;51922:1;:21;51905:136;;;51965:35;51975:10;51986:1;51975:13;;;;;;;;:::i;:::-;;;;;;;51990:9;;51965;:35::i;:::-;52015:14;:12;:14::i;:::-;51945:3:::0;::::2;::::0;::::2;:::i;:::-;;;;51905:136;;;-1:-1:-1::0;;46636:1:0;47588:7;:22;51711:337::o;23114:100::-;23168:13;23201:5;23194:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23114:100;:::o;24673:221::-;24749:7;28156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28156:16:0;24769:73;;;;-1:-1:-1;;;24769:73:0;;9242:2:1;24769:73:0;;;9224:21:1;9281:2;9261:18;;;9254:30;9320:34;9300:18;;;9293:62;-1:-1:-1;;;9371:18:1;;;9364:42;9423:19;;24769:73:0;9040:408:1;24769:73:0;-1:-1:-1;24862:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24862:24:0;;24673:221::o;24196:411::-;24277:13;24293:23;24308:7;24293:14;:23::i;:::-;24277:39;;24341:5;-1:-1:-1;;;;;24335:11:0;:2;-1:-1:-1;;;;;24335:11:0;;;24327:57;;;;-1:-1:-1;;;24327:57:0;;9655:2:1;24327:57:0;;;9637:21:1;9694:2;9674:18;;;9667:30;9733:34;9713:18;;;9706:62;-1:-1:-1;;;9784:18:1;;;9777:31;9825:19;;24327:57:0;9453:397:1;24327:57:0;17573:10;-1:-1:-1;;;;;24419:21:0;;;;:62;;-1:-1:-1;24444:37:0;24461:5;17573:10;25332:164;:::i;24444:37::-;24397:168;;;;-1:-1:-1;;;24397:168:0;;10057:2:1;24397:168:0;;;10039:21:1;10096:2;10076:18;;;10069:30;10135:34;10115:18;;;10108:62;10206:26;10186:18;;;10179:54;10250:19;;24397:168:0;9855:420:1;24397:168:0;24578:21;24587:2;24591:7;24578:8;:21::i;:::-;24266:341;24196:411;;:::o;49967:118::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;50045:32;;::::1;::::0;:24:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49967:118:::0;:::o;25563:339::-;25758:41;17573:10;25791:7;25758:18;:41::i;:::-;25750:103;;;;-1:-1:-1;;;25750:103:0;;;;;;;:::i;:::-;25866:28;25876:4;25882:2;25886:7;25866:9;:28::i;51480:223::-;46680:1;47276:7;;:19;;47268:63;;;;-1:-1:-1;;;47268:63:0;;;;;;;:::i;:::-;46680:1;47409:7;:18;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23:::1;43831:68;;;;-1:-1:-1::0;;;43831:68:0::1;;;;;;;:::i;:::-;48006:6:::2;51573:13;37005:10:::0;:17;;36917:113;51573:13:::2;:28;51565:63;;;::::0;-1:-1:-1;;;51565:63:0;;10900:2:1;51565:63:0::2;::::0;::::2;10882:21:1::0;10939:2;10919:18;;;10912:30;-1:-1:-1;;;10958:18:1;;;10951:52;11020:18;;51565:63:0::2;10698:346:1::0;51565:63:0::2;51639:31;51649:9;51660;;51639;:31::i;:::-;51681:14;:12;:14::i;:::-;-1:-1:-1::0;46636:1:0;47588:7;:22;51480:223::o;36585:256::-;36682:7;36718:23;36735:5;36718:16;:23::i;:::-;36710:5;:31;36702:87;;;;-1:-1:-1;;;36702:87:0;;11251:2:1;36702:87:0;;;11233:21:1;11290:2;11270:18;;;11263:30;11329:34;11309:18;;;11302:62;-1:-1:-1;;;11380:18:1;;;11373:41;11431:19;;36702:87:0;11049:407:1;36702:87:0;-1:-1:-1;;;;;;36807:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;36585:256::o;50524:95::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;50597:14:::1;::::0;;-1:-1:-1;;50579:32:0;::::1;50597:14;::::0;;::::1;50596:15;50579:32;::::0;;50524:95::o;25973:185::-;26111:39;26128:4;26134:2;26138:7;26111:39;;;;;;;;;;;;:16;:39::i;52056:168::-;52115:39;52134:10;52146:7;52115:18;:39::i;:::-;52107:84;;;;-1:-1:-1;;;52107:84:0;;11663:2:1;52107:84:0;;;11645:21:1;;;11682:18;;;11675:30;11741:34;11721:18;;;11714:62;11793:18;;52107:84:0;11461:356:1;52107:84:0;52202:14;52208:7;52202:5;:14::i;:::-;52056:168;:::o;37107:233::-;37182:7;37218:30;37005:10;:17;;36917:113;37218:30;37210:5;:38;37202:95;;;;-1:-1:-1;;;37202:95:0;;12024:2:1;37202:95:0;;;12006:21:1;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:42;12205:19;;37202:95:0;11822:408:1;37202:95:0;37315:10;37326:5;37315:17;;;;;;;;:::i;:::-;;;;;;;;;37308:24;;37107:233;;;:::o;50093:104::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;50169:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;22808:239::-:0;22880:7;22916:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22916:16:0;22951:19;22943:73;;;;-1:-1:-1;;;22943:73:0;;12437:2:1;22943:73:0;;;12419:21:1;12476:2;12456:18;;;12449:30;12515:34;12495:18;;;12488:62;-1:-1:-1;;;12566:18:1;;;12559:39;12615:19;;22943:73:0;12235:405:1;48130:64:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22538:208::-;22610:7;-1:-1:-1;;;;;22638:19:0;;22630:74;;;;-1:-1:-1;;;22630:74:0;;12847:2:1;22630:74:0;;;12829:21:1;12886:2;12866:18;;;12859:30;12925:34;12905:18;;;12898:62;-1:-1:-1;;;12976:18:1;;;12969:40;13026:19;;22630:74:0;12645:406:1;22630:74:0;-1:-1:-1;;;;;;22722:16:0;;;;;:9;:16;;;;;;;22538:208::o;50425:91::-;50468:13;50501:7;50494:14;;;;;:::i;44270:94::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;44335:21:::1;44353:1;44335:9;:21::i;:::-;44270:94::o:0;48432:502::-;48494:16;48523:18;48544:17;48554:6;48544:9;:17::i;:::-;48523:38;-1:-1:-1;48576:15:0;48572:355;;48615:16;;;48629:1;48615:16;;;;;;;;;;;-1:-1:-1;48608:23:0;48432:502;-1:-1:-1;;;48432:502:0:o;48572:355::-;48664:23;48704:10;48690:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48690:25:0;;48664:51;;48730:13;48758:130;48782:10;48774:5;:18;48758:130;;;48838:34;48858:6;48866:5;48838:19;:34::i;:::-;48822:6;48829:5;48822:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;48794:7;;;;:::i;:::-;;;;48758:130;;48572:355;48512:422;48432:502;;;:::o;50627:125::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;50696:47:::1;::::0;50704:10:::1;::::0;50721:21:::1;50696:47:::0;::::1;;;::::0;::::1;::::0;;;50721:21;50704:10;50696:47;::::1;;;;;;50688:56;;;::::0;::::1;48942:324:::0;46680:1;47276:7;;:19;;47268:63;;;;-1:-1:-1;;;47268:63:0;;;;;;;:::i;:::-;46680:1;47409:7;:18;49019:14:::1;::::0;::::1;;49011:46;;;::::0;-1:-1:-1;;;49011:46:0;;13258:2:1;49011:46:0::1;::::0;::::1;13240:21:1::0;13297:2;13277:18;;;13270:30;-1:-1:-1;;;13316:18:1;;;13309:49;13375:18;;49011:46:0::1;13056:343:1::0;49011:46:0::1;48006:6;49076:13;37005:10:::0;:17;;36917:113;49076:13:::1;:28;49068:56;;;::::0;-1:-1:-1;;;49068:56:0;;13606:2:1;49068:56:0::1;::::0;::::1;13588:21:1::0;13645:2;13625:18;;;13618:30;-1:-1:-1;;;13664:18:1;;;13657:45;13719:18;;49068:56:0::1;13404:339:1::0;49068:56:0::1;49157:5;;49144:9;:18;;49135:55;;;::::0;-1:-1:-1;;;49135:55:0;;13950:2:1;49135:55:0::1;::::0;::::1;13932:21:1::0;13989:2;13969:18;;;13962:30;-1:-1:-1;;;14008:18:1;;;14001:52;14070:18;;49135:55:0::1;13748:346:1::0;49135:55:0::1;49201:32;49211:10;49223:9;;49201;:32::i;:::-;49244:14;:12;:14::i;:::-;46636:1:::0;47588:7;:22;48942:324::o;50205:87::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;50268:5:::1;:16:::0;50205:87::o;23283:104::-;23339:13;23372:7;23365:14;;;;;:::i;24966:295::-;-1:-1:-1;;;;;25069:24:0;;17573:10;25069:24;;25061:62;;;;-1:-1:-1;;;25061:62:0;;14301:2:1;25061:62:0;;;14283:21:1;14340:2;14320:18;;;14313:30;14379:27;14359:18;;;14352:55;14424:18;;25061:62:0;14099:349:1;25061:62:0;17573:10;25136:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25136:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25136:53:0;;;;;;;;;;25205:48;;540:41:1;;;25136:42:0;;17573:10;25205:48;;513:18:1;25205:48:0;;;;;;;24966:295;;:::o;51170:259::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;51285:6:::1;51280:142;37005:10:::0;:17;51302:28:::1;::::0;48006:6:::1;51302:28;:::i;:::-;51297:1;:33;51280:142;;51352:29;51362:7;43692:6:::0;;-1:-1:-1;;;;;43692:6:0;;43619:87;51362:7:::1;51371:9;;51352;:29::i;:::-;51396:14;:12;:14::i;:::-;51332:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51280:142;;26229:328:::0;26404:41;17573:10;26437:7;26404:18;:41::i;:::-;26396:103;;;;-1:-1:-1;;;26396:103:0;;;;;;;:::i;:::-;26510:39;26524:4;26530:2;26534:7;26543:5;26510:13;:39::i;:::-;26229:328;;;;:::o;23458:334::-;28132:4;28156:16;;;:7;:16;;;;;;23531:13;;-1:-1:-1;;;;;28156:16:0;23557:76;;;;-1:-1:-1;;;23557:76:0;;14785:2:1;23557:76:0;;;14767:21:1;14824:2;14804:18;;;14797:30;14863:34;14843:18;;;14836:62;-1:-1:-1;;;14914:18:1;;;14907:45;14969:19;;23557:76:0;14583:411:1;23557:76:0;23646:21;23670:10;:8;:10::i;:::-;23646:34;;23722:1;23704:7;23698:21;:25;:86;;;;;;;;;;;;;;;;;23750:7;23759:18;:7;:16;:18::i;:::-;23733:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23698:86;23691:93;23458:334;-1:-1:-1;;;23458:334:0:o;52232:144::-;52276:13;52333:7;52316:51;;;;;;;;:::i;:::-;;;;;;;;;;;;;52302:66;;52232:144;:::o;48078:43::-;;;;;;;:::i;44519:192::-;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44608:22:0;::::1;44600:73;;;::::0;-1:-1:-1;;;44600:73:0;;17179:2:1;44600:73:0::1;::::0;::::1;17161:21:1::0;17218:2;17198:18;;;17191:30;17257:34;17237:18;;;17230:62;-1:-1:-1;;;17308:18:1;;;17301:36;17354:19;;44600:73:0::1;16977:402:1::0;44600:73:0::1;44684:19;44694:8;44684:9;:19::i;49274:518::-:0;46680:1;47276:7;;:19;;47268:63;;;;-1:-1:-1;;;47268:63:0;;;;;;;:::i;:::-;46680:1;47409:7;:18;49368:14:::1;::::0;::::1;;49360:46;;;::::0;-1:-1:-1;;;49360:46:0;;13258:2:1;49360:46:0::1;::::0;::::1;13240:21:1::0;13297:2;13277:18;;;13270:30;-1:-1:-1;;;13316:18:1;;;13309:49;13375:18;;49360:46:0::1;13056:343:1::0;49360:46:0::1;48006:6;49425:13;37005:10:::0;:17;;36917:113;49425:13:::1;:28;49417:56;;;::::0;-1:-1:-1;;;49417:56:0;;13606:2:1;49417:56:0::1;::::0;::::1;13588:21:1::0;13645:2;13625:18;;;13618:30;-1:-1:-1;;;13664:18:1;;;13657:45;13719:18;;49417:56:0::1;13404:339:1::0;49417:56:0::1;48006:6;49508:11;49492:13;37005:10:::0;:17;;36917:113;49492:13:::1;:27;;;;:::i;:::-;:43;;49484:83;;;::::0;-1:-1:-1;;;49484:83:0;;17586:2:1;49484:83:0::1;::::0;::::1;17568:21:1::0;17625:2;17605:18;;;17598:30;17664:29;17644:18;;;17637:57;17711:18;;49484:83:0::1;17384:351:1::0;49484:83:0::1;49614:5;::::0;49600:19:::1;::::0;:11;:19:::1;:::i;:::-;49587:9;:32;;49578:69;;;::::0;-1:-1:-1;;;49578:69:0;;13950:2:1;49578:69:0::1;::::0;::::1;13932:21:1::0;13989:2;13969:18;;;13962:30;-1:-1:-1;;;14008:18:1;;;14001:52;14070:18;;49578:69:0::1;13748:346:1::0;49578:69:0::1;49663:6;49658:127;49679:11;49675:1;:15;49658:127;;;49712:32;49722:10;49734:9;;49712;:32::i;:::-;49759:14;:12;:14::i;:::-;49692:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49658:127;;50799:361:::0;43692:6;;-1:-1:-1;;;;;43692:6:0;17573:10;43839:23;43831:68;;;;-1:-1:-1;;;43831:68:0;;;;;;;:::i;:::-;48006:6:::1;50877:13;37005:10:::0;:17;;36917:113;50877:13:::1;:28;50869:63;;;::::0;-1:-1:-1;;;50869:63:0;;10900:2:1;50869:63:0::1;::::0;::::1;10882:21:1::0;10939:2;10919:18;;;10912:30;-1:-1:-1;;;10958:18:1;;;10951:52;11020:18;;50869:63:0::1;10698:346:1::0;50869:63:0::1;48006:6;50967:11;50951:13;37005:10:::0;:17;;36917:113;50951:13:::1;:27;;;;:::i;:::-;:42;50943:75;;;::::0;-1:-1:-1;;;50943:75:0;;18115:2:1;50943:75:0::1;::::0;::::1;18097:21:1::0;18154:2;18134:18;;;18127:30;-1:-1:-1;;;18173:18:1;;;18166:50;18233:18;;50943:75:0::1;17913:344:1::0;50943:75:0::1;51034:6;51029:124;51050:11;51046:1;:15;51029:124;;;51083:29;51093:7;43692:6:::0;;-1:-1:-1;;;;;43692:6:0;;43619:87;51083:29:::1;51127:14;:12;:14::i;:::-;51063:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51029:124;;22169:305:::0;22271:4;-1:-1:-1;;;;;;22308:40:0;;-1:-1:-1;;;22308:40:0;;:105;;-1:-1:-1;;;;;;;22365:48:0;;-1:-1:-1;;;22365:48:0;22308:105;:158;;;-1:-1:-1;;;;;;;;;;20750:40:0;;;22430:36;20641:157;29051:110;29127:26;29137:2;29141:7;29127:26;;;;;;;;;;;;:9;:26::i;49800:62::-;49843:9;:11;;;:9;:11;;;:::i;:::-;;;;;;49800:62::o;32049:174::-;32124:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32124:29:0;-1:-1:-1;;;;;32124:29:0;;;;;;;;:24;;32178:23;32124:24;32178:14;:23::i;:::-;-1:-1:-1;;;;;32169:46:0;;;;;;;;;;;32049:174;;:::o;28361:348::-;28454:4;28156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28156:16:0;28471:73;;;;-1:-1:-1;;;28471:73:0;;18464:2:1;28471:73:0;;;18446:21:1;18503:2;18483:18;;;18476:30;18542:34;18522:18;;;18515:62;-1:-1:-1;;;18593:18:1;;;18586:42;18645:19;;28471:73:0;18262:408:1;28471:73:0;28555:13;28571:23;28586:7;28571:14;:23::i;:::-;28555:39;;28624:5;-1:-1:-1;;;;;28613:16:0;:7;-1:-1:-1;;;;;28613:16:0;;:51;;;;28657:7;-1:-1:-1;;;;;28633:31:0;:20;28645:7;28633:11;:20::i;:::-;-1:-1:-1;;;;;28633:31:0;;28613:51;:87;;;-1:-1:-1;;;;;;25453:25:0;;;25429:4;25453:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28668:32;28605:96;28361:348;-1:-1:-1;;;;28361:348:0:o;31353:578::-;31512:4;-1:-1:-1;;;;;31485:31:0;:23;31500:7;31485:14;:23::i;:::-;-1:-1:-1;;;;;31485:31:0;;31477:85;;;;-1:-1:-1;;;31477:85:0;;18877:2:1;31477:85:0;;;18859:21:1;18916:2;18896:18;;;18889:30;18955:34;18935:18;;;18928:62;-1:-1:-1;;;19006:18:1;;;18999:39;19055:19;;31477:85:0;18675:405:1;31477:85:0;-1:-1:-1;;;;;31581:16:0;;31573:65;;;;-1:-1:-1;;;31573:65:0;;19287:2:1;31573:65:0;;;19269:21:1;19326:2;19306:18;;;19299:30;19365:34;19345:18;;;19338:62;-1:-1:-1;;;19416:18:1;;;19409:34;19460:19;;31573:65:0;19085:400:1;31573:65:0;31651:39;31672:4;31678:2;31682:7;31651:20;:39::i;:::-;31755:29;31772:1;31776:7;31755:8;:29::i;:::-;-1:-1:-1;;;;;31797:15:0;;;;;;:9;:15;;;;;:20;;31816:1;;31797:15;:20;;31816:1;;31797:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31828:13:0;;;;;;:9;:13;;;;;:18;;31845:1;;31828:13;:18;;31845:1;;31828:18;:::i;:::-;;;;-1:-1:-1;;31857:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31857:21:0;-1:-1:-1;;;;;31857:21:0;;;;;;;;;31896:27;;31857:16;;31896:27;;;;;;;31353:578;;;:::o;30656:360::-;30716:13;30732:23;30747:7;30732:14;:23::i;:::-;30716:39;;30768:48;30789:5;30804:1;30808:7;30768:20;:48::i;:::-;30857:29;30874:1;30878:7;30857:8;:29::i;:::-;-1:-1:-1;;;;;30899:16:0;;;;;;:9;:16;;;;;:21;;30919:1;;30899:16;:21;;30919:1;;30899:21;:::i;:::-;;;;-1:-1:-1;;30938:16:0;;;;:7;:16;;;;;;30931:23;;-1:-1:-1;;;;;;30931:23:0;;;30972:36;30946:7;;30938:16;-1:-1:-1;;;;;30972:36:0;;;;;30938:16;;30972:36;30705:311;30656:360;:::o;44719:173::-;44794:6;;;-1:-1:-1;;;;;44811:17:0;;;-1:-1:-1;;;;;;44811:17:0;;;;;;;44844:40;;44794:6;;;44811:17;44794:6;;44844:40;;44775:16;;44844:40;44764:128;44719:173;:::o;27439:315::-;27596:28;27606:4;27612:2;27616:7;27596:9;:28::i;:::-;27643:48;27666:4;27672:2;27676:7;27685:5;27643:22;:48::i;:::-;27635:111;;;;-1:-1:-1;;;27635:111:0;;;;;;;:::i;50300:113::-;50360:13;50393:12;:10;:12::i;:::-;50386:19;;50300:113;:::o;18052:723::-;18108:13;18329:10;18325:53;;-1:-1:-1;;18356:10:0;;;;;;;;;;;;-1:-1:-1;;;18356:10:0;;;;;18052:723::o;18325:53::-;18403:5;18388:12;18444:78;18451:9;;18444:78;;18477:8;;;;:::i;:::-;;-1:-1:-1;18500:10:0;;-1:-1:-1;18508:2:0;18500:10;;:::i;:::-;;;18444:78;;;18532:19;18564:6;18554:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18554:17:0;;18532:39;;18582:154;18589:10;;18582:154;;18616:11;18626:1;18616:11;;:::i;:::-;;-1:-1:-1;18685:10:0;18693:2;18685:5;:10;:::i;:::-;18672:24;;:2;:24;:::i;:::-;18659:39;;18642:6;18649;18642:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18642:56:0;;;;;;;;-1:-1:-1;18713:11:0;18722:2;18713:11;;:::i;:::-;;;18582:154;;29388:321;29518:18;29524:2;29528:7;29518:5;:18::i;:::-;29569:54;29600:1;29604:2;29608:7;29617:5;29569:22;:54::i;:::-;29547:154;;;;-1:-1:-1;;;29547:154:0;;;;;;;:::i;37953:589::-;-1:-1:-1;;;;;38159:18:0;;38155:187;;38194:40;38226:7;39369:10;:17;;39342:24;;;;:15;:24;;;;;:44;;;39397:24;;;;;;;;;;;;39265:164;38194:40;38155:187;;;38264:2;-1:-1:-1;;;;;38256:10:0;:4;-1:-1:-1;;;;;38256:10:0;;38252:90;;38283:47;38316:4;38322:7;38283:32;:47::i;:::-;-1:-1:-1;;;;;38356:16:0;;38352:183;;38389:45;38426:7;38389:36;:45::i;38352:183::-;38462:4;-1:-1:-1;;;;;38456:10:0;:2;-1:-1:-1;;;;;38456:10:0;;38452:83;;38483:40;38511:2;38515:7;38483:27;:40::i;32788:799::-;32943:4;-1:-1:-1;;;;;32964:13:0;;9826:20;9874:8;32960:620;;33000:72;;-1:-1:-1;;;33000:72:0;;-1:-1:-1;;;;;33000:36:0;;;;;:72;;17573:10;;33051:4;;33057:7;;33066:5;;33000:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33000:72:0;;;;;;;;-1:-1:-1;;33000:72:0;;;;;;;;;;;;:::i;:::-;;;32996:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33242:13:0;;33238:272;;33285:60;;-1:-1:-1;;;33285:60:0;;;;;;;:::i;33238:272::-;33460:6;33454:13;33445:6;33441:2;33437:15;33430:38;32996:529;-1:-1:-1;;;;;;33123:51:0;-1:-1:-1;;;33123:51:0;;-1:-1:-1;33116:58:0;;32960:620;-1:-1:-1;33564:4:0;32788:799;;;;;;:::o;30045:382::-;-1:-1:-1;;;;;30125:16:0;;30117:61;;;;-1:-1:-1;;;30117:61:0;;21233:2:1;30117:61:0;;;21215:21:1;;;21252:18;;;21245:30;21311:34;21291:18;;;21284:62;21363:18;;30117:61:0;21031:356:1;30117:61:0;28132:4;28156:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28156:16:0;:30;30189:58;;;;-1:-1:-1;;;30189:58:0;;21594:2:1;30189:58:0;;;21576:21:1;21633:2;21613:18;;;21606:30;21672;21652:18;;;21645:58;21720:18;;30189:58:0;21392:352:1;30189:58:0;30260:45;30289:1;30293:2;30297:7;30260:20;:45::i;:::-;-1:-1:-1;;;;;30318:13:0;;;;;;:9;:13;;;;;:18;;30335:1;;30318:13;:18;;30335:1;;30318:18;:::i;:::-;;;;-1:-1:-1;;30347:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30347:21:0;-1:-1:-1;;;;;30347:21:0;;;;;;;;30386:33;;30347:16;;;30386:33;;30347:16;;30386:33;30045:382;;:::o;40056:988::-;40322:22;40372:1;40347:22;40364:4;40347:16;:22::i;:::-;:26;;;;:::i;:::-;40384:18;40405:26;;;:17;:26;;;;;;40322:51;;-1:-1:-1;40538:28:0;;;40534:328;;-1:-1:-1;;;;;40605:18:0;;40583:19;40605:18;;;:12;:18;;;;;;;;:34;;;;;;;;;40656:30;;;;;;:44;;;40773:30;;:17;:30;;;;;:43;;;40534:328;-1:-1:-1;40958:26:0;;;;:17;:26;;;;;;;;40951:33;;;-1:-1:-1;;;;;41002:18:0;;;;;:12;:18;;;;;:34;;;;;;;40995:41;40056:988::o;41339:1079::-;41617:10;:17;41592:22;;41617:21;;41637:1;;41617:21;:::i;:::-;41649:18;41670:24;;;:15;:24;;;;;;42043:10;:26;;41592:46;;-1:-1:-1;41670:24:0;;41592:46;;42043:26;;;;;;:::i;:::-;;;;;;;;;42021:48;;42107:11;42082:10;42093;42082:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;42187:28;;;:15;:28;;;;;;;:41;;;42359:24;;;;;42352:31;42394:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41410:1008;;;41339:1079;:::o;38843:221::-;38928:14;38945:20;38962:2;38945:16;:20::i;:::-;-1:-1:-1;;;;;38976:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39021:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;38843:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:127::-;653:10;648:3;644:20;641:1;634:31;684:4;681:1;674:15;708:4;705:1;698:15;724:275;795:2;789:9;860:2;841:13;;-1:-1:-1;;837:27:1;825:40;;895:18;880:34;;916:22;;;877:62;874:88;;;942:18;;:::i;:::-;978:2;971:22;724:275;;-1:-1:-1;724:275:1:o;1004:173::-;1072:20;;-1:-1:-1;;;;;1121:31:1;;1111:42;;1101:70;;1167:1;1164;1157:12;1101:70;1004:173;;;:::o;1182:952::-;1266:6;1297:2;1340;1328:9;1319:7;1315:23;1311:32;1308:52;;;1356:1;1353;1346:12;1308:52;1396:9;1383:23;1425:18;1466:2;1458:6;1455:14;1452:34;;;1482:1;1479;1472:12;1452:34;1520:6;1509:9;1505:22;1495:32;;1565:7;1558:4;1554:2;1550:13;1546:27;1536:55;;1587:1;1584;1577:12;1536:55;1623:2;1610:16;1645:2;1641;1638:10;1635:36;;;1651:18;;:::i;:::-;1697:2;1694:1;1690:10;1680:20;;1720:28;1744:2;1740;1736:11;1720:28;:::i;:::-;1782:15;;;1852:11;;;1848:20;;;1813:12;;;;1880:19;;;1877:39;;;1912:1;1909;1902:12;1877:39;1936:11;;;;1956:148;1972:6;1967:3;1964:15;1956:148;;;2038:23;2057:3;2038:23;:::i;:::-;2026:36;;1989:12;;;;2082;;;;1956:148;;;2123:5;1182:952;-1:-1:-1;;;;;;;;1182:952:1:o;2139:258::-;2211:1;2221:113;2235:6;2232:1;2229:13;2221:113;;;2311:11;;;2305:18;2292:11;;;2285:39;2257:2;2250:10;2221:113;;;2352:6;2349:1;2346:13;2343:48;;;-1:-1:-1;;2387:1:1;2369:16;;2362:27;2139:258::o;2402:::-;2444:3;2482:5;2476:12;2509:6;2504:3;2497:19;2525:63;2581:6;2574:4;2569:3;2565:14;2558:4;2551:5;2547:16;2525:63;:::i;:::-;2642:2;2621:15;-1:-1:-1;;2617:29:1;2608:39;;;;2649:4;2604:50;;2402:258;-1:-1:-1;;2402:258:1:o;2665:220::-;2814:2;2803:9;2796:21;2777:4;2834:45;2875:2;2864:9;2860:18;2852:6;2834:45;:::i;2890:180::-;2949:6;3002:2;2990:9;2981:7;2977:23;2973:32;2970:52;;;3018:1;3015;3008:12;2970:52;-1:-1:-1;3041:23:1;;2890:180;-1:-1:-1;2890:180:1:o;3283:254::-;3351:6;3359;3412:2;3400:9;3391:7;3387:23;3383:32;3380:52;;;3428:1;3425;3418:12;3380:52;3451:29;3470:9;3451:29;:::i;:::-;3441:39;3527:2;3512:18;;;;3499:32;;-1:-1:-1;;;3283:254:1:o;3724:407::-;3789:5;3823:18;3815:6;3812:30;3809:56;;;3845:18;;:::i;:::-;3883:57;3928:2;3907:15;;-1:-1:-1;;3903:29:1;3934:4;3899:40;3883:57;:::i;:::-;3874:66;;3963:6;3956:5;3949:21;4003:3;3994:6;3989:3;3985:16;3982:25;3979:45;;;4020:1;4017;4010:12;3979:45;4069:6;4064:3;4057:4;4050:5;4046:16;4033:43;4123:1;4116:4;4107:6;4100:5;4096:18;4092:29;4085:40;3724:407;;;;;:::o;4136:451::-;4205:6;4258:2;4246:9;4237:7;4233:23;4229:32;4226:52;;;4274:1;4271;4264:12;4226:52;4314:9;4301:23;4347:18;4339:6;4336:30;4333:50;;;4379:1;4376;4369:12;4333:50;4402:22;;4455:4;4447:13;;4443:27;-1:-1:-1;4433:55:1;;4484:1;4481;4474:12;4433:55;4507:74;4573:7;4568:2;4555:16;4550:2;4546;4542:11;4507:74;:::i;4592:328::-;4669:6;4677;4685;4738:2;4726:9;4717:7;4713:23;4709:32;4706:52;;;4754:1;4751;4744:12;4706:52;4777:29;4796:9;4777:29;:::i;:::-;4767:39;;4825:38;4859:2;4848:9;4844:18;4825:38;:::i;:::-;4815:48;;4910:2;4899:9;4895:18;4882:32;4872:42;;4592:328;;;;;:::o;4925:186::-;4984:6;5037:2;5025:9;5016:7;5012:23;5008:32;5005:52;;;5053:1;5050;5043:12;5005:52;5076:29;5095:9;5076:29;:::i;5116:632::-;5287:2;5339:21;;;5409:13;;5312:18;;;5431:22;;;5258:4;;5287:2;5510:15;;;;5484:2;5469:18;;;5258:4;5553:169;5567:6;5564:1;5561:13;5553:169;;;5628:13;;5616:26;;5697:15;;;;5662:12;;;;5589:1;5582:9;5553:169;;;-1:-1:-1;5739:3:1;;5116:632;-1:-1:-1;;;;;;5116:632:1:o;5753:347::-;5818:6;5826;5879:2;5867:9;5858:7;5854:23;5850:32;5847:52;;;5895:1;5892;5885:12;5847:52;5918:29;5937:9;5918:29;:::i;:::-;5908:39;;5997:2;5986:9;5982:18;5969:32;6044:5;6037:13;6030:21;6023:5;6020:32;6010:60;;6066:1;6063;6056:12;6010:60;6089:5;6079:15;;;5753:347;;;;;:::o;6105:667::-;6200:6;6208;6216;6224;6277:3;6265:9;6256:7;6252:23;6248:33;6245:53;;;6294:1;6291;6284:12;6245:53;6317:29;6336:9;6317:29;:::i;:::-;6307:39;;6365:38;6399:2;6388:9;6384:18;6365:38;:::i;:::-;6355:48;;6450:2;6439:9;6435:18;6422:32;6412:42;;6505:2;6494:9;6490:18;6477:32;6532:18;6524:6;6521:30;6518:50;;;6564:1;6561;6554:12;6518:50;6587:22;;6640:4;6632:13;;6628:27;-1:-1:-1;6618:55:1;;6669:1;6666;6659:12;6618:55;6692:74;6758:7;6753:2;6740:16;6735:2;6731;6727:11;6692:74;:::i;:::-;6682:84;;;6105:667;;;;;;;:::o;6777:260::-;6845:6;6853;6906:2;6894:9;6885:7;6881:23;6877:32;6874:52;;;6922:1;6919;6912:12;6874:52;6945:29;6964:9;6945:29;:::i;:::-;6935:39;;6993:38;7027:2;7016:9;7012:18;6993:38;:::i;:::-;6983:48;;6777:260;;;;;:::o;7042:355::-;7244:2;7226:21;;;7283:2;7263:18;;;7256:30;7322:33;7317:2;7302:18;;7295:61;7388:2;7373:18;;7042:355::o;7402:356::-;7604:2;7586:21;;;7623:18;;;7616:30;7682:34;7677:2;7662:18;;7655:62;7749:2;7734:18;;7402:356::o;7763:127::-;7824:10;7819:3;7815:20;7812:1;7805:31;7855:4;7852:1;7845:15;7879:4;7876:1;7869:15;7895:128;7935:3;7966:1;7962:6;7959:1;7956:13;7953:39;;;7972:18;;:::i;:::-;-1:-1:-1;8008:9:1;;7895:128::o;8383:127::-;8444:10;8439:3;8435:20;8432:1;8425:31;8475:4;8472:1;8465:15;8499:4;8496:1;8489:15;8515:135;8554:3;-1:-1:-1;;8575:17:1;;8572:43;;;8595:18;;:::i;:::-;-1:-1:-1;8642:1:1;8631:13;;8515:135::o;8655:380::-;8734:1;8730:12;;;;8777;;;8798:61;;8852:4;8844:6;8840:17;8830:27;;8798:61;8905:2;8897:6;8894:14;8874:18;8871:38;8868:161;;;8951:10;8946:3;8942:20;8939:1;8932:31;8986:4;8983:1;8976:15;9014:4;9011:1;9004:15;10280:413;10482:2;10464:21;;;10521:2;10501:18;;;10494:30;10560:34;10555:2;10540:18;;10533:62;-1:-1:-1;;;10626:2:1;10611:18;;10604:47;10683:3;10668:19;;10280:413::o;14453:125::-;14493:4;14521:1;14518;14515:8;14512:34;;;14526:18;;:::i;:::-;-1:-1:-1;14563:9:1;;14453:125::o;14999:470::-;15178:3;15216:6;15210:13;15232:53;15278:6;15273:3;15266:4;15258:6;15254:17;15232:53;:::i;:::-;15348:13;;15307:16;;;;15370:57;15348:13;15307:16;15404:4;15392:17;;15370:57;:::i;:::-;15443:20;;14999:470;-1:-1:-1;;;;14999:470:1:o;15741:1231::-;15970:3;15999:1;16032:6;16026:13;16062:3;16084:1;16112:9;16108:2;16104:18;16094:28;;16172:2;16161:9;16157:18;16194;16184:61;;16238:4;16230:6;16226:17;16216:27;;16184:61;16264:2;16312;16304:6;16301:14;16281:18;16278:38;16275:165;;;-1:-1:-1;;;16339:33:1;;16395:4;16392:1;16385:15;16425:4;16346:3;16413:17;16275:165;16456:18;16483:104;;;;16601:1;16596:320;;;;16449:467;;16483:104;-1:-1:-1;;16516:24:1;;16504:37;;16561:16;;;;-1:-1:-1;16483:104:1;;16596:320;15547:1;15540:14;;;15584:4;15571:18;;16691:1;16705:165;16719:6;16716:1;16713:13;16705:165;;;16797:14;;16784:11;;;16777:35;16840:16;;;;16734:10;;16705:165;;;16709:3;;16899:6;16894:3;16890:16;16883:23;;16449:467;;;;;;;16932:34;16962:3;-1:-1:-1;;;15665:37:1;;15727:2;15718:12;;15600:136;17740:168;17780:7;17846:1;17842;17838:6;17834:14;17831:1;17828:21;17823:1;17816:9;17809:17;17805:45;17802:71;;;17853:18;;:::i;:::-;-1:-1:-1;17893:9:1;;17740:168::o;19490:414::-;19692:2;19674:21;;;19731:2;19711:18;;;19704:30;19770:34;19765:2;19750:18;;19743:62;-1:-1:-1;;;19836:2:1;19821:18;;19814:48;19894:3;19879:19;;19490:414::o;19909:127::-;19970:10;19965:3;19961:20;19958:1;19951:31;20001:4;19998:1;19991:15;20025:4;20022:1;20015:15;20041:120;20081:1;20107;20097:35;;20112:18;;:::i;:::-;-1:-1:-1;20146:9:1;;20041:120::o;20166:112::-;20198:1;20224;20214:35;;20229:18;;:::i;:::-;-1:-1:-1;20263:9:1;;20166:112::o;20283:489::-;-1:-1:-1;;;;;20552:15:1;;;20534:34;;20604:15;;20599:2;20584:18;;20577:43;20651:2;20636:18;;20629:34;;;20699:3;20694:2;20679:18;;20672:31;;;20477:4;;20720:46;;20746:19;;20738:6;20720:46;:::i;:::-;20712:54;20283:489;-1:-1:-1;;;;;;20283:489:1:o;20777:249::-;20846:6;20899:2;20887:9;20878:7;20874:23;20870:32;20867:52;;;20915:1;20912;20905:12;20867:52;20947:9;20941:16;20966:30;20990:5;20966:30;:::i;21749:127::-;21810:10;21805:3;21801:20;21798:1;21791:31;21841:4;21838:1;21831:15;21865:4;21862:1;21855:15
Swarm Source
ipfs://8a715e2a313fb2763f61f2df3ed250073ddd0e3c8dfa461f8e7539e5108bfbb9
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.