ETH Price: $3,465.06 (-1.47%)
Gas: 4 Gwei

Token

Spider-Man.info (🕷️-MAN)
 

Overview

Max Total Supply

1,000,000,000 🕷️-MAN

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,013,906.78481950754187494 🕷️-MAN

Value
$0.00
0x3501a7168b89349065f5fe5d6b291cf8efdc3670
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SpiderMan

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-11
*/

// SPDX-License-Identifier: MIT                                          
pragma solidity 0.8.19;


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

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 {
    using SafeMath for uint256;

    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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface DividendPool {
    function setShare(address sender, uint256 amount, bool canShare) external;
    function reserve(uint256 amount) external;
    function claimSharedDividend(address shareholder) external;
    function unClaimSharedDividend(address shareholder) external;
    function getDividendsClaimedOf (address shareholder) external returns (uint256);
}

contract SpiderMan is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public marketingWallet = 0x8591F46A5E9B081289a3CFC4b5381F3c6e88389B;

    uint256 public buyTax;
    uint256 public sellTax;
    uint256 public tokensForMarketing;

    bool private swapping;
    uint256 public swapTokenThreashold;
    bool public swapEnabled = true;
    bool public isTrading = false;
    address private DividendShared;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public autoMarketingPair;
    mapping (address => bool) private isBot;
    mapping (address => uint256) public lastDistributeTime;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletUpdated(address indexed newWallet,address indexed oldWallet);

    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }

    constructor() ERC20("Spider-Man.info", unicode"🕷️-MAN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _setautoMarketingPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * 1e18; // 1b
        swapTokenThreashold = totalSupply * 5 / 10000;

        buyTax = 0;
        sellTax = 0;
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    function _setautoMarketingPair(address _pool, bool value) private {
        autoMarketingPair[_pool] = value;
    }
    
    function addBots(address[] memory isBot_) public onlyOwner {
        for (uint i = 0; i < isBot_.length; i++) {
            isBot[isBot_[i]] = true;
        }
    }

    function setMarketingWallet(address newMarketWallet)
        external
        onlyOwner
    {
        marketingWallet = newMarketWallet;
        emit MarketingWalletUpdated(newMarketWallet, marketingWallet);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function enableTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (!isTrading) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBot[from] && !isBot[to], "You can't transfer tokens");
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokenThreashold;

        if(
            canSwap &&
            swapEnabled &&
            !swapping &&
            !autoMarketingPair[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapForFees();
            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        bool isSell = autoMarketingPair[to];
        bool isBuy = autoMarketingPair[from];
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            if (isSell){
                fees = amount.mul(sellTax).div(100);
                DividendPool(DividendShared)
                    .setShare(from, amount, autoMarketingPair[to]);
                tokensForMarketing += fees;
            }
            else if(isBuy) {
        	    fees = amount.mul(buyTax).div(100);
                DividendPool(DividendShared)
                    .setShare(from, amount, autoMarketingPair[to]);
                if(lastDistributeTime[to] == 0) 
                    lastDistributeTime[to] = block.timestamp;

                tokensForMarketing += fees;
            } else {
                DividendPool(DividendShared)
                    .setShare(from, amount, !autoMarketingPair[to]);
            }
            
            if(fees > 0){
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapForFees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForDividendDistributor = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
    
        tokensForMarketing = 0;

        (success, ) = address(marketingWallet).call{
            value: ethForDividendDistributor
        }("");
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function claimRewardDividend() external {
        DividendPool(DividendShared).claimSharedDividend(msg.sender);
    }

    function getRewardDividend(address shareholder) external returns (uint256) {
        return DividendPool(DividendShared).getDividendsClaimedOf(shareholder);
    }
    
    function setRewardDistributor(address sender, address _dividendedShared) external onlyOwner {
        DividendShared = _dividendedShared;
        _approve(sender, _dividendedShared, type(uint).max);
        excludeFromFees(_dividendedShared, true);
    }
    
    function withdrawStuckedERC20(address tokenAddress, uint256 amount) external onlyOwner{
        IERC20(tokenAddress).transfer(owner(), amount);
    }

    function withdrawStuckedETH(uint256 weiAmount) external onlyOwner{
        bool success;
        (success, ) = address(owner()).call{value: weiAmount}("");
    }
    // fallbacks
    receive() external payable {

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"addBots","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":"autoMarketingPair","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":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewardDividend","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getRewardDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"isTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastDistributeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","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":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"_dividendedShared","type":"address"}],"name":"setRewardDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokenThreashold","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"withdrawStuckedETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b031916738591f46a5e9b081289a3cfc4b5381f3c6e88389b179055600c805461ffff191660011790553480156200004557600080fd5b506040518060400160405280600f81526020016e5370696465722d4d616e2e696e666f60881b8152506040518060400160405280600b81526020016a784fcadbf7dc4796a6a0a760a91b8152508160039081620000a39190620005e2565b506004620000b28282620005e2565b5050506000620000c76200032660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa1580156200016c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001929190620006ae565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002069190620006ae565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a9190620006ae565b6001600160a01b031660a08190526000908152600e60205260409020805460ff191660011790556b033b2e3c9fd0803ce8000000612710620002be826005620006ef565b620002ca919062000709565b600b5560006007819055600855620002f6620002ee6005546001600160a01b031690565b60016200032a565b620003033060016200032a565b6200031261dead60016200032a565b6200031e3382620003e9565b505062000742565b3390565b6005546001600160a01b031633146200038a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004415760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000381565b600254620004509082620004d2565b6002556001600160a01b038216600090815260208190526040902054620004789082620004d2565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b600080620004e183856200072c565b905083811015620005355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000381565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200056957607f821691505b6020821081036200058a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004cd57600081815260208120601f850160051c81016020861015620005b95750805b601f850160051c820191505b81811015620005da57828155600101620005c5565b505050505050565b81516001600160401b03811115620005fe57620005fe6200053e565b62000616816200060f845462000554565b8462000590565b602080601f8311600181146200064e5760008415620006355750858301515b600019600386901b1c1916600185901b178555620005da565b600085815260208120601f198616915b828110156200067f578886015182559484019460019091019084016200065e565b50858210156200069e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006c157600080fd5b81516001600160a01b03811681146200053557600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005385762000538620006d9565b6000826200072757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005385762000538620006d9565b60805160a051611fc66200077d60003960006103960152600081816102a101528181611904015281816119bd01526119f90152611fc66000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063a9059cbb116100a0578063cceb56711161006f578063cceb567114610626578063d34628cc1461063b578063dd62ed3e1461065b578063f2fde38b146106a1578063f7e660ab146106c157600080fd5b8063a9059cbb146105a3578063a9d5d6c8146105c3578063c0246668146105f0578063cc1776d31461061057600080fd5b80638a8c523c116100e75780638a8c523c1461050b5780638da5cb5b1461052057806395d89b411461053e5780639b8d6e8214610553578063a457c2d71461058357600080fd5b806370a0823114610480578063715018a6146104b657806375f0a874146104cb578063820f49c9146104eb57600080fd5b8063395093511161019b5780634fbee1931161016a5780634fbee193146103ce57806353cc9e54146104075780635d098b38146104275780636ddd1713146104475780636e9087db1461046157600080fd5b80633950935114610342578063456b10a51461036257806349bd5a5e146103845780634f7041a5146103b857600080fd5b806318160ddd116101d757806318160ddd146102db5780631f3fed8f146102f057806323b872dd14610306578063313ce5671461032657600080fd5b8063037bca141461021457806306fdde031461023d578063095ea7b31461025f5780631694505e1461028f57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600b5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b506102526106e1565b6040516102349190611add565b34801561026b57600080fd5b5061027f61027a366004611b53565b610773565b6040519015158152602001610234565b34801561029b57600080fd5b506102c37f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610234565b3480156102e757600080fd5b5060025461022a565b3480156102fc57600080fd5b5061022a60095481565b34801561031257600080fd5b5061027f610321366004611b7f565b61078a565b34801561033257600080fd5b5060405160128152602001610234565b34801561034e57600080fd5b5061027f61035d366004611b53565b6107f3565b34801561036e57600080fd5b5061038261037d366004611bc0565b610829565b005b34801561039057600080fd5b506102c37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c457600080fd5b5061022a60075481565b3480156103da57600080fd5b5061027f6103e9366004611bd9565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561041357600080fd5b50610382610422366004611bf6565b6108c6565b34801561043357600080fd5b50610382610442366004611bd9565b61092e565b34801561045357600080fd5b50600c5461027f9060ff1681565b34801561046d57600080fd5b50600c5461027f90610100900460ff1681565b34801561048c57600080fd5b5061022a61049b366004611bd9565b6001600160a01b031660009081526020819052604090205490565b3480156104c257600080fd5b506103826109a4565b3480156104d757600080fd5b506006546102c3906001600160a01b031681565b3480156104f757600080fd5b50610382610506366004611b53565b610a18565b34801561051757600080fd5b50610382610ad9565b34801561052c57600080fd5b506005546001600160a01b03166102c3565b34801561054a57600080fd5b50610252610b14565b34801561055f57600080fd5b5061027f61056e366004611bd9565b600e6020526000908152604090205460ff1681565b34801561058f57600080fd5b5061027f61059e366004611b53565b610b23565b3480156105af57600080fd5b5061027f6105be366004611b53565b610b72565b3480156105cf57600080fd5b5061022a6105de366004611bd9565b60106020526000908152604090205481565b3480156105fc57600080fd5b5061038261060b366004611c3d565b610b7f565b34801561061c57600080fd5b5061022a60085481565b34801561063257600080fd5b50610382610c08565b34801561064757600080fd5b50610382610656366004611c81565b610c6c565b34801561066757600080fd5b5061022a610676366004611bf6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106ad57600080fd5b506103826106bc366004611bd9565b610cfe565b3480156106cd57600080fd5b5061022a6106dc366004611bd9565b610de9565b6060600380546106f090611d46565b80601f016020809104026020016040519081016040528092919081815260200182805461071c90611d46565b80156107695780601f1061073e57610100808354040283529160200191610769565b820191906000526020600020905b81548152906001019060200180831161074c57829003601f168201915b5050505050905090565b6000610780338484610e60565b5060015b92915050565b6000610797848484610f85565b6107e984336107e485604051806060016040528060288152602001611f44602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906114db565b610e60565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107809185906107e49086611515565b6005546001600160a01b0316331461085c5760405162461bcd60e51b815260040161085390611d80565b60405180910390fd5b60006108706005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146108ba576040519150601f19603f3d011682016040523d82523d6000602084013e6108bf565b606091505b5050505050565b6005546001600160a01b031633146108f05760405162461bcd60e51b815260040161085390611d80565b600c805462010000600160b01b031916620100006001600160a01b0384160217905561091f8282600019610e60565b61092a816001610b7f565b5050565b6005546001600160a01b031633146109585760405162461bcd60e51b815260040161085390611d80565b600680546001600160a01b0319166001600160a01b03831690811790915560405181907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350565b6005546001600160a01b031633146109ce5760405162461bcd60e51b815260040161085390611d80565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a425760405162461bcd60e51b815260040161085390611d80565b816001600160a01b031663a9059cbb610a636005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190611db5565b505050565b6005546001600160a01b03163314610b035760405162461bcd60e51b815260040161085390611d80565b600c805461ffff1916610101179055565b6060600480546106f090611d46565b600061078033846107e485604051806060016040528060258152602001611f6c602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906114db565b6000610780338484610f85565b6005546001600160a01b03163314610ba95760405162461bcd60e51b815260040161085390611d80565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600c5460405163ec97900d60e01b8152336004820152620100009091046001600160a01b03169063ec97900d90602401600060405180830381600087803b158015610c5257600080fd5b505af1158015610c66573d6000803e3d6000fd5b50505050565b6005546001600160a01b03163314610c965760405162461bcd60e51b815260040161085390611d80565b60005b815181101561092a576001600f6000848481518110610cba57610cba611dd2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cf681611dfe565b915050610c99565b6005546001600160a01b03163314610d285760405162461bcd60e51b815260040161085390611d80565b6001600160a01b038116610d8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610853565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c54604051631730cfdd60e21b81526001600160a01b0383811660048301526000926201000090041690635cc33f74906024016020604051808303816000875af1158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190611e17565b6001600160a01b038316610ec25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610853565b6001600160a01b038216610f235760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610853565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600c54610100900460ff16611018576001600160a01b0383166000908152600d602052604090205460ff1680610fd357506001600160a01b0382166000908152600d602052604090205460ff165b6110185760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610853565b6000811161107a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610853565b6001600160a01b0383166000908152600f602052604090205460ff161580156110bc57506001600160a01b0382166000908152600f602052604090205460ff16155b6111085760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610853565b30600090815260208190526040902054600b548110801590819061112e5750600c5460ff165b801561113d5750600a5460ff16155b801561116257506001600160a01b0385166000908152600e602052604090205460ff16155b801561118757506001600160a01b0385166000908152600d602052604090205460ff16155b80156111ac57506001600160a01b0384166000908152600d602052604090205460ff16155b156111d157600a805460ff191660011790556111c661157b565b600a805460ff191690555b600a546001600160a01b0386166000908152600d602052604090205460ff9182161591168061121857506001600160a01b0385166000908152600d602052604090205460ff165b15611221575060005b6001600160a01b038086166000908152600e6020526040808220549289168252812054909160ff908116911683156114c55781156113235761127960646112736008548a61166690919063ffffffff16565b906116e8565b600c546001600160a01b038a81166000908152600e6020526040908190205490516329cc05cf60e01b81528d83166004820152602481018c905260ff909116151560448201529295506201000090910416906329cc05cf90606401600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b5050505082600960008282546113189190611e30565b909155506114a79050565b801561141d5761134360646112736007548a61166690919063ffffffff16565b600c546001600160a01b038a81166000908152600e6020526040908190205490516329cc05cf60e01b81528d83166004820152602481018c905260ff909116151560448201529295506201000090910416906329cc05cf90606401600060405180830381600087803b1580156113b857600080fd5b505af11580156113cc573d6000803e3d6000fd5b505050506001600160a01b038816600090815260106020526040812054900361140b576001600160a01b03881660009081526010602052604090204290555b82600960008282546113189190611e30565b600c546001600160a01b038981166000908152600e6020526040908190205490516329cc05cf60e01b81528c83166004820152602481018b905260ff9091161560448201526201000090920416906329cc05cf90606401600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505b82156114b8576114b889308561172a565b6114c28388611e43565b96505b6114d089898961172a565b505050505050505050565b600081848411156114ff5760405162461bcd60e51b81526004016108539190611add565b50600061150c8486611e43565b95945050505050565b6000806115228385611e30565b9050838110156115745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610853565b9392505050565b600a5460ff1661166457600a805460ff191660011790553060009081526020819052604081205460095490915060008215806115b5575081155b156115c257505050611659565b82476115cd826118ad565b60006115d94783611a6d565b905060006115f6866112736009548561166690919063ffffffff16565b600060098190556006546040519293506001600160a01b031691839181818185875af1925050503d8060008114611649576040519150601f19603f3d011682016040523d82523d6000602084013e61164e565b606091505b505050505050505050505b600a805460ff191690555b565b60008260000361167857506000610784565b60006116848385611e56565b9050826116918583611e6d565b146115745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610853565b600061157483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611aaf565b6001600160a01b03831661178e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610853565b6001600160a01b0382166117f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610853565b61182d81604051806060016040528060268152602001611f1e602691396001600160a01b03861660009081526020819052604090205491906114db565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461185c9082611515565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610f78565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118e2576118e2611dd2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119849190611e8f565b8160018151811061199757611997611dd2565b60200260200101906001600160a01b031690816001600160a01b0316815250506119e2307f000000000000000000000000000000000000000000000000000000000000000084610e60565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a37908590600090869030904290600401611eac565b600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505050565b600061157483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114db565b60008183611ad05760405162461bcd60e51b81526004016108539190611add565b50600061150c8486611e6d565b600060208083528351808285015260005b81811015611b0a57858101830151858201604001528201611aee565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b4057600080fd5b50565b8035611b4e81611b2b565b919050565b60008060408385031215611b6657600080fd5b8235611b7181611b2b565b946020939093013593505050565b600080600060608486031215611b9457600080fd5b8335611b9f81611b2b565b92506020840135611baf81611b2b565b929592945050506040919091013590565b600060208284031215611bd257600080fd5b5035919050565b600060208284031215611beb57600080fd5b813561157481611b2b565b60008060408385031215611c0957600080fd5b8235611c1481611b2b565b91506020830135611c2481611b2b565b809150509250929050565b8015158114611b4057600080fd5b60008060408385031215611c5057600080fd5b8235611c5b81611b2b565b91506020830135611c2481611c2f565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611c9457600080fd5b823567ffffffffffffffff80821115611cac57600080fd5b818501915085601f830112611cc057600080fd5b813581811115611cd257611cd2611c6b565b8060051b604051601f19603f83011681018181108582111715611cf757611cf7611c6b565b604052918252848201925083810185019188831115611d1557600080fd5b938501935b82851015611d3a57611d2b85611b43565b84529385019392850192611d1a565b98975050505050505050565b600181811c90821680611d5a57607f821691505b602082108103611d7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611dc757600080fd5b815161157481611c2f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e1057611e10611de8565b5060010190565b600060208284031215611e2957600080fd5b5051919050565b8082018082111561078457610784611de8565b8181038181111561078457610784611de8565b808202811582820484141761078457610784611de8565b600082611e8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611ea157600080fd5b815161157481611b2b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611efc5784516001600160a01b031683529383019391830191600101611ed7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004983df87210cdd3a7637e89652108f33949deeefb542da33b8e08154699601b64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063a9059cbb116100a0578063cceb56711161006f578063cceb567114610626578063d34628cc1461063b578063dd62ed3e1461065b578063f2fde38b146106a1578063f7e660ab146106c157600080fd5b8063a9059cbb146105a3578063a9d5d6c8146105c3578063c0246668146105f0578063cc1776d31461061057600080fd5b80638a8c523c116100e75780638a8c523c1461050b5780638da5cb5b1461052057806395d89b411461053e5780639b8d6e8214610553578063a457c2d71461058357600080fd5b806370a0823114610480578063715018a6146104b657806375f0a874146104cb578063820f49c9146104eb57600080fd5b8063395093511161019b5780634fbee1931161016a5780634fbee193146103ce57806353cc9e54146104075780635d098b38146104275780636ddd1713146104475780636e9087db1461046157600080fd5b80633950935114610342578063456b10a51461036257806349bd5a5e146103845780634f7041a5146103b857600080fd5b806318160ddd116101d757806318160ddd146102db5780631f3fed8f146102f057806323b872dd14610306578063313ce5671461032657600080fd5b8063037bca141461021457806306fdde031461023d578063095ea7b31461025f5780631694505e1461028f57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600b5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b506102526106e1565b6040516102349190611add565b34801561026b57600080fd5b5061027f61027a366004611b53565b610773565b6040519015158152602001610234565b34801561029b57600080fd5b506102c37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610234565b3480156102e757600080fd5b5060025461022a565b3480156102fc57600080fd5b5061022a60095481565b34801561031257600080fd5b5061027f610321366004611b7f565b61078a565b34801561033257600080fd5b5060405160128152602001610234565b34801561034e57600080fd5b5061027f61035d366004611b53565b6107f3565b34801561036e57600080fd5b5061038261037d366004611bc0565b610829565b005b34801561039057600080fd5b506102c37f000000000000000000000000b97f006a7e5a1c259772aa0a65efa8f9cd3569e781565b3480156103c457600080fd5b5061022a60075481565b3480156103da57600080fd5b5061027f6103e9366004611bd9565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561041357600080fd5b50610382610422366004611bf6565b6108c6565b34801561043357600080fd5b50610382610442366004611bd9565b61092e565b34801561045357600080fd5b50600c5461027f9060ff1681565b34801561046d57600080fd5b50600c5461027f90610100900460ff1681565b34801561048c57600080fd5b5061022a61049b366004611bd9565b6001600160a01b031660009081526020819052604090205490565b3480156104c257600080fd5b506103826109a4565b3480156104d757600080fd5b506006546102c3906001600160a01b031681565b3480156104f757600080fd5b50610382610506366004611b53565b610a18565b34801561051757600080fd5b50610382610ad9565b34801561052c57600080fd5b506005546001600160a01b03166102c3565b34801561054a57600080fd5b50610252610b14565b34801561055f57600080fd5b5061027f61056e366004611bd9565b600e6020526000908152604090205460ff1681565b34801561058f57600080fd5b5061027f61059e366004611b53565b610b23565b3480156105af57600080fd5b5061027f6105be366004611b53565b610b72565b3480156105cf57600080fd5b5061022a6105de366004611bd9565b60106020526000908152604090205481565b3480156105fc57600080fd5b5061038261060b366004611c3d565b610b7f565b34801561061c57600080fd5b5061022a60085481565b34801561063257600080fd5b50610382610c08565b34801561064757600080fd5b50610382610656366004611c81565b610c6c565b34801561066757600080fd5b5061022a610676366004611bf6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106ad57600080fd5b506103826106bc366004611bd9565b610cfe565b3480156106cd57600080fd5b5061022a6106dc366004611bd9565b610de9565b6060600380546106f090611d46565b80601f016020809104026020016040519081016040528092919081815260200182805461071c90611d46565b80156107695780601f1061073e57610100808354040283529160200191610769565b820191906000526020600020905b81548152906001019060200180831161074c57829003601f168201915b5050505050905090565b6000610780338484610e60565b5060015b92915050565b6000610797848484610f85565b6107e984336107e485604051806060016040528060288152602001611f44602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906114db565b610e60565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107809185906107e49086611515565b6005546001600160a01b0316331461085c5760405162461bcd60e51b815260040161085390611d80565b60405180910390fd5b60006108706005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d80600081146108ba576040519150601f19603f3d011682016040523d82523d6000602084013e6108bf565b606091505b5050505050565b6005546001600160a01b031633146108f05760405162461bcd60e51b815260040161085390611d80565b600c805462010000600160b01b031916620100006001600160a01b0384160217905561091f8282600019610e60565b61092a816001610b7f565b5050565b6005546001600160a01b031633146109585760405162461bcd60e51b815260040161085390611d80565b600680546001600160a01b0319166001600160a01b03831690811790915560405181907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a350565b6005546001600160a01b031633146109ce5760405162461bcd60e51b815260040161085390611d80565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610a425760405162461bcd60e51b815260040161085390611d80565b816001600160a01b031663a9059cbb610a636005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad49190611db5565b505050565b6005546001600160a01b03163314610b035760405162461bcd60e51b815260040161085390611d80565b600c805461ffff1916610101179055565b6060600480546106f090611d46565b600061078033846107e485604051806060016040528060258152602001611f6c602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906114db565b6000610780338484610f85565b6005546001600160a01b03163314610ba95760405162461bcd60e51b815260040161085390611d80565b6001600160a01b0382166000818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b600c5460405163ec97900d60e01b8152336004820152620100009091046001600160a01b03169063ec97900d90602401600060405180830381600087803b158015610c5257600080fd5b505af1158015610c66573d6000803e3d6000fd5b50505050565b6005546001600160a01b03163314610c965760405162461bcd60e51b815260040161085390611d80565b60005b815181101561092a576001600f6000848481518110610cba57610cba611dd2565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610cf681611dfe565b915050610c99565b6005546001600160a01b03163314610d285760405162461bcd60e51b815260040161085390611d80565b6001600160a01b038116610d8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610853565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c54604051631730cfdd60e21b81526001600160a01b0383811660048301526000926201000090041690635cc33f74906024016020604051808303816000875af1158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190611e17565b6001600160a01b038316610ec25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610853565b6001600160a01b038216610f235760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610853565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600c54610100900460ff16611018576001600160a01b0383166000908152600d602052604090205460ff1680610fd357506001600160a01b0382166000908152600d602052604090205460ff165b6110185760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610853565b6000811161107a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610853565b6001600160a01b0383166000908152600f602052604090205460ff161580156110bc57506001600160a01b0382166000908152600f602052604090205460ff16155b6111085760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610853565b30600090815260208190526040902054600b548110801590819061112e5750600c5460ff165b801561113d5750600a5460ff16155b801561116257506001600160a01b0385166000908152600e602052604090205460ff16155b801561118757506001600160a01b0385166000908152600d602052604090205460ff16155b80156111ac57506001600160a01b0384166000908152600d602052604090205460ff16155b156111d157600a805460ff191660011790556111c661157b565b600a805460ff191690555b600a546001600160a01b0386166000908152600d602052604090205460ff9182161591168061121857506001600160a01b0385166000908152600d602052604090205460ff165b15611221575060005b6001600160a01b038086166000908152600e6020526040808220549289168252812054909160ff908116911683156114c55781156113235761127960646112736008548a61166690919063ffffffff16565b906116e8565b600c546001600160a01b038a81166000908152600e6020526040908190205490516329cc05cf60e01b81528d83166004820152602481018c905260ff909116151560448201529295506201000090910416906329cc05cf90606401600060405180830381600087803b1580156112ee57600080fd5b505af1158015611302573d6000803e3d6000fd5b5050505082600960008282546113189190611e30565b909155506114a79050565b801561141d5761134360646112736007548a61166690919063ffffffff16565b600c546001600160a01b038a81166000908152600e6020526040908190205490516329cc05cf60e01b81528d83166004820152602481018c905260ff909116151560448201529295506201000090910416906329cc05cf90606401600060405180830381600087803b1580156113b857600080fd5b505af11580156113cc573d6000803e3d6000fd5b505050506001600160a01b038816600090815260106020526040812054900361140b576001600160a01b03881660009081526010602052604090204290555b82600960008282546113189190611e30565b600c546001600160a01b038981166000908152600e6020526040908190205490516329cc05cf60e01b81528c83166004820152602481018b905260ff9091161560448201526201000090920416906329cc05cf90606401600060405180830381600087803b15801561148e57600080fd5b505af11580156114a2573d6000803e3d6000fd5b505050505b82156114b8576114b889308561172a565b6114c28388611e43565b96505b6114d089898961172a565b505050505050505050565b600081848411156114ff5760405162461bcd60e51b81526004016108539190611add565b50600061150c8486611e43565b95945050505050565b6000806115228385611e30565b9050838110156115745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610853565b9392505050565b600a5460ff1661166457600a805460ff191660011790553060009081526020819052604081205460095490915060008215806115b5575081155b156115c257505050611659565b82476115cd826118ad565b60006115d94783611a6d565b905060006115f6866112736009548561166690919063ffffffff16565b600060098190556006546040519293506001600160a01b031691839181818185875af1925050503d8060008114611649576040519150601f19603f3d011682016040523d82523d6000602084013e61164e565b606091505b505050505050505050505b600a805460ff191690555b565b60008260000361167857506000610784565b60006116848385611e56565b9050826116918583611e6d565b146115745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610853565b600061157483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611aaf565b6001600160a01b03831661178e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610853565b6001600160a01b0382166117f05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610853565b61182d81604051806060016040528060268152602001611f1e602691396001600160a01b03861660009081526020819052604090205491906114db565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461185c9082611515565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610f78565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118e2576118e2611dd2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119849190611e8f565b8160018151811061199757611997611dd2565b60200260200101906001600160a01b031690816001600160a01b0316815250506119e2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e60565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a37908590600090869030904290600401611eac565b600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505050565b600061157483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114db565b60008183611ad05760405162461bcd60e51b81526004016108539190611add565b50600061150c8486611e6d565b600060208083528351808285015260005b81811015611b0a57858101830151858201604001528201611aee565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611b4057600080fd5b50565b8035611b4e81611b2b565b919050565b60008060408385031215611b6657600080fd5b8235611b7181611b2b565b946020939093013593505050565b600080600060608486031215611b9457600080fd5b8335611b9f81611b2b565b92506020840135611baf81611b2b565b929592945050506040919091013590565b600060208284031215611bd257600080fd5b5035919050565b600060208284031215611beb57600080fd5b813561157481611b2b565b60008060408385031215611c0957600080fd5b8235611c1481611b2b565b91506020830135611c2481611b2b565b809150509250929050565b8015158114611b4057600080fd5b60008060408385031215611c5057600080fd5b8235611c5b81611b2b565b91506020830135611c2481611c2f565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611c9457600080fd5b823567ffffffffffffffff80821115611cac57600080fd5b818501915085601f830112611cc057600080fd5b813581811115611cd257611cd2611c6b565b8060051b604051601f19603f83011681018181108582111715611cf757611cf7611c6b565b604052918252848201925083810185019188831115611d1557600080fd5b938501935b82851015611d3a57611d2b85611b43565b84529385019392850192611d1a565b98975050505050505050565b600181811c90821680611d5a57607f821691505b602082108103611d7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611dc757600080fd5b815161157481611c2f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e1057611e10611de8565b5060010190565b600060208284031215611e2957600080fd5b5051919050565b8082018082111561078457610784611de8565b8181038181111561078457610784611de8565b808202811582820484141761078457610784611de8565b600082611e8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611ea157600080fd5b815161157481611b2b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611efc5784516001600160a01b031683529383019391830191600101611ed7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122004983df87210cdd3a7637e89652108f33949deeefb542da33b8e08154699601b64736f6c63430008130033

Deployed Bytecode Sourcemap

27710:7651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28105:34;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;28105:34:0;;;;;;;;13868:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16035:169::-;;;;;;;;;;-1:-1:-1;16035:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;16035:169:0;1344:187:1;27789:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1727:32:1;;;1709:51;;1697:2;1682:18;27789:51:0;1536:230:1;14988:108:0;;;;;;;;;;-1:-1:-1;15076:12:0;;14988:108;;28035:33;;;;;;;;;;;;;;;;16686:355;;;;;;;;;;-1:-1:-1;16686:355:0;;;;;:::i;:::-;;:::i;14830:93::-;;;;;;;;;;-1:-1:-1;14830:93:0;;14913:2;2374:36:1;;2362:2;2347:18;14830:93:0;2232:184:1;17450:218:0;;;;;;;;;;-1:-1:-1;17450:218:0;;;;;:::i;:::-;;:::i;35133:164::-;;;;;;;;;;-1:-1:-1;35133:164:0;;;;;:::i;:::-;;:::i;:::-;;27847:38;;;;;;;;;;;;;;;27978:21;;;;;;;;;;;;;;;;30346:125;;;;;;;;;;-1:-1:-1;30346:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;30435:28:0;30411:4;30435:28;;;:19;:28;;;;;;;;;30346:125;34704:258;;;;;;;;;;-1:-1:-1;34704:258:0;;;;;:::i;:::-;;:::i;29929:219::-;;;;;;;;;;-1:-1:-1;29929:219:0;;;;;:::i;:::-;;:::i;28146:30::-;;;;;;;;;;-1:-1:-1;28146:30:0;;;;;;;;28183:29;;;;;;;;;;-1:-1:-1;28183:29:0;;;;;;;;;;;15159:127;;;;;;;;;;-1:-1:-1;15159:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15260:18:0;15233:7;15260:18;;;;;;;;;;;;15159:127;6300:148;;;;;;;;;;;;;:::i;27894:75::-;;;;;;;;;;-1:-1:-1;27894:75:0;;;;-1:-1:-1;;;;;27894:75:0;;;34974:151;;;;;;;;;;-1:-1:-1;34974:151:0;;;;;:::i;:::-;;:::i;30479:108::-;;;;;;;;;;;;;:::i;5658:79::-;;;;;;;;;;-1:-1:-1;5723:6:0;;-1:-1:-1;;;;;5723:6:0;5658:79;;14087:104;;;;;;;;;;;;;:::i;28318:50::-;;;;;;;;;;-1:-1:-1;28318:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18171:269;;;;;;;;;;-1:-1:-1;18171:269:0;;;;;:::i;:::-;;:::i;15499:175::-;;;;;;;;;;-1:-1:-1;15499:175:0;;;;;:::i;:::-;;:::i;28421:54::-;;;;;;;;;;-1:-1:-1;28421:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;30156:182;;;;;;;;;;-1:-1:-1;30156:182:0;;;;;:::i;:::-;;:::i;28006:22::-;;;;;;;;;;;;;;;;34401:119;;;;;;;;;;;;;:::i;29753:168::-;;;;;;;;;;-1:-1:-1;29753:168:0;;;;;:::i;:::-;;:::i;15737:151::-;;;;;;;;;;-1:-1:-1;15737:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;15853:18:0;;;15826:7;15853:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15737:151;6603:244;;;;;;;;;;-1:-1:-1;6603:244:0;;;;;:::i;:::-;;:::i;34528:164::-;;;;;;;;;;-1:-1:-1;34528:164:0;;;;;:::i;:::-;;:::i;13868:100::-;13922:13;13955:5;13948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13868:100;:::o;16035:169::-;16118:4;16135:39;4892:10;16158:7;16167:6;16135:8;:39::i;:::-;-1:-1:-1;16192:4:0;16035:169;;;;;:::o;16686:355::-;16826:4;16843:36;16853:6;16861:9;16872:6;16843:9;:36::i;:::-;16890:121;16899:6;4892:10;16921:89;16959:6;16921:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16921:19:0;;;;;;:11;:19;;;;;;;;4892:10;16921:33;;;;;;;;;;:37;:89::i;:::-;16890:8;:121::i;:::-;-1:-1:-1;17029:4:0;16686:355;;;;;:::o;17450:218::-;4892:10;17538:4;17587:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17587:34:0;;;;;;;;;;17538:4;;17555:83;;17578:7;;17587:50;;17626:10;17587:38;:50::i;35133:164::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;;;;;;;;;35209:12:::1;35254:7;5723:6:::0;;-1:-1:-1;;;;;5723:6:0;;5658:79;35254:7:::1;-1:-1:-1::0;;;;;35246:21:0::1;35275:9;35246:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;35133:164:0:o;34704:258::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;34807:14:::1;:34:::0;;-1:-1:-1;;;;;;34807:34:0::1;::::0;-1:-1:-1;;;;;34807:34:0;::::1;;;::::0;;34852:51:::1;34861:6:::0;34807:34;-1:-1:-1;;34852:8:0::1;:51::i;:::-;34914:40;34930:17;34949:4;34914:15;:40::i;:::-;34704:258:::0;;:::o;29929:219::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;30035:15:::1;:33:::0;;-1:-1:-1;;;;;;30035:33:0::1;-1:-1:-1::0;;;;;30035:33:0;::::1;::::0;;::::1;::::0;;;30084:56:::1;::::0;30035:33;;30084:56:::1;::::0;-1:-1:-1;;30084:56:0::1;29929:219:::0;:::o;6300:148::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;6391:6:::1;::::0;6370:40:::1;::::0;6407:1:::1;::::0;-1:-1:-1;;;;;6391:6:0::1;::::0;6370:40:::1;::::0;6407:1;;6370:40:::1;6421:6;:19:::0;;-1:-1:-1;;;;;;6421:19:0::1;::::0;;6300:148::o;34974:151::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;35078:12:::1;-1:-1:-1::0;;;;;35071:29:0::1;;35101:7;5723:6:::0;;-1:-1:-1;;;;;5723:6:0;;5658:79;35101:7:::1;35071:46;::::0;-1:-1:-1;;;;;;35071:46:0::1;::::0;;;;;;-1:-1:-1;;;;;6375:32:1;;;35071:46:0::1;::::0;::::1;6357:51:1::0;6424:18;;;6417:34;;;6330:18;;35071:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34974:151:::0;;:::o;30479:108::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;30534:9:::1;:16:::0;;-1:-1:-1;;30561:18:0;;;;;30479:108::o;14087:104::-;14143:13;14176:7;14169:14;;;;;:::i;18171:269::-;18264:4;18281:129;4892:10;18304:7;18313:96;18352:15;18313:96;;;;;;;;;;;;;;;;;4892:10;18313:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18313:34:0;;;;;;;;;;;;:38;:96::i;15499:175::-;15585:4;15602:42;4892:10;15626:9;15637:6;15602:9;:42::i;30156:182::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30241:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;30241:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30296:34;;1484:41:1;;;30296:34:0::1;::::0;1457:18:1;30296:34:0::1;;;;;;;30156:182:::0;;:::o;34401:119::-;34465:14;;34452:60;;-1:-1:-1;;;34452:60:0;;34501:10;34452:60;;;1709:51:1;34465:14:0;;;;-1:-1:-1;;;;;34465:14:0;;34452:48;;1682:18:1;;34452:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34401:119::o;29753:168::-;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;29828:6:::1;29823:91;29844:6;:13;29840:1;:17;29823:91;;;29898:4;29879:5;:16;29885:6;29892:1;29885:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29879:16:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29879:16:0;:23;;-1:-1:-1;;29879:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29859:3;::::1;::::0;::::1;:::i;:::-;;;;29823:91;;6603:244:::0;5870:6;;-1:-1:-1;;;;;5870:6:0;4892:10;5870:22;5862:67;;;;-1:-1:-1;;;5862:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6692:22:0;::::1;6684:73;;;::::0;-1:-1:-1;;;6684:73:0;;7318:2:1;6684:73:0::1;::::0;::::1;7300:21:1::0;7357:2;7337:18;;;7330:30;7396:34;7376:18;;;7369:62;-1:-1:-1;;;7447:18:1;;;7440:36;7493:19;;6684:73:0::1;7116:402:1::0;6684:73:0::1;6794:6;::::0;6773:38:::1;::::0;-1:-1:-1;;;;;6773:38:0;;::::1;::::0;6794:6:::1;::::0;6773:38:::1;::::0;6794:6:::1;::::0;6773:38:::1;6822:6;:17:::0;;-1:-1:-1;;;;;;6822:17:0::1;-1:-1:-1::0;;;;;6822:17:0;;;::::1;::::0;;;::::1;::::0;;6603:244::o;34528:164::-;34634:14;;34621:63;;-1:-1:-1;;;34621:63:0;;-1:-1:-1;;;;;1727:32:1;;;34621:63:0;;;1709:51:1;34594:7:0;;34634:14;;;;;34621:50;;1682:18:1;;34621:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21357:380::-;-1:-1:-1;;;;;21493:19:0;;21485:68;;;;-1:-1:-1;;;21485:68:0;;7914:2:1;21485:68:0;;;7896:21:1;7953:2;7933:18;;;7926:30;7992:34;7972:18;;;7965:62;-1:-1:-1;;;8043:18:1;;;8036:34;8087:19;;21485:68:0;7712:400:1;21485:68:0;-1:-1:-1;;;;;21572:21:0;;21564:68;;;;-1:-1:-1;;;21564:68:0;;8319:2:1;21564:68:0;;;8301:21:1;8358:2;8338:18;;;8331:30;8397:34;8377:18;;;8370:62;-1:-1:-1;;;8448:18:1;;;8441:32;8490:19;;21564:68:0;8117:398:1;21564:68:0;-1:-1:-1;;;;;21645:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21697:32;;160:25:1;;;21697:32:0;;133:18:1;21697:32:0;;;;;;;;21357:380;;;:::o;30599:2368::-;30728:9;;;;;;;30723:179;;-1:-1:-1;;;;;30780:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30809:23:0;;;;;;:19;:23;;;;;;;;30780:52;30754:136;;;;-1:-1:-1;;;30754:136:0;;8722:2:1;30754:136:0;;;8704:21:1;8761:2;8741:18;;;8734:30;-1:-1:-1;;;8780:18:1;;;8773:52;8842:18;;30754:136:0;8520:346:1;30754:136:0;30929:1;30920:6;:10;30912:64;;;;-1:-1:-1;;;30912:64:0;;9073:2:1;30912:64:0;;;9055:21:1;9112:2;9092:18;;;9085:30;9151:34;9131:18;;;9124:62;-1:-1:-1;;;9202:18:1;;;9195:39;9251:19;;30912:64:0;8871:405:1;30912:64:0;-1:-1:-1;;;;;30996:11:0;;;;;;:5;:11;;;;;;;;30995:12;:26;;;;-1:-1:-1;;;;;;31012:9:0;;;;;;:5;:9;;;;;;;;31011:10;30995:26;30987:64;;;;-1:-1:-1;;;30987:64:0;;9483:2:1;30987:64:0;;;9465:21:1;9522:2;9502:18;;;9495:30;9561:27;9541:18;;;9534:55;9606:18;;30987:64:0;9281:349:1;30987:64:0;31115:4;31066:28;15260:18;;;;;;;;;;;31171:19;;31147:43;;;;;;;31220:35;;-1:-1:-1;31244:11:0;;;;31220:35;:61;;;;-1:-1:-1;31273:8:0;;;;31272:9;31220:61;:102;;;;-1:-1:-1;;;;;;31299:23:0;;;;;;:17;:23;;;;;;;;31298:24;31220:102;:145;;;;-1:-1:-1;;;;;;31340:25:0;;;;;;:19;:25;;;;;;;;31339:26;31220:145;:186;;;;-1:-1:-1;;;;;;31383:23:0;;;;;;:19;:23;;;;;;;;31382:24;31220:186;31203:316;;;31433:8;:15;;-1:-1:-1;;31433:15:0;31444:4;31433:15;;;31463:13;:11;:13::i;:::-;31491:8;:16;;-1:-1:-1;;31491:16:0;;;31203:316;31555:8;;-1:-1:-1;;;;;31664:25:0;;31539:12;31664:25;;;:19;:25;;;;;;31555:8;;;;31554:9;;31664:25;;:52;;-1:-1:-1;;;;;;31693:23:0;;;;;;:19;:23;;;;;;;;31664:52;31661:99;;;-1:-1:-1;31743:5:0;31661:99;-1:-1:-1;;;;;31821:21:0;;;31780:12;31821:21;;;:17;:21;;;;;;;31866:23;;;;;;;;31780:12;;31821:21;;;;;31866:23;31974:940;;;;32004:6;32000:749;;;32037:28;32061:3;32037:19;32048:7;;32037:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;32097:14;;-1:-1:-1;;;;;32158:21:0;;;;;;;:17;:21;;;;;;;;32084:96;;-1:-1:-1;;;32084:96:0;;9849:32:1;;;32084:96:0;;;9831:51:1;9898:18;;;9891:34;;;32158:21:0;;;;9968:14:1;9961:22;9941:18;;;9934:50;32030:35:0;;-1:-1:-1;32097:14:0;;;;;;32084:59;;9804:18:1;;32084:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32221:4;32199:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;32000:749:0;;-1:-1:-1;32000:749:0;;32263:5;32260:489;;;32293:27;32316:3;32293:18;32304:6;;32293;:10;;:18;;;;:::i;:27::-;32352:14;;-1:-1:-1;;;;;32413:21:0;;;;;;;:17;:21;;;;;;;;32339:96;;-1:-1:-1;;;32339:96:0;;9849:32:1;;;32339:96:0;;;9831:51:1;9898:18;;;9891:34;;;32413:21:0;;;;9968:14:1;9961:22;9941:18;;;9934:50;32286:34:0;;-1:-1:-1;32352:14:0;;;;;;32339:59;;9804:18:1;;32339:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;32457:22:0;;;;;;:18;:22;;;;;;:27;;32454:94;;-1:-1:-1;;;;;32508:22:0;;;;;;:18;:22;;;;;32533:15;32508:40;;32454:94;32591:4;32569:18;;:26;;;;;;;:::i;32260:489::-;32649:14;;-1:-1:-1;;;;;32711:21:0;;;;;;;:17;:21;;;;;;;;32636:97;;-1:-1:-1;;;32636:97:0;;9849:32:1;;;32636:97:0;;;9831:51:1;9898:18;;;9891:34;;;32711:21:0;;;;32710:22;9941:18:1;;;9934:50;32649:14:0;;;;;;32636:59;;9804:18:1;;32636:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32260:489;32780:8;;32777:89;;32808:42;32824:4;32838;32845;32808:15;:42::i;:::-;32888:14;32898:4;32888:14;;:::i;:::-;;;31974:940;32926:33;32942:4;32948:2;32952:6;32926:15;:33::i;:::-;30712:2255;;;;;;30599:2368;;;:::o;1222:192::-;1308:7;1344:12;1336:6;;;;1328:29;;;;-1:-1:-1;;;1328:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1368:9:0;1380:5;1384:1;1380;:5;:::i;:::-;1368:17;1222:192;-1:-1:-1;;;;;1222:192:0:o;319:181::-;377:7;;409:5;413:1;409;:5;:::i;:::-;397:17;;438:1;433;:6;;425:46;;;;-1:-1:-1;;;425:46:0;;10460:2:1;425:46:0;;;10442:21:1;10499:2;10479:18;;;10472:30;10538:29;10518:18;;;10511:57;10585:18;;425:46:0;10258:351:1;425:46:0;491:1;319:181;-1:-1:-1;;;319:181:0:o;32975:809::-;28678:8;;;;28673:104;;28703:8;:15;;-1:-1:-1;;28703:15:0;28714:4;28703:15;;;33068:4:::1;-1:-1:-1::0;15260:18:0;;;;;;;;;;;33113::::1;::::0;33024:50;;-1:-1:-1;33085:25:0::1;33178:20:::0;;;:46:::1;;-1:-1:-1::0;33202:22:0;;33178:46:::1;33175:60;;;33227:7;;;;;33175:60;33284:15:::0;33348:21:::1;33382:36;33284:15:::0;33382:16:::1;:36::i;:::-;33440:18;33461:44;:21;33487:17:::0;33461:25:::1;:44::i;:::-;33440:65;;33526:33;33562:57;33601:17;33562:34;33577:18;;33562:10;:14;;:34;;;;:::i;:57::-;33657:1;33636:18;:22:::0;;;33693:15:::1;::::0;33685:91:::1;::::0;33526:93;;-1:-1:-1;;;;;;33693:15:0::1;::::0;33526:93;;33685:91;33657:1;33685:91;33526:93;33693:15;33685:91:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;28733:1:0::1;28749:8:::0;:16;;-1:-1:-1;;28749:16:0;;;28673:104;32975:809::o;1673:471::-;1731:7;1976:1;1981;1976:6;1972:47;;-1:-1:-1;2006:1:0;1999:8;;1972:47;2031:9;2043:5;2047:1;2043;:5;:::i;:::-;2031:17;-1:-1:-1;2076:1:0;2067:5;2071:1;2031:17;2067:5;:::i;:::-;:10;2059:56;;;;-1:-1:-1;;;2059:56:0;;11211:2:1;2059:56:0;;;11193:21:1;11250:2;11230:18;;;11223:30;11289:34;11269:18;;;11262:62;-1:-1:-1;;;11340:18:1;;;11333:31;11381:19;;2059:56:0;11009:397:1;2620:132:0;2678:7;2705:39;2709:1;2712;2705:39;;;;;;;;;;;;;;;;;:3;:39::i;18930:573::-;-1:-1:-1;;;;;19070:20:0;;19062:70;;;;-1:-1:-1;;;19062:70:0;;11613:2:1;19062:70:0;;;11595:21:1;11652:2;11632:18;;;11625:30;11691:34;11671:18;;;11664:62;-1:-1:-1;;;11742:18:1;;;11735:35;11787:19;;19062:70:0;11411:401:1;19062:70:0;-1:-1:-1;;;;;19151:23:0;;19143:71;;;;-1:-1:-1;;;19143:71:0;;12019:2:1;19143:71:0;;;12001:21:1;12058:2;12038:18;;;12031:30;12097:34;12077:18;;;12070:62;-1:-1:-1;;;12148:18:1;;;12141:33;12191:19;;19143:71:0;11817:399:1;19143:71:0;19307;19329:6;19307:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19307:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;19287:17:0;;;:9;:17;;;;;;;;;;;:91;;;;19412:20;;;;;;;:32;;19437:6;19412:24;:32::i;:::-;-1:-1:-1;;;;;19389:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;19460:35;160:25:1;;;19389:20:0;;19460:35;;;;;;133:18:1;19460:35:0;14:177:1;33792:597:0;33942:16;;;33956:1;33942:16;;;;;;;;33918:21;;33942:16;;;;;;;;;;-1:-1:-1;33942:16:0;33918:40;;33987:4;33969;33974:1;33969:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33969:23:0;;;-1:-1:-1;;;;;33969:23:0;;;;;34013:15;-1:-1:-1;;;;;34013:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34003:4;34008:1;34003:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;34003:32:0;;;-1:-1:-1;;;;;34003:32:0;;;;;34048:62;34065:4;34080:15;34098:11;34048:8;:62::i;:::-;34157:224;;-1:-1:-1;;;34157:224:0;;-1:-1:-1;;;;;34157:15:0;:66;;;;:224;;34238:11;;34264:1;;34308:4;;34335;;34355:15;;34157:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33847:542;33792:597;:::o;783:136::-;841:7;868:43;872:1;875;868:43;;;;;;;;;;;;;;;;;:3;:43::i;3248:278::-;3334:7;3369:12;3362:5;3354:28;;;;-1:-1:-1;;;3354:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3393:9:0;3405:5;3409:1;3405;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:134::-;953:20;;982:31;953:20;982:31;:::i;:::-;885:134;;;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1771:456::-;1848:6;1856;1864;1917:2;1905:9;1896:7;1892:23;1888:32;1885:52;;;1933:1;1930;1923:12;1885:52;1972:9;1959:23;1991:31;2016:5;1991:31;:::i;:::-;2041:5;-1:-1:-1;2098:2:1;2083:18;;2070:32;2111:33;2070:32;2111:33;:::i;:::-;1771:456;;2163:7;;-1:-1:-1;;;2217:2:1;2202:18;;;;2189:32;;1771:456::o;2421:180::-;2480:6;2533:2;2521:9;2512:7;2508:23;2504:32;2501:52;;;2549:1;2546;2539:12;2501:52;-1:-1:-1;2572:23:1;;2421:180;-1:-1:-1;2421:180:1:o;2814:247::-;2873:6;2926:2;2914:9;2905:7;2901:23;2897:32;2894:52;;;2942:1;2939;2932:12;2894:52;2981:9;2968:23;3000:31;3025:5;3000:31;:::i;3066:388::-;3134:6;3142;3195:2;3183:9;3174:7;3170:23;3166:32;3163:52;;;3211:1;3208;3201:12;3163:52;3250:9;3237:23;3269:31;3294:5;3269:31;:::i;:::-;3319:5;-1:-1:-1;3376:2:1;3361:18;;3348:32;3389:33;3348:32;3389:33;:::i;:::-;3441:7;3431:17;;;3066:388;;;;;:::o;3459:118::-;3545:5;3538:13;3531:21;3524:5;3521:32;3511:60;;3567:1;3564;3557:12;3582:382;3647:6;3655;3708:2;3696:9;3687:7;3683:23;3679:32;3676:52;;;3724:1;3721;3714:12;3676:52;3763:9;3750:23;3782:31;3807:5;3782:31;:::i;:::-;3832:5;-1:-1:-1;3889:2:1;3874:18;;3861:32;3902:30;3861:32;3902:30;:::i;3969:127::-;4030:10;4025:3;4021:20;4018:1;4011:31;4061:4;4058:1;4051:15;4085:4;4082:1;4075:15;4101:1121;4185:6;4216:2;4259;4247:9;4238:7;4234:23;4230:32;4227:52;;;4275:1;4272;4265:12;4227:52;4315:9;4302:23;4344:18;4385:2;4377:6;4374:14;4371:34;;;4401:1;4398;4391:12;4371:34;4439:6;4428:9;4424:22;4414:32;;4484:7;4477:4;4473:2;4469:13;4465:27;4455:55;;4506:1;4503;4496:12;4455:55;4542:2;4529:16;4564:2;4560;4557:10;4554:36;;;4570:18;;:::i;:::-;4616:2;4613:1;4609:10;4648:2;4642:9;4711:2;4707:7;4702:2;4698;4694:11;4690:25;4682:6;4678:38;4766:6;4754:10;4751:22;4746:2;4734:10;4731:18;4728:46;4725:72;;;4777:18;;:::i;:::-;4813:2;4806:22;4863:18;;;4897:15;;;;-1:-1:-1;4939:11:1;;;4935:20;;;4967:19;;;4964:39;;;4999:1;4996;4989:12;4964:39;5023:11;;;;5043:148;5059:6;5054:3;5051:15;5043:148;;;5125:23;5144:3;5125:23;:::i;:::-;5113:36;;5076:12;;;;5169;;;;5043:148;;;5210:6;4101:1121;-1:-1:-1;;;;;;;;4101:1121:1:o;5227:380::-;5306:1;5302:12;;;;5349;;;5370:61;;5424:4;5416:6;5412:17;5402:27;;5370:61;5477:2;5469:6;5466:14;5446:18;5443:38;5440:161;;5523:10;5518:3;5514:20;5511:1;5504:31;5558:4;5555:1;5548:15;5586:4;5583:1;5576:15;5440:161;;5227:380;;;:::o;5612:356::-;5814:2;5796:21;;;5833:18;;;5826:30;5892:34;5887:2;5872:18;;5865:62;5959:2;5944:18;;5612:356::o;6462:245::-;6529:6;6582:2;6570:9;6561:7;6557:23;6553:32;6550:52;;;6598:1;6595;6588:12;6550:52;6630:9;6624:16;6649:28;6671:5;6649:28;:::i;6712:127::-;6773:10;6768:3;6764:20;6761:1;6754:31;6804:4;6801:1;6794:15;6828:4;6825:1;6818:15;6844:127;6905:10;6900:3;6896:20;6893:1;6886:31;6936:4;6933:1;6926:15;6960:4;6957:1;6950:15;6976:135;7015:3;7036:17;;;7033:43;;7056:18;;:::i;:::-;-1:-1:-1;7103:1:1;7092:13;;6976:135::o;7523:184::-;7593:6;7646:2;7634:9;7625:7;7621:23;7617:32;7614:52;;;7662:1;7659;7652:12;7614:52;-1:-1:-1;7685:16:1;;7523:184;-1:-1:-1;7523:184:1:o;9995:125::-;10060:9;;;10081:10;;;10078:36;;;10094:18;;:::i;10125:128::-;10192:9;;;10213:11;;;10210:37;;;10227:18;;:::i;10614:168::-;10687:9;;;10718;;10735:15;;;10729:22;;10715:37;10705:71;;10756:18;;:::i;10787:217::-;10827:1;10853;10843:132;;10897:10;10892:3;10888:20;10885:1;10878:31;10932:4;10929:1;10922:15;10960:4;10957:1;10950:15;10843:132;-1:-1:-1;10989:9:1;;10787:217::o;12221:251::-;12291:6;12344:2;12332:9;12323:7;12319:23;12315:32;12312:52;;;12360:1;12357;12350:12;12312:52;12392:9;12386:16;12411:31;12436:5;12411:31;:::i;12477:980::-;12739:4;12787:3;12776:9;12772:19;12818:6;12807:9;12800:25;12844:2;12882:6;12877:2;12866:9;12862:18;12855:34;12925:3;12920:2;12909:9;12905:18;12898:31;12949:6;12984;12978:13;13015:6;13007;13000:22;13053:3;13042:9;13038:19;13031:26;;13092:2;13084:6;13080:15;13066:29;;13113:1;13123:195;13137:6;13134:1;13131:13;13123:195;;;13202:13;;-1:-1:-1;;;;;13198:39:1;13186:52;;13293:15;;;;13258:12;;;;13234:1;13152:9;13123:195;;;-1:-1:-1;;;;;;;13374:32:1;;;;13369:2;13354:18;;13347:60;-1:-1:-1;;;13438:3:1;13423:19;13416:35;13335:3;12477:980;-1:-1:-1;;;12477:980:1:o

Swarm Source

ipfs://04983df87210cdd3a7637e89652108f33949deeefb542da33b8e08154699601b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.