Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 207 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 21408673 | 50 days ago | IN | 0 ETH | 0.0004795 | ||||
Transfer | 21401218 | 51 days ago | IN | 0 ETH | 0.00044653 | ||||
Transfer | 21401217 | 51 days ago | IN | 0 ETH | 0.00044653 | ||||
Transfer | 21401197 | 51 days ago | IN | 0 ETH | 0.00043177 | ||||
Transfer | 21401192 | 51 days ago | IN | 0 ETH | 0.00042849 | ||||
Transfer | 21401177 | 51 days ago | IN | 0 ETH | 0.00041934 | ||||
Transfer | 21401162 | 51 days ago | IN | 0 ETH | 0.00044702 | ||||
Transfer | 21401157 | 51 days ago | IN | 0 ETH | 0.00044702 | ||||
Transfer | 21401127 | 51 days ago | IN | 0 ETH | 0.00042431 | ||||
Transfer | 21401118 | 51 days ago | IN | 0 ETH | 0.00041766 | ||||
Transfer | 21401117 | 51 days ago | IN | 0 ETH | 0.00041766 | ||||
Transfer | 21401072 | 51 days ago | IN | 0 ETH | 0.00077541 | ||||
Transfer | 21307538 | 64 days ago | IN | 0 ETH | 0.0004388 | ||||
Transfer | 21307391 | 64 days ago | IN | 0 ETH | 0.00044855 | ||||
Transfer | 21307386 | 64 days ago | IN | 0 ETH | 0.00044855 | ||||
Transfer | 21307382 | 64 days ago | IN | 0 ETH | 0.00044855 | ||||
Transfer | 21307381 | 64 days ago | IN | 0 ETH | 0.00049286 | ||||
Transfer | 21307366 | 64 days ago | IN | 0 ETH | 0.00049286 | ||||
Transfer | 21307346 | 64 days ago | IN | 0 ETH | 0.00042113 | ||||
Transfer | 21307186 | 64 days ago | IN | 0 ETH | 0.00061415 | ||||
Transfer | 20965277 | 112 days ago | IN | 0 ETH | 0.00186505 | ||||
Transfer | 20895597 | 122 days ago | IN | 0 ETH | 0.00028427 | ||||
Transfer | 19429897 | 327 days ago | IN | 0 ETH | 0.00176142 | ||||
Transfer | 19425312 | 327 days ago | IN | 0 ETH | 0.00365083 | ||||
Transfer | 19425312 | 327 days ago | IN | 0 ETH | 0.00365083 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GREENETH
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != -1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract GREENETH is Ownable, ERC20 { using SafeMath for uint256; using SafeMathInt for int256; bool public enableWhitel; mapping(address => bool) public whitelists; constructor() ERC20("GREENETH", "GRE") { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH()); _approve(address(this), address(_router), ~uint256(0)); _approve(msg.sender, address(_router), ~uint256(0)); _mint(msg.sender, 1000000000000 * 10**18); enableWhitel = false; whitelists[msg.sender] = true; whitelists[address(this)] = true; whitelists[address(_router)] = true; whitelists[_pair] = true; } function _transfer(address from, address to, uint256 amount) override internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(enableWhitel && owner() != from && owner() != to) { require(whitelists[from]==true && whitelists[to]==true, "whitelist"); } super._transfer(from, to, amount); } function settwhite(address accounts, bool _iswhitelisting) external onlyOwner { whitelists[accounts] = _iswhitelisting; } function settwhitelist(address[] memory accounts, bool _iswhitelisting) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { whitelists[accounts[i]] = _iswhitelisting; } } function setEnableWhitel(bool isEnableWhitel) external onlyOwner { enableWhitel = isEnableWhitel; } function multiTransfer(address[] calldata addresses, uint256[] calldata amounts) external { require(addresses.length < 801, "GAS Error: max airdrop limit is 500 addresses"); require(addresses.length == amounts.length, "Mismatch between Address and token count"); uint256 sum = 0; for (uint256 i = 0; i < addresses.length; i++) { sum = sum + amounts[i]; } require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet"); for (uint256 i = 0; i < addresses.length; i++) { _transfer(msg.sender, addresses[i], amounts[i]); } } function multiTransfer_fixed(address[] calldata addresses, uint256 amount) external { require(addresses.length < 2001, "GAS Error: max airdrop limit is 2000 addresses"); uint256 sum = amount.mul(addresses.length); require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet"); for (uint256 i = 0; i < addresses.length; i++) { _transfer(msg.sender, addresses[i], amount); } } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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}. * * 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 default value returned by this function, unless * it's 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; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":[],"name":"enableWhitel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnableWhitel","type":"bool"}],"name":"setEnableWhitel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accounts","type":"address"},{"internalType":"bool","name":"_iswhitelisting","type":"bool"}],"name":"settwhite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"_iswhitelisting","type":"bool"}],"name":"settwhitelist","outputs":[],"stateMutability":"nonpayable","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600881526020016708ea48a8a9c8aa8960c31b8152506040518060400160405280600381526020016247524560e81b81525062000069620000636200029160201b60201c565b62000295565b60046200007783826200057f565b5060056200008682826200057f565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010991906200064b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000157573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017d91906200064b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f191906200064b565b9050620002023083600019620002e5565b620002113383600019620002e5565b6200022a336c0c9f2c9cd04674edea4000000062000411565b6006805460ff199081169091553360009081526007602052604080822080548416600190811790915530835281832080548516821790556001600160a01b0395861683528183208054851682179055939094168152929092208054909216179055620006a5565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166200034d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003b05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000344565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620004695760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000344565b80600360008282546200047d91906200067d565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200050657607f821691505b6020821081036200052757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004d657600081815260208120601f850160051c81016020861015620005565750805b601f850160051c820191505b81811015620005775782815560010162000562565b505050505050565b81516001600160401b038111156200059b576200059b620004db565b620005b381620005ac8454620004f1565b846200052d565b602080601f831160018114620005eb5760008415620005d25750858301515b600019600386901b1c1916600185901b17855562000577565b600085815260208120601f198616915b828110156200061c57888601518255948401946001909101908401620005fb565b50858210156200063b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200065e57600080fd5b81516001600160a01b03811681146200067657600080fd5b9392505050565b808201808211156200069f57634e487b7160e01b600052601160045260246000fd5b92915050565b6113aa80620006b56000396000f3fe60806040526004361061012e5760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d714610344578063a9059cbb14610364578063abdd77dd14610384578063d59093f6146103a4578063dd62ed3e146103c4578063f2fde38b146103e457600080fd5b806370a08231146102a2578063715018a6146102d85780638da5cb5b146102ed57806395c457291461031557806395d89b411461032f57600080fd5b80631e89d545116100f25780631e89d5451461020657806323b872dd14610226578063313ce567146102465780633950935114610262578063632e54421461028257600080fd5b806306fdde031461013a578063081fee1e14610165578063095ea7b31461018757806318160ddd146101b75780631e7be210146101d657600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061014f610404565b60405161015c9190610edf565b60405180910390f35b34801561017157600080fd5b50610185610180366004610f59565b610496565b005b34801561019357600080fd5b506101a76101a2366004610f8c565b6104c9565b604051901515815260200161015c565b3480156101c357600080fd5b506003545b60405190815260200161015c565b3480156101e257600080fd5b506101a76101f1366004610fb6565b60076020526000908152604090205460ff1681565b34801561021257600080fd5b5061018561022136600461101d565b6104e3565b34801561023257600080fd5b506101a7610241366004611089565b6106c1565b34801561025257600080fd5b506040516012815260200161015c565b34801561026e57600080fd5b506101a761027d366004610f8c565b6106e5565b34801561028e57600080fd5b5061018561029d3660046110c5565b610707565b3480156102ae57600080fd5b506101c86102bd366004610fb6565b6001600160a01b031660009081526001602052604090205490565b3480156102e457600080fd5b50610185610832565b3480156102f957600080fd5b506000546040516001600160a01b03909116815260200161015c565b34801561032157600080fd5b506006546101a79060ff1681565b34801561033b57600080fd5b5061014f610846565b34801561035057600080fd5b506101a761035f366004610f8c565b610855565b34801561037057600080fd5b506101a761037f366004610f8c565b6108d0565b34801561039057600080fd5b5061018561039f366004611127565b6108de565b3480156103b057600080fd5b506101856103bf3660046111fe565b610952565b3480156103d057600080fd5b506101c86103df366004611219565b61096d565b3480156103f057600080fd5b506101856103ff366004610fb6565b610998565b60606004805461041390611243565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90611243565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b61049e610a11565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000336104d7818585610a6b565b60019150505b92915050565b610321831061054f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b8281146105af5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610546565b6000805b848110156105f3578383828181106105cd576105cd61127d565b90506020020135826105df91906112a9565b9150806105eb816112bc565b9150506105b3565b50336000908152600160205260409020548111156106535760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000006044820152606401610546565b60005b848110156106b9576106a7338787848181106106745761067461127d565b90506020020160208101906106899190610fb6565b86868581811061069b5761069b61127d565b90506020020135610b8f565b806106b1816112bc565b915050610656565b505050505050565b6000336106cf858285610cd1565b6106da858585610b8f565b506001949350505050565b6000336104d78185856106f8838361096d565b61070291906112a9565b610a6b565b6107d1821061076f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610546565b600061077b8284610d4b565b336000908152600160205260409020549091508111156107dd5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000006044820152606401610546565b60005b8381101561082b57610819338686848181106107fe576107fe61127d565b90506020020160208101906108139190610fb6565b85610b8f565b80610823816112bc565b9150506107e0565b5050505050565b61083a610a11565b6108446000610d5e565b565b60606005805461041390611243565b60003381610863828661096d565b9050838110156108c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610546565b6106da8286868403610a6b565b6000336104d7818585610b8f565b6108e6610a11565b60005b825181101561094d5781600760008584815181106109095761090961127d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610945816112bc565b9150506108e9565b505050565b61095a610a11565b6006805460ff1916911515919091179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6109a0610a11565b6001600160a01b038116610a055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610546565b610a0e81610d5e565b50565b6000546001600160a01b031633146108445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610546565b6001600160a01b038316610acd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610546565b6001600160a01b038216610b2e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610546565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bb55760405162461bcd60e51b8152600401610546906112d5565b6001600160a01b038216610bdb5760405162461bcd60e51b81526004016105469061131a565b60065460ff168015610c105750826001600160a01b0316610c046000546001600160a01b031690565b6001600160a01b031614155b8015610c3f5750816001600160a01b0316610c336000546001600160a01b031690565b6001600160a01b031614155b15610cc6576001600160a01b03831660009081526007602052604090205460ff1615156001148015610c8e57506001600160a01b03821660009081526007602052604090205460ff1615156001145b610cc65760405162461bcd60e51b81526020600482015260096024820152681dda1a5d195b1a5cdd60ba1b6044820152606401610546565b61094d838383610dae565b6000610cdd848461096d565b90506000198114610d455781811015610d385760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610546565b610d458484848403610a6b565b50505050565b6000610d57828461135d565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316610dd45760405162461bcd60e51b8152600401610546906112d5565b6001600160a01b038216610dfa5760405162461bcd60e51b81526004016105469061131a565b6001600160a01b03831660009081526001602052604090205481811015610e725760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610546565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ed29086815260200190565b60405180910390a3610d45565b600060208083528351808285015260005b81811015610f0c57858101830151858201604001528201610ef0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f4457600080fd5b919050565b80358015158114610f4457600080fd5b60008060408385031215610f6c57600080fd5b610f7583610f2d565b9150610f8360208401610f49565b90509250929050565b60008060408385031215610f9f57600080fd5b610fa883610f2d565b946020939093013593505050565b600060208284031215610fc857600080fd5b610d5782610f2d565b60008083601f840112610fe357600080fd5b50813567ffffffffffffffff811115610ffb57600080fd5b6020830191508360208260051b850101111561101657600080fd5b9250929050565b6000806000806040858703121561103357600080fd5b843567ffffffffffffffff8082111561104b57600080fd5b61105788838901610fd1565b9096509450602087013591508082111561107057600080fd5b5061107d87828801610fd1565b95989497509550505050565b60008060006060848603121561109e57600080fd5b6110a784610f2d565b92506110b560208501610f2d565b9150604084013590509250925092565b6000806000604084860312156110da57600080fd5b833567ffffffffffffffff8111156110f157600080fd5b6110fd86828701610fd1565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561113a57600080fd5b823567ffffffffffffffff8082111561115257600080fd5b818501915085601f83011261116657600080fd5b813560208282111561117a5761117a611111565b8160051b604051601f19603f8301168101818110868211171561119f5761119f611111565b6040529283528183019350848101820192898411156111bd57600080fd5b948201945b838610156111e2576111d386610f2d565b855294820194938201936111c2565b96506111f19050878201610f49565b9450505050509250929050565b60006020828403121561121057600080fd5b610d5782610f49565b6000806040838503121561122c57600080fd5b61123583610f2d565b9150610f8360208401610f2d565b600181811c9082168061125757607f821691505b60208210810361127757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156104dd576104dd611293565b6000600182016112ce576112ce611293565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176104dd576104dd61129356fea26469706673582212200f1441608d8901a34792170e39c320f60a34a901c1329dc780c2c085aa9c052764736f6c63430008120033
Deployed Bytecode
0x60806040526004361061012e5760003560e01c806370a08231116100ab578063a457c2d71161006f578063a457c2d714610344578063a9059cbb14610364578063abdd77dd14610384578063d59093f6146103a4578063dd62ed3e146103c4578063f2fde38b146103e457600080fd5b806370a08231146102a2578063715018a6146102d85780638da5cb5b146102ed57806395c457291461031557806395d89b411461032f57600080fd5b80631e89d545116100f25780631e89d5451461020657806323b872dd14610226578063313ce567146102465780633950935114610262578063632e54421461028257600080fd5b806306fdde031461013a578063081fee1e14610165578063095ea7b31461018757806318160ddd146101b75780631e7be210146101d657600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061014f610404565b60405161015c9190610edf565b60405180910390f35b34801561017157600080fd5b50610185610180366004610f59565b610496565b005b34801561019357600080fd5b506101a76101a2366004610f8c565b6104c9565b604051901515815260200161015c565b3480156101c357600080fd5b506003545b60405190815260200161015c565b3480156101e257600080fd5b506101a76101f1366004610fb6565b60076020526000908152604090205460ff1681565b34801561021257600080fd5b5061018561022136600461101d565b6104e3565b34801561023257600080fd5b506101a7610241366004611089565b6106c1565b34801561025257600080fd5b506040516012815260200161015c565b34801561026e57600080fd5b506101a761027d366004610f8c565b6106e5565b34801561028e57600080fd5b5061018561029d3660046110c5565b610707565b3480156102ae57600080fd5b506101c86102bd366004610fb6565b6001600160a01b031660009081526001602052604090205490565b3480156102e457600080fd5b50610185610832565b3480156102f957600080fd5b506000546040516001600160a01b03909116815260200161015c565b34801561032157600080fd5b506006546101a79060ff1681565b34801561033b57600080fd5b5061014f610846565b34801561035057600080fd5b506101a761035f366004610f8c565b610855565b34801561037057600080fd5b506101a761037f366004610f8c565b6108d0565b34801561039057600080fd5b5061018561039f366004611127565b6108de565b3480156103b057600080fd5b506101856103bf3660046111fe565b610952565b3480156103d057600080fd5b506101c86103df366004611219565b61096d565b3480156103f057600080fd5b506101856103ff366004610fb6565b610998565b60606004805461041390611243565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90611243565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b5050505050905090565b61049e610a11565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000336104d7818585610a6b565b60019150505b92915050565b610321831061054f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b8281146105af5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610546565b6000805b848110156105f3578383828181106105cd576105cd61127d565b90506020020135826105df91906112a9565b9150806105eb816112bc565b9150506105b3565b50336000908152600160205260409020548111156106535760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000006044820152606401610546565b60005b848110156106b9576106a7338787848181106106745761067461127d565b90506020020160208101906106899190610fb6565b86868581811061069b5761069b61127d565b90506020020135610b8f565b806106b1816112bc565b915050610656565b505050505050565b6000336106cf858285610cd1565b6106da858585610b8f565b506001949350505050565b6000336104d78185856106f8838361096d565b61070291906112a9565b610a6b565b6107d1821061076f5760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610546565b600061077b8284610d4b565b336000908152600160205260409020549091508111156107dd5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000006044820152606401610546565b60005b8381101561082b57610819338686848181106107fe576107fe61127d565b90506020020160208101906108139190610fb6565b85610b8f565b80610823816112bc565b9150506107e0565b5050505050565b61083a610a11565b6108446000610d5e565b565b60606005805461041390611243565b60003381610863828661096d565b9050838110156108c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610546565b6106da8286868403610a6b565b6000336104d7818585610b8f565b6108e6610a11565b60005b825181101561094d5781600760008584815181106109095761090961127d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610945816112bc565b9150506108e9565b505050565b61095a610a11565b6006805460ff1916911515919091179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6109a0610a11565b6001600160a01b038116610a055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610546565b610a0e81610d5e565b50565b6000546001600160a01b031633146108445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610546565b6001600160a01b038316610acd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610546565b6001600160a01b038216610b2e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610546565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610bb55760405162461bcd60e51b8152600401610546906112d5565b6001600160a01b038216610bdb5760405162461bcd60e51b81526004016105469061131a565b60065460ff168015610c105750826001600160a01b0316610c046000546001600160a01b031690565b6001600160a01b031614155b8015610c3f5750816001600160a01b0316610c336000546001600160a01b031690565b6001600160a01b031614155b15610cc6576001600160a01b03831660009081526007602052604090205460ff1615156001148015610c8e57506001600160a01b03821660009081526007602052604090205460ff1615156001145b610cc65760405162461bcd60e51b81526020600482015260096024820152681dda1a5d195b1a5cdd60ba1b6044820152606401610546565b61094d838383610dae565b6000610cdd848461096d565b90506000198114610d455781811015610d385760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610546565b610d458484848403610a6b565b50505050565b6000610d57828461135d565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316610dd45760405162461bcd60e51b8152600401610546906112d5565b6001600160a01b038216610dfa5760405162461bcd60e51b81526004016105469061131a565b6001600160a01b03831660009081526001602052604090205481811015610e725760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610546565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ed29086815260200190565b60405180910390a3610d45565b600060208083528351808285015260005b81811015610f0c57858101830151858201604001528201610ef0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f4457600080fd5b919050565b80358015158114610f4457600080fd5b60008060408385031215610f6c57600080fd5b610f7583610f2d565b9150610f8360208401610f49565b90509250929050565b60008060408385031215610f9f57600080fd5b610fa883610f2d565b946020939093013593505050565b600060208284031215610fc857600080fd5b610d5782610f2d565b60008083601f840112610fe357600080fd5b50813567ffffffffffffffff811115610ffb57600080fd5b6020830191508360208260051b850101111561101657600080fd5b9250929050565b6000806000806040858703121561103357600080fd5b843567ffffffffffffffff8082111561104b57600080fd5b61105788838901610fd1565b9096509450602087013591508082111561107057600080fd5b5061107d87828801610fd1565b95989497509550505050565b60008060006060848603121561109e57600080fd5b6110a784610f2d565b92506110b560208501610f2d565b9150604084013590509250925092565b6000806000604084860312156110da57600080fd5b833567ffffffffffffffff8111156110f157600080fd5b6110fd86828701610fd1565b909790965060209590950135949350505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561113a57600080fd5b823567ffffffffffffffff8082111561115257600080fd5b818501915085601f83011261116657600080fd5b813560208282111561117a5761117a611111565b8160051b604051601f19603f8301168101818110868211171561119f5761119f611111565b6040529283528183019350848101820192898411156111bd57600080fd5b948201945b838610156111e2576111d386610f2d565b855294820194938201936111c2565b96506111f19050878201610f49565b9450505050509250929050565b60006020828403121561121057600080fd5b610d5782610f49565b6000806040838503121561122c57600080fd5b61123583610f2d565b9150610f8360208401610f2d565b600181811c9082168061125757607f821691505b60208210810361127757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156104dd576104dd611293565b6000600182016112ce576112ce611293565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176104dd576104dd61129356fea26469706673582212200f1441608d8901a34792170e39c320f60a34a901c1329dc780c2c085aa9c052764736f6c63430008120033
Deployed Bytecode Sourcemap
1552:2906:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2829:135:6;;;;;;;;;;-1:-1:-1;2829:135:6;;;;;:::i;:::-;;:::i;:::-;;4444:197:1;;;;;;;;;;-1:-1:-1;4444:197:1;;;;;:::i;:::-;;:::i;:::-;;;1593:14:7;;1586:22;1568:41;;1556:2;1541:18;4444:197:1;1428:187:7;3255:106:1;;;;;;;;;;-1:-1:-1;3342:12:1;;3255:106;;;1766:25:7;;;1754:2;1739:18;3255:106:1;1620:177:7;1696:42:6;;;;;;;;;;-1:-1:-1;1696:42:6;;;;;:::i;:::-;;;;;;;;;;;;;;;;3325:633;;;;;;;;;;-1:-1:-1;3325:633:6;;;;;:::i;:::-;;:::i;5203:256:1:-;;;;;;;;;;-1:-1:-1;5203:256:1;;;;;:::i;:::-;;:::i;3104:91::-;;;;;;;;;;-1:-1:-1;3104:91:1;;3186:2;3618:36:7;;3606:2;3591:18;3104:91:1;3476:184:7;5854:234:1;;;;;;;;;;-1:-1:-1;5854:234:1;;;;;:::i;:::-;;:::i;3966:448:6:-;;;;;;;;;;-1:-1:-1;3966:448:6;;;;;:::i;:::-;;:::i;3419:125:1:-;;;;;;;;;;-1:-1:-1;3419:125:1;;;;;:::i;:::-;-1:-1:-1;;;;;3519:18:1;3493:7;3519:18;;;:9;:18;;;;;;;3419:125;1824:101:0;;;;;;;;;;;;;:::i;1201:85::-;;;;;;;;;;-1:-1:-1;1247:7:0;1273:6;1201:85;;-1:-1:-1;;;;;1273:6:0;;;4321:51:7;;4309:2;4294:18;1201:85:0;4175:203:7;1665:24:6;;;;;;;;;;-1:-1:-1;1665:24:6;;;;;;;;2369:102:1;;;;;;;;;;;;;:::i;6575:427::-;;;;;;;;;;-1:-1:-1;6575:427:1;;;;;:::i;:::-;;:::i;3740:189::-;;;;;;;;;;-1:-1:-1;3740:189:1;;;;;:::i;:::-;;:::i;2972:223:6:-;;;;;;;;;;-1:-1:-1;2972:223:6;;;;;:::i;:::-;;:::i;3203:114::-;;;;;;;;;;-1:-1:-1;3203:114:6;;;;;:::i;:::-;;:::i;3987:149:1:-;;;;;;;;;;-1:-1:-1;3987:149:1;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;;;;;-1:-1:-1;2074:198:0;;;;;:::i;:::-;;:::i;2158:98:1:-;2212:13;2244:5;2237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2158:98;:::o;2829:135:6:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;2918:20:6;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:38;;-1:-1:-1;;2918:38:6::1;::::0;::::1;;::::0;;;::::1;::::0;;2829:135::o;4444:197:1:-;4527:4;719:10:4;4581:32:1;719:10:4;4597:7:1;4606:6;4581:8;:32::i;:::-;4630:4;4623:11;;;4444:197;;;;;:::o;3325:633:6:-;3453:3;3434:22;;3426:80;;;;-1:-1:-1;;;3426:80:6;;6748:2:7;3426:80:6;;;6730:21:7;6787:2;6767:18;;;6760:30;6826:34;6806:18;;;6799:62;-1:-1:-1;;;6877:18:7;;;6870:43;6930:19;;3426:80:6;;;;;;;;;3525:34;;;3517:87;;;;-1:-1:-1;;;3517:87:6;;7162:2:7;3517:87:6;;;7144:21:7;7201:2;7181:18;;;7174:30;7240:34;7220:18;;;7213:62;-1:-1:-1;;;7291:18:7;;;7284:38;7339:19;;3517:87:6;6960:404:7;3517:87:6;3617:11;3648:9;3643:96;3663:20;;;3643:96;;;3717:7;;3725:1;3717:10;;;;;;;:::i;:::-;;;;;;;3711:3;:16;;;;:::i;:::-;3705:22;-1:-1:-1;3685:3:6;;;;:::i;:::-;;;;3643:96;;;-1:-1:-1;3769:10:6;3493:7:1;3519:18;;;:9;:18;;;;;;3784:3:6;-1:-1:-1;3759:28:6;3751:68;;;;-1:-1:-1;;;3751:68:6;;8105:2:7;3751:68:6;;;8087:21:7;8144:2;8124:18;;;8117:30;8183:29;8163:18;;;8156:57;8230:18;;3751:68:6;7903:351:7;3751:68:6;3835:9;3830:121;3850:20;;;3830:121;;;3892:47;3902:10;3914:9;;3924:1;3914:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3928:7;;3936:1;3928:10;;;;;;;:::i;:::-;;;;;;;3892:9;:47::i;:::-;3872:3;;;;:::i;:::-;;;;3830:121;;;;3415:543;3325:633;;;;:::o;5203:256:1:-;5300:4;719:10:4;5356:38:1;5372:4;719:10:4;5387:6:1;5356:15;:38::i;:::-;5404:27;5414:4;5420:2;5424:6;5404:9;:27::i;:::-;-1:-1:-1;5448:4:1;;5203:256;-1:-1:-1;;;;5203:256:1:o;5854:234::-;5942:4;719:10:4;5996:64:1;719:10:4;6012:7:1;6049:10;6021:25;719:10:4;6012:7:1;6021:9;:25::i;:::-;:38;;;;:::i;:::-;5996:8;:64::i;3966:448:6:-;4088:4;4069:23;;4061:82;;;;-1:-1:-1;;;4061:82:6;;8461:2:7;4061:82:6;;;8443:21:7;8500:2;8480:18;;;8473:30;8539:34;8519:18;;;8512:62;-1:-1:-1;;;8590:18:7;;;8583:44;8644:19;;4061:82:6;8259:410:7;4061:82:6;4156:11;4170:28;:6;4181:9;4170:10;:28::i;:::-;4227:10;3493:7:1;3519:18;;;:9;:18;;;;;;4156:42:6;;-1:-1:-1;4156:42:6;-1:-1:-1;4217:28:6;4209:68;;;;-1:-1:-1;;;4209:68:6;;8105:2:7;4209:68:6;;;8087:21:7;8144:2;8124:18;;;8117:30;8183:29;8163:18;;;8156:57;8230:18;;4209:68:6;7903:351:7;4209:68:6;4295:9;4290:117;4310:20;;;4290:117;;;4352:43;4362:10;4374:9;;4384:1;4374:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4388:6;4352:9;:43::i;:::-;4332:3;;;;:::i;:::-;;;;4290:117;;;;4050:364;3966:448;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;2369:102:1:-;2425:13;2457:7;2450:14;;;;;:::i;6575:427::-;6668:4;719:10:4;6668:4:1;6749:25;719:10:4;6766:7:1;6749:9;:25::i;:::-;6722:52;;6812:15;6792:16;:35;;6784:85;;;;-1:-1:-1;;;6784:85:1;;8876:2:7;6784:85:1;;;8858:21:7;8915:2;8895:18;;;8888:30;8954:34;8934:18;;;8927:62;-1:-1:-1;;;9005:18:7;;;8998:35;9050:19;;6784:85:1;8674:401:7;6784:85:1;6903:60;6912:5;6919:7;6947:15;6928:16;:34;6903:8;:60::i;3740:189::-;3819:4;719:10:4;3873:28:1;719:10:4;3890:2:1;3894:6;3873:9;:28::i;2972:223:6:-;1094:13:0;:11;:13::i;:::-;3079:9:6::1;3074:114;3098:8;:15;3094:1;:19;3074:114;;;3161:15;3135:10;:23;3146:8;3155:1;3146:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3135:23:6::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;3135:23:6;:41;;-1:-1:-1;;3135:41:6::1;::::0;::::1;;::::0;;;::::1;::::0;;3115:3;::::1;::::0;::::1;:::i;:::-;;;;3074:114;;;;2972:223:::0;;:::o;3203:114::-;1094:13:0;:11;:13::i;:::-;3280:12:6::1;:29:::0;;-1:-1:-1;;3280:29:6::1;::::0;::::1;;::::0;;;::::1;::::0;;3203:114::o;3987:149:1:-;-1:-1:-1;;;;;4102:18:1;;;4076:7;4102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3987:149::o;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;9282:2:7;2154:73:0::1;::::0;::::1;9264:21:7::0;9321:2;9301:18;;;9294:30;9360:34;9340:18;;;9333:62;-1:-1:-1;;;9411:18:7;;;9404:36;9457:19;;2154:73:0::1;9080:402:7::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:4;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;9689:2:7;1414:68:0;;;9671:21:7;;;9708:18;;;9701:30;9767:34;9747:18;;;9740:62;9819:18;;1414:68:0;9487:356:7;10457:340:1;-1:-1:-1;;;;;10558:19:1;;10550:68;;;;-1:-1:-1;;;10550:68:1;;10050:2:7;10550:68:1;;;10032:21:7;10089:2;10069:18;;;10062:30;10128:34;10108:18;;;10101:62;-1:-1:-1;;;10179:18:7;;;10172:34;10223:19;;10550:68:1;9848:400:7;10550:68:1;-1:-1:-1;;;;;10636:21:1;;10628:68;;;;-1:-1:-1;;;10628:68:1;;10455:2:7;10628:68:1;;;10437:21:7;10494:2;10474:18;;;10467:30;10533:34;10513:18;;;10506:62;-1:-1:-1;;;10584:18:7;;;10577:32;10626:19;;10628:68:1;10253:398:7;10628:68:1;-1:-1:-1;;;;;10707:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10758:32;;1766:25:7;;;10758:32:1;;1739:18:7;10758:32:1;;;;;;;10457:340;;;:::o;2364:455:6:-;-1:-1:-1;;;;;2470:18:6;;2462:68;;;;-1:-1:-1;;;2462:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;2549:16:6;;2541:64;;;;-1:-1:-1;;;2541:64:6;;;;;;;:::i;:::-;2621:12;;;;:31;;;;;2648:4;-1:-1:-1;;;;;2637:15:6;:7;1247::0;1273:6;-1:-1:-1;;;;;1273:6:0;;1201:85;2637:7:6;-1:-1:-1;;;;;2637:15:6;;;2621:31;:48;;;;;2667:2;-1:-1:-1;;;;;2656:13:6;:7;1247::0;1273:6;-1:-1:-1;;;;;1273:6:0;;1201:85;2656:7:6;-1:-1:-1;;;;;2656:13:6;;;2621:48;2618:148;;;-1:-1:-1;;;;;2694:16:6;;;;;;:10;:16;;;;;;;;:22;;:16;:22;:46;;;;-1:-1:-1;;;;;;2720:14:6;;;;;;:10;:14;;;;;;;;:20;;:14;:20;2694:46;2686:68;;;;-1:-1:-1;;;2686:68:6;;11668:2:7;2686:68:6;;;11650:21:7;11707:1;11687:18;;;11680:29;-1:-1:-1;;;11725:18:7;;;11718:39;11774:18;;2686:68:6;11466:332:7;2686:68:6;2778:33;2794:4;2800:2;2804:6;2778:15;:33::i;11078:411:1:-;11178:24;11205:25;11215:5;11222:7;11205:9;:25::i;:::-;11178:52;;-1:-1:-1;;11244:16:1;:37;11240:243;;11325:6;11305:16;:26;;11297:68;;;;-1:-1:-1;;;11297:68:1;;12005:2:7;11297:68:1;;;11987:21:7;12044:2;12024:18;;;12017:30;12083:31;12063:18;;;12056:59;12132:18;;11297:68:1;11803:353:7;11297:68:1;11407:51;11416:5;11423:7;11451:6;11432:16;:25;11407:8;:51::i;:::-;11168:321;11078:411;;;:::o;3465:96:5:-;3523:7;3549:5;3553:1;3549;:5;:::i;:::-;3542:12;3465:96;-1:-1:-1;;;3465:96:5:o;2426:187:0:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;7456:788:1:-;-1:-1:-1;;;;;7552:18:1;;7544:68;;;;-1:-1:-1;;;7544:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7630:16:1;;7622:64;;;;-1:-1:-1;;;7622:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;7768:15:1;;7746:19;7768:15;;;:9;:15;;;;;;7801:21;;;;7793:72;;;;-1:-1:-1;;;7793:72:1;;12536:2:7;7793:72:1;;;12518:21:7;12575:2;12555:18;;;12548:30;12614:34;12594:18;;;12587:62;-1:-1:-1;;;12665:18:7;;;12658:36;12711:19;;7793:72:1;12334:402:7;7793:72:1;-1:-1:-1;;;;;7899:15:1;;;;;;;:9;:15;;;;;;7917:20;;;7899:38;;8114:13;;;;;;;;;;:23;;;;;;8163:26;;;;;;7931:6;1766:25:7;;1754:2;1739:18;;1620:177;8163:26:1;;;;;;;;8200:37;2972:223:6;14:548:7;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:7;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:160::-;810:20;;866:13;;859:21;849:32;;839:60;;895:1;892;885:12;910:254;975:6;983;1036:2;1024:9;1015:7;1011:23;1007:32;1004:52;;;1052:1;1049;1042:12;1004:52;1075:29;1094:9;1075:29;:::i;:::-;1065:39;;1123:35;1154:2;1143:9;1139:18;1123:35;:::i;:::-;1113:45;;910:254;;;;;:::o;1169:::-;1237:6;1245;1298:2;1286:9;1277:7;1273:23;1269:32;1266:52;;;1314:1;1311;1304:12;1266:52;1337:29;1356:9;1337:29;:::i;:::-;1327:39;1413:2;1398:18;;;;1385:32;;-1:-1:-1;;;1169:254:7:o;1802:186::-;1861:6;1914:2;1902:9;1893:7;1889:23;1885:32;1882:52;;;1930:1;1927;1920:12;1882:52;1953:29;1972:9;1953:29;:::i;1993:367::-;2056:8;2066:6;2120:3;2113:4;2105:6;2101:17;2097:27;2087:55;;2138:1;2135;2128:12;2087:55;-1:-1:-1;2161:20:7;;2204:18;2193:30;;2190:50;;;2236:1;2233;2226:12;2190:50;2273:4;2265:6;2261:17;2249:29;;2333:3;2326:4;2316:6;2313:1;2309:14;2301:6;2297:27;2293:38;2290:47;2287:67;;;2350:1;2347;2340:12;2287:67;1993:367;;;;;:::o;2365:773::-;2487:6;2495;2503;2511;2564:2;2552:9;2543:7;2539:23;2535:32;2532:52;;;2580:1;2577;2570:12;2532:52;2620:9;2607:23;2649:18;2690:2;2682:6;2679:14;2676:34;;;2706:1;2703;2696:12;2676:34;2745:70;2807:7;2798:6;2787:9;2783:22;2745:70;:::i;:::-;2834:8;;-1:-1:-1;2719:96:7;-1:-1:-1;2922:2:7;2907:18;;2894:32;;-1:-1:-1;2938:16:7;;;2935:36;;;2967:1;2964;2957:12;2935:36;;3006:72;3070:7;3059:8;3048:9;3044:24;3006:72;:::i;:::-;2365:773;;;;-1:-1:-1;3097:8:7;-1:-1:-1;;;;2365:773:7:o;3143:328::-;3220:6;3228;3236;3289:2;3277:9;3268:7;3264:23;3260:32;3257:52;;;3305:1;3302;3295:12;3257:52;3328:29;3347:9;3328:29;:::i;:::-;3318:39;;3376:38;3410:2;3399:9;3395:18;3376:38;:::i;:::-;3366:48;;3461:2;3450:9;3446:18;3433:32;3423:42;;3143:328;;;;;:::o;3665:505::-;3760:6;3768;3776;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3885:9;3872:23;3918:18;3910:6;3907:30;3904:50;;;3950:1;3947;3940:12;3904:50;3989:70;4051:7;4042:6;4031:9;4027:22;3989:70;:::i;:::-;4078:8;;3963:96;;-1:-1:-1;4160:2:7;4145:18;;;;4132:32;;3665:505;-1:-1:-1;;;;3665:505:7:o;4383:127::-;4444:10;4439:3;4435:20;4432:1;4425:31;4475:4;4472:1;4465:15;4499:4;4496:1;4489:15;4515:1191;4605:6;4613;4666:2;4654:9;4645:7;4641:23;4637:32;4634:52;;;4682:1;4679;4672:12;4634:52;4722:9;4709:23;4751:18;4792:2;4784:6;4781:14;4778:34;;;4808:1;4805;4798:12;4778:34;4846:6;4835:9;4831:22;4821:32;;4891:7;4884:4;4880:2;4876:13;4872:27;4862:55;;4913:1;4910;4903:12;4862:55;4949:2;4936:16;4971:4;4994:2;4990;4987:10;4984:36;;;5000:18;;:::i;:::-;5046:2;5043:1;5039:10;5078:2;5072:9;5141:2;5137:7;5132:2;5128;5124:11;5120:25;5112:6;5108:38;5196:6;5184:10;5181:22;5176:2;5164:10;5161:18;5158:46;5155:72;;;5207:18;;:::i;:::-;5243:2;5236:22;5293:18;;;5327:15;;;;-1:-1:-1;5369:11:7;;;5365:20;;;5397:19;;;5394:39;;;5429:1;5426;5419:12;5394:39;5453:11;;;;5473:148;5489:6;5484:3;5481:15;5473:148;;;5555:23;5574:3;5555:23;:::i;:::-;5543:36;;5506:12;;;;5599;;;;5473:148;;;5640:6;-1:-1:-1;5665:35:7;;-1:-1:-1;5681:18:7;;;5665:35;:::i;:::-;5655:45;;;;;;4515:1191;;;;;:::o;5711:180::-;5767:6;5820:2;5808:9;5799:7;5795:23;5791:32;5788:52;;;5836:1;5833;5826:12;5788:52;5859:26;5875:9;5859:26;:::i;5896:260::-;5964:6;5972;6025:2;6013:9;6004:7;6000:23;5996:32;5993:52;;;6041:1;6038;6031:12;5993:52;6064:29;6083:9;6064:29;:::i;:::-;6054:39;;6112:38;6146:2;6135:9;6131:18;6112:38;:::i;6161:380::-;6240:1;6236:12;;;;6283;;;6304:61;;6358:4;6350:6;6346:17;6336:27;;6304:61;6411:2;6403:6;6400:14;6380:18;6377:38;6374:161;;6457:10;6452:3;6448:20;6445:1;6438:31;6492:4;6489:1;6482:15;6520:4;6517:1;6510:15;6374:161;;6161:380;;;:::o;7369:127::-;7430:10;7425:3;7421:20;7418:1;7411:31;7461:4;7458:1;7451:15;7485:4;7482:1;7475:15;7501:127;7562:10;7557:3;7553:20;7550:1;7543:31;7593:4;7590:1;7583:15;7617:4;7614:1;7607:15;7633:125;7698:9;;;7719:10;;;7716:36;;;7732:18;;:::i;7763:135::-;7802:3;7823:17;;;7820:43;;7843:18;;:::i;:::-;-1:-1:-1;7890:1:7;7879:13;;7763:135::o;10656:401::-;10858:2;10840:21;;;10897:2;10877:18;;;10870:30;10936:34;10931:2;10916:18;;10909:62;-1:-1:-1;;;11002:2:7;10987:18;;10980:35;11047:3;11032:19;;10656:401::o;11062:399::-;11264:2;11246:21;;;11303:2;11283:18;;;11276:30;11342:34;11337:2;11322:18;;11315:62;-1:-1:-1;;;11408:2:7;11393:18;;11386:33;11451:3;11436:19;;11062:399::o;12161:168::-;12234:9;;;12265;;12282:15;;;12276:22;;12262:37;12252:71;;12303:18;;:::i
Swarm Source
ipfs://0f1441608d8901a34792170e39c320f60a34a901c1329dc780c2c085aa9c0527
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
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.