ERC-721
Overview
Max Total Supply
8,000 BALIVERSE
Holders
1,480
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BALIVERSELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Baliverse
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } //SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Baliverse is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.05 ether; uint256 public maxSupply = 8000; uint256 public maxMintAmount = 20; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; mapping(address => uint256) public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) external payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(addressMintedBalance[msg.sender] + _mintAmount <= maxMintAmount, "max mint amount per user exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= whitelistedAddresses[msg.sender], "you are not whitelisted or max whitelist amount exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } uint256 tempBalance; tempBalance = addressMintedBalance[msg.sender]; for (uint256 i = 1; i <= _mintAmount; i++) { tempBalance++; _safeMint(msg.sender, supply + i); } addressMintedBalance[msg.sender] = tempBalance; } function isWhitelisted(address _user) public view returns (uint) { if (whitelistedAddresses[_user] > 0) return whitelistedAddresses[_user]; else return maxSupply; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address _user, uint256 _amount) public onlyOwner { whitelistedAddresses[_user] = _amount; } function withdraw() public payable onlyOwner { (bool os, ) = payable(0xf659E6a3EF9D9abdbb69355F304F1716c86e4Bbd).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c919062000205565b5066b1a2bc2ec50000600e55611f40600f5560146010556011805462ffffff1916620100001790553480156200005d57600080fd5b5060405162003c6d38038062003c6d833981016040819052620000809162000362565b8351849084906200009990600090602085019062000205565b508051620000af90600190602084019062000205565b505050620000cc620000c6620000ec60201b60201c565b620000f0565b620000d78262000142565b620000e281620001aa565b505050506200046e565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001915760405162461bcd60e51b8152602060048201819052602482015260008051602062003c4d83398151915260448201526064015b60405180910390fd5b8051620001a690600b90602084019062000205565b5050565b600a546001600160a01b03163314620001f55760405162461bcd60e51b8152602060048201819052602482015260008051602062003c4d833981519152604482015260640162000188565b8051620001a690600d9060208401905b82805462000213906200041b565b90600052602060002090601f01602090048101928262000237576000855562000282565b82601f106200025257805160ff191683800117855562000282565b8280016001018555821562000282579182015b828111156200028257825182559160200191906001019062000265565b506200029092915062000294565b5090565b5b8082111562000290576000815560010162000295565b600082601f830112620002bd57600080fd5b81516001600160401b0380821115620002da57620002da62000458565b604051601f8301601f19908116603f0116810190828211818310171562000305576200030562000458565b816040528381526020925086838588010111156200032257600080fd5b600091505b8382101562000346578582018301518183018401529082019062000327565b83821115620003585760008385830101525b9695505050505050565b600080600080608085870312156200037957600080fd5b84516001600160401b03808211156200039157600080fd5b6200039f88838901620002ab565b95506020870151915080821115620003b657600080fd5b620003c488838901620002ab565b94506040870151915080821115620003db57600080fd5b620003e988838901620002ab565b935060608701519150808211156200040057600080fd5b506200040f87828801620002ab565b91505092959194509250565b600181811c908216806200043057607f821691505b602082108114156200045257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6137cf806200047e6000396000f3fe6080604052600436106102dc5760003560e01c806355f804b311610184578063a0712d68116100d6578063c87b56dd1161008a578063e985e9c511610064578063e985e9c5146107c8578063f2c4ce1e1461081e578063f2fde38b1461083e57600080fd5b8063c87b56dd14610772578063d5abeb0114610792578063da3ef23f146107a857600080fd5b8063a475b5dd116100bb578063a475b5dd14610728578063b88d4fde1461073d578063c66828621461075d57600080fd5b8063a0712d68146106f5578063a22cb4651461070857600080fd5b8063715018a61161013857806395d89b411161011257806395d89b41146106a057806397760974146106b55780639c70b512146106d557600080fd5b8063715018a6146106405780637f00c7a6146106555780638da5cb5b1461067557600080fd5b80636352211e116101695780636352211e146105eb5780636c0360eb1461060b57806370a082311461062057600080fd5b806355f804b3146105b15780635c975abb146105d157600080fd5b8063239c70ae1161023d5780633ccfd60b116101f157806344a0d68a116101cb57806344a0d68a146105525780634f6ccce714610572578063518302271461059257600080fd5b80633ccfd60b146104fd57806342842e0e14610505578063438b63001461052557600080fd5b80632f745c59116102225780632f745c591461049d5780633af32abf146104bd5780633c952764146104dd57600080fd5b8063239c70ae1461046757806323b872dd1461047d57600080fd5b8063081c8c441161029457806313faede61161027957806313faede61461040f57806318160ddd1461042557806318cae2691461043a57600080fd5b8063081c8c44146103da578063095ea7b3146103ef57600080fd5b806306c933d8116102c557806306c933d81461033857806306fdde0314610373578063081812fc1461039557600080fd5b806301ffc9a7146102e157806302329a2914610316575b600080fd5b3480156102ed57600080fd5b506103016102fc3660046132b2565b61085e565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004613297565b6108ba565b005b34801561034457600080fd5b5061036561035336600461313d565b60126020526000908152604090205481565b60405190815260200161030d565b34801561037f57600080fd5b50610388610971565b60405161030d9190613520565b3480156103a157600080fd5b506103b56103b0366004613335565b610a03565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030d565b3480156103e657600080fd5b50610388610add565b3480156103fb57600080fd5b5061033661040a36600461326d565b610b6b565b34801561041b57600080fd5b50610365600e5481565b34801561043157600080fd5b50600854610365565b34801561044657600080fd5b5061036561045536600461313d565b60136020526000908152604090205481565b34801561047357600080fd5b5061036560105481565b34801561048957600080fd5b5061033661049836600461318b565b610cf8565b3480156104a957600080fd5b506103656104b836600461326d565b610d99565b3480156104c957600080fd5b506103656104d836600461313d565b610e68565b3480156104e957600080fd5b506103366104f8366004613297565b610ec9565b610336610f82565b34801561051157600080fd5b5061033661052036600461318b565b61106f565b34801561053157600080fd5b5061054561054036600461313d565b61108a565b60405161030d91906134dc565b34801561055e57600080fd5b5061033661056d366004613335565b61112c565b34801561057e57600080fd5b5061036561058d366004613335565b6111b2565b34801561059e57600080fd5b5060115461030190610100900460ff1681565b3480156105bd57600080fd5b506103366105cc3660046132ec565b611270565b3480156105dd57600080fd5b506011546103019060ff1681565b3480156105f757600080fd5b506103b5610606366004613335565b611308565b34801561061757600080fd5b506103886113ba565b34801561062c57600080fd5b5061036561063b36600461313d565b6113c7565b34801561064c57600080fd5b50610336611495565b34801561066157600080fd5b50610336610670366004613335565b611522565b34801561068157600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff166103b5565b3480156106ac57600080fd5b506103886115a8565b3480156106c157600080fd5b506103366106d036600461326d565b6115b7565b3480156106e157600080fd5b506011546103019062010000900460ff1681565b610336610703366004613335565b611661565b34801561071457600080fd5b50610336610723366004613243565b611a51565b34801561073457600080fd5b50610336611b68565b34801561074957600080fd5b506103366107583660046131c7565b611c17565b34801561076957600080fd5b50610388611cbf565b34801561077e57600080fd5b5061038861078d366004613335565b611ccc565b34801561079e57600080fd5b50610365600f5481565b3480156107b457600080fd5b506103366107c33660046132ec565b611e80565b3480156107d457600080fd5b506103016107e3366004613158565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561082a57600080fd5b506103366108393660046132ec565b611f14565b34801561084a57600080fd5b5061033661085936600461313d565b611fa8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108b457506108b4826120d5565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b606060008054610980906135df565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac906135df565b80156109f95780601f106109ce576101008083540402835291602001916109f9565b820191906000526020600020905b8154815290600101906020018083116109dc57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610937565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600d8054610aea906135df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b16906135df565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b505050505081565b6000610b7682611308565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610937565b3373ffffffffffffffffffffffffffffffffffffffff82161480610c5d5750610c5d81336107e3565b610ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610937565b610cf383836121b8565b505050565b610d023382612258565b610d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610937565b610cf38383836123c8565b6000610da4836113c7565b8210610e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610937565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205415610ebc575073ffffffffffffffffffffffffffffffffffffffff1660009081526012602052604090205490565b5050600f5490565b919050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610f4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b6011805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b60405160009073f659e6a3ef9d9abdbb69355f304f1716c86e4bbd9047908381818185875af1925050503d8060008114611059576040519150601f19603f3d011682016040523d82523d6000602084013e61105e565b606091505b505090508061106c57600080fd5b50565b610cf383838360405180602001604052806000815250611c17565b60606000611097836113c7565b905060008167ffffffffffffffff8111156110b4576110b461373c565b6040519080825280602002602001820160405280156110dd578160200160208202803683370190505b50905060005b82811015611124576110f58582610d99565b8282815181106111075761110761370d565b60209081029190910101528061111c81613633565b9150506110e3565b509392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146111ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600e55565b60006111bd60085490565b821061124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610937565b6008828154811061125e5761125e61370d565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146112f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600b906020840190612fdc565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610937565b600b8054610aea906135df565b600073ffffffffffffffffffffffffffffffffffffffff821661146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610937565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b611520600061263a565b565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b601055565b606060018054610980906135df565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260126020526040902055565b60115460ff16156116ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f74686520636f6e747261637420697320706175736564000000000000000000006044820152606401610937565b60006116d960085490565b905060105482111561176c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560448201527f65646564000000000000000000000000000000000000000000000000000000006064820152608401610937565b6010543360009081526013602052604090205461178a908490613533565b1115611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f6d6178206d696e7420616d6f756e74207065722075736572206578636565646560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610937565b600f546118258383613533565b111561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d6178204e4654206c696d6974206578636565646564000000000000000000006044820152606401610937565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119ef5760115462010000900460ff1615156001141561197857336000908152601360209081526040808320546012909252909120546118e88483613533565b1115611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f796f7520617265206e6f742077686974656c6973746564206f72206d6178207760448201527f686974656c69737420616d6f756e7420657863656564656400000000000000006064820152608401610937565b505b81600e54611986919061355f565b3410156119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610937565b3360009081526013602052604090205460015b838111611a3c5781611a1381613633565b9250611a2a905033611a258386613533565b6126b1565b80611a3481613633565b915050611a02565b50336000908152601360205260409020555050565b73ffffffffffffffffffffffffffffffffffffffff8216331415611ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610937565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b611c213383612258565b611cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610937565b611cb9848484846126cb565b50505050565b600c8054610aea906135df565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610937565b601154610100900460ff16611e2157600d8054611d9c906135df565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc8906135df565b8015611e155780601f10611dea57610100808354040283529160200191611e15565b820191906000526020600020905b815481529060010190602001808311611df857829003601f168201915b50505050509050919050565b6000611e2b61276e565b90506000815111611e4b5760405180602001604052806000815250611e79565b80611e558461277d565b600c604051602001611e6993929190613398565b6040516020818303038152906040525b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611f01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600c906020840190612fdc565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600d906020840190612fdc565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b73ffffffffffffffffffffffffffffffffffffffff81166120cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610937565b61106c8161263a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061216857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108b4565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061221282611308565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610937565b600061231483611308565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238357508373ffffffffffffffffffffffffffffffffffffffff1661236b84610a03565b73ffffffffffffffffffffffffffffffffffffffff16145b806123c0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166123e882611308565b73ffffffffffffffffffffffffffffffffffffffff161461248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610937565b73ffffffffffffffffffffffffffffffffffffffff821661252d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610937565b6125388383836128af565b6125436000826121b8565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546001929061257990849061359c565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906125b4908490613533565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6113048282604051806020016040528060008152506129b5565b6126d68484846123c8565b6126e284848484612a58565b611cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b6060600b8054610980906135df565b6060816127bd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156127e757806127d181613633565b91506127e09050600a8361354b565b91506127c1565b60008167ffffffffffffffff8111156128025761280261373c565b6040519080825280601f01601f19166020018201604052801561282c576020820181803683370190505b5090505b84156123c05761284160018361359c565b915061284e600a8661366c565b612859906030613533565b60f81b81838151811061286e5761286e61370d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128a8600a8661354b565b9450612830565b73ffffffffffffffffffffffffffffffffffffffff83166129175761291281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612954565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612954576129548382612c57565b73ffffffffffffffffffffffffffffffffffffffff821661297857610cf381612d0e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610cf357610cf38282612dbd565b6129bf8383612e0e565b6129cc6000848484612a58565b610cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612c4c576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612acf903390899088908890600401613493565b602060405180830381600087803b158015612ae957600080fd5b505af1925050508015612b37575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612b34918101906132cf565b60015b612c01573d808015612b65576040519150601f19603f3d011682016040523d82523d6000602084013e612b6a565b606091505b508051612bf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506123c0565b506001949350505050565b60006001612c64846113c7565b612c6e919061359c565b600083815260076020526040902054909150808214612cce5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090612d209060019061359c565b60008381526009602052604081205460088054939450909284908110612d4857612d4861370d565b906000526020600020015490508060088381548110612d6957612d6961370d565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612da157612da16136de565b6001900381819060005260206000200160009055905550505050565b6000612dc8836113c7565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216612e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610937565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610937565b612f23600083836128af565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612f59908490613533565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fe8906135df565b90600052602060002090601f01602090048101928261300a5760008555613050565b82601f1061302357805160ff1916838001178555613050565b82800160010185558215613050579182015b82811115613050578251825591602001919060010190613035565b5061305c929150613060565b5090565b5b8082111561305c5760008155600101613061565b600067ffffffffffffffff808411156130905761309061373c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156130d6576130d661373c565b816040528093508581528686860111156130ef57600080fd5b858560208301376000602087830101525050509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ec457600080fd5b80358015158114610ec457600080fd5b60006020828403121561314f57600080fd5b611e7982613109565b6000806040838503121561316b57600080fd5b61317483613109565b915061318260208401613109565b90509250929050565b6000806000606084860312156131a057600080fd5b6131a984613109565b92506131b760208501613109565b9150604084013590509250925092565b600080600080608085870312156131dd57600080fd5b6131e685613109565b93506131f460208601613109565b925060408501359150606085013567ffffffffffffffff81111561321757600080fd5b8501601f8101871361322857600080fd5b61323787823560208401613075565b91505092959194509250565b6000806040838503121561325657600080fd5b61325f83613109565b91506131826020840161312d565b6000806040838503121561328057600080fd5b61328983613109565b946020939093013593505050565b6000602082840312156132a957600080fd5b611e798261312d565b6000602082840312156132c457600080fd5b8135611e798161376b565b6000602082840312156132e157600080fd5b8151611e798161376b565b6000602082840312156132fe57600080fd5b813567ffffffffffffffff81111561331557600080fd5b8201601f8101841361332657600080fd5b6123c084823560208401613075565b60006020828403121561334757600080fd5b5035919050565b600081518084526133668160208601602086016135b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000845160206133ab8285838a016135b3565b8551918401916133be8184848a016135b3565b8554920191600090600181811c90808316806133db57607f831692505b858310811415613412577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b808015613426576001811461345557613482565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851688528388019550613482565b60008b81526020902060005b8581101561347a5781548a820152908401908801613461565b505083880195505b50939b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526134d2608083018461334e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613514578351835292840192918401916001016134f8565b50909695505050505050565b602081526000611e79602083018461334e565b6000821982111561354657613546613680565b500190565b60008261355a5761355a6136af565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359757613597613680565b500290565b6000828210156135ae576135ae613680565b500390565b60005b838110156135ce5781810151838201526020016135b6565b83811115611cb95750506000910152565b600181811c908216806135f357607f821691505b6020821081141561362d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561366557613665613680565b5060010190565b60008261367b5761367b6136af565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461106c57600080fdfea26469706673582212205ed3e4ed8c957f6ba535242757107edd0cfaf8bcab0438c01297126ccd20585964736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000942616c6976657273650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942414c4956455253450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374626600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d594a6774486547636f526271366e6b58766d5537544d3441375873614863546b6458463544535747574e70322f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102dc5760003560e01c806355f804b311610184578063a0712d68116100d6578063c87b56dd1161008a578063e985e9c511610064578063e985e9c5146107c8578063f2c4ce1e1461081e578063f2fde38b1461083e57600080fd5b8063c87b56dd14610772578063d5abeb0114610792578063da3ef23f146107a857600080fd5b8063a475b5dd116100bb578063a475b5dd14610728578063b88d4fde1461073d578063c66828621461075d57600080fd5b8063a0712d68146106f5578063a22cb4651461070857600080fd5b8063715018a61161013857806395d89b411161011257806395d89b41146106a057806397760974146106b55780639c70b512146106d557600080fd5b8063715018a6146106405780637f00c7a6146106555780638da5cb5b1461067557600080fd5b80636352211e116101695780636352211e146105eb5780636c0360eb1461060b57806370a082311461062057600080fd5b806355f804b3146105b15780635c975abb146105d157600080fd5b8063239c70ae1161023d5780633ccfd60b116101f157806344a0d68a116101cb57806344a0d68a146105525780634f6ccce714610572578063518302271461059257600080fd5b80633ccfd60b146104fd57806342842e0e14610505578063438b63001461052557600080fd5b80632f745c59116102225780632f745c591461049d5780633af32abf146104bd5780633c952764146104dd57600080fd5b8063239c70ae1461046757806323b872dd1461047d57600080fd5b8063081c8c441161029457806313faede61161027957806313faede61461040f57806318160ddd1461042557806318cae2691461043a57600080fd5b8063081c8c44146103da578063095ea7b3146103ef57600080fd5b806306c933d8116102c557806306c933d81461033857806306fdde0314610373578063081812fc1461039557600080fd5b806301ffc9a7146102e157806302329a2914610316575b600080fd5b3480156102ed57600080fd5b506103016102fc3660046132b2565b61085e565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004613297565b6108ba565b005b34801561034457600080fd5b5061036561035336600461313d565b60126020526000908152604090205481565b60405190815260200161030d565b34801561037f57600080fd5b50610388610971565b60405161030d9190613520565b3480156103a157600080fd5b506103b56103b0366004613335565b610a03565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030d565b3480156103e657600080fd5b50610388610add565b3480156103fb57600080fd5b5061033661040a36600461326d565b610b6b565b34801561041b57600080fd5b50610365600e5481565b34801561043157600080fd5b50600854610365565b34801561044657600080fd5b5061036561045536600461313d565b60136020526000908152604090205481565b34801561047357600080fd5b5061036560105481565b34801561048957600080fd5b5061033661049836600461318b565b610cf8565b3480156104a957600080fd5b506103656104b836600461326d565b610d99565b3480156104c957600080fd5b506103656104d836600461313d565b610e68565b3480156104e957600080fd5b506103366104f8366004613297565b610ec9565b610336610f82565b34801561051157600080fd5b5061033661052036600461318b565b61106f565b34801561053157600080fd5b5061054561054036600461313d565b61108a565b60405161030d91906134dc565b34801561055e57600080fd5b5061033661056d366004613335565b61112c565b34801561057e57600080fd5b5061036561058d366004613335565b6111b2565b34801561059e57600080fd5b5060115461030190610100900460ff1681565b3480156105bd57600080fd5b506103366105cc3660046132ec565b611270565b3480156105dd57600080fd5b506011546103019060ff1681565b3480156105f757600080fd5b506103b5610606366004613335565b611308565b34801561061757600080fd5b506103886113ba565b34801561062c57600080fd5b5061036561063b36600461313d565b6113c7565b34801561064c57600080fd5b50610336611495565b34801561066157600080fd5b50610336610670366004613335565b611522565b34801561068157600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff166103b5565b3480156106ac57600080fd5b506103886115a8565b3480156106c157600080fd5b506103366106d036600461326d565b6115b7565b3480156106e157600080fd5b506011546103019062010000900460ff1681565b610336610703366004613335565b611661565b34801561071457600080fd5b50610336610723366004613243565b611a51565b34801561073457600080fd5b50610336611b68565b34801561074957600080fd5b506103366107583660046131c7565b611c17565b34801561076957600080fd5b50610388611cbf565b34801561077e57600080fd5b5061038861078d366004613335565b611ccc565b34801561079e57600080fd5b50610365600f5481565b3480156107b457600080fd5b506103366107c33660046132ec565b611e80565b3480156107d457600080fd5b506103016107e3366004613158565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561082a57600080fd5b506103366108393660046132ec565b611f14565b34801561084a57600080fd5b5061033661085936600461313d565b611fa8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108b457506108b4826120d5565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b606060008054610980906135df565b80601f01602080910402602001604051908101604052809291908181526020018280546109ac906135df565b80156109f95780601f106109ce576101008083540402835291602001916109f9565b820191906000526020600020905b8154815290600101906020018083116109dc57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610937565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600d8054610aea906135df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b16906135df565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b505050505081565b6000610b7682611308565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610937565b3373ffffffffffffffffffffffffffffffffffffffff82161480610c5d5750610c5d81336107e3565b610ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610937565b610cf383836121b8565b505050565b610d023382612258565b610d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610937565b610cf38383836123c8565b6000610da4836113c7565b8210610e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610937565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205415610ebc575073ffffffffffffffffffffffffffffffffffffffff1660009081526012602052604090205490565b5050600f5490565b919050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610f4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b6011805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611003576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b60405160009073f659e6a3ef9d9abdbb69355f304f1716c86e4bbd9047908381818185875af1925050503d8060008114611059576040519150601f19603f3d011682016040523d82523d6000602084013e61105e565b606091505b505090508061106c57600080fd5b50565b610cf383838360405180602001604052806000815250611c17565b60606000611097836113c7565b905060008167ffffffffffffffff8111156110b4576110b461373c565b6040519080825280602002602001820160405280156110dd578160200160208202803683370190505b50905060005b82811015611124576110f58582610d99565b8282815181106111075761110761370d565b60209081029190910101528061111c81613633565b9150506110e3565b509392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146111ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b600e55565b60006111bd60085490565b821061124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610937565b6008828154811061125e5761125e61370d565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146112f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600b906020840190612fdc565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610937565b600b8054610aea906135df565b600073ffffffffffffffffffffffffffffffffffffffff821661146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610937565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b611520600061263a565b565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b601055565b606060018054610980906135df565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260126020526040902055565b60115460ff16156116ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f74686520636f6e747261637420697320706175736564000000000000000000006044820152606401610937565b60006116d960085490565b905060105482111561176c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560448201527f65646564000000000000000000000000000000000000000000000000000000006064820152608401610937565b6010543360009081526013602052604090205461178a908490613533565b1115611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f6d6178206d696e7420616d6f756e74207065722075736572206578636565646560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610937565b600f546118258383613533565b111561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d6178204e4654206c696d6974206578636565646564000000000000000000006044820152606401610937565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119ef5760115462010000900460ff1615156001141561197857336000908152601360209081526040808320546012909252909120546118e88483613533565b1115611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f796f7520617265206e6f742077686974656c6973746564206f72206d6178207760448201527f686974656c69737420616d6f756e7420657863656564656400000000000000006064820152608401610937565b505b81600e54611986919061355f565b3410156119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610937565b3360009081526013602052604090205460015b838111611a3c5781611a1381613633565b9250611a2a905033611a258386613533565b6126b1565b80611a3481613633565b915050611a02565b50336000908152601360205260409020555050565b73ffffffffffffffffffffffffffffffffffffffff8216331415611ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610937565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b601180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b611c213383612258565b611cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610937565b611cb9848484846126cb565b50505050565b600c8054610aea906135df565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610937565b601154610100900460ff16611e2157600d8054611d9c906135df565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc8906135df565b8015611e155780601f10611dea57610100808354040283529160200191611e15565b820191906000526020600020905b815481529060010190602001808311611df857829003601f168201915b50505050509050919050565b6000611e2b61276e565b90506000815111611e4b5760405180602001604052806000815250611e79565b80611e558461277d565b600c604051602001611e6993929190613398565b6040516020818303038152906040525b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611f01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600c906020840190612fdc565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b805161130490600d906020840190612fdc565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610937565b73ffffffffffffffffffffffffffffffffffffffff81166120cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610937565b61106c8161263a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061216857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108b4565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061221282611308565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610937565b600061231483611308565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238357508373ffffffffffffffffffffffffffffffffffffffff1661236b84610a03565b73ffffffffffffffffffffffffffffffffffffffff16145b806123c0575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166123e882611308565b73ffffffffffffffffffffffffffffffffffffffff161461248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610937565b73ffffffffffffffffffffffffffffffffffffffff821661252d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610937565b6125388383836128af565b6125436000826121b8565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546001929061257990849061359c565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906125b4908490613533565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6113048282604051806020016040528060008152506129b5565b6126d68484846123c8565b6126e284848484612a58565b611cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b6060600b8054610980906135df565b6060816127bd57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156127e757806127d181613633565b91506127e09050600a8361354b565b91506127c1565b60008167ffffffffffffffff8111156128025761280261373c565b6040519080825280601f01601f19166020018201604052801561282c576020820181803683370190505b5090505b84156123c05761284160018361359c565b915061284e600a8661366c565b612859906030613533565b60f81b81838151811061286e5761286e61370d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506128a8600a8661354b565b9450612830565b73ffffffffffffffffffffffffffffffffffffffff83166129175761291281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612954565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612954576129548382612c57565b73ffffffffffffffffffffffffffffffffffffffff821661297857610cf381612d0e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610cf357610cf38282612dbd565b6129bf8383612e0e565b6129cc6000848484612a58565b610cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612c4c576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612acf903390899088908890600401613493565b602060405180830381600087803b158015612ae957600080fd5b505af1925050508015612b37575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612b34918101906132cf565b60015b612c01573d808015612b65576040519150601f19603f3d011682016040523d82523d6000602084013e612b6a565b606091505b508051612bf9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610937565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506123c0565b506001949350505050565b60006001612c64846113c7565b612c6e919061359c565b600083815260076020526040902054909150808214612cce5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b600854600090612d209060019061359c565b60008381526009602052604081205460088054939450909284908110612d4857612d4861370d565b906000526020600020015490508060088381548110612d6957612d6961370d565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612da157612da16136de565b6001900381819060005260206000200160009055905550505050565b6000612dc8836113c7565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff8216612e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610937565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615612f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610937565b612f23600083836128af565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612f59908490613533565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612fe8906135df565b90600052602060002090601f01602090048101928261300a5760008555613050565b82601f1061302357805160ff1916838001178555613050565b82800160010185558215613050579182015b82811115613050578251825591602001919060010190613035565b5061305c929150613060565b5090565b5b8082111561305c5760008155600101613061565b600067ffffffffffffffff808411156130905761309061373c565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156130d6576130d661373c565b816040528093508581528686860111156130ef57600080fd5b858560208301376000602087830101525050509392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ec457600080fd5b80358015158114610ec457600080fd5b60006020828403121561314f57600080fd5b611e7982613109565b6000806040838503121561316b57600080fd5b61317483613109565b915061318260208401613109565b90509250929050565b6000806000606084860312156131a057600080fd5b6131a984613109565b92506131b760208501613109565b9150604084013590509250925092565b600080600080608085870312156131dd57600080fd5b6131e685613109565b93506131f460208601613109565b925060408501359150606085013567ffffffffffffffff81111561321757600080fd5b8501601f8101871361322857600080fd5b61323787823560208401613075565b91505092959194509250565b6000806040838503121561325657600080fd5b61325f83613109565b91506131826020840161312d565b6000806040838503121561328057600080fd5b61328983613109565b946020939093013593505050565b6000602082840312156132a957600080fd5b611e798261312d565b6000602082840312156132c457600080fd5b8135611e798161376b565b6000602082840312156132e157600080fd5b8151611e798161376b565b6000602082840312156132fe57600080fd5b813567ffffffffffffffff81111561331557600080fd5b8201601f8101841361332657600080fd5b6123c084823560208401613075565b60006020828403121561334757600080fd5b5035919050565b600081518084526133668160208601602086016135b3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000845160206133ab8285838a016135b3565b8551918401916133be8184848a016135b3565b8554920191600090600181811c90808316806133db57607f831692505b858310811415613412577f4e487b710000000000000000000000000000000000000000000000000000000085526022600452602485fd5b808015613426576001811461345557613482565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851688528388019550613482565b60008b81526020902060005b8581101561347a5781548a820152908401908801613461565b505083880195505b50939b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526134d2608083018461334e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613514578351835292840192918401916001016134f8565b50909695505050505050565b602081526000611e79602083018461334e565b6000821982111561354657613546613680565b500190565b60008261355a5761355a6136af565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359757613597613680565b500290565b6000828210156135ae576135ae613680565b500390565b60005b838110156135ce5781810151838201526020016135b6565b83811115611cb95750506000910152565b600181811c908216806135f357607f821691505b6020821081141561362d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561366557613665613680565b5060010190565b60008261367b5761367b6136af565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461106c57600080fdfea26469706673582212205ed3e4ed8c957f6ba535242757107edd0cfaf8bcab0438c01297126ccd20585964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000942616c6976657273650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942414c4956455253450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000374626600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d594a6774486547636f526271366e6b58766d5537544d3441375873614863546b6458463544535747574e70322f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Baliverse
Arg [1] : _symbol (string): BALIVERSE
Arg [2] : _initBaseURI (string): tbf
Arg [3] : _initNotRevealedUri (string): ipfs://QmYJgtHeGcoRbq6nkXvmU7TM4A7XsaHcTkdXF5DSWGWNp2/hidden.json
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 42616c6976657273650000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 42414c4956455253450000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 7462660000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [11] : 697066733a2f2f516d594a6774486547636f526271366e6b58766d5537544d34
Arg [12] : 41375873614863546b6458463544535747574e70322f68696464656e2e6a736f
Arg [13] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
43133:4238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34635:224;;;;;;;;;;-1:-1:-1;34635:224:0;;;;;:::i;:::-;;:::i;:::-;;;8109:14:1;;8102:22;8084:41;;8072:2;8057:18;34635:224:0;;;;;;;;46850:73;;;;;;;;;;-1:-1:-1;46850:73:0;;;;;:::i;:::-;;:::i;:::-;;43537:55;;;;;;;;;;-1:-1:-1;43537:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17994:25:1;;;17982:2;17967:18;43537:55:0;17848:177:1;22523:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24082:221::-;;;;;;;;;;-1:-1:-1;24082:221:0;;;;;:::i;:::-;;:::i;:::-;;;6736:42:1;6724:55;;;6706:74;;6694:2;6679:18;24082:221:0;6560:226:1;43286:28:0;;;;;;;;;;;;;:::i;23605:411::-;;;;;;;;;;-1:-1:-1;23605:411:0;;;;;:::i;:::-;;:::i;43319:32::-;;;;;;;;;;;;;;;;35275:113;;;;;;;;;;-1:-1:-1;35363:10:0;:17;35275:113;;43597:55;;;;;;;;;;-1:-1:-1;43597:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;43392:33;;;;;;;;;;;;;;;;24973:339;;;;;;;;;;-1:-1:-1;24973:339:0;;;;;:::i;:::-;;:::i;34943:256::-;;;;;;;;;;-1:-1:-1;34943:256:0;;;;;:::i;:::-;;:::i;45130:199::-;;;;;;;;;;-1:-1:-1;45130:199:0;;;;;:::i;:::-;;:::i;46931:95::-;;;;;;;;;;-1:-1:-1;46931:95:0;;;;;:::i;:::-;;:::i;47167:194::-;;;:::i;25383:185::-;;;;;;;;;;-1:-1:-1;25383:185:0;;;;;:::i;:::-;;:::i;45335:349::-;;;;;;;;;;-1:-1:-1;45335:349:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46282:80::-;;;;;;;;;;-1:-1:-1;46282:80:0;;;;;:::i;:::-;;:::i;35465:233::-;;;;;;;;;;-1:-1:-1;35465:233:0;;;;;:::i;:::-;;:::i;43461:28::-;;;;;;;;;;-1:-1:-1;43461:28:0;;;;;;;;;;;46490:98;;;;;;;;;;-1:-1:-1;46490:98:0;;;;;:::i;:::-;;:::i;43430:26::-;;;;;;;;;;-1:-1:-1;43430:26:0;;;;;;;;22217:239;;;;;;;;;;-1:-1:-1;22217:239:0;;;;;:::i;:::-;;:::i;43218:21::-;;;;;;;;;;;;;:::i;21947:208::-;;;;;;;;;;-1:-1:-1;21947:208:0;;;;;:::i;:::-;;:::i;42431:94::-;;;;;;;;;;;;;:::i;46368:116::-;;;;;;;;;;-1:-1:-1;46368:116:0;;;;;:::i;:::-;;:::i;41780:87::-;;;;;;;;;;-1:-1:-1;41853:6:0;;;;41780:87;;22692:104;;;;;;;;;;;;;:::i;47034:123::-;;;;;;;;;;-1:-1:-1;47034:123:0;;;;;:::i;:::-;;:::i;43494:34::-;;;;;;;;;;-1:-1:-1;43494:34:0;;;;;;;;;;;44050:1072;;;;;;:::i;:::-;;:::i;24375:296::-;;;;;;;;;;-1:-1:-1;24375:296:0;;;;;:::i;:::-;;:::i;46209:65::-;;;;;;;;;;;;;:::i;25639:328::-;;;;;;;;;;-1:-1:-1;25639:328:0;;;;;:::i;:::-;;:::i;43244:37::-;;;;;;;;;;;;;:::i;45690:497::-;;;;;;;;;;-1:-1:-1;45690:497:0;;;;;:::i;:::-;;:::i;43356:31::-;;;;;;;;;;;;;;;;46594:122;;;;;;;;;;-1:-1:-1;46594:122:0;;;;;:::i;:::-;;:::i;24742:164::-;;;;;;;;;;-1:-1:-1;24742:164:0;;;;;:::i;:::-;24863:25;;;;24839:4;24863:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24742:164;46724:120;;;;;;;;;;-1:-1:-1;46724:120:0;;;;;:::i;:::-;;:::i;42680:192::-;;;;;;;;;;-1:-1:-1;42680:192:0;;;;;:::i;:::-;;:::i;34635:224::-;34737:4;34761:50;;;34776:35;34761:50;;:90;;;34815:36;34839:11;34815:23;:36::i;:::-;34754:97;34635:224;-1:-1:-1;;34635:224:0:o;46850:73::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;;;;;;;;;46902:6:::1;:15:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;46850:73::o;22523:100::-;22577:13;22610:5;22603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22523:100;:::o;24082:221::-;24158:7;27566:16;;;:7;:16;;;;;;:30;:16;24178:73;;;;;;;14519:2:1;24178:73:0;;;14501:21:1;14558:2;14538:18;;;14531:30;14597:34;14577:18;;;14570:62;14668:14;14648:18;;;14641:42;14700:19;;24178:73:0;14317:408:1;24178:73:0;-1:-1:-1;24271:24:0;;;;:15;:24;;;;;;;;;24082:221::o;43286:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23605:411::-;23686:13;23702:23;23717:7;23702:14;:23::i;:::-;23686:39;;23750:5;23744:11;;:2;:11;;;;23736:57;;;;;;;16470:2:1;23736:57:0;;;16452:21:1;16509:2;16489:18;;;16482:30;16548:34;16528:18;;;16521:62;16619:3;16599:18;;;16592:31;16640:19;;23736:57:0;16268:397:1;23736:57:0;20132:10;23828:21;;;;;:62;;-1:-1:-1;23853:37:0;23870:5;20132:10;24742:164;:::i;23853:37::-;23806:168;;;;;;;12156:2:1;23806:168:0;;;12138:21:1;12195:2;12175:18;;;12168:30;12234:34;12214:18;;;12207:62;12305:26;12285:18;;;12278:54;12349:19;;23806:168:0;11954:420:1;23806:168:0;23987:21;23996:2;24000:7;23987:8;:21::i;:::-;23675:341;23605:411;;:::o;24973:339::-;25168:41;20132:10;25201:7;25168:18;:41::i;:::-;25160:103;;;;;;;17219:2:1;25160:103:0;;;17201:21:1;17258:2;17238:18;;;17231:30;17297:34;17277:18;;;17270:62;17368:19;17348:18;;;17341:47;17405:19;;25160:103:0;17017:413:1;25160:103:0;25276:28;25286:4;25292:2;25296:7;25276:9;:28::i;34943:256::-;35040:7;35076:23;35093:5;35076:16;:23::i;:::-;35068:5;:31;35060:87;;;;;;;9389:2:1;35060:87:0;;;9371:21:1;9428:2;9408:18;;;9401:30;9467:34;9447:18;;;9440:62;9538:13;9518:18;;;9511:41;9569:19;;35060:87:0;9187:407:1;35060:87:0;-1:-1:-1;35165:19:0;;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34943:256::o;45130:199::-;45206:27;;;45189:4;45206:27;;;:20;:27;;;;;;:31;45202:121;;-1:-1:-1;45257:27:0;;;;;;:20;:27;;;;;;;45130:199::o;45202:121::-;-1:-1:-1;;45314:9:0;;;45130:199::o;45202:121::-;45130:199;;;:::o;46931:95::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46996:15:::1;:24:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;46931:95::o;47167:194::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;47239:90:::1;::::0;47226:7:::1;::::0;47247:42:::1;::::0;47303:21:::1;::::0;47226:7;47239:90;47226:7;47239:90;47303:21;47247:42;47239:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47225:104;;;47344:2;47336:11;;;::::0;::::1;;47212:149;47167:194::o:0;25383:185::-;25521:39;25538:4;25544:2;25548:7;25521:39;;;;;;;;;;;;:16;:39::i;45335:349::-;45410:16;45438:23;45464:17;45474:6;45464:9;:17::i;:::-;45438:43;;45488:25;45530:15;45516:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45516:30:0;;45488:58;;45558:9;45553:104;45573:15;45569:1;:19;45553:104;;;45619:30;45639:6;45647:1;45619:19;:30::i;:::-;45604:8;45613:1;45604:11;;;;;;;;:::i;:::-;;;;;;;;;;:45;45590:3;;;;:::i;:::-;;;;45553:104;;;-1:-1:-1;45670:8:0;45335:349;-1:-1:-1;;;45335:349:0:o;46282:80::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46341:4:::1;:15:::0;46282:80::o;35465:233::-;35540:7;35576:30;35363:10;:17;;35275:113;35576:30;35568:5;:38;35560:95;;;;;;;17637:2:1;35560:95:0;;;17619:21:1;17676:2;17656:18;;;17649:30;17715:34;17695:18;;;17688:62;17786:14;17766:18;;;17759:42;17818:19;;35560:95:0;17435:408:1;35560:95:0;35673:10;35684:5;35673:17;;;;;;;;:::i;:::-;;;;;;;;;35666:24;;35465:233;;;:::o;46490:98::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46561:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46490:98:::0;:::o;22217:239::-;22289:7;22325:16;;;:7;:16;;;;;;;;22360:19;22352:73;;;;;;;12992:2:1;22352:73:0;;;12974:21:1;13031:2;13011:18;;;13004:30;13070:34;13050:18;;;13043:62;13141:11;13121:18;;;13114:39;13170:19;;22352:73:0;12790:405:1;43218:21:0;;;;;;;:::i;21947:208::-;22019:7;22047:19;;;22039:74;;;;;;;12581:2:1;22039:74:0;;;12563:21:1;12620:2;12600:18;;;12593:30;12659:34;12639:18;;;12632:62;12730:12;12710:18;;;12703:40;12760:19;;22039:74:0;12379:406:1;22039:74:0;-1:-1:-1;22131:16:0;;;;;;:9;:16;;;;;;;21947:208::o;42431:94::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;42496:21:::1;42514:1;42496:9;:21::i;:::-;42431:94::o:0;46368:116::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46445:13:::1;:33:::0;46368:116::o;22692:104::-;22748:13;22781:7;22774:14;;;;;:::i;47034:123::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;47114:27:::1;::::0;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:37;47034:123::o;44050:1072::-;44118:6;;;;44117:7;44109:42;;;;;;;15293:2:1;44109:42:0;;;15275:21:1;15332:2;15312:18;;;15305:30;15371:24;15351:18;;;15344:52;15413:18;;44109:42:0;15091:346:1;44109:42:0;44158:14;44175:13;35363:10;:17;;35275:113;44175:13;44158:30;;44218:13;;44203:11;:28;;44195:77;;;;;;;13753:2:1;44195:77:0;;;13735:21:1;13792:2;13772:18;;;13765:30;13831:34;13811:18;;;13804:62;13902:6;13882:18;;;13875:34;13926:19;;44195:77:0;13551:400:1;44195:77:0;44338:13;;44308:10;44287:32;;;;:20;:32;;;;;;:47;;44323:11;;44287:47;:::i;:::-;:64;;44279:110;;;;;;;8987:2:1;44279:110:0;;;8969:21:1;9026:2;9006:18;;;8999:30;9065:34;9045:18;;;9038:62;9136:3;9116:18;;;9109:31;9157:19;;44279:110:0;8785:397:1;44279:110:0;44428:9;;44404:20;44413:11;44404:6;:20;:::i;:::-;:33;;44396:68;;;;;;;13402:2:1;44396:68:0;;;13384:21:1;13441:2;13421:18;;;13414:30;13480:24;13460:18;;;13453:52;13522:18;;44396:68:0;13200:346:1;44396:68:0;41853:6;;;;44477:10;:21;44473:386;;44514:15;;;;;;;:23;;44533:4;44514:23;44511:264;;;44602:10;44554:24;44581:32;;;:20;:32;;;;;;;;;44670:20;:32;;;;;;;44636:30;44655:11;44581:32;44636:30;:::i;:::-;:66;;44628:135;;;;;;;8562:2:1;44628:135:0;;;8544:21:1;8601:2;8581:18;;;8574:30;8640:34;8620:18;;;8613:62;8711:26;8691:18;;;8684:54;8755:19;;44628:135:0;8360:420:1;44628:135:0;44539:236;44511:264;44813:11;44806:4;;:18;;;;:::i;:::-;44793:9;:31;;44785:62;;;;;;;16872:2:1;44785:62:0;;;16854:21:1;16911:2;16891:18;;;16884:30;16950:20;16930:18;;;16923:48;16988:18;;44785:62:0;16670:342:1;44785:62:0;44928:10;44867:19;44907:32;;;:20;:32;;;;;;44963:1;44946:115;44971:11;44966:1;:16;44946:115;;44998:13;;;;:::i;:::-;;-1:-1:-1;45020:33:0;;-1:-1:-1;45030:10:0;45042;45051:1;45042:6;:10;:::i;:::-;45020:9;:33::i;:::-;44984:3;;;;:::i;:::-;;;;44946:115;;;-1:-1:-1;45088:10:0;45067:32;;;;:20;:32;;;;;:47;-1:-1:-1;;44050:1072:0:o;24375:296::-;24478:24;;;20132:10;24478:24;;24470:62;;;;;;;11389:2:1;24470:62:0;;;11371:21:1;11428:2;11408:18;;;11401:30;11467:27;11447:18;;;11440:55;11512:18;;24470:62:0;11187:349:1;24470:62:0;20132:10;24545:32;;;;:18;:32;;;;;;;;;:42;;;;;;;;;;;;:54;;;;;;;;;;;;;24615:48;;8084:41:1;;;24545:42:0;;20132:10;24615:48;;8057:18:1;24615:48:0;;;;;;;24375:296;;:::o;46209:65::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46253:8:::1;:15:::0;;;::::1;;;::::0;;46209:65::o;25639:328::-;25814:41;20132:10;25847:7;25814:18;:41::i;:::-;25806:103;;;;;;;17219:2:1;25806:103:0;;;17201:21:1;17258:2;17238:18;;;17231:30;17297:34;17277:18;;;17270:62;17368:19;17348:18;;;17341:47;17405:19;;25806:103:0;17017:413:1;25806:103:0;25920:39;25934:4;25940:2;25944:7;25953:5;25920:13;:39::i;:::-;25639:328;;;;:::o;43244:37::-;;;;;;;:::i;45690:497::-;27542:4;27566:16;;;:7;:16;;;;;;45788:13;;27566:30;:16;45813:97;;;;;;;16054:2:1;45813:97:0;;;16036:21:1;16093:2;16073:18;;;16066:30;16132:34;16112:18;;;16105:62;16203:17;16183:18;;;16176:45;16238:19;;45813:97:0;15852:411:1;45813:97:0;45926:8;;;;;;;45923:62;;45963:14;45956:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45690:497;;;:::o;45923:62::-;45993:28;46024:10;:8;:10::i;:::-;45993:41;;46079:1;46054:14;46048:28;:32;:133;;;;;;;;;;;;;;;;;46116:14;46132:18;:7;:16;:18::i;:::-;46152:13;46099:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46048:133;46041:140;45690:497;-1:-1:-1;;;45690:497:0:o;46594:122::-;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46677:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;46724:120::-:0;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;46806:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;42680:192::-:0;41853:6;;42000:23;41853:6;20132:10;42000:23;41992:68;;;;;;;14932:2:1;41992:68:0;;;14914:21:1;;;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;15062:18;;41992:68:0;14730:356:1;41992:68:0;42769:22:::1;::::0;::::1;42761:73;;;::::0;::::1;::::0;;10220:2:1;42761:73:0::1;::::0;::::1;10202:21:1::0;10259:2;10239:18;;;10232:30;10298:34;10278:18;;;10271:62;10369:8;10349:18;;;10342:36;10395:19;;42761:73:0::1;10018:402:1::0;42761:73:0::1;42845:19;42855:8;42845:9;:19::i;21578:305::-:0;21680:4;21717:40;;;21732:25;21717:40;;:105;;-1:-1:-1;21774:48:0;;;21789:33;21774:48;21717:105;:158;;;-1:-1:-1;7529:25:0;7514:40;;;;21839:36;7405:157;31461:175;31536:24;;;;:15;:24;;;;;:30;;;;;;;;;;;;;:24;;31591:23;31536:24;31591:14;:23::i;:::-;31582:46;;;;;;;;;;;;31461:175;;:::o;27771:348::-;27864:4;27566:16;;;:7;:16;;;;;;:30;:16;27881:73;;;;;;;11743:2:1;27881:73:0;;;11725:21:1;11782:2;11762:18;;;11755:30;11821:34;11801:18;;;11794:62;11892:14;11872:18;;;11865:42;11924:19;;27881:73:0;11541:408:1;27881:73:0;27965:13;27981:23;27996:7;27981:14;:23::i;:::-;27965:39;;28034:5;28023:16;;:7;:16;;;:51;;;;28067:7;28043:31;;:20;28055:7;28043:11;:20::i;:::-;:31;;;28023:51;:87;;;-1:-1:-1;24863:25:0;;;;24839:4;24863:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28078:32;28015:96;27771:348;-1:-1:-1;;;;27771:348:0:o;30764:579::-;30923:4;30896:31;;:23;30911:7;30896:14;:23::i;:::-;:31;;;30888:85;;;;;;;15644:2:1;30888:85:0;;;15626:21:1;15683:2;15663:18;;;15656:30;15722:34;15702:18;;;15695:62;15793:11;15773:18;;;15766:39;15822:19;;30888:85:0;15442:405:1;30888:85:0;30992:16;;;30984:65;;;;;;;10984:2:1;30984:65:0;;;10966:21:1;11023:2;11003:18;;;10996:30;11062:34;11042:18;;;11035:62;11133:6;11113:18;;;11106:34;11157:19;;30984:65:0;10782:400:1;30984:65:0;31062:39;31083:4;31089:2;31093:7;31062:20;:39::i;:::-;31166:29;31183:1;31187:7;31166:8;:29::i;:::-;31208:15;;;;;;;:9;:15;;;;;:20;;31227:1;;31208:15;:20;;31227:1;;31208:20;:::i;:::-;;;;-1:-1:-1;;31239:13:0;;;;;;;:9;:13;;;;;:18;;31256:1;;31239:13;:18;;31256:1;;31239:18;:::i;:::-;;;;-1:-1:-1;;31268:16:0;;;;:7;:16;;;;;;:22;;;;;;;;;;;;;;31308:27;;31268:16;;31308:27;;;;;;;30764:579;;;:::o;42880:173::-;42955:6;;;;42972:17;;;;;;;;;;;43005:40;;42955:6;;;42972:17;42955:6;;43005:40;;42936:16;;43005:40;42925:128;42880:173;:::o;28461:110::-;28537:26;28547:2;28551:7;28537:26;;;;;;;;;;;;:9;:26::i;26849:315::-;27006:28;27016:4;27022:2;27026:7;27006:9;:28::i;:::-;27053:48;27076:4;27082:2;27086:7;27095:5;27053:22;:48::i;:::-;27045:111;;;;;;;9801:2:1;27045:111:0;;;9783:21:1;9840:2;9820:18;;;9813:30;9879:34;9859:18;;;9852:62;9950:20;9930:18;;;9923:48;9988:19;;27045:111:0;9599:414:1;43929:102:0;43989:13;44018:7;44011:14;;;;;:::i;7880:724::-;7936:13;8157:10;8153:53;;-1:-1:-1;;8184:10:0;;;;;;;;;;;;;;;;;;7880:724::o;8153:53::-;8231:5;8216:12;8272:78;8279:9;;8272:78;;8305:8;;;;:::i;:::-;;-1:-1:-1;8328:10:0;;-1:-1:-1;8336:2:0;8328:10;;:::i;:::-;;;8272:78;;;8360:19;8392:6;8382:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8382:17:0;;8360:39;;8410:155;8417:10;;8410:155;;8444:11;8454:1;8444:11;;:::i;:::-;;-1:-1:-1;8514:10:0;8522:2;8514:5;:10;:::i;:::-;8501:24;;:2;:24;:::i;:::-;8488:39;;8470:6;8477;8470:14;;;;;;;;:::i;:::-;;;;:57;;;;;;;;;;-1:-1:-1;8542:11:0;8551:2;8542:11;;:::i;:::-;;;8410:155;;36311:589;36517:18;;;36513:187;;36552:40;36584:7;37730:10;:17;;37702:24;;;;:15;:24;;;;;:45;;;37758:24;;;;;;;;;;;;37625:165;36552:40;36513:187;;;36622:2;36614:10;;:4;:10;;;36610:90;;36641:47;36674:4;36680:7;36641:32;:47::i;:::-;36714:16;;;36710:183;;36747:45;36784:7;36747:36;:45::i;36710:183::-;36820:4;36814:10;;:2;:10;;;36810:83;;36841:40;36869:2;36873:7;36841:27;:40::i;28798:321::-;28928:18;28934:2;28938:7;28928:5;:18::i;:::-;28979:54;29010:1;29014:2;29018:7;29027:5;28979:22;:54::i;:::-;28957:154;;;;;;;9801:2:1;28957:154:0;;;9783:21:1;9840:2;9820:18;;;9813:30;9879:34;9859:18;;;9852:62;9950:20;9930:18;;;9923:48;9988:19;;28957:154:0;9599:414:1;32201:799:0;32356:4;32377:13;;;10732:20;10780:8;32373:620;;32413:72;;;;;:36;;;;;;:72;;20132:10;;32464:4;;32470:7;;32479:5;;32413:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32413:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32409:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32655:13:0;;32651:272;;32698:60;;;;;9801:2:1;32698:60:0;;;9783:21:1;9840:2;9820:18;;;9813:30;9879:34;9859:18;;;9852:62;9950:20;9930:18;;;9923:48;9988:19;;32698:60:0;9599:414:1;32651:272:0;32873:6;32867:13;32858:6;32854:2;32850:15;32843:38;32409:529;32536:51;;32546:41;32536:51;;-1:-1:-1;32529:58:0;;32373:620;-1:-1:-1;32977:4:0;32201:799;;;;;;:::o;38417:990::-;38683:22;38733:1;38708:22;38725:4;38708:16;:22::i;:::-;:26;;;;:::i;:::-;38745:18;38766:26;;;:17;:26;;;;;;38683:51;;-1:-1:-1;38899:28:0;;;38895:330;;38966:18;;;38944:19;38966:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39017:30;;;;;;:45;;;39135:30;;:17;:30;;;;;:44;;;38895:330;-1:-1:-1;39321:26:0;;;;:17;:26;;;;;;;;39314:33;;;39365:18;;;;;;:12;:18;;;;;:34;;;;;;;39358:41;38417:990::o;39702:1081::-;39980:10;:17;39955:22;;39980:21;;40000:1;;39980:21;:::i;:::-;40012:18;40033:24;;;:15;:24;;;;;;40406:10;:26;;39955:46;;-1:-1:-1;40033:24:0;;39955:46;;40406:26;;;;;;:::i;:::-;;;;;;;;;40384:48;;40471:11;40445:10;40456;40445:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:37;;;;40551:28;;;:15;:28;;;;;;;:42;;;40724:24;;;;;40717:31;40759:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39773:1010;;;39702:1081;:::o;37201:223::-;37286:14;37303:20;37320:2;37303:16;:20::i;:::-;37334:16;;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:35;;;37380:26;;;:17;:26;;;;;;:36;;;;-1:-1:-1;37201:223:0:o;29455:383::-;29535:16;;;29527:61;;;;;;;14158:2:1;29527:61:0;;;14140:21:1;;;14177:18;;;14170:30;14236:34;14216:18;;;14209:62;14288:18;;29527:61:0;13956:356:1;29527:61:0;27542:4;27566:16;;;:7;:16;;;;;;:30;:16;:30;29599:58;;;;;;;10627:2:1;29599:58:0;;;10609:21:1;10666:2;10646:18;;;10639:30;10705;10685:18;;;10678:58;10753:18;;29599:58:0;10425:352:1;29599:58:0;29670:45;29699:1;29703:2;29707:7;29670:20;:45::i;:::-;29728:13;;;;;;;:9;:13;;;;;:18;;29745:1;;29728:13;:18;;29745:1;;29728:18;:::i;:::-;;;;-1:-1:-1;;29757:16:0;;;;:7;:16;;;;;;:22;;;;;;;;;;;;;29797:33;;29757:16;;;29797:33;;29757:16;;29797:33;29455:383;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:690:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:196::-;777:20;;837:42;826:54;;816:65;;806:93;;895:1;892;885:12;910:160;975:20;;1031:13;;1024:21;1014:32;;1004:60;;1060:1;1057;1050:12;1075:186;1134:6;1187:2;1175:9;1166:7;1162:23;1158:32;1155:52;;;1203:1;1200;1193:12;1155:52;1226:29;1245:9;1226:29;:::i;1266:260::-;1334:6;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:52;;;1411:1;1408;1401:12;1363:52;1434:29;1453:9;1434:29;:::i;:::-;1424:39;;1482:38;1516:2;1505:9;1501:18;1482:38;:::i;:::-;1472:48;;1266:260;;;;;:::o;1531:328::-;1608:6;1616;1624;1677:2;1665:9;1656:7;1652:23;1648:32;1645:52;;;1693:1;1690;1683:12;1645:52;1716:29;1735:9;1716:29;:::i;:::-;1706:39;;1764:38;1798:2;1787:9;1783:18;1764:38;:::i;:::-;1754:48;;1849:2;1838:9;1834:18;1821:32;1811:42;;1531:328;;;;;:::o;1864:666::-;1959:6;1967;1975;1983;2036:3;2024:9;2015:7;2011:23;2007:33;2004:53;;;2053:1;2050;2043:12;2004:53;2076:29;2095:9;2076:29;:::i;:::-;2066:39;;2124:38;2158:2;2147:9;2143:18;2124:38;:::i;:::-;2114:48;;2209:2;2198:9;2194:18;2181:32;2171:42;;2264:2;2253:9;2249:18;2236:32;2291:18;2283:6;2280:30;2277:50;;;2323:1;2320;2313:12;2277:50;2346:22;;2399:4;2391:13;;2387:27;-1:-1:-1;2377:55:1;;2428:1;2425;2418:12;2377:55;2451:73;2516:7;2511:2;2498:16;2493:2;2489;2485:11;2451:73;:::i;:::-;2441:83;;;1864:666;;;;;;;:::o;2535:254::-;2600:6;2608;2661:2;2649:9;2640:7;2636:23;2632:32;2629:52;;;2677:1;2674;2667:12;2629:52;2700:29;2719:9;2700:29;:::i;:::-;2690:39;;2748:35;2779:2;2768:9;2764:18;2748:35;:::i;2794:254::-;2862:6;2870;2923:2;2911:9;2902:7;2898:23;2894:32;2891:52;;;2939:1;2936;2929:12;2891:52;2962:29;2981:9;2962:29;:::i;:::-;2952:39;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2794:254:1:o;3053:180::-;3109:6;3162:2;3150:9;3141:7;3137:23;3133:32;3130:52;;;3178:1;3175;3168:12;3130:52;3201:26;3217:9;3201:26;:::i;3238:245::-;3296:6;3349:2;3337:9;3328:7;3324:23;3320:32;3317:52;;;3365:1;3362;3355:12;3317:52;3404:9;3391:23;3423:30;3447:5;3423:30;:::i;3488:249::-;3557:6;3610:2;3598:9;3589:7;3585:23;3581:32;3578:52;;;3626:1;3623;3616:12;3578:52;3658:9;3652:16;3677:30;3701:5;3677:30;:::i;3742:450::-;3811:6;3864:2;3852:9;3843:7;3839:23;3835:32;3832:52;;;3880:1;3877;3870:12;3832:52;3920:9;3907:23;3953:18;3945:6;3942:30;3939:50;;;3985:1;3982;3975:12;3939:50;4008:22;;4061:4;4053:13;;4049:27;-1:-1:-1;4039:55:1;;4090:1;4087;4080:12;4039:55;4113:73;4178:7;4173:2;4160:16;4155:2;4151;4147:11;4113:73;:::i;4197:180::-;4256:6;4309:2;4297:9;4288:7;4284:23;4280:32;4277:52;;;4325:1;4322;4315:12;4277:52;-1:-1:-1;4348:23:1;;4197:180;-1:-1:-1;4197:180:1:o;4382:316::-;4423:3;4461:5;4455:12;4488:6;4483:3;4476:19;4504:63;4560:6;4553:4;4548:3;4544:14;4537:4;4530:5;4526:16;4504:63;:::i;:::-;4612:2;4600:15;4617:66;4596:88;4587:98;;;;4687:4;4583:109;;4382:316;-1:-1:-1;;4382:316:1:o;4703:1642::-;4927:3;4965:6;4959:13;4991:4;5004:51;5048:6;5043:3;5038:2;5030:6;5026:15;5004:51;:::i;:::-;5118:13;;5077:16;;;;5140:55;5118:13;5077:16;5162:15;;;5140:55;:::i;:::-;5284:13;;5217:20;;;5257:1;;5344;5366:18;;;;5419;;;;5446:93;;5524:4;5514:8;5510:19;5498:31;;5446:93;5587:2;5577:8;5574:16;5554:18;5551:40;5548:224;;;5626:77;5621:3;5614:90;5727:4;5724:1;5717:15;5757:4;5752:3;5745:17;5548:224;5788:18;5815:168;;;;5997:1;5992:328;;;;5781:539;;5815:168;5865:66;5854:9;5850:82;5843:5;5836:97;5964:8;5957:5;5953:20;5946:27;;5815:168;;5992:328;18103:1;18096:14;;;18140:4;18127:18;;6087:1;6101:169;6115:8;6112:1;6109:15;6101:169;;;6197:14;;6182:13;;;6175:37;6240:16;;;;6132:10;;6101:169;;;6105:3;;6301:8;6294:5;6290:20;6283:27;;5781:539;-1:-1:-1;6336:3:1;;4703:1642;-1:-1:-1;;;;;;;;;;;4703:1642:1:o;6791:511::-;6985:4;7014:42;7095:2;7087:6;7083:15;7072:9;7065:34;7147:2;7139:6;7135:15;7130:2;7119:9;7115:18;7108:43;;7187:6;7182:2;7171:9;7167:18;7160:34;7230:3;7225:2;7214:9;7210:18;7203:31;7251:45;7291:3;7280:9;7276:19;7268:6;7251:45;:::i;:::-;7243:53;6791:511;-1:-1:-1;;;;;;6791:511:1:o;7307:632::-;7478:2;7530:21;;;7600:13;;7503:18;;;7622:22;;;7449:4;;7478:2;7701:15;;;;7675:2;7660:18;;;7449:4;7744:169;7758:6;7755:1;7752:13;7744:169;;;7819:13;;7807:26;;7888:15;;;;7853:12;;;;7780:1;7773:9;7744:169;;;-1:-1:-1;7930:3:1;;7307:632;-1:-1:-1;;;;;;7307:632:1:o;8136:219::-;8285:2;8274:9;8267:21;8248:4;8305:44;8345:2;8334:9;8330:18;8322:6;8305:44;:::i;18156:128::-;18196:3;18227:1;18223:6;18220:1;18217:13;18214:39;;;18233:18;;:::i;:::-;-1:-1:-1;18269:9:1;;18156:128::o;18289:120::-;18329:1;18355;18345:35;;18360:18;;:::i;:::-;-1:-1:-1;18394:9:1;;18289:120::o;18414:228::-;18454:7;18580:1;18512:66;18508:74;18505:1;18502:81;18497:1;18490:9;18483:17;18479:105;18476:131;;;18587:18;;:::i;:::-;-1:-1:-1;18627:9:1;;18414:228::o;18647:125::-;18687:4;18715:1;18712;18709:8;18706:34;;;18720:18;;:::i;:::-;-1:-1:-1;18757:9:1;;18647:125::o;18777:258::-;18849:1;18859:113;18873:6;18870:1;18867:13;18859:113;;;18949:11;;;18943:18;18930:11;;;18923:39;18895:2;18888:10;18859:113;;;18990:6;18987:1;18984:13;18981:48;;;-1:-1:-1;;19025:1:1;19007:16;;19000:27;18777:258::o;19040:437::-;19119:1;19115:12;;;;19162;;;19183:61;;19237:4;19229:6;19225:17;19215:27;;19183:61;19290:2;19282:6;19279:14;19259:18;19256:38;19253:218;;;19327:77;19324:1;19317:88;19428:4;19425:1;19418:15;19456:4;19453:1;19446:15;19253:218;;19040:437;;;:::o;19482:195::-;19521:3;19552:66;19545:5;19542:77;19539:103;;;19622:18;;:::i;:::-;-1:-1:-1;19669:1:1;19658:13;;19482:195::o;19682:112::-;19714:1;19740;19730:35;;19745:18;;:::i;:::-;-1:-1:-1;19779:9:1;;19682:112::o;19799:184::-;19851:77;19848:1;19841:88;19948:4;19945:1;19938:15;19972:4;19969:1;19962:15;19988:184;20040:77;20037:1;20030:88;20137:4;20134:1;20127:15;20161:4;20158:1;20151:15;20177:184;20229:77;20226:1;20219:88;20326:4;20323:1;20316:15;20350:4;20347:1;20340:15;20366:184;20418:77;20415:1;20408:88;20515:4;20512:1;20505:15;20539:4;20536:1;20529:15;20555:184;20607:77;20604:1;20597:88;20704:4;20701:1;20694:15;20728:4;20725:1;20718:15;20744:177;20829:66;20822:5;20818:78;20811:5;20808:89;20798:117;;20911:1;20908;20901:12
Swarm Source
ipfs://5ed3e4ed8c957f6ba535242757107edd0cfaf8bcab0438c01297126ccd205859
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.