Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 291 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 20691200 | 549 days ago | IN | 0 ETH | 0.00012439 | ||||
| Approve | 20125267 | 628 days ago | IN | 0 ETH | 0.00008315 | ||||
| Approve | 19335047 | 739 days ago | IN | 0 ETH | 0.00164128 | ||||
| Approve | 19177428 | 761 days ago | IN | 0 ETH | 0.00454503 | ||||
| Approve | 19177428 | 761 days ago | IN | 0 ETH | 0.00482416 | ||||
| Approve | 19177417 | 761 days ago | IN | 0 ETH | 0.00394419 | ||||
| Approve | 19177416 | 761 days ago | IN | 0 ETH | 0.00356211 | ||||
| Approve | 19177415 | 761 days ago | IN | 0 ETH | 0.00375489 | ||||
| Approve | 19177415 | 761 days ago | IN | 0 ETH | 0.00398784 | ||||
| Approve | 19177414 | 761 days ago | IN | 0 ETH | 0.00363218 | ||||
| Approve | 19177413 | 761 days ago | IN | 0 ETH | 0.00326197 | ||||
| Approve | 19177413 | 761 days ago | IN | 0 ETH | 0.00339408 | ||||
| Approve | 19177413 | 761 days ago | IN | 0 ETH | 0.00339408 | ||||
| Approve | 19177413 | 761 days ago | IN | 0 ETH | 0.00339408 | ||||
| Approve | 19177412 | 761 days ago | IN | 0 ETH | 0.00355607 | ||||
| Approve | 19177412 | 761 days ago | IN | 0 ETH | 0.00355607 | ||||
| Approve | 19177412 | 761 days ago | IN | 0 ETH | 0.00378901 | ||||
| Approve | 19177412 | 761 days ago | IN | 0 ETH | 0.00458102 | ||||
| Approve | 19177411 | 761 days ago | IN | 0 ETH | 0.00310721 | ||||
| Approve | 19177411 | 761 days ago | IN | 0 ETH | 0.00317709 | ||||
| Approve | 19177411 | 761 days ago | IN | 0 ETH | 0.00317709 | ||||
| Approve | 19177411 | 761 days ago | IN | 0 ETH | 0.00317709 | ||||
| Approve | 19177411 | 761 days ago | IN | 0 ETH | 0.00327027 | ||||
| Approve | 19177410 | 761 days ago | IN | 0 ETH | 0.0064135 | ||||
| Approve | 19069069 | 776 days ago | IN | 0 ETH | 0.00078091 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 19177751 | 761 days ago | 0.00168784 ETH | ||||
| Transfer | 19177751 | 761 days ago | 0.00168784 ETH | ||||
| Transfer | 19177439 | 761 days ago | 0.00495992 ETH | ||||
| Transfer | 19177439 | 761 days ago | 0.00495992 ETH | ||||
| Transfer | 19177421 | 761 days ago | 0.00339176 ETH | ||||
| Transfer | 19177421 | 761 days ago | 0.00339176 ETH | ||||
| Transfer | 19177421 | 761 days ago | 0.00306072 ETH | ||||
| Transfer | 19177421 | 761 days ago | 0.00306072 ETH | ||||
| Transfer | 19177420 | 761 days ago | 0.01186128 ETH | ||||
| Transfer | 19177420 | 761 days ago | 0.01186128 ETH | ||||
| Transfer | 19177416 | 761 days ago | 0.01451861 ETH | ||||
| Transfer | 19177416 | 761 days ago | 0.01451861 ETH | ||||
| Transfer | 19177414 | 761 days ago | 0.01351346 ETH | ||||
| Transfer | 19177414 | 761 days ago | 0.01351346 ETH | ||||
| Transfer | 19177413 | 761 days ago | 0.26335349 ETH | ||||
| Transfer | 19177413 | 761 days ago | 0.26335349 ETH | ||||
| Transfer | 18751758 | 821 days ago | 0.00851103 ETH | ||||
| Transfer | 18751758 | 821 days ago | 0.00851103 ETH | ||||
| Transfer | 18699499 | 828 days ago | 0.0085313 ETH | ||||
| Transfer | 18699499 | 828 days ago | 0.0085313 ETH | ||||
| Transfer | 18695378 | 829 days ago | 0.01097756 ETH | ||||
| Transfer | 18695378 | 829 days ago | 0.01097756 ETH | ||||
| Transfer | 18694798 | 829 days ago | 0.02041195 ETH | ||||
| Transfer | 18694798 | 829 days ago | 0.02041195 ETH | ||||
| Transfer | 18645259 | 836 days ago | 0.04808692 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Superman
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-07-27
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
/**
* @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;
}
}
/**
* @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 anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_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);
}
}
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);
}
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);
}
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 {}
}
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;
}
}
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,
bytes32 s) external;
event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
uint256 amount1Out, address indexed to);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1,
uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired,
uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin,
uint256 amountETHMin, address to, uint256 deadline)
external payable returns (uint256 amountToken, uint256 amountETH,
uint256 liquidity);
function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
uint256 amountBMin, address to, uint256 deadline)
external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin,
uint256 amountETHMin, address to, uint256 deadline)
external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
uint256 amountAMin, uint256 amountBMin, address to,
uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s)
external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
uint256 amountETHMin, address to, uint256 deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s)
external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
address to, uint256 deadline)
external returns (uint256[] memory amounts);
function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
address to, uint256 deadline)
external returns (uint256[] memory amounts);
function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
uint256 deadline)
external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
address to, uint256 deadline)
external returns (uint256[] memory amounts);
function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
address to, uint256 deadline)
external returns (uint256[] memory amounts);
function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
uint256 deadline)
external payable returns (uint256[] memory amounts);
function quote(uint256 amountA, uint256 reserveA, uint256 reserveB)
external pure returns (uint256 amountB);
function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
external pure returns (uint256 amountOut);
function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut)
external pure returns (uint256 amountIn);
function getAmountsOut(uint256 amountIn, address[] calldata path)
external view returns (uint256[] memory amounts);
function getAmountsIn(uint256 amountOut, address[] calldata path)
external view returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline)
external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
address[] calldata path, address to, uint256 deadline) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,
address[] calldata path, address to, uint256 deadline) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin,
address[] calldata path, address to, uint256 deadline) external;
}
contract Superman is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
address public DEAD = 0x000000000000000000000000000000000000dEaD;
bool private swapping;
bool public tradingEnabled = false;
uint256 internal sellAmount = 1;
uint256 internal buyAmount = 1;
address payable public marketingWallet;
uint256 public swapTokensAtAmount;
uint256 public sellMarketingFees;
uint256 public buyMarketingFees;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public automatedMarketMakerPairs;
mapping(address => bool) private canTransferBeforeTradingIsEnabled;
event SetPreSaleWallet(address wallet);
event updateMarketingWallet(address wallet);
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
event TradingEnabled();
event Airdrop(address holder, uint256 amount);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event SendDividends(uint256 opAmount, bool success);
constructor() ERC20("Superman", "$SUP") {
marketingWallet = payable(0x4A7Ccd75a4cE2F7BD39547e33a7E6584f5542557);
address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
buyMarketingFees = 2;
sellMarketingFees = 2;
uniswapV2Router = IUniswapV2Router02(router);
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this), uniswapV2Router.WETH());
_setAutomatedMarketMakerPair(uniswapV2Pair, true);
_isExcludedFromFees[address(this)] = true;
_isExcludedFromFees[msg.sender] = true;
_isExcludedFromFees[marketingWallet] = true;
// TOTAL SUPPLY IS SET HERE
uint _totalSupply = 300_000_000 ether;
_mint(owner(), _totalSupply); // only time internal mint function is ever called is to create supply
swapTokensAtAmount = _totalSupply / 1000;
canTransferBeforeTradingIsEnabled[owner()] = true;
canTransferBeforeTradingIsEnabled[address(this)] = true;
}
// to allow the contract to receive eth back from the swap
receive() external payable {}
// for enable trading cannot stop trading once enabled
function enableTrading() external onlyOwner {
require(!tradingEnabled);
tradingEnabled = true;
emit TradingEnabled();
}
// for updating the marketing wallet
function setMarketingWallet(address wallet) external onlyOwner {
_isExcludedFromFees[wallet] = true;
marketingWallet = payable(wallet);
emit updateMarketingWallet(wallet);
}
// use for pre sale wallet, adds all exclusions to it
function setPresaleWallet(address wallet) external onlyOwner {
canTransferBeforeTradingIsEnabled[wallet] = true;
_isExcludedFromFees[wallet] = true;
emit SetPreSaleWallet(wallet);
}
// to exclude or include a wallet from fees
function setExcludeFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
// to recover bnb sent to contract by mistake
function Sweep() external onlyOwner {
uint256 amountBNB = address(this).balance;
payable(msg.sender).transfer(amountBNB);
}
// for setting the token amount to trigger the swap
function setSwapTriggerAmount(uint256 amount) public onlyOwner {
swapTokensAtAmount = amount * (10**18);
}
// for setting additional pairs for taxes to be taken
function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
_setAutomatedMarketMakerPair(pair, value);
}
// sets the pairs
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
// for checking if a wallet is excluded from fees
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
// controls all token movement
function _transfer(address from, address to, uint256 amount) internal override {
require(from != address(0), "IERC20: transfer from the zero address");
require(to != address(0), "IERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
uint256 marketingFees;
if (!canTransferBeforeTradingIsEnabled[from]) {
require(tradingEnabled, "Trading has not yet been enabled");
}
if (!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
bool isSelling = automatedMarketMakerPairs[to];
bool isBuying = automatedMarketMakerPairs[from];
if (!isBuying && !isSelling) {
super._transfer(from, to, amount);
return;
}
else if (isSelling) {
marketingFees = sellMarketingFees;
}
else if (isBuying) {
marketingFees = buyMarketingFees;
}
uint256 totalFees = marketingFees;
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (canSwap && isSelling && marketingFees > 0) {
swapping = true;
uint256 swapBalance = balanceOf(address(this));
swapAndSendDividends(swapBalance);
buyAmount = 1;
sellAmount = 1;
swapping = false;
}
uint256 fees = amount.mul(totalFees).div(100);
amount = amount.sub(fees);
if (isSelling) {
sellAmount = sellAmount.add(fees);
} else {
buyAmount = buyAmount.add(fees);
}
super._transfer(from, address(this), fees);
}
super._transfer(from, to, amount);
}
// swaps collected tokens for eth for taxes
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
// manual function to trigger the swap of collected tokens from taxes
function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
tokens = tokens * (10**18);
uint256 totalAmount = buyAmount.add(sellAmount);
uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);
swapAndSendDividends(tokens);
buyAmount = buyAmount.sub(fromBuy);
sellAmount = sellAmount.sub(fromSell);
}
// sends the eth out to tax wallet
function swapAndSendDividends(uint256 tokens) private {
if (tokens == 0) {
return;
}
swapTokensForEth(tokens);
bool success = true;
uint256 _completeFees = sellMarketingFees + buyMarketingFees;
uint256 feePortions;
if (_completeFees > 0) {
feePortions = address(this).balance.div(_completeFees);
}
uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
if (marketingPayout > 0) {
(success, ) = address(marketingWallet).call{value: marketingPayout}("");
}
emit SendDividends(
marketingPayout,
success
);
}
// for airdrops to investors limited to 200 wallets at a time
function airdropToWallets(
address[] memory airdropWallets,
uint256[] memory amount
) external onlyOwner {
require(airdropWallets.length == amount.length, "Arrays must be the same length");
require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
for (uint256 i = 0; i < airdropWallets.length; i++) {
address wallet = airdropWallets[i];
uint256 airdropAmount = amount[i] * (10**18);
super._transfer(msg.sender, wallet, airdropAmount);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405260088054600161ff0160a01b03191661dead17905560016009819055600a553480156200003057600080fd5b506040518060400160405280600881526020016729bab832b936b0b760c11b815250604051806040016040528060048152602001630245355560e41b8152508160039081620000809190620005ab565b5060046200008f8282620005ab565b505050620000ac620000a66200037060201b60201c565b62000374565b600b8054734a7ccd75a4ce2f7bd39547e33a7e6584f55425576001600160a01b0319918216179091556002600e819055600d5560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156200013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000161919062000677565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000677565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e919062000677565b600780546001600160a01b0319166001600160a01b039290921691821790556200028a906001620003c6565b306000908152600f60205260408082208054600160ff1991821681179092553384528284208054821683179055600b546001600160a01b0316845291909220805490911690911790556af8277896582678ac000000620002fd620002f66005546001600160a01b031690565b826200041a565b6200030b6103e882620006a9565b600c55600160116000620003276005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601190925290208054909116600117905550620006f49050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620004755760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620004899190620006cc565b90915550506001600160a01b03821660009081526020819052604081208054839290620004b8908490620006cc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200053257607f821691505b6020821081036200055357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200050257600081815260208120601f850160051c81016020861015620005825750805b601f850160051c820191505b81811015620005a3578281556001016200058e565b505050505050565b81516001600160401b03811115620005c757620005c762000507565b620005df81620005d884546200051d565b8462000559565b602080601f831160018114620006175760008415620005fe5750858301515b600019600386901b1c1916600185901b178555620005a3565b600085815260208120601f198616915b82811015620006485788860151825594840194600190910190840162000627565b5085821015620006675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200068a57600080fd5b81516001600160a01b0381168114620006a257600080fd5b9392505050565b600082620006c757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620006ee57634e487b7160e01b600052601160045260246000fd5b92915050565b611b6780620007046000396000f3fe6080604052600436106101f25760003560e01c80635eee4bae1161010d57806395d89b41116100a0578063b62496f51161006f578063b62496f514610598578063d07a091c146105c8578063dd62ed3e146105e8578063e2f4560514610608578063f2fde38b1461061e57600080fd5b806395d89b41146105235780639a7a23d614610538578063a457c2d714610558578063a9059cbb1461057857600080fd5b806375f0a874116100dc57806375f0a874146104ba5780638a8c523c146104da5780638da5cb5b146104ef57806395451c291461050d57600080fd5b80635eee4bae1461043a5780637088fb7f1461045a57806370a082311461046f578063715018a6146104a557600080fd5b806323b872dd116101855780634ada218b116101545780634ada218b146103aa5780634fbee193146103cb5780635124f874146104045780635d098b381461041a57600080fd5b806323b872dd1461032e578063313ce5671461034e578063395093511461036a57806349bd5a5e1461038a57600080fd5b8063095ea7b3116101c1578063095ea7b31461029f5780631694505e146102cf57806318160ddd146102ef5780632307b4411461030e57600080fd5b806303fd2a45146101fe57806305ca5f081461023b57806306fdde031461025d57806308dfe8a51461027f57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060085461021e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024757600080fd5b5061025b6102563660046116bb565b61063e565b005b34801561026957600080fd5b506102726106e4565b60405161023291906116d4565b34801561028b57600080fd5b5061025b61029a366004611737565b610776565b3480156102ab57600080fd5b506102bf6102ba366004611775565b6107dd565b6040519015158152602001610232565b3480156102db57600080fd5b5060065461021e906001600160a01b031681565b3480156102fb57600080fd5b506002545b604051908152602001610232565b34801561031a57600080fd5b5061025b610329366004611877565b6107f7565b34801561033a57600080fd5b506102bf610349366004611939565b610932565b34801561035a57600080fd5b5060405160128152602001610232565b34801561037657600080fd5b506102bf610385366004611775565b610956565b34801561039657600080fd5b5060075461021e906001600160a01b031681565b3480156103b657600080fd5b506008546102bf90600160a81b900460ff1681565b3480156103d757600080fd5b506102bf6103e636600461197a565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561041057600080fd5b50610300600e5481565b34801561042657600080fd5b5061025b61043536600461197a565b610978565b34801561044657600080fd5b5061025b6104553660046116bb565b6109ed565b34801561046657600080fd5b5061025b610a0d565b34801561047b57600080fd5b5061030061048a36600461197a565b6001600160a01b031660009081526020819052604090205490565b3480156104b157600080fd5b5061025b610a48565b3480156104c657600080fd5b50600b5461021e906001600160a01b031681565b3480156104e657600080fd5b5061025b610a5c565b3480156104fb57600080fd5b506005546001600160a01b031661021e565b34801561051957600080fd5b50610300600d5481565b34801561052f57600080fd5b50610272610ab9565b34801561054457600080fd5b5061025b610553366004611737565b610ac8565b34801561056457600080fd5b506102bf610573366004611775565b610ada565b34801561058457600080fd5b506102bf610593366004611775565b610b55565b3480156105a457600080fd5b506102bf6105b336600461197a565b60106020526000908152604090205460ff1681565b3480156105d457600080fd5b5061025b6105e336600461197a565b610b63565b3480156105f457600080fd5b50610300610603366004611997565b610bd3565b34801561061457600080fd5b50610300600c5481565b34801561062a57600080fd5b5061025b61063936600461197a565b610bfe565b610646610c77565b61065881670de0b6b3a76400006119db565b90506000610673600954600a54610cd190919063ffffffff16565b9050600061069682610690600a5486610ce490919063ffffffff16565b90610cf0565b905060006106b38361069060095487610ce490919063ffffffff16565b90506106be84610cfc565b600a546106cb9083610e02565b600a556009546106db9082610e02565b60095550505050565b6060600380546106f3906119f2565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906119f2565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b61077e610c77565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000336107eb818585610e0e565b60019150505b92915050565b6107ff610c77565b80518251146108555760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064015b60405180910390fd5b60c8825111156108b25760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b606482015260840161084c565b60005b825181101561092d5760008382815181106108d2576108d2611a2c565b6020026020010151905060008383815181106108f0576108f0611a2c565b6020026020010151670de0b6b3a764000061090b91906119db565b9050610918338383610f32565b5050808061092590611a42565b9150506108b5565b505050565b600033610940858285611102565b61094b858585611176565b506001949350505050565b6000336107eb8185856109698383610bd3565b6109739190611a5b565b610e0e565b610980610c77565b6001600160a01b0381166000818152600f6020908152604091829020805460ff19166001179055600b80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6109f5610c77565b610a0781670de0b6b3a76400006119db565b600c5550565b610a15610c77565b6040514790339082156108fc029083906000818181858888f19350505050158015610a44573d6000803e3d6000fd5b5050565b610a50610c77565b610a5a60006114c3565b565b610a64610c77565b600854600160a81b900460ff1615610a7b57600080fd5b6008805460ff60a81b1916600160a81b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6060600480546106f3906119f2565b610ad0610c77565b610a448282611515565b60003381610ae88286610bd3565b905083811015610b485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161084c565b61094b8286868403610e0e565b6000336107eb818585611176565b610b6b610c77565b6001600160a01b03811660008181526011602090815260408083208054600160ff199182168117909255600f84529382902080549094161790925590519182527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c591016109e2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610c06610c77565b6001600160a01b038116610c6b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b610c74816114c3565b50565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084c565b6000610cdd8284611a5b565b9392505050565b6000610cdd82846119db565b6000610cdd8284611a6e565b80600003610d075750565b610d1081611569565b600e54600d54600191600091610d269190611a5b565b905060008115610d3d57610d3a4783610cf0565b90505b600081610d57600d54600e54610cd190919063ffffffff16565b610d6191906119db565b90508015610dc157600b546040516001600160a01b03909116908290600081818185875af1925050503d8060008114610db6576040519150601f19603f3d011682016040523d82523d6000602084013e610dbb565b606091505b50909450505b6040805182815285151560208201527f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9910160405180910390a15050505050565b6000610cdd8284611a90565b6001600160a01b038316610e705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b6001600160a01b038216610ed15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084c565b6001600160a01b038216610ff85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084c565b6001600160a01b038316600090815260208190526040902054818110156110705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161084c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906110a7908490611a5b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110f391815260200190565b60405180910390a35b50505050565b600061110e8484610bd3565b905060001981146110fc57818110156111695760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161084c565b6110fc8484848403610e0e565b6001600160a01b0383166111db5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b6001600160a01b03821661123d5760405162461bcd60e51b8152602060048201526024808201527f4945524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b6000811161129f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084c565b6001600160a01b03831660009081526011602052604081205460ff1661131857600854600160a81b900460ff166113185760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564604482015260640161084c565b600854600160a01b900460ff1615801561134b57506001600160a01b0384166000908152600f602052604090205460ff16155b801561137057506001600160a01b0383166000908152600f602052604090205460ff16155b156114b8576001600160a01b0380841660009081526010602052604080822054928716825290205460ff9182169116801580156113ab575081155b156113c3576113bb868686610f32565b505050505050565b81156113d357600d5492506113df565b80156113df57600e5492505b30600090815260208190526040902054600c54849190811080159081906114035750845b801561140f5750600086115b1561145b576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061144281610cfc565b506001600a8190556009556008805460ff60a01b191690555b600061146c60646106908a87610ce4565b90506114788882610e02565b975085156114955760095461148d9082610cd1565b6009556114a6565b600a546114a29082610cd1565b600a555b6114b18a3083610f32565b5050505050505b6110fc848484610f32565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061159e5761159e611a2c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161b9190611aa3565b8160018151811061162e5761162e611a2c565b6001600160a01b0392831660209182029290920101526006546116549130911684610e0e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061168d908590600090869030904290600401611ac0565b600060405180830381600087803b1580156116a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b6000602082840312156116cd57600080fd5b5035919050565b600060208083528351808285015260005b81811015611701578581018301518582016040015282016116e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c7457600080fd5b6000806040838503121561174a57600080fd5b823561175581611722565b91506020830135801515811461176a57600080fd5b809150509250929050565b6000806040838503121561178857600080fd5b823561179381611722565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117e0576117e06117a1565b604052919050565b600067ffffffffffffffff821115611802576118026117a1565b5060051b60200190565b600082601f83011261181d57600080fd5b8135602061183261182d836117e8565b6117b7565b82815260059290921b8401810191818101908684111561185157600080fd5b8286015b8481101561186c5780358352918301918301611855565b509695505050505050565b6000806040838503121561188a57600080fd5b823567ffffffffffffffff808211156118a257600080fd5b818501915085601f8301126118b657600080fd5b813560206118c661182d836117e8565b82815260059290921b840181019181810190898411156118e557600080fd5b948201945b8386101561190c5785356118fd81611722565b825294820194908201906118ea565b9650508601359250508082111561192257600080fd5b5061192f8582860161180c565b9150509250929050565b60008060006060848603121561194e57600080fd5b833561195981611722565b9250602084013561196981611722565b929592945050506040919091013590565b60006020828403121561198c57600080fd5b8135610cdd81611722565b600080604083850312156119aa57600080fd5b82356119b581611722565b9150602083013561176a81611722565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107f1576107f16119c5565b600181811c90821680611a0657607f821691505b602082108103611a2657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611a5457611a546119c5565b5060010190565b808201808211156107f1576107f16119c5565b600082611a8b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107f1576107f16119c5565b600060208284031215611ab557600080fd5b8151610cdd81611722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b105784516001600160a01b031683529383019391830191600101611aeb565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220856103a62b0fc776a35ee3bad47d6510654b9afcc55d4d98c4eeabaf4a398c7364736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c80635eee4bae1161010d57806395d89b41116100a0578063b62496f51161006f578063b62496f514610598578063d07a091c146105c8578063dd62ed3e146105e8578063e2f4560514610608578063f2fde38b1461061e57600080fd5b806395d89b41146105235780639a7a23d614610538578063a457c2d714610558578063a9059cbb1461057857600080fd5b806375f0a874116100dc57806375f0a874146104ba5780638a8c523c146104da5780638da5cb5b146104ef57806395451c291461050d57600080fd5b80635eee4bae1461043a5780637088fb7f1461045a57806370a082311461046f578063715018a6146104a557600080fd5b806323b872dd116101855780634ada218b116101545780634ada218b146103aa5780634fbee193146103cb5780635124f874146104045780635d098b381461041a57600080fd5b806323b872dd1461032e578063313ce5671461034e578063395093511461036a57806349bd5a5e1461038a57600080fd5b8063095ea7b3116101c1578063095ea7b31461029f5780631694505e146102cf57806318160ddd146102ef5780632307b4411461030e57600080fd5b806303fd2a45146101fe57806305ca5f081461023b57806306fdde031461025d57806308dfe8a51461027f57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060085461021e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024757600080fd5b5061025b6102563660046116bb565b61063e565b005b34801561026957600080fd5b506102726106e4565b60405161023291906116d4565b34801561028b57600080fd5b5061025b61029a366004611737565b610776565b3480156102ab57600080fd5b506102bf6102ba366004611775565b6107dd565b6040519015158152602001610232565b3480156102db57600080fd5b5060065461021e906001600160a01b031681565b3480156102fb57600080fd5b506002545b604051908152602001610232565b34801561031a57600080fd5b5061025b610329366004611877565b6107f7565b34801561033a57600080fd5b506102bf610349366004611939565b610932565b34801561035a57600080fd5b5060405160128152602001610232565b34801561037657600080fd5b506102bf610385366004611775565b610956565b34801561039657600080fd5b5060075461021e906001600160a01b031681565b3480156103b657600080fd5b506008546102bf90600160a81b900460ff1681565b3480156103d757600080fd5b506102bf6103e636600461197a565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561041057600080fd5b50610300600e5481565b34801561042657600080fd5b5061025b61043536600461197a565b610978565b34801561044657600080fd5b5061025b6104553660046116bb565b6109ed565b34801561046657600080fd5b5061025b610a0d565b34801561047b57600080fd5b5061030061048a36600461197a565b6001600160a01b031660009081526020819052604090205490565b3480156104b157600080fd5b5061025b610a48565b3480156104c657600080fd5b50600b5461021e906001600160a01b031681565b3480156104e657600080fd5b5061025b610a5c565b3480156104fb57600080fd5b506005546001600160a01b031661021e565b34801561051957600080fd5b50610300600d5481565b34801561052f57600080fd5b50610272610ab9565b34801561054457600080fd5b5061025b610553366004611737565b610ac8565b34801561056457600080fd5b506102bf610573366004611775565b610ada565b34801561058457600080fd5b506102bf610593366004611775565b610b55565b3480156105a457600080fd5b506102bf6105b336600461197a565b60106020526000908152604090205460ff1681565b3480156105d457600080fd5b5061025b6105e336600461197a565b610b63565b3480156105f457600080fd5b50610300610603366004611997565b610bd3565b34801561061457600080fd5b50610300600c5481565b34801561062a57600080fd5b5061025b61063936600461197a565b610bfe565b610646610c77565b61065881670de0b6b3a76400006119db565b90506000610673600954600a54610cd190919063ffffffff16565b9050600061069682610690600a5486610ce490919063ffffffff16565b90610cf0565b905060006106b38361069060095487610ce490919063ffffffff16565b90506106be84610cfc565b600a546106cb9083610e02565b600a556009546106db9082610e02565b60095550505050565b6060600380546106f3906119f2565b80601f016020809104026020016040519081016040528092919081815260200182805461071f906119f2565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b5050505050905090565b61077e610c77565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000336107eb818585610e0e565b60019150505b92915050565b6107ff610c77565b80518251146108555760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064015b60405180910390fd5b60c8825111156108b25760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b606482015260840161084c565b60005b825181101561092d5760008382815181106108d2576108d2611a2c565b6020026020010151905060008383815181106108f0576108f0611a2c565b6020026020010151670de0b6b3a764000061090b91906119db565b9050610918338383610f32565b5050808061092590611a42565b9150506108b5565b505050565b600033610940858285611102565b61094b858585611176565b506001949350505050565b6000336107eb8185856109698383610bd3565b6109739190611a5b565b610e0e565b610980610c77565b6001600160a01b0381166000818152600f6020908152604091829020805460ff19166001179055600b80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443391015b60405180910390a150565b6109f5610c77565b610a0781670de0b6b3a76400006119db565b600c5550565b610a15610c77565b6040514790339082156108fc029083906000818181858888f19350505050158015610a44573d6000803e3d6000fd5b5050565b610a50610c77565b610a5a60006114c3565b565b610a64610c77565b600854600160a81b900460ff1615610a7b57600080fd5b6008805460ff60a81b1916600160a81b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6060600480546106f3906119f2565b610ad0610c77565b610a448282611515565b60003381610ae88286610bd3565b905083811015610b485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161084c565b61094b8286868403610e0e565b6000336107eb818585611176565b610b6b610c77565b6001600160a01b03811660008181526011602090815260408083208054600160ff199182168117909255600f84529382902080549094161790925590519182527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c591016109e2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610c06610c77565b6001600160a01b038116610c6b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b610c74816114c3565b50565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161084c565b6000610cdd8284611a5b565b9392505050565b6000610cdd82846119db565b6000610cdd8284611a6e565b80600003610d075750565b610d1081611569565b600e54600d54600191600091610d269190611a5b565b905060008115610d3d57610d3a4783610cf0565b90505b600081610d57600d54600e54610cd190919063ffffffff16565b610d6191906119db565b90508015610dc157600b546040516001600160a01b03909116908290600081818185875af1925050503d8060008114610db6576040519150601f19603f3d011682016040523d82523d6000602084013e610dbb565b606091505b50909450505b6040805182815285151560208201527f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9910160405180910390a15050505050565b6000610cdd8284611a90565b6001600160a01b038316610e705760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b6001600160a01b038216610ed15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084c565b6001600160a01b038216610ff85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084c565b6001600160a01b038316600090815260208190526040902054818110156110705760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161084c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906110a7908490611a5b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110f391815260200190565b60405180910390a35b50505050565b600061110e8484610bd3565b905060001981146110fc57818110156111695760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161084c565b6110fc8484848403610e0e565b6001600160a01b0383166111db5760405162461bcd60e51b815260206004820152602660248201527f4945524332303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161084c565b6001600160a01b03821661123d5760405162461bcd60e51b8152602060048201526024808201527f4945524332303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161084c565b6000811161129f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084c565b6001600160a01b03831660009081526011602052604081205460ff1661131857600854600160a81b900460ff166113185760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564604482015260640161084c565b600854600160a01b900460ff1615801561134b57506001600160a01b0384166000908152600f602052604090205460ff16155b801561137057506001600160a01b0383166000908152600f602052604090205460ff16155b156114b8576001600160a01b0380841660009081526010602052604080822054928716825290205460ff9182169116801580156113ab575081155b156113c3576113bb868686610f32565b505050505050565b81156113d357600d5492506113df565b80156113df57600e5492505b30600090815260208190526040902054600c54849190811080159081906114035750845b801561140f5750600086115b1561145b576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054905061144281610cfc565b506001600a8190556009556008805460ff60a01b191690555b600061146c60646106908a87610ce4565b90506114788882610e02565b975085156114955760095461148d9082610cd1565b6009556114a6565b600a546114a29082610cd1565b600a555b6114b18a3083610f32565b5050505050505b6110fc848484610f32565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061159e5761159e611a2c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156115f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161b9190611aa3565b8160018151811061162e5761162e611a2c565b6001600160a01b0392831660209182029290920101526006546116549130911684610e0e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061168d908590600090869030904290600401611ac0565b600060405180830381600087803b1580156116a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b6000602082840312156116cd57600080fd5b5035919050565b600060208083528351808285015260005b81811015611701578581018301518582016040015282016116e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c7457600080fd5b6000806040838503121561174a57600080fd5b823561175581611722565b91506020830135801515811461176a57600080fd5b809150509250929050565b6000806040838503121561178857600080fd5b823561179381611722565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117e0576117e06117a1565b604052919050565b600067ffffffffffffffff821115611802576118026117a1565b5060051b60200190565b600082601f83011261181d57600080fd5b8135602061183261182d836117e8565b6117b7565b82815260059290921b8401810191818101908684111561185157600080fd5b8286015b8481101561186c5780358352918301918301611855565b509695505050505050565b6000806040838503121561188a57600080fd5b823567ffffffffffffffff808211156118a257600080fd5b818501915085601f8301126118b657600080fd5b813560206118c661182d836117e8565b82815260059290921b840181019181810190898411156118e557600080fd5b948201945b8386101561190c5785356118fd81611722565b825294820194908201906118ea565b9650508601359250508082111561192257600080fd5b5061192f8582860161180c565b9150509250929050565b60008060006060848603121561194e57600080fd5b833561195981611722565b9250602084013561196981611722565b929592945050506040919091013590565b60006020828403121561198c57600080fd5b8135610cdd81611722565b600080604083850312156119aa57600080fd5b82356119b581611722565b9150602083013561176a81611722565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107f1576107f16119c5565b600181811c90821680611a0657607f821691505b602082108103611a2657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201611a5457611a546119c5565b5060010190565b808201808211156107f1576107f16119c5565b600082611a8b57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156107f1576107f16119c5565b600060208284031215611ab557600080fd5b8151610cdd81611722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611b105784516001600160a01b031683529383019391830191600101611aeb565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220856103a62b0fc776a35ee3bad47d6510654b9afcc55d4d98c4eeabaf4a398c7364736f6c63430008110033
Deployed Bytecode Sourcemap
32320:9054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32484:64;;;;;;;;;;-1:-1:-1;32484:64:0;;;;-1:-1:-1;;;;;32484:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;32484:64:0;;;;;;;;39497:443;;;;;;;;;;-1:-1:-1;39497:443:0;;;;;:::i;:::-;;:::i;:::-;;7201:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35535:181::-;;;;;;;;;;-1:-1:-1;35535:181:0;;;;;:::i;:::-;;:::i;9552:201::-;;;;;;;;;;-1:-1:-1;9552:201:0;;;;;:::i;:::-;;:::i;:::-;;;2002:14:1;;1995:22;1977:41;;1965:2;1950:18;9552:201:0;1837:187:1;32399:41:0;;;;;;;;;;-1:-1:-1;32399:41:0;;;;-1:-1:-1;;;;;32399:41:0;;;8321:108;;;;;;;;;;-1:-1:-1;8409:12:0;;8321:108;;;2410:25:1;;;2398:2;2383:18;8321:108:0;2264:177:1;40810:561:0;;;;;;;;;;-1:-1:-1;40810:561:0;;;;;:::i;:::-;;:::i;10333:295::-;;;;;;;;;;-1:-1:-1;10333:295:0;;;;;:::i;:::-;;:::i;8163:93::-;;;;;;;;;;-1:-1:-1;8163:93:0;;8246:2;5536:36:1;;5524:2;5509:18;8163:93:0;5394:184:1;11037:238:0;;;;;;;;;;-1:-1:-1;11037:238:0;;;;;:::i;:::-;;:::i;32449:28::-;;;;;;;;;;-1:-1:-1;32449:28:0;;;;-1:-1:-1;;;;;32449:28:0;;;32583:34;;;;;;;;;;-1:-1:-1;32583:34:0;;;;-1:-1:-1;;;32583:34:0;;;;;;36595:126;;;;;;;;;;-1:-1:-1;36595:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36685:28:0;36661:4;36685:28;;;:19;:28;;;;;;;;;36595:126;32832:31;;;;;;;;;;;;;;;;34984:205;;;;;;;;;;-1:-1:-1;34984:205:0;;;;;:::i;:::-;;:::i;35986:120::-;;;;;;;;;;-1:-1:-1;35986:120:0;;;;;:::i;:::-;;:::i;35775:146::-;;;;;;;;;;;;;:::i;8492:127::-;;;;;;;;;;-1:-1:-1;8492:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8593:18:0;8566:7;8593:18;;;;;;;;;;;;8492:127;2539:103;;;;;;;;;;;;;:::i;32703:38::-;;;;;;;;;;-1:-1:-1;32703:38:0;;;;-1:-1:-1;;;;;32703:38:0;;;34779:151;;;;;;;;;;;;;:::i;1891:87::-;;;;;;;;;;-1:-1:-1;1964:6:0;;-1:-1:-1;;;;;1964:6:0;1891:87;;32793:32;;;;;;;;;;;;;;;;7420:104;;;;;;;;;;;;;:::i;36173:140::-;;;;;;;;;;-1:-1:-1;36173:140:0;;;;;:::i;:::-;;:::i;11778:436::-;;;;;;;;;;-1:-1:-1;11778:436:0;;;;;:::i;:::-;;:::i;8825:193::-;;;;;;;;;;-1:-1:-1;8825:193:0;;;;;:::i;:::-;;:::i;32931:57::-;;;;;;;;;;-1:-1:-1;32931:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35256:213;;;;;;;;;;-1:-1:-1;35256:213:0;;;;;:::i;:::-;;:::i;9081:151::-;;;;;;;;;;-1:-1:-1;9081:151:0;;;;;:::i;:::-;;:::i;32753:33::-;;;;;;;;;;;;;;;;2797:201;;;;;;;;;;-1:-1:-1;2797:201:0;;;;;:::i;:::-;;:::i;39497:443::-;1777:13;:11;:13::i;:::-;39585:17:::1;:6:::0;39595::::1;39585:17;:::i;:::-;39576:26;;39613:19;39635:25;39649:10;;39635:9;;:13;;:25;;;;:::i;:::-;39613:47;;39671:15;39689:38;39715:11;39689:21;39700:9;;39689:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;39671:56;;39738:16;39757:39;39784:11;39757:22;39768:10;;39757:6;:10;;:22;;;;:::i;:39::-;39738:58;;39809:28;39830:6;39809:20;:28::i;:::-;39862:9;::::0;:22:::1;::::0;39876:7;39862:13:::1;:22::i;:::-;39850:9;:34:::0;39908:10:::1;::::0;:24:::1;::::0;39923:8;39908:14:::1;:24::i;:::-;39895:10;:37:::0;-1:-1:-1;;;;39497:443:0:o;7201:100::-;7255:13;7288:5;7281:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7201:100;:::o;35535:181::-;1777:13;:11;:13::i;:::-;-1:-1:-1;;;;;35619:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;35619:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;35674:34;;1977:41:1;;;35674:34:0::1;::::0;1950:18:1;35674:34:0::1;;;;;;;35535:181:::0;;:::o;9552:201::-;9635:4;680:10;9691:32;680:10;9707:7;9716:6;9691:8;:32::i;:::-;9741:4;9734:11;;;9552:201;;;;;:::o;40810:561::-;1777:13;:11;:13::i;:::-;40982:6:::1;:13;40957:14;:21;:38;40949:81;;;::::0;-1:-1:-1;;;40949:81:0;;7344:2:1;40949:81:0::1;::::0;::::1;7326:21:1::0;7383:2;7363:18;;;7356:30;7422:32;7402:18;;;7395:60;7472:18;;40949:81:0::1;;;;;;;;;41074:3;41049:14;:21;:28;;41041:75;;;::::0;-1:-1:-1;;;41041:75:0;;7703:2:1;41041:75:0::1;::::0;::::1;7685:21:1::0;7742:2;7722:18;;;7715:30;7781:34;7761:18;;;7754:62;-1:-1:-1;;;7832:18:1;;;7825:32;7874:19;;41041:75:0::1;7501:398:1::0;41041:75:0::1;41132:9;41127:237;41151:14;:21;41147:1;:25;41127:237;;;41194:14;41211;41226:1;41211:17;;;;;;;;:::i;:::-;;;;;;;41194:34;;41243:21;41267:6;41274:1;41267:9;;;;;;;;:::i;:::-;;;;;;;41280:6;41267:20;;;;:::i;:::-;41243:44;;41302:50;41318:10;41330:6;41338:13;41302:15;:50::i;:::-;41179:185;;41174:3;;;;;:::i;:::-;;;;41127:237;;;;40810:561:::0;;:::o;10333:295::-;10464:4;680:10;10522:38;10538:4;680:10;10553:6;10522:15;:38::i;:::-;10571:27;10581:4;10587:2;10591:6;10571:9;:27::i;:::-;-1:-1:-1;10616:4:0;;10333:295;-1:-1:-1;;;;10333:295:0:o;11037:238::-;11125:4;680:10;11181:64;680:10;11197:7;11234:10;11206:25;680:10;11197:7;11206:9;:25::i;:::-;:38;;;;:::i;:::-;11181:8;:64::i;34984:205::-;1777:13;:11;:13::i;:::-;-1:-1:-1;;;;;35058:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;35058:34:0::1;35088:4;35058:34;::::0;;35103:15:::1;:33:::0;;-1:-1:-1;;;;;;35103:33:0::1;::::0;::::1;::::0;;35152:29;;160:51:1;;;35152:29:0::1;::::0;133:18:1;35152:29:0::1;;;;;;;;34984:205:::0;:::o;35986:120::-;1777:13;:11;:13::i;:::-;36081:17:::1;:6:::0;36091::::1;36081:17;:::i;:::-;36060:18;:38:::0;-1:-1:-1;35986:120:0:o;35775:146::-;1777:13;:11;:13::i;:::-;35874:39:::1;::::0;35842:21:::1;::::0;35882:10:::1;::::0;35874:39;::::1;;;::::0;35842:21;;35822:17:::1;35874:39:::0;35822:17;35874:39;35842:21;35882:10;35874:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35811:110;35775:146::o:0;2539:103::-;1777:13;:11;:13::i;:::-;2604:30:::1;2631:1;2604:18;:30::i;:::-;2539:103::o:0;34779:151::-;1777:13;:11;:13::i;:::-;34843:14:::1;::::0;-1:-1:-1;;;34843:14:0;::::1;;;34842:15;34834:24;;;::::0;::::1;;34869:14;:21:::0;;-1:-1:-1;;;;34869:21:0::1;-1:-1:-1::0;;;34869:21:0::1;::::0;;34906:16:::1;::::0;::::1;::::0;34869:21;;34906:16:::1;34779:151::o:0;7420:104::-;7476:13;7509:7;7502:14;;;;;:::i;36173:140::-;1777:13;:11;:13::i;:::-;36264:41:::1;36293:4;36299:5;36264:28;:41::i;11778:436::-:0;11871:4;680:10;11871:4;11954:25;680:10;11971:7;11954:9;:25::i;:::-;11927:52;;12018:15;11998:16;:35;;11990:85;;;;-1:-1:-1;;;11990:85:0;;8508:2:1;11990:85:0;;;8490:21:1;8547:2;8527:18;;;8520:30;8586:34;8566:18;;;8559:62;-1:-1:-1;;;8637:18:1;;;8630:35;8682:19;;11990:85:0;8306:401:1;11990:85:0;12111:60;12120:5;12127:7;12155:15;12136:16;:34;12111:8;:60::i;8825:193::-;8904:4;680:10;8960:28;680:10;8977:2;8981:6;8960:9;:28::i;35256:213::-;1777:13;:11;:13::i;:::-;-1:-1:-1;;;;;35328:41:0;::::1;;::::0;;;:33:::1;:41;::::0;;;;;;;:48;;35372:4:::1;-1:-1:-1::0;;35328:48:0;;::::1;::::0;::::1;::::0;;;35387:19:::1;:27:::0;;;;;;:34;;;;::::1;;::::0;;;35437:24;;160:51:1;;;35437:24:0::1;::::0;133:18:1;35437:24:0::1;14:203:1::0;9081:151:0;-1:-1:-1;;;;;9197:18:0;;;9170:7;9197:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9081:151::o;2797:201::-;1777:13;:11;:13::i;:::-;-1:-1:-1;;;;;2886:22:0;::::1;2878:73;;;::::0;-1:-1:-1;;;2878:73:0;;8914:2:1;2878:73:0::1;::::0;::::1;8896:21:1::0;8953:2;8933:18;;;8926:30;8992:34;8972:18;;;8965:62;-1:-1:-1;;;9043:18:1;;;9036:36;9089:19;;2878:73:0::1;8712:402:1::0;2878:73:0::1;2962:28;2981:8;2962:18;:28::i;:::-;2797:201:::0;:::o;2056:132::-;1964:6;;-1:-1:-1;;;;;1964:6:0;680:10;2120:23;2112:68;;;;-1:-1:-1;;;2112:68:0;;9321:2:1;2112:68:0;;;9303:21:1;;;9340:18;;;9333:30;9399:34;9379:18;;;9372:62;9451:18;;2112:68:0;9119:356:1;20337:98:0;20395:7;20422:5;20426:1;20422;:5;:::i;:::-;20415:12;20337:98;-1:-1:-1;;;20337:98:0:o;21075:::-;21133:7;21160:5;21164:1;21160;:5;:::i;21474:98::-;21532:7;21559:5;21563:1;21559;:5;:::i;39988:743::-;40057:6;40067:1;40057:11;40053:50;;39988:743;:::o;40053:50::-;40113:24;40130:6;40113:16;:24::i;:::-;40234:16;;40214:17;;40165:4;;40150:12;;40214:36;;40234:16;40214:36;:::i;:::-;40190:60;-1:-1:-1;40263:19:0;40297:17;;40293:104;;40345:40;:21;40371:13;40345:25;:40::i;:::-;40331:54;;40293:104;40407:23;40475:11;40433:39;40454:17;;40433:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;40407:79;-1:-1:-1;40511:19:0;;40507:123;;40569:15;;40561:57;;-1:-1:-1;;;;;40569:15:0;;;;40598;;40561:57;;;;40598:15;40569;40561:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40547:71:0;;-1:-1:-1;;40507:123:0;40647:76;;;10080:25:1;;;10148:14;;10141:22;10136:2;10121:18;;10114:50;40647:76:0;;10053:18:1;40647:76:0;;;;;;;40042:689;;;;39988:743;:::o;20718:98::-;20776:7;20803:5;20807:1;20803;:5;:::i;15403:380::-;-1:-1:-1;;;;;15539:19:0;;15531:68;;;;-1:-1:-1;;;15531:68:0;;10510:2:1;15531:68:0;;;10492:21:1;10549:2;10529:18;;;10522:30;10588:34;10568:18;;;10561:62;-1:-1:-1;;;10639:18:1;;;10632:34;10683:19;;15531:68:0;10308:400:1;15531:68:0;-1:-1:-1;;;;;15618:21:0;;15610:68;;;;-1:-1:-1;;;15610:68:0;;10915:2:1;15610:68:0;;;10897:21:1;10954:2;10934:18;;;10927:30;10993:34;10973:18;;;10966:62;-1:-1:-1;;;11044:18:1;;;11037:32;11086:19;;15610:68:0;10713:398:1;15610:68:0;-1:-1:-1;;;;;15691:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15743:32;;2410:25:1;;;15743:32:0;;2383:18:1;15743:32:0;;;;;;;15403:380;;;:::o;12684:671::-;-1:-1:-1;;;;;12815:18:0;;12807:68;;;;-1:-1:-1;;;12807:68:0;;11318:2:1;12807:68:0;;;11300:21:1;11357:2;11337:18;;;11330:30;11396:34;11376:18;;;11369:62;-1:-1:-1;;;11447:18:1;;;11440:35;11492:19;;12807:68:0;11116:401:1;12807:68:0;-1:-1:-1;;;;;12894:16:0;;12886:64;;;;-1:-1:-1;;;12886:64:0;;11724:2:1;12886:64:0;;;11706:21:1;11763:2;11743:18;;;11736:30;11802:34;11782:18;;;11775:62;-1:-1:-1;;;11853:18:1;;;11846:33;11896:19;;12886:64:0;11522:399:1;12886:64:0;-1:-1:-1;;;;;13036:15:0;;13014:19;13036:15;;;;;;;;;;;13070:21;;;;13062:72;;;;-1:-1:-1;;;13062:72:0;;12128:2:1;13062:72:0;;;12110:21:1;12167:2;12147:18;;;12140:30;12206:34;12186:18;;;12179:62;-1:-1:-1;;;12257:18:1;;;12250:36;12303:19;;13062:72:0;11926:402:1;13062:72:0;-1:-1:-1;;;;;13170:15:0;;;:9;:15;;;;;;;;;;;13188:20;;;13170:38;;13230:13;;;;;;;;:23;;13202:6;;13170:9;13230:23;;13202:6;;13230:23;:::i;:::-;;;;;;;;13286:2;-1:-1:-1;;;;;13271:26:0;13280:4;-1:-1:-1;;;;;13271:26:0;;13290:6;13271:26;;;;2410:25:1;;2398:2;2383:18;;2264:177;13271:26:0;;;;;;;;13310:37;12796:559;12684:671;;;:::o;16074:453::-;16209:24;16236:25;16246:5;16253:7;16236:9;:25::i;:::-;16209:52;;-1:-1:-1;;16276:16:0;:37;16272:248;;16358:6;16338:16;:26;;16330:68;;;;-1:-1:-1;;;16330:68:0;;12535:2:1;16330:68:0;;;12517:21:1;12574:2;12554:18;;;12547:30;12613:31;12593:18;;;12586:59;12662:18;;16330:68:0;12333:353:1;16330:68:0;16442:51;16451:5;16458:7;16486:6;16467:16;:25;16442:8;:51::i;36765:2093::-;-1:-1:-1;;;;;36865:18:0;;36857:69;;;;-1:-1:-1;;;36857:69:0;;12893:2:1;36857:69:0;;;12875:21:1;12932:2;12912:18;;;12905:30;12971:34;12951:18;;;12944:62;-1:-1:-1;;;13022:18:1;;;13015:36;13068:19;;36857:69:0;12691:402:1;36857:69:0;-1:-1:-1;;;;;36945:16:0;;36937:65;;;;-1:-1:-1;;;36937:65:0;;13300:2:1;36937:65:0;;;13282:21:1;13339:2;13319:18;;;13312:30;13378:34;13358:18;;;13351:62;-1:-1:-1;;;13429:18:1;;;13422:34;13473:19;;36937:65:0;13098:400:1;36937:65:0;37030:1;37021:6;:10;37013:64;;;;-1:-1:-1;;;37013:64:0;;13705:2:1;37013:64:0;;;13687:21:1;13744:2;13724:18;;;13717:30;13783:34;13763:18;;;13756:62;-1:-1:-1;;;13834:18:1;;;13827:39;13883:19;;37013:64:0;13503:405:1;37013:64:0;-1:-1:-1;;;;;37129:39:0;;37090:21;37129:39;;;:33;:39;;;;;;;;37124:142;;37193:14;;-1:-1:-1;;;37193:14:0;;;;37185:59;;;;-1:-1:-1;;;37185:59:0;;14115:2:1;37185:59:0;;;14097:21:1;;;14134:18;;;14127:30;14193:34;14173:18;;;14166:62;14245:18;;37185:59:0;13913:356:1;37185:59:0;37291:8;;-1:-1:-1;;;37291:8:0;;;;37290:9;:39;;;;-1:-1:-1;;;;;;37304:25:0;;;;;;:19;:25;;;;;;;;37303:26;37290:39;:67;;;;-1:-1:-1;;;;;;37334:23:0;;;;;;:19;:23;;;;;;;;37333:24;37290:67;37286:1517;;;-1:-1:-1;;;;;37391:29:0;;;37374:14;37391:29;;;:25;:29;;;;;;;37451:31;;;;;;;;37391:29;;;;;37451:31;37527:9;;:23;;;;;37541:9;37540:10;37527:23;37523:365;;;37571:33;37587:4;37593:2;37597:6;37571:15;:33::i;:::-;37623:7;;;36765:2093;;;:::o;37523:365::-;37694:9;37690:198;;;37740:17;;37724:33;;37690:198;;;37811:8;37807:81;;;37856:16;;37840:32;;37807:81;38015:4;37916:17;8593:18;;;;;;;;;;;38077;;37936:13;;8593:18;38053:42;;;;;;;38116:20;;;38127:9;38116:20;:41;;;;;38156:1;38140:13;:17;38116:41;38112:332;;;38178:8;:15;;-1:-1:-1;;;;38178:15:0;-1:-1:-1;;;38178:15:0;;;38270:4;-1:-1:-1;8593:18:0;;;;;;;;;;;38230:46;;38295:33;38316:11;38295:20;:33::i;:::-;-1:-1:-1;38359:1:0;38347:9;:13;;;38379:10;:14;38412:8;:16;;-1:-1:-1;;;;38412:16:0;;;38112:332;38460:12;38475:30;38501:3;38475:21;:6;38486:9;38475:10;:21::i;:30::-;38460:45;-1:-1:-1;38531:16:0;:6;38460:45;38531:10;:16::i;:::-;38522:25;;38568:9;38564:155;;;38611:10;;:20;;38626:4;38611:14;:20::i;:::-;38598:10;:33;38564:155;;;38684:9;;:19;;38698:4;38684:13;:19::i;:::-;38672:9;:31;38564:155;38735:42;38751:4;38765;38772;38735:15;:42::i;:::-;37359:1444;;;;;;37286:1517;38815:33;38831:4;38837:2;38841:6;38815:15;:33::i;3158:191::-;3251:6;;;-1:-1:-1;;;;;3268:17:0;;;-1:-1:-1;;;;;;3268:17:0;;;;;;;3301:40;;3251:6;;;3268:17;3251:6;;3301:40;;3232:16;;3301:40;3221:128;3158:191;:::o;36344:188::-;-1:-1:-1;;;;;36427:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;36427:39:0;;;;;;;;;;36484:40;;36427:39;;:31;36484:40;;;36344:188;;:::o;38915:499::-;39005:16;;;39019:1;39005:16;;;;;;;;38981:21;;39005:16;;;;;;;;;;-1:-1:-1;39005:16:0;38981:40;;39050:4;39032;39037:1;39032:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39032:23:0;;;:7;;;;;;;;;;:23;;;;39076:15;;:22;;;-1:-1:-1;;;39076:22:0;;;;:15;;;;;:20;;:22;;;;;39032:7;;39076:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39066:4;39071:1;39066:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39066:32:0;;;:7;;;;;;;;;:32;39141:15;;39109:62;;39126:4;;39141:15;39159:11;39109:8;:62::i;:::-;39182:15;;:224;;-1:-1:-1;;;39182:224:0;;-1:-1:-1;;;;;39182:15:0;;;;:66;;:224;;39263:11;;39182:15;;39333:4;;39360;;39380:15;;39182:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:180:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:548::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;691:3;876:1;871:2;862:6;851:9;847:22;843:31;836:42;946:2;939;935:7;930:2;922:6;918:15;914:29;903:9;899:45;895:54;887:62;;;;407:548;;;;:::o;960:131::-;-1:-1:-1;;;;;1035:31:1;;1025:42;;1015:70;;1081:1;1078;1071:12;1096:416;1161:6;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:52;;;1238:1;1235;1228:12;1190:52;1277:9;1264:23;1296:31;1321:5;1296:31;:::i;:::-;1346:5;-1:-1:-1;1403:2:1;1388:18;;1375:32;1445:15;;1438:23;1426:36;;1416:64;;1476:1;1473;1466:12;1416:64;1499:7;1489:17;;;1096:416;;;;;:::o;1517:315::-;1585:6;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;1822:2;1807:18;;;;1794:32;;-1:-1:-1;;;1517:315:1:o;2446:127::-;2507:10;2502:3;2498:20;2495:1;2488:31;2538:4;2535:1;2528:15;2562:4;2559:1;2552:15;2578:275;2649:2;2643:9;2714:2;2695:13;;-1:-1:-1;;2691:27:1;2679:40;;2749:18;2734:34;;2770:22;;;2731:62;2728:88;;;2796:18;;:::i;:::-;2832:2;2825:22;2578:275;;-1:-1:-1;2578:275:1:o;2858:183::-;2918:4;2951:18;2943:6;2940:30;2937:56;;;2973:18;;:::i;:::-;-1:-1:-1;3018:1:1;3014:14;3030:4;3010:25;;2858:183::o;3046:662::-;3100:5;3153:3;3146:4;3138:6;3134:17;3130:27;3120:55;;3171:1;3168;3161:12;3120:55;3207:6;3194:20;3233:4;3257:60;3273:43;3313:2;3273:43;:::i;:::-;3257:60;:::i;:::-;3351:15;;;3437:1;3433:10;;;;3421:23;;3417:32;;;3382:12;;;;3461:15;;;3458:35;;;3489:1;3486;3479:12;3458:35;3525:2;3517:6;3513:15;3537:142;3553:6;3548:3;3545:15;3537:142;;;3619:17;;3607:30;;3657:12;;;;3570;;3537:142;;;-1:-1:-1;3697:5:1;3046:662;-1:-1:-1;;;;;;3046:662:1:o;3713:1215::-;3831:6;3839;3892:2;3880:9;3871:7;3867:23;3863:32;3860:52;;;3908:1;3905;3898:12;3860:52;3948:9;3935:23;3977:18;4018:2;4010:6;4007:14;4004:34;;;4034:1;4031;4024:12;4004:34;4072:6;4061:9;4057:22;4047:32;;4117:7;4110:4;4106:2;4102:13;4098:27;4088:55;;4139:1;4136;4129:12;4088:55;4175:2;4162:16;4197:4;4221:60;4237:43;4277:2;4237:43;:::i;4221:60::-;4315:15;;;4397:1;4393:10;;;;4385:19;;4381:28;;;4346:12;;;;4421:19;;;4418:39;;;4453:1;4450;4443:12;4418:39;4477:11;;;;4497:217;4513:6;4508:3;4505:15;4497:217;;;4593:3;4580:17;4610:31;4635:5;4610:31;:::i;:::-;4654:18;;4530:12;;;;4692;;;;4497:217;;;4733:5;-1:-1:-1;;4776:18:1;;4763:32;;-1:-1:-1;;4807:16:1;;;4804:36;;;4836:1;4833;4826:12;4804:36;;4859:63;4914:7;4903:8;4892:9;4888:24;4859:63;:::i;:::-;4849:73;;;3713:1215;;;;;:::o;4933:456::-;5010:6;5018;5026;5079:2;5067:9;5058:7;5054:23;5050:32;5047:52;;;5095:1;5092;5085:12;5047:52;5134:9;5121:23;5153:31;5178:5;5153:31;:::i;:::-;5203:5;-1:-1:-1;5260:2:1;5245:18;;5232:32;5273:33;5232:32;5273:33;:::i;:::-;4933:456;;5325:7;;-1:-1:-1;;;5379:2:1;5364:18;;;;5351:32;;4933:456::o;5583:247::-;5642:6;5695:2;5683:9;5674:7;5670:23;5666:32;5663:52;;;5711:1;5708;5701:12;5663:52;5750:9;5737:23;5769:31;5794:5;5769:31;:::i;6059:388::-;6127:6;6135;6188:2;6176:9;6167:7;6163:23;6159:32;6156:52;;;6204:1;6201;6194:12;6156:52;6243:9;6230:23;6262:31;6287:5;6262:31;:::i;:::-;6312:5;-1:-1:-1;6369:2:1;6354:18;;6341:32;6382:33;6341:32;6382:33;:::i;6452:127::-;6513:10;6508:3;6504:20;6501:1;6494:31;6544:4;6541:1;6534:15;6568:4;6565:1;6558:15;6584:168;6657:9;;;6688;;6705:15;;;6699:22;;6685:37;6675:71;;6726:18;;:::i;6757:380::-;6836:1;6832:12;;;;6879;;;6900:61;;6954:4;6946:6;6942:17;6932:27;;6900:61;7007:2;6999:6;6996:14;6976:18;6973:38;6970:161;;7053:10;7048:3;7044:20;7041:1;7034:31;7088:4;7085:1;7078:15;7116:4;7113:1;7106:15;6970:161;;6757:380;;;:::o;7904:127::-;7965:10;7960:3;7956:20;7953:1;7946:31;7996:4;7993:1;7986:15;8020:4;8017:1;8010:15;8036:135;8075:3;8096:17;;;8093:43;;8116:18;;:::i;:::-;-1:-1:-1;8163:1:1;8152:13;;8036:135::o;8176:125::-;8241:9;;;8262:10;;;8259:36;;;8275:18;;:::i;9480:217::-;9520:1;9546;9536:132;;9590:10;9585:3;9581:20;9578:1;9571:31;9625:4;9622:1;9615:15;9653:4;9650:1;9643:15;9536:132;-1:-1:-1;9682:9:1;;9480:217::o;10175:128::-;10242:9;;;10263:11;;;10260:37;;;10277:18;;:::i;14274:251::-;14344:6;14397:2;14385:9;14376:7;14372:23;14368:32;14365:52;;;14413:1;14410;14403:12;14365:52;14445:9;14439:16;14464:31;14489:5;14464:31;:::i;14530:980::-;14792:4;14840:3;14829:9;14825:19;14871:6;14860:9;14853:25;14897:2;14935:6;14930:2;14919:9;14915:18;14908:34;14978:3;14973:2;14962:9;14958:18;14951:31;15002:6;15037;15031:13;15068:6;15060;15053:22;15106:3;15095:9;15091:19;15084:26;;15145:2;15137:6;15133:15;15119:29;;15166:1;15176:195;15190:6;15187:1;15184:13;15176:195;;;15255:13;;-1:-1:-1;;;;;15251:39:1;15239:52;;15346:15;;;;15311:12;;;;15287:1;15205:9;15176:195;;;-1:-1:-1;;;;;;;15427:32:1;;;;15422:2;15407:18;;15400:60;-1:-1:-1;;;15491:3:1;15476:19;15469:35;15388:3;14530:980;-1:-1:-1;;;14530:980:1:o
Swarm Source
ipfs://856103a62b0fc776a35ee3bad47d6510654b9afcc55d4d98c4eeabaf4a398c73
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.