Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
H2O
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-02 */ // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @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, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` 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 payable; /** * @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 payable; /** * @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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); // ============================================================= // IERC721Metadata // ============================================================= /** * @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); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (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/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens 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 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: contracts/H20.sol pragma solidity ^0.8.7; contract H2O is ERC20("H2O", "H2O") { using SafeMath for uint256; uint256 public constant BASE_RATE = 25 ether; mapping(address => uint256) public rewards; mapping(address => uint256) public lastUpdate; IERC721A public homies; constructor(address _contract) { homies = IERC721A(_contract); } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } // called on transfers function updateReward( address _from, address _to ) external { require(msg.sender == address(homies), "Cant call this"); uint256 time = block.timestamp; uint256 timerFrom = lastUpdate[_from]; if (timerFrom > 0) rewards[_from] += homies .balanceOf(_from) .mul(BASE_RATE.mul((time.sub(timerFrom)))) .div(604800); lastUpdate[_from] = time; if (_to != address(0)) { uint256 timerTo = lastUpdate[_to]; if (timerTo > 0) rewards[_to] += homies .balanceOf(_to) .mul(BASE_RATE.mul((time.sub(timerTo)))) .div(604800); lastUpdate[_to] = time; } } function getReward(address _to) external { uint256 reward = rewards[_to]; if (reward > 0) { rewards[_to] = 0; _mint(_to, reward); } } function getTotalClaimable(address _user) external view returns (uint256) { uint256 pending = homies .balanceOf(_user) .mul(BASE_RATE.mul((block.timestamp.sub(lastUpdate[_user])))) .div(604800); return rewards[_user] + pending; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTotalClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"homies","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"updateReward","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002224380380620022248339818101604052810190620000379190620001e6565b6040518060400160405280600381526020017f48324f00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f48324f00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200011f565b508060049080519060200190620000d49291906200011f565b50505080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002d0565b8280546200012d906200024c565b90600052602060002090601f0160209004810192826200015157600085556200019d565b82601f106200016c57805160ff19168380011785556200019d565b828001600101855582156200019d579182015b828111156200019c5782518255916020019190600101906200017f565b5b509050620001ac9190620001b0565b5090565b5b80821115620001cb576000816000905550600101620001b1565b5090565b600081519050620001e081620002b6565b92915050565b600060208284031215620001ff57620001fe620002b1565b5b60006200020f84828501620001cf565b91505092915050565b600062000225826200022c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200026557607f821691505b602082108114156200027c576200027b62000282565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620002c18162000218565b8114620002cd57600080fd5b50565b611f4480620002e06000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806341910f90116100a2578063a9059cbb11610071578063a9059cbb1461031f578063c00007b01461034f578063cb03fb1e1461036b578063d230af3a1461039b578063dd62ed3e146103b757610116565b806341910f901461028357806370a08231146102a157806395d89b41146102d1578063a457c2d7146102ef57610116565b806319f300f2116100e957806319f300f2146101b757806323b872dd146101d5578063267e8ab614610205578063313ce56714610235578063395093511461025357610116565b806306fdde031461011b5780630700037d14610139578063095ea7b31461016957806318160ddd14610199575b600080fd5b6101236103e7565b604051610130919061184f565b60405180910390f35b610153600480360381019061014e9190611512565b610479565b6040516101609190611991565b60405180910390f35b610183600480360381019061017e91906115d2565b610491565b6040516101909190611819565b60405180910390f35b6101a16104b4565b6040516101ae9190611991565b60405180910390f35b6101bf6104be565b6040516101cc9190611834565b60405180910390f35b6101ef60048036038101906101ea919061157f565b6104e4565b6040516101fc9190611819565b60405180910390f35b61021f600480360381019061021a9190611512565b610513565b60405161022c9190611991565b60405180910390f35b61023d6106a9565b60405161024a91906119ac565b60405180910390f35b61026d600480360381019061026891906115d2565b6106b2565b60405161027a9190611819565b60405180910390f35b61028b6106e9565b6040516102989190611991565b60405180910390f35b6102bb60048036038101906102b69190611512565b6106f6565b6040516102c89190611991565b60405180910390f35b6102d961073e565b6040516102e6919061184f565b60405180910390f35b610309600480360381019061030491906115d2565b6107d0565b6040516103169190611819565b60405180910390f35b610339600480360381019061033491906115d2565b610847565b6040516103469190611819565b60405180910390f35b61036960048036038101906103649190611512565b61086a565b005b61038560048036038101906103809190611512565b61090b565b6040516103929190611991565b60405180910390f35b6103b560048036038101906103b0919061153f565b610923565b005b6103d160048036038101906103cc919061153f565b610dc0565b6040516103de9190611991565b60405180910390f35b6060600380546103f690611bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461042290611bb6565b801561046f5780601f106104445761010080835404028352916020019161046f565b820191906000526020600020905b81548152906001019060200180831161045257829003601f168201915b5050505050905090565b60056020528060005260406000206000915090505481565b60008061049c610e47565b90506104a9818585610e4f565b600191505092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104ef610e47565b90506104fc85828561101a565b6105078585856110a6565b60019150509392505050565b60008061065462093a8061064661058d610575600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016105e891906117fe565b60206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b905080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106a191906119e3565b915050919050565b60006012905090565b6000806106bd610e47565b90506106de8185856106cf8589610dc0565b6106d991906119e3565b610e4f565b600191505092915050565b68015af1d78b58c4000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461074d90611bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461077990611bb6565b80156107c65780601f1061079b576101008083540402835291602001916107c6565b820191906000526020600020905b8154815290600101906020018083116107a957829003601f168201915b5050505050905090565b6000806107db610e47565b905060006107e98286610dc0565b90508381101561082e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082590611951565b60405180910390fd5b61083b8286868403610e4f565b60019250505092915050565b600080610852610e47565b905061085f8185856110a6565b600191505092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610907576000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109068282611369565b5b5050565b60066020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90611931565b60405180910390fd5b60004290506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610b5a57610b0462093a80610af6610a3d610a25858761132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401610a9891906117fe565b60206040518083038186803b158015610ab057600080fd5b505afa158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b5291906119e3565b925050819055505b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610dba576000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610d7457610d1e62093a80610d10610c57610c3f858861132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401610cb291906117fe565b60206040518083038186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d029190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d6c91906119e3565b925050819055505b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690611911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690611891565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161100d9190611991565b60405180910390a3505050565b60006110268484610dc0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110a05781811015611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906118b1565b60405180910390fd5b61109f8484848403610e4f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d906118f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90611871565b60405180910390fd5b6111918383836114c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e906118d1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112aa91906119e3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161130e9190611991565b60405180910390a36113218484846114ce565b50505050565b600081836113359190611ac4565b905092915050565b6000818361134b9190611a6a565b905092915050565b600081836113619190611a39565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090611971565b60405180910390fd5b6113e5600083836114c9565b80600260008282546113f791906119e3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c91906119e3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114b19190611991565b60405180910390a36114c5600083836114ce565b5050565b505050565b505050565b6000813590506114e281611ee0565b92915050565b6000813590506114f781611ef7565b92915050565b60008151905061150c81611ef7565b92915050565b60006020828403121561152857611527611c75565b5b6000611536848285016114d3565b91505092915050565b6000806040838503121561155657611555611c75565b5b6000611564858286016114d3565b9250506020611575858286016114d3565b9150509250929050565b60008060006060848603121561159857611597611c75565b5b60006115a6868287016114d3565b93505060206115b7868287016114d3565b92505060406115c8868287016114e8565b9150509250925092565b600080604083850312156115e9576115e8611c75565b5b60006115f7858286016114d3565b9250506020611608858286016114e8565b9150509250929050565b60006020828403121561162857611627611c75565b5b6000611636848285016114fd565b91505092915050565b61164881611af8565b82525050565b61165781611b0a565b82525050565b61166681611b4d565b82525050565b6000611677826119c7565b61168181856119d2565b9350611691818560208601611b83565b61169a81611c7a565b840191505092915050565b60006116b26023836119d2565b91506116bd82611c8b565b604082019050919050565b60006116d56022836119d2565b91506116e082611cda565b604082019050919050565b60006116f8601d836119d2565b915061170382611d29565b602082019050919050565b600061171b6026836119d2565b915061172682611d52565b604082019050919050565b600061173e6025836119d2565b915061174982611da1565b604082019050919050565b60006117616024836119d2565b915061176c82611df0565b604082019050919050565b6000611784600e836119d2565b915061178f82611e3f565b602082019050919050565b60006117a76025836119d2565b91506117b282611e68565b604082019050919050565b60006117ca601f836119d2565b91506117d582611eb7565b602082019050919050565b6117e981611b36565b82525050565b6117f881611b40565b82525050565b6000602082019050611813600083018461163f565b92915050565b600060208201905061182e600083018461164e565b92915050565b6000602082019050611849600083018461165d565b92915050565b60006020820190508181036000830152611869818461166c565b905092915050565b6000602082019050818103600083015261188a816116a5565b9050919050565b600060208201905081810360008301526118aa816116c8565b9050919050565b600060208201905081810360008301526118ca816116eb565b9050919050565b600060208201905081810360008301526118ea8161170e565b9050919050565b6000602082019050818103600083015261190a81611731565b9050919050565b6000602082019050818103600083015261192a81611754565b9050919050565b6000602082019050818103600083015261194a81611777565b9050919050565b6000602082019050818103600083015261196a8161179a565b9050919050565b6000602082019050818103600083015261198a816117bd565b9050919050565b60006020820190506119a660008301846117e0565b92915050565b60006020820190506119c160008301846117ef565b92915050565b600081519050919050565b600082825260208201905092915050565b60006119ee82611b36565b91506119f983611b36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a2e57611a2d611be8565b5b828201905092915050565b6000611a4482611b36565b9150611a4f83611b36565b925082611a5f57611a5e611c17565b5b828204905092915050565b6000611a7582611b36565b9150611a8083611b36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ab957611ab8611be8565b5b828202905092915050565b6000611acf82611b36565b9150611ada83611b36565b925082821015611aed57611aec611be8565b5b828203905092915050565b6000611b0382611b16565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611b5882611b5f565b9050919050565b6000611b6a82611b71565b9050919050565b6000611b7c82611b16565b9050919050565b60005b83811015611ba1578082015181840152602081019050611b86565b83811115611bb0576000848401525b50505050565b60006002820490506001821680611bce57607f821691505b60208210811415611be257611be1611c46565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f43616e742063616c6c2074686973000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b611ee981611af8565b8114611ef457600080fd5b50565b611f0081611b36565b8114611f0b57600080fd5b5056fea264697066735822122019b0563c2b9d5dafa884bb0af285690ae8ac841d9e420e8eab11ec7948a9485464736f6c63430008070033000000000000000000000000df5a4fe3ad5181ef832d631fbf512feb86506902
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c806341910f90116100a2578063a9059cbb11610071578063a9059cbb1461031f578063c00007b01461034f578063cb03fb1e1461036b578063d230af3a1461039b578063dd62ed3e146103b757610116565b806341910f901461028357806370a08231146102a157806395d89b41146102d1578063a457c2d7146102ef57610116565b806319f300f2116100e957806319f300f2146101b757806323b872dd146101d5578063267e8ab614610205578063313ce56714610235578063395093511461025357610116565b806306fdde031461011b5780630700037d14610139578063095ea7b31461016957806318160ddd14610199575b600080fd5b6101236103e7565b604051610130919061184f565b60405180910390f35b610153600480360381019061014e9190611512565b610479565b6040516101609190611991565b60405180910390f35b610183600480360381019061017e91906115d2565b610491565b6040516101909190611819565b60405180910390f35b6101a16104b4565b6040516101ae9190611991565b60405180910390f35b6101bf6104be565b6040516101cc9190611834565b60405180910390f35b6101ef60048036038101906101ea919061157f565b6104e4565b6040516101fc9190611819565b60405180910390f35b61021f600480360381019061021a9190611512565b610513565b60405161022c9190611991565b60405180910390f35b61023d6106a9565b60405161024a91906119ac565b60405180910390f35b61026d600480360381019061026891906115d2565b6106b2565b60405161027a9190611819565b60405180910390f35b61028b6106e9565b6040516102989190611991565b60405180910390f35b6102bb60048036038101906102b69190611512565b6106f6565b6040516102c89190611991565b60405180910390f35b6102d961073e565b6040516102e6919061184f565b60405180910390f35b610309600480360381019061030491906115d2565b6107d0565b6040516103169190611819565b60405180910390f35b610339600480360381019061033491906115d2565b610847565b6040516103469190611819565b60405180910390f35b61036960048036038101906103649190611512565b61086a565b005b61038560048036038101906103809190611512565b61090b565b6040516103929190611991565b60405180910390f35b6103b560048036038101906103b0919061153f565b610923565b005b6103d160048036038101906103cc919061153f565b610dc0565b6040516103de9190611991565b60405180910390f35b6060600380546103f690611bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461042290611bb6565b801561046f5780601f106104445761010080835404028352916020019161046f565b820191906000526020600020905b81548152906001019060200180831161045257829003601f168201915b5050505050905090565b60056020528060005260406000206000915090505481565b60008061049c610e47565b90506104a9818585610e4f565b600191505092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104ef610e47565b90506104fc85828561101a565b6105078585856110a6565b60019150509392505050565b60008061065462093a8061064661058d610575600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016105e891906117fe565b60206040518083038186803b15801561060057600080fd5b505afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106389190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b905080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106a191906119e3565b915050919050565b60006012905090565b6000806106bd610e47565b90506106de8185856106cf8589610dc0565b6106d991906119e3565b610e4f565b600191505092915050565b68015af1d78b58c4000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461074d90611bb6565b80601f016020809104026020016040519081016040528092919081815260200182805461077990611bb6565b80156107c65780601f1061079b576101008083540402835291602001916107c6565b820191906000526020600020905b8154815290600101906020018083116107a957829003601f168201915b5050505050905090565b6000806107db610e47565b905060006107e98286610dc0565b90508381101561082e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082590611951565b60405180910390fd5b61083b8286868403610e4f565b60019250505092915050565b600080610852610e47565b905061085f8185856110a6565b600191505092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610907576000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506109068282611369565b5b5050565b60066020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90611931565b60405180910390fd5b60004290506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610b5a57610b0462093a80610af6610a3d610a25858761132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401610a9891906117fe565b60206040518083038186803b158015610ab057600080fd5b505afa158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b5291906119e3565b925050819055505b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610dba576000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115610d7457610d1e62093a80610d10610c57610c3f858861132790919063ffffffff16565b68015af1d78b58c4000061133d90919063ffffffff16565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401610cb291906117fe565b60206040518083038186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d029190611612565b61133d90919063ffffffff16565b61135390919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d6c91906119e3565b925050819055505b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690611911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690611891565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161100d9190611991565b60405180910390a3505050565b60006110268484610dc0565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110a05781811015611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906118b1565b60405180910390fd5b61109f8484848403610e4f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110d906118f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90611871565b60405180910390fd5b6111918383836114c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e906118d1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112aa91906119e3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161130e9190611991565b60405180910390a36113218484846114ce565b50505050565b600081836113359190611ac4565b905092915050565b6000818361134b9190611a6a565b905092915050565b600081836113619190611a39565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090611971565b60405180910390fd5b6113e5600083836114c9565b80600260008282546113f791906119e3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c91906119e3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114b19190611991565b60405180910390a36114c5600083836114ce565b5050565b505050565b505050565b6000813590506114e281611ee0565b92915050565b6000813590506114f781611ef7565b92915050565b60008151905061150c81611ef7565b92915050565b60006020828403121561152857611527611c75565b5b6000611536848285016114d3565b91505092915050565b6000806040838503121561155657611555611c75565b5b6000611564858286016114d3565b9250506020611575858286016114d3565b9150509250929050565b60008060006060848603121561159857611597611c75565b5b60006115a6868287016114d3565b93505060206115b7868287016114d3565b92505060406115c8868287016114e8565b9150509250925092565b600080604083850312156115e9576115e8611c75565b5b60006115f7858286016114d3565b9250506020611608858286016114e8565b9150509250929050565b60006020828403121561162857611627611c75565b5b6000611636848285016114fd565b91505092915050565b61164881611af8565b82525050565b61165781611b0a565b82525050565b61166681611b4d565b82525050565b6000611677826119c7565b61168181856119d2565b9350611691818560208601611b83565b61169a81611c7a565b840191505092915050565b60006116b26023836119d2565b91506116bd82611c8b565b604082019050919050565b60006116d56022836119d2565b91506116e082611cda565b604082019050919050565b60006116f8601d836119d2565b915061170382611d29565b602082019050919050565b600061171b6026836119d2565b915061172682611d52565b604082019050919050565b600061173e6025836119d2565b915061174982611da1565b604082019050919050565b60006117616024836119d2565b915061176c82611df0565b604082019050919050565b6000611784600e836119d2565b915061178f82611e3f565b602082019050919050565b60006117a76025836119d2565b91506117b282611e68565b604082019050919050565b60006117ca601f836119d2565b91506117d582611eb7565b602082019050919050565b6117e981611b36565b82525050565b6117f881611b40565b82525050565b6000602082019050611813600083018461163f565b92915050565b600060208201905061182e600083018461164e565b92915050565b6000602082019050611849600083018461165d565b92915050565b60006020820190508181036000830152611869818461166c565b905092915050565b6000602082019050818103600083015261188a816116a5565b9050919050565b600060208201905081810360008301526118aa816116c8565b9050919050565b600060208201905081810360008301526118ca816116eb565b9050919050565b600060208201905081810360008301526118ea8161170e565b9050919050565b6000602082019050818103600083015261190a81611731565b9050919050565b6000602082019050818103600083015261192a81611754565b9050919050565b6000602082019050818103600083015261194a81611777565b9050919050565b6000602082019050818103600083015261196a8161179a565b9050919050565b6000602082019050818103600083015261198a816117bd565b9050919050565b60006020820190506119a660008301846117e0565b92915050565b60006020820190506119c160008301846117ef565b92915050565b600081519050919050565b600082825260208201905092915050565b60006119ee82611b36565b91506119f983611b36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a2e57611a2d611be8565b5b828201905092915050565b6000611a4482611b36565b9150611a4f83611b36565b925082611a5f57611a5e611c17565b5b828204905092915050565b6000611a7582611b36565b9150611a8083611b36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ab957611ab8611be8565b5b828202905092915050565b6000611acf82611b36565b9150611ada83611b36565b925082821015611aed57611aec611be8565b5b828203905092915050565b6000611b0382611b16565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611b5882611b5f565b9050919050565b6000611b6a82611b71565b9050919050565b6000611b7c82611b16565b9050919050565b60005b83811015611ba1578082015181840152602081019050611b86565b83811115611bb0576000848401525b50505050565b60006002820490506001821680611bce57607f821691505b60208210811415611be257611be1611c46565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f43616e742063616c6c2074686973000000000000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b611ee981611af8565b8114611ef457600080fd5b50565b611f0081611b36565b8114611f0b57600080fd5b5056fea264697066735822122019b0563c2b9d5dafa884bb0af285690ae8ac841d9e420e8eab11ec7948a9485464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000df5a4fe3ad5181ef832d631fbf512feb86506902
-----Decoded View---------------
Arg [0] : _contract (address): 0xdf5A4FE3ad5181eF832d631FbF512FEB86506902
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000df5a4fe3ad5181ef832d631fbf512feb86506902
Deployed Bytecode Sourcemap
33554:1811:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22703:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33685:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23823:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33788:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25835:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35071:291;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23665:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26539:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33632:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23994:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22922:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27280:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24327:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34872:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33734:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34047:817;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24583:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:100;22757:13;22790:5;22783:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22703:100;:::o;33685:42::-;;;;;;;;;;;;;;;;;:::o;25054:201::-;25137:4;25154:13;25170:12;:10;:12::i;:::-;25154:28;;25193:32;25202:5;25209:7;25218:6;25193:8;:32::i;:::-;25243:4;25236:11;;;25054:201;;;;:::o;23823:108::-;23884:7;23911:12;;23904:19;;23823:108;:::o;33788:22::-;;;;;;;;;;;;;:::o;25835:295::-;25966:4;25983:15;26001:12;:10;:12::i;:::-;25983:30;;26024:38;26040:4;26046:7;26055:6;26024:15;:38::i;:::-;26073:27;26083:4;26089:2;26093:6;26073:9;:27::i;:::-;26118:4;26111:11;;;25835:295;;;;;:::o;35071:291::-;35136:7;35156:15;35174:138;35305:6;35174:112;35230:55;35245:38;35265:10;:17;35276:5;35265:17;;;;;;;;;;;;;;;;35245:15;:19;;:38;;;;:::i;:::-;33668:8;35230:13;;:55;;;;:::i;:::-;35174:6;;;;;;;;;;;:30;;;35205:5;35174:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;:112;;;;:::i;:::-;:130;;:138;;;;:::i;:::-;35156:156;;35347:7;35330;:14;35338:5;35330:14;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;35323:31;;;35071:291;;;:::o;23665:93::-;23723:5;23748:2;23741:9;;23665:93;:::o;26539:238::-;26627:4;26644:13;26660:12;:10;:12::i;:::-;26644:28;;26683:64;26692:5;26699:7;26736:10;26708:25;26718:5;26725:7;26708:9;:25::i;:::-;:38;;;;:::i;:::-;26683:8;:64::i;:::-;26765:4;26758:11;;;26539:238;;;;:::o;33632:44::-;33668:8;33632:44;:::o;23994:127::-;24068:7;24095:9;:18;24105:7;24095:18;;;;;;;;;;;;;;;;24088:25;;23994:127;;;:::o;22922:104::-;22978:13;23011:7;23004:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22922:104;:::o;27280:436::-;27373:4;27390:13;27406:12;:10;:12::i;:::-;27390:28;;27429:24;27456:25;27466:5;27473:7;27456:9;:25::i;:::-;27429:52;;27520:15;27500:16;:35;;27492:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27613:60;27622:5;27629:7;27657:15;27638:16;:34;27613:8;:60::i;:::-;27704:4;27697:11;;;;27280:436;;;;:::o;24327:193::-;24406:4;24423:13;24439:12;:10;:12::i;:::-;24423:28;;24462;24472:5;24479:2;24483:6;24462:9;:28::i;:::-;24508:4;24501:11;;;24327:193;;;;:::o;34872:191::-;34924:14;34941:7;:12;34949:3;34941:12;;;;;;;;;;;;;;;;34924:29;;34977:1;34968:6;:10;34964:92;;;35010:1;34995:7;:12;35003:3;34995:12;;;;;;;;;;;;;;;:16;;;;35026:18;35032:3;35037:6;35026:5;:18::i;:::-;34964:92;34913:150;34872:191;:::o;33734:45::-;;;;;;;;;;;;;;;;;:::o;34047:817::-;34172:6;;;;;;;;;;;34150:29;;:10;:29;;;34142:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34211:12;34226:15;34211:30;;34252:17;34272:10;:17;34283:5;34272:17;;;;;;;;;;;;;;;;34252:37;;34316:1;34304:9;:13;34300:181;;;34350:131;34474:6;34350:101;34414:36;34429:19;34438:9;34429:4;:8;;:19;;;;:::i;:::-;33668:8;34414:13;;:36;;;;:::i;:::-;34350:6;;;;;;;;;;;:34;;;34385:5;34350:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;:101;;;;:::i;:::-;:123;;:131;;;;:::i;:::-;34332:7;:14;34340:5;34332:14;;;;;;;;;;;;;;;;:149;;;;;;;:::i;:::-;;;;;;;;34300:181;34512:4;34492:10;:17;34503:5;34492:17;;;;;;;;;;;;;;;:24;;;;34546:1;34531:17;;:3;:17;;;34527:324;;34565:15;34583:10;:15;34594:3;34583:15;;;;;;;;;;;;;;;;34565:33;;34627:1;34617:7;:11;34613:189;;;34663:139;34795:6;34663:105;34733:34;34748:17;34757:7;34748:4;:8;;:17;;;;:::i;:::-;33668:8;34733:13;;:34;;;;:::i;:::-;34663:6;;;;;;;;;;;:38;;;34702:3;34663:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;:105;;;;:::i;:::-;:131;;:139;;;;:::i;:::-;34647:7;:12;34655:3;34647:12;;;;;;;;;;;;;;;;:155;;;;;;;:::i;:::-;;;;;;;;34613:189;34835:4;34817:10;:15;34828:3;34817:15;;;;;;;;;;;;;;;:22;;;;34550:301;34527:324;34131:733;;34047:817;;:::o;24583:151::-;24672:7;24699:11;:18;24711:5;24699:18;;;;;;;;;;;;;;;:27;24718:7;24699:27;;;;;;;;;;;;;;;;24692:34;;24583:151;;;;:::o;16729:98::-;16782:7;16809:10;16802:17;;16729:98;:::o;30905:380::-;31058:1;31041:19;;:5;:19;;;;31033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31139:1;31120:21;;:7;:21;;;;31112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31223:6;31193:11;:18;31205:5;31193:18;;;;;;;;;;;;;;;:27;31212:7;31193:27;;;;;;;;;;;;;;;:36;;;;31261:7;31245:32;;31254:5;31245:32;;;31270:6;31245:32;;;;;;:::i;:::-;;;;;;;;30905:380;;;:::o;31576:453::-;31711:24;31738:25;31748:5;31755:7;31738:9;:25::i;:::-;31711:52;;31798:17;31778:16;:37;31774:248;;31860:6;31840:16;:26;;31832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:51;31953:5;31960:7;31988:6;31969:16;:25;31944:8;:51::i;:::-;31774:248;31700:329;31576:453;;;:::o;28186:671::-;28333:1;28317:18;;:4;:18;;;;28309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28410:1;28396:16;;:2;:16;;;;28388:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28465:38;28486:4;28492:2;28496:6;28465:20;:38::i;:::-;28516:19;28538:9;:15;28548:4;28538:15;;;;;;;;;;;;;;;;28516:37;;28587:6;28572:11;:21;;28564:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28704:6;28690:11;:20;28672:9;:15;28682:4;28672:15;;;;;;;;;;;;;;;:38;;;;28749:6;28732:9;:13;28742:2;28732:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;28788:2;28773:26;;28782:4;28773:26;;;28792:6;28773:26;;;;;;:::i;:::-;;;;;;;;28812:37;28832:4;28838:2;28842:6;28812:19;:37::i;:::-;28298:559;28186:671;;;:::o;12266:98::-;12324:7;12355:1;12351;:5;;;;:::i;:::-;12344:12;;12266:98;;;;:::o;12623:::-;12681:7;12712:1;12708;:5;;;;:::i;:::-;12701:12;;12623:98;;;;:::o;13022:::-;13080:7;13111:1;13107;:5;;;;:::i;:::-;13100:12;;13022:98;;;;:::o;29144:399::-;29247:1;29228:21;;:7;:21;;;;29220:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29298:49;29327:1;29331:7;29340:6;29298:20;:49::i;:::-;29376:6;29360:12;;:22;;;;;;;:::i;:::-;;;;;;;;29415:6;29393:9;:18;29403:7;29393:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;29458:7;29437:37;;29454:1;29437:37;;;29467:6;29437:37;;;;;;:::i;:::-;;;;;;;;29487:48;29515:1;29519:7;29528:6;29487:19;:48::i;:::-;29144:399;;:::o;32629:125::-;;;;:::o;33358:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:143::-;354:5;385:6;379:13;370:22;;401:33;428:5;401:33;:::i;:::-;297:143;;;;:::o;446:329::-;505:6;554:2;542:9;533:7;529:23;525:32;522:119;;;560:79;;:::i;:::-;522:119;680:1;705:53;750:7;741:6;730:9;726:22;705:53;:::i;:::-;695:63;;651:117;446:329;;;;:::o;781:474::-;849:6;857;906:2;894:9;885:7;881:23;877:32;874:119;;;912:79;;:::i;:::-;874:119;1032:1;1057:53;1102:7;1093:6;1082:9;1078:22;1057:53;:::i;:::-;1047:63;;1003:117;1159:2;1185:53;1230:7;1221:6;1210:9;1206:22;1185:53;:::i;:::-;1175:63;;1130:118;781:474;;;;;:::o;1261:619::-;1338:6;1346;1354;1403:2;1391:9;1382:7;1378:23;1374:32;1371:119;;;1409:79;;:::i;:::-;1371:119;1529:1;1554:53;1599:7;1590:6;1579:9;1575:22;1554:53;:::i;:::-;1544:63;;1500:117;1656:2;1682:53;1727:7;1718:6;1707:9;1703:22;1682:53;:::i;:::-;1672:63;;1627:118;1784:2;1810:53;1855:7;1846:6;1835:9;1831:22;1810:53;:::i;:::-;1800:63;;1755:118;1261:619;;;;;:::o;1886:474::-;1954:6;1962;2011:2;1999:9;1990:7;1986:23;1982:32;1979:119;;;2017:79;;:::i;:::-;1979:119;2137:1;2162:53;2207:7;2198:6;2187:9;2183:22;2162:53;:::i;:::-;2152:63;;2108:117;2264:2;2290:53;2335:7;2326:6;2315:9;2311:22;2290:53;:::i;:::-;2280:63;;2235:118;1886:474;;;;;:::o;2366:351::-;2436:6;2485:2;2473:9;2464:7;2460:23;2456:32;2453:119;;;2491:79;;:::i;:::-;2453:119;2611:1;2636:64;2692:7;2683:6;2672:9;2668:22;2636:64;:::i;:::-;2626:74;;2582:128;2366:351;;;;:::o;2723:118::-;2810:24;2828:5;2810:24;:::i;:::-;2805:3;2798:37;2723:118;;:::o;2847:109::-;2928:21;2943:5;2928:21;:::i;:::-;2923:3;2916:34;2847:109;;:::o;2962:163::-;3065:53;3112:5;3065:53;:::i;:::-;3060:3;3053:66;2962:163;;:::o;3131:364::-;3219:3;3247:39;3280:5;3247:39;:::i;:::-;3302:71;3366:6;3361:3;3302:71;:::i;:::-;3295:78;;3382:52;3427:6;3422:3;3415:4;3408:5;3404:16;3382:52;:::i;:::-;3459:29;3481:6;3459:29;:::i;:::-;3454:3;3450:39;3443:46;;3223:272;3131:364;;;;:::o;3501:366::-;3643:3;3664:67;3728:2;3723:3;3664:67;:::i;:::-;3657:74;;3740:93;3829:3;3740:93;:::i;:::-;3858:2;3853:3;3849:12;3842:19;;3501:366;;;:::o;3873:::-;4015:3;4036:67;4100:2;4095:3;4036:67;:::i;:::-;4029:74;;4112:93;4201:3;4112:93;:::i;:::-;4230:2;4225:3;4221:12;4214:19;;3873:366;;;:::o;4245:::-;4387:3;4408:67;4472:2;4467:3;4408:67;:::i;:::-;4401:74;;4484:93;4573:3;4484:93;:::i;:::-;4602:2;4597:3;4593:12;4586:19;;4245:366;;;:::o;4617:::-;4759:3;4780:67;4844:2;4839:3;4780:67;:::i;:::-;4773:74;;4856:93;4945:3;4856:93;:::i;:::-;4974:2;4969:3;4965:12;4958:19;;4617:366;;;:::o;4989:::-;5131:3;5152:67;5216:2;5211:3;5152:67;:::i;:::-;5145:74;;5228:93;5317:3;5228:93;:::i;:::-;5346:2;5341:3;5337:12;5330:19;;4989:366;;;:::o;5361:::-;5503:3;5524:67;5588:2;5583:3;5524:67;:::i;:::-;5517:74;;5600:93;5689:3;5600:93;:::i;:::-;5718:2;5713:3;5709:12;5702:19;;5361:366;;;:::o;5733:::-;5875:3;5896:67;5960:2;5955:3;5896:67;:::i;:::-;5889:74;;5972:93;6061:3;5972:93;:::i;:::-;6090:2;6085:3;6081:12;6074:19;;5733:366;;;:::o;6105:::-;6247:3;6268:67;6332:2;6327:3;6268:67;:::i;:::-;6261:74;;6344:93;6433:3;6344:93;:::i;:::-;6462:2;6457:3;6453:12;6446:19;;6105:366;;;:::o;6477:::-;6619:3;6640:67;6704:2;6699:3;6640:67;:::i;:::-;6633:74;;6716:93;6805:3;6716:93;:::i;:::-;6834:2;6829:3;6825:12;6818:19;;6477:366;;;:::o;6849:118::-;6936:24;6954:5;6936:24;:::i;:::-;6931:3;6924:37;6849:118;;:::o;6973:112::-;7056:22;7072:5;7056:22;:::i;:::-;7051:3;7044:35;6973:112;;:::o;7091:222::-;7184:4;7222:2;7211:9;7207:18;7199:26;;7235:71;7303:1;7292:9;7288:17;7279:6;7235:71;:::i;:::-;7091:222;;;;:::o;7319:210::-;7406:4;7444:2;7433:9;7429:18;7421:26;;7457:65;7519:1;7508:9;7504:17;7495:6;7457:65;:::i;:::-;7319:210;;;;:::o;7535:254::-;7644:4;7682:2;7671:9;7667:18;7659:26;;7695:87;7779:1;7768:9;7764:17;7755:6;7695:87;:::i;:::-;7535:254;;;;:::o;7795:313::-;7908:4;7946:2;7935:9;7931:18;7923:26;;7995:9;7989:4;7985:20;7981:1;7970:9;7966:17;7959:47;8023:78;8096:4;8087:6;8023:78;:::i;:::-;8015:86;;7795:313;;;;:::o;8114:419::-;8280:4;8318:2;8307:9;8303:18;8295:26;;8367:9;8361:4;8357:20;8353:1;8342:9;8338:17;8331:47;8395:131;8521:4;8395:131;:::i;:::-;8387:139;;8114:419;;;:::o;8539:::-;8705:4;8743:2;8732:9;8728:18;8720:26;;8792:9;8786:4;8782:20;8778:1;8767:9;8763:17;8756:47;8820:131;8946:4;8820:131;:::i;:::-;8812:139;;8539:419;;;:::o;8964:::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9217:9;9211:4;9207:20;9203:1;9192:9;9188:17;9181:47;9245:131;9371:4;9245:131;:::i;:::-;9237:139;;8964:419;;;:::o;9389:::-;9555:4;9593:2;9582:9;9578:18;9570:26;;9642:9;9636:4;9632:20;9628:1;9617:9;9613:17;9606:47;9670:131;9796:4;9670:131;:::i;:::-;9662:139;;9389:419;;;:::o;9814:::-;9980:4;10018:2;10007:9;10003:18;9995:26;;10067:9;10061:4;10057:20;10053:1;10042:9;10038:17;10031:47;10095:131;10221:4;10095:131;:::i;:::-;10087:139;;9814:419;;;:::o;10239:::-;10405:4;10443:2;10432:9;10428:18;10420:26;;10492:9;10486:4;10482:20;10478:1;10467:9;10463:17;10456:47;10520:131;10646:4;10520:131;:::i;:::-;10512:139;;10239:419;;;:::o;10664:::-;10830:4;10868:2;10857:9;10853:18;10845:26;;10917:9;10911:4;10907:20;10903:1;10892:9;10888:17;10881:47;10945:131;11071:4;10945:131;:::i;:::-;10937:139;;10664:419;;;:::o;11089:::-;11255:4;11293:2;11282:9;11278:18;11270:26;;11342:9;11336:4;11332:20;11328:1;11317:9;11313:17;11306:47;11370:131;11496:4;11370:131;:::i;:::-;11362:139;;11089:419;;;:::o;11514:::-;11680:4;11718:2;11707:9;11703:18;11695:26;;11767:9;11761:4;11757:20;11753:1;11742:9;11738:17;11731:47;11795:131;11921:4;11795:131;:::i;:::-;11787:139;;11514:419;;;:::o;11939:222::-;12032:4;12070:2;12059:9;12055:18;12047:26;;12083:71;12151:1;12140:9;12136:17;12127:6;12083:71;:::i;:::-;11939:222;;;;:::o;12167:214::-;12256:4;12294:2;12283:9;12279:18;12271:26;;12307:67;12371:1;12360:9;12356:17;12347:6;12307:67;:::i;:::-;12167:214;;;;:::o;12468:99::-;12520:6;12554:5;12548:12;12538:22;;12468:99;;;:::o;12573:169::-;12657:11;12691:6;12686:3;12679:19;12731:4;12726:3;12722:14;12707:29;;12573:169;;;;:::o;12748:305::-;12788:3;12807:20;12825:1;12807:20;:::i;:::-;12802:25;;12841:20;12859:1;12841:20;:::i;:::-;12836:25;;12995:1;12927:66;12923:74;12920:1;12917:81;12914:107;;;13001:18;;:::i;:::-;12914:107;13045:1;13042;13038:9;13031:16;;12748:305;;;;:::o;13059:185::-;13099:1;13116:20;13134:1;13116:20;:::i;:::-;13111:25;;13150:20;13168:1;13150:20;:::i;:::-;13145:25;;13189:1;13179:35;;13194:18;;:::i;:::-;13179:35;13236:1;13233;13229:9;13224:14;;13059:185;;;;:::o;13250:348::-;13290:7;13313:20;13331:1;13313:20;:::i;:::-;13308:25;;13347:20;13365:1;13347:20;:::i;:::-;13342:25;;13535:1;13467:66;13463:74;13460:1;13457:81;13452:1;13445:9;13438:17;13434:105;13431:131;;;13542:18;;:::i;:::-;13431:131;13590:1;13587;13583:9;13572:20;;13250:348;;;;:::o;13604:191::-;13644:4;13664:20;13682:1;13664:20;:::i;:::-;13659:25;;13698:20;13716:1;13698:20;:::i;:::-;13693:25;;13737:1;13734;13731:8;13728:34;;;13742:18;;:::i;:::-;13728:34;13787:1;13784;13780:9;13772:17;;13604:191;;;;:::o;13801:96::-;13838:7;13867:24;13885:5;13867:24;:::i;:::-;13856:35;;13801:96;;;:::o;13903:90::-;13937:7;13980:5;13973:13;13966:21;13955:32;;13903:90;;;:::o;13999:126::-;14036:7;14076:42;14069:5;14065:54;14054:65;;13999:126;;;:::o;14131:77::-;14168:7;14197:5;14186:16;;14131:77;;;:::o;14214:86::-;14249:7;14289:4;14282:5;14278:16;14267:27;;14214:86;;;:::o;14306:142::-;14372:9;14405:37;14436:5;14405:37;:::i;:::-;14392:50;;14306:142;;;:::o;14454:126::-;14504:9;14537:37;14568:5;14537:37;:::i;:::-;14524:50;;14454:126;;;:::o;14586:113::-;14636:9;14669:24;14687:5;14669:24;:::i;:::-;14656:37;;14586:113;;;:::o;14705:307::-;14773:1;14783:113;14797:6;14794:1;14791:13;14783:113;;;14882:1;14877:3;14873:11;14867:18;14863:1;14858:3;14854:11;14847:39;14819:2;14816:1;14812:10;14807:15;;14783:113;;;14914:6;14911:1;14908:13;14905:101;;;14994:1;14985:6;14980:3;14976:16;14969:27;14905:101;14754:258;14705:307;;;:::o;15018:320::-;15062:6;15099:1;15093:4;15089:12;15079:22;;15146:1;15140:4;15136:12;15167:18;15157:81;;15223:4;15215:6;15211:17;15201:27;;15157:81;15285:2;15277:6;15274:14;15254:18;15251:38;15248:84;;;15304:18;;:::i;:::-;15248:84;15069:269;15018:320;;;:::o;15344:180::-;15392:77;15389:1;15382:88;15489:4;15486:1;15479:15;15513:4;15510:1;15503:15;15530:180;15578:77;15575:1;15568:88;15675:4;15672:1;15665:15;15699:4;15696:1;15689:15;15716:180;15764:77;15761:1;15754:88;15861:4;15858:1;15851:15;15885:4;15882:1;15875:15;16025:117;16134:1;16131;16124:12;16148:102;16189:6;16240:2;16236:7;16231:2;16224:5;16220:14;16216:28;16206:38;;16148:102;;;:::o;16256:222::-;16396:34;16392:1;16384:6;16380:14;16373:58;16465:5;16460:2;16452:6;16448:15;16441:30;16256:222;:::o;16484:221::-;16624:34;16620:1;16612:6;16608:14;16601:58;16693:4;16688:2;16680:6;16676:15;16669:29;16484:221;:::o;16711:179::-;16851:31;16847:1;16839:6;16835:14;16828:55;16711:179;:::o;16896:225::-;17036:34;17032:1;17024:6;17020:14;17013:58;17105:8;17100:2;17092:6;17088:15;17081:33;16896:225;:::o;17127:224::-;17267:34;17263:1;17255:6;17251:14;17244:58;17336:7;17331:2;17323:6;17319:15;17312:32;17127:224;:::o;17357:223::-;17497:34;17493:1;17485:6;17481:14;17474:58;17566:6;17561:2;17553:6;17549:15;17542:31;17357:223;:::o;17586:164::-;17726:16;17722:1;17714:6;17710:14;17703:40;17586:164;:::o;17756:224::-;17896:34;17892:1;17884:6;17880:14;17873:58;17965:7;17960:2;17952:6;17948:15;17941:32;17756:224;:::o;17986:181::-;18126:33;18122:1;18114:6;18110:14;18103:57;17986:181;:::o;18173:122::-;18246:24;18264:5;18246:24;:::i;:::-;18239:5;18236:35;18226:63;;18285:1;18282;18275:12;18226:63;18173:122;:::o;18301:::-;18374:24;18392:5;18374:24;:::i;:::-;18367:5;18364:35;18354:63;;18413:1;18410;18403:12;18354:63;18301:122;:::o
Swarm Source
ipfs://19b0563c2b9d5dafa884bb0af285690ae8ac841d9e420e8eab11ec7948a94854
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.