ETH Price: $3,389.82 (-1.51%)
Gas: 2 Gwei

Contract

0xbFbCD9B16d0A55e8B0070551271180E0b7B8388E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve201061032024-06-16 18:20:2312 days ago1718562023IN
0xbFbCD9B1...0b7B8388E
0 ETH0.000082023.38108461
Approve184234112023-10-24 23:32:23248 days ago1698190343IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0005943124.49888795
Approve177900902023-07-28 7:33:35337 days ago1690529615IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0009356338.56861327
Approve173376292023-05-25 17:25:59400 days ago1685035559IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0020056843.09307817
Approve173353042023-05-25 9:34:35401 days ago1685007275IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0016144134.68648559
Approve173142512023-05-22 10:29:35404 days ago1684751375IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0013407828.94929259
Approve172890292023-05-18 21:13:23407 days ago1684444403IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0012256145.89819791
Approve172890162023-05-18 21:10:47407 days ago1684444247IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0023781351.0295741
Approve172766272023-05-17 3:13:59409 days ago1684293239IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0020996745.11260877
Approve172752572023-05-16 22:36:47409 days ago1684276607IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0029625863.91635693
Approve172751632023-05-16 22:17:47409 days ago1684275467IN
0xbFbCD9B1...0b7B8388E
0 ETH0.002877761.74932523
Approve172750622023-05-16 21:57:35409 days ago1684274255IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0029487763.3558466
Approve172750512023-05-16 21:55:23409 days ago1684274123IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0028475961.18199515
Approve172749432023-05-16 21:32:59409 days ago1684272779IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0029997164.80123476
Approve172746702023-05-16 20:37:11409 days ago1684269431IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0026024556.21953156
Approve172746592023-05-16 20:34:59409 days ago1684269299IN
0xbFbCD9B1...0b7B8388E
0 ETH0.002773859.92097868
Approve172746572023-05-16 20:34:35409 days ago1684269275IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0029866564.08711145
Approve172746552023-05-16 20:34:11409 days ago1684269251IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0029190762.63699962
Approve172746452023-05-16 20:32:11409 days ago1684269131IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0028009160.17916155
Approve172508352023-05-13 11:43:59413 days ago1683978239IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0020159543.56092505
Approve171786512023-05-03 7:13:59423 days ago1683098039IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0026038455.94501088
Approve171617412023-04-30 22:09:59425 days ago1682892599IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0022513348.37100599
Approve171066272023-04-23 4:25:47433 days ago1682223947IN
0xbFbCD9B1...0b7B8388E
0 ETH0.001699736.4719389
Approve171016892023-04-22 11:48:59434 days ago1682164139IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0007801332.15861359
Approve170810422023-04-19 13:48:23436 days ago1681912103IN
0xbFbCD9B1...0b7B8388E
0 ETH0.0033822672.57604874
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
173378702023-05-25 18:14:35400 days ago1685038475
0xbFbCD9B1...0b7B8388E
0.00936305 ETH
173378702023-05-25 18:14:35400 days ago1685038475
0xbFbCD9B1...0b7B8388E
0.00346306 ETH
173378702023-05-25 18:14:35400 days ago1685038475
0xbFbCD9B1...0b7B8388E
0.00128257 ETH
173378702023-05-25 18:14:35400 days ago1685038475
0xbFbCD9B1...0b7B8388E
0.00288588 ETH
173378702023-05-25 18:14:35400 days ago1685038475
0xbFbCD9B1...0b7B8388E
0.01442942 ETH
173142792023-05-22 10:35:11404 days ago1684751711
0xbFbCD9B1...0b7B8388E
0.00751092 ETH
173142792023-05-22 10:35:11404 days ago1684751711
0xbFbCD9B1...0b7B8388E
0.00277837 ETH
173142792023-05-22 10:35:11404 days ago1684751711
0xbFbCD9B1...0b7B8388E
0.00102804 ETH
173142792023-05-22 10:35:11404 days ago1684751711
0xbFbCD9B1...0b7B8388E
0.00231531 ETH
173142792023-05-22 10:35:11404 days ago1684751711
0xbFbCD9B1...0b7B8388E
0.01157657 ETH
172752402023-05-16 22:33:23409 days ago1684276403
0xbFbCD9B1...0b7B8388E
0.02430165 ETH
172752402023-05-16 22:33:23409 days ago1684276403
0xbFbCD9B1...0b7B8388E
0.00898183 ETH
172752402023-05-16 22:33:23409 days ago1684276403
0xbFbCD9B1...0b7B8388E
0.00334402 ETH
172752402023-05-16 22:33:23409 days ago1684276403
0xbFbCD9B1...0b7B8388E
0.00748486 ETH
172752402023-05-16 22:33:23409 days ago1684276403
0xbFbCD9B1...0b7B8388E
0.03742433 ETH
172750672023-05-16 21:58:35409 days ago1684274315
0xbFbCD9B1...0b7B8388E
0.02329252 ETH
172750672023-05-16 21:58:35409 days ago1684274315
0xbFbCD9B1...0b7B8388E
0.00861001 ETH
172750672023-05-16 21:58:35409 days ago1684274315
0xbFbCD9B1...0b7B8388E
0.00320249 ETH
172750672023-05-16 21:58:35409 days ago1684274315
0xbFbCD9B1...0b7B8388E
0.00717501 ETH
172750672023-05-16 21:58:35409 days ago1684274315
0xbFbCD9B1...0b7B8388E
0.03587506 ETH
172746922023-05-16 20:41:47409 days ago1684269707
0xbFbCD9B1...0b7B8388E
0.02849064 ETH
172746922023-05-16 20:41:47409 days ago1684269707
0xbFbCD9B1...0b7B8388E
0.01052975 ETH
172746922023-05-16 20:41:47409 days ago1684269707
0xbFbCD9B1...0b7B8388E
0.00392121 ETH
172746922023-05-16 20:41:47409 days ago1684269707
0xbFbCD9B1...0b7B8388E
0.00877479 ETH
172746922023-05-16 20:41:47409 days ago1684269707
0xbFbCD9B1...0b7B8388E
0.04387398 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SHIBASNIPE

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-26
*/

// SPDX-License-Identifier: MIT

/*
    https://t.me/shibaarmysnipe
*/

pragma solidity 0.8.10;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ERC20 is Context, IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    uint8 private _decimals; 
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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;
}

contract SHIBASNIPE is ERC20, Ownable {
    IUniswapV2Router02 private immutable uniswapV2Router;
    IUniswapV2Router02 private immutable shibaswapRouter;

    address public immutable uniswapV2Pair;
    address public immutable shibaswapPair;

    bool private swapping;

    address public sniperDevelopment;
    address public sniperOwner; 

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapBack = false;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;

	uint256 public liquidityTokens;
    uint256 public marketingTokens;
    uint256 public tradingActiveBlock; 

    uint8 private DECIMALS = 18;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public AMM;

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    constructor() ERC20("Shiba Army", "SHIBASNIPE", DECIMALS) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        IUniswapV2Router02 _shibaswapRouter = IUniswapV2Router02(
            0x03f7724180AA6b939894B5Ca4314783B0b36b329
        );

        sniperDevelopment = address(0x3C82888b90f628bc4b5f54F25d4964A74A35781a); 
        sniperOwner = address(0xC5d3807ccF68821e2954711c1E0EF290b4EdbCF6);

        uint256 _buyLiquidityFee = 0;
        uint256 _buyMarketingFee = 30;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellMarketingFee = 40;

        uint256 totalSupply = 1 * 1e9 * 10**DECIMALS;

        maxTransactionAmount = 2 * 1e7 * 10**DECIMALS;
        maxWallet = 2 * 1e7 * 10**DECIMALS;

        swapTokensAtAmount = (totalSupply * 10) / 10000; 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        excludeFromMaxTransaction(address(_shibaswapRouter), true);
        shibaswapRouter = _shibaswapRouter;

        shibaswapPair = IUniswapV2Factory(_shibaswapRouter.factory())
            .createPair(address(this), _shibaswapRouter.WETH());
        excludeFromMaxTransaction(address(shibaswapPair), true);
        _setAutomatedMarketMakerPair(address(shibaswapPair), true);

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapBack = true;
        tradingActiveBlock = block.number;
    }

    function setFees(uint256 _buyLiquidityFee, uint256 _buyMarketingFee, uint256 _sellLiquidityFee, uint256 _sellMarketingFee) external onlyOwner {
        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
    } 

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapTokensAtAmount = newAmount;
        return true;
    }
	
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapBack(bool on) external onlyOwner {
        swapBack = on;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from AMM"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        AMM[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    AMM[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    AMM[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapBack &&
            !swapping &&
            !AMM[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            doSwap();

            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;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {

            // on sell
            if (AMM[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                liquidityTokens += (fees * sellLiquidityFee) / sellTotalFees;
                marketingTokens += (fees * sellMarketingFee) / sellTotalFees;                
            }
            // on buy
            else if (AMM[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                liquidityTokens += (fees * buyLiquidityFee) / buyTotalFees;
                marketingTokens += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function swapTokens(uint256 tokenAmount) private {
        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, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            sniperDevelopment,
            block.timestamp
        );
    }

    function doSwap() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = (contractBalance * liquidityTokens) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - tokensForLiquidity;

        uint256 initialETHBalance = address(this).balance;

        swapTokens(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
	
        uint256 ethMarketing = ethBalance * marketingTokens / totalTokensToSwap;
        uint256 ethForOwner = ethMarketing * 3 / 10;

        uint256 ethLiquidity = ethBalance - ethMarketing;

        liquidityTokens = 0;
        marketingTokens = 0;

        if (tokensForLiquidity > 0 && ethLiquidity > 0) {
            addLiquidity(tokensForLiquidity, ethLiquidity);
        }
        //there will be no leftover eth in the contract 
        (success, ) = address(sniperOwner).call{value: ethForOwner}("");
        (success, ) = address(sniperDevelopment).call{value: address(this).balance}("");
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"","type":"address"}],"name":"AMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shibaswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sniperDevelopment","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sniperOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[{"internalType":"bool","name":"on","type":"bool"}],"name":"updateSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600c805462ffffff191660011790556016805460ff191660121790553480156200002e57600080fd5b50604080518082018252600a8082526953686962612041726d7960b01b60208084019182528451808601909552918452695348494241534e49504560b01b91840191909152601654825192939260ff9091169162000090916004919062000874565b508151620000a690600590602085019062000874565b506003805460ff191660ff9290921691909117905550620000d09050620000ca3390565b620005c5565b600780546001600160a01b0319908116733c82888b90f628bc4b5f54f25d4964a74a35781a179091556008805490911673c5d3807ccf68821e2954711c1e0ef290b4edbcf6179055601654737a250d5630b4cf539739df2c5dacb4c659f2488d907303f7724180aa6b939894b5ca4314783b0b36b32990600090601e9082906028908290620001649060ff16600a62000a2f565b6200017490633b9aca0062000a47565b6016549091506200018a9060ff16600a62000a2f565b6200019a906301312d0062000a47565b600955601654620001b09060ff16600a62000a2f565b620001c0906301312d0062000a47565b600b55612710620001d382600a62000a47565b620001df919062000a69565b600a55620001ef87600162000617565b6001600160a01b03871660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200023a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000260919062000a8c565b6001600160a01b031663c9c6539630896001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000a8c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000322573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000348919062000a8c565b6001600160a01b031660c08190526200036390600162000617565b60c0516200037390600162000691565b6200038086600162000617565b6001600160a01b03861660a08190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620003cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f1919062000a8c565b6001600160a01b031663c9c6539630886001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000465919062000a8c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d9919062000a8c565b6001600160a01b031660e0819052620004f490600162000617565b60e0516200050490600162000691565b600e859055600f8490556200051a848662000ab7565b600d556011839055601282905562000533828462000ab7565b601055620005556200054d6006546001600160a01b031690565b6001620006e5565b62000562306001620006e5565b6200057161dead6001620006e5565b62000590620005886006546001600160a01b031690565b600162000617565b6200059d30600162000617565b620005ac61dead600162000617565b620005b833826200078f565b5050505050505062000b0f565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620006665760405162461bcd60e51b8152602060048201819052602482015260008051602062002c4783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6006546001600160a01b03163314620007305760405162461bcd60e51b8152602060048201819052602482015260008051602062002c4783398151915260448201526064016200065d565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007e75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200065d565b8060026000828254620007fb919062000ab7565b90915550506001600160a01b038216600090815260208190526040812080548392906200082a90849062000ab7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620008829062000ad2565b90600052602060002090601f016020900481019282620008a65760008555620008f1565b82601f10620008c157805160ff1916838001178555620008f1565b82800160010185558215620008f1579182015b82811115620008f1578251825591602001919060010190620008d4565b50620008ff92915062000903565b5090565b5b80821115620008ff576000815560010162000904565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009715781600019048211156200095557620009556200091a565b808516156200096357918102915b93841c939080029062000935565b509250929050565b6000826200098a5750600162000a29565b81620009995750600062000a29565b8160018114620009b25760028114620009bd57620009dd565b600191505062000a29565b60ff841115620009d157620009d16200091a565b50506001821b62000a29565b5060208310610133831016604e8410600b841016171562000a02575081810a62000a29565b62000a0e838362000930565b806000190482111562000a255762000a256200091a565b0290505b92915050565b600062000a4060ff84168362000979565b9392505050565b600081600019048311821515161562000a645762000a646200091a565b500290565b60008262000a8757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000a9f57600080fd5b81516001600160a01b038116811462000a4057600080fd5b6000821982111562000acd5762000acd6200091a565b500190565b600181811c9082168062000ae757607f821691505b6020821081141562000b0957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516120de62000b6960003960006105cc0152600081816103cd0152610b5701526000505060008181611a2a01528181611ae301528181611b1f01528181611b990152611c0101526120de6000f3fe60806040526004361061026b5760003560e01c80638b27306d11610144578063c9567bf9116100b6578063e2f456051161007a578063e2f456051461078f578063ee40166e146107a5578063f11a24d3146107bb578063f2fde38b146107d1578063f6374342146107f1578063f8b45b051461080757600080fd5b8063c9567bf9146106ce578063d257b34f146106e3578063d65d788614610703578063d85ba06314610733578063dd62ed3e1461074957600080fd5b80639a7a23d6116101085780639a7a23d614610619578063a457c2d714610639578063a9059cbb14610659578063bbc0c74214610679578063c024666814610698578063c8c8ebe4146106b857600080fd5b80638b27306d146105865780638da5cb5b1461059c578063910a8e95146105ba57806392136913146105ee57806395d89b411461060457600080fd5b80634fbee193116101dd57806370a08231116101a157806370a08231146104d0578063715018a61461050657806371e658401461051b578063751039fc1461053b5780637571336a146105505780637bce5a041461057057600080fd5b80634fbee1931461041f5780636a486a8e146104585780636ac5eeee1461046e5780636c027fd61461048e5780636fcba377146104ae57600080fd5b8063313ce5671161022f578063313ce5671461034157806338f7a86714610363578063395093511461039b57806349bd5a5e146103bb5780634a62bb65146103ef5780634b8ce6021461040957600080fd5b806306fdde0314610277578063095ea7b3146102a257806310d5de53146102d257806318160ddd1461030257806323b872dd1461032157600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61081d565b6040516102999190611c79565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004611ce3565b6108af565b6040519015158152602001610299565b3480156102de57600080fd5b506102c26102ed366004611d0f565b60186020526000908152604090205460ff1681565b34801561030e57600080fd5b506002545b604051908152602001610299565b34801561032d57600080fd5b506102c261033c366004611d33565b6108c5565b34801561034d57600080fd5b5060035460405160ff9091168152602001610299565b34801561036f57600080fd5b50600854610383906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103a757600080fd5b506102c26103b6366004611ce3565b610974565b3480156103c757600080fd5b506103837f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fb57600080fd5b50600c546102c29060ff1681565b34801561041557600080fd5b5061031360135481565b34801561042b57600080fd5b506102c261043a366004611d0f565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561046457600080fd5b5061031360105481565b34801561047a57600080fd5b50600c546102c29062010000900460ff1681565b34801561049a57600080fd5b50600754610383906001600160a01b031681565b3480156104ba57600080fd5b506104ce6104c9366004611d74565b6109b0565b005b3480156104dc57600080fd5b506103136104eb366004611d0f565b6001600160a01b031660009081526020819052604090205490565b34801561051257600080fd5b506104ce610a0e565b34801561052757600080fd5b506104ce610536366004611db6565b610a44565b34801561054757600080fd5b506102c2610a8a565b34801561055c57600080fd5b506104ce61056b366004611dd1565b610ac7565b34801561057c57600080fd5b50610313600f5481565b34801561059257600080fd5b5061031360145481565b3480156105a857600080fd5b506006546001600160a01b0316610383565b3480156105c657600080fd5b506103837f000000000000000000000000000000000000000000000000000000000000000081565b3480156105fa57600080fd5b5061031360125481565b34801561061057600080fd5b5061028c610b1c565b34801561062557600080fd5b506104ce610634366004611dd1565b610b2b565b34801561064557600080fd5b506102c2610654366004611ce3565b610bf1565b34801561066557600080fd5b506102c2610674366004611ce3565b610c8a565b34801561068557600080fd5b50600c546102c290610100900460ff1681565b3480156106a457600080fd5b506104ce6106b3366004611dd1565b610c97565b3480156106c457600080fd5b5061031360095481565b3480156106da57600080fd5b506104ce610d20565b3480156106ef57600080fd5b506102c26106fe366004611e06565b610d61565b34801561070f57600080fd5b506102c261071e366004611d0f565b60196020526000908152604090205460ff1681565b34801561073f57600080fd5b50610313600d5481565b34801561075557600080fd5b50610313610764366004611e1f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079b57600080fd5b50610313600a5481565b3480156107b157600080fd5b5061031360155481565b3480156107c757600080fd5b50610313600e5481565b3480156107dd57600080fd5b506104ce6107ec366004611d0f565b610d9c565b3480156107fd57600080fd5b5061031360115481565b34801561081357600080fd5b50610313600b5481565b60606004805461082c90611e58565b80601f016020809104026020016040519081016040528092919081815260200182805461085890611e58565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b5050505050905090565b60006108bc338484610e37565b50600192915050565b60006108d2848484610f5b565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561095c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109698533858403610e37565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108bc9185906109ab908690611ea9565b610e37565b6006546001600160a01b031633146109da5760405162461bcd60e51b815260040161095390611ec1565b600e849055600f8390556109ee8385611ea9565b600d5560118290556012819055610a058183611ea9565b60105550505050565b6006546001600160a01b03163314610a385760405162461bcd60e51b815260040161095390611ec1565b610a426000611602565b565b6006546001600160a01b03163314610a6e5760405162461bcd60e51b815260040161095390611ec1565b600c8054911515620100000262ff000019909216919091179055565b6006546000906001600160a01b03163314610ab75760405162461bcd60e51b815260040161095390611ec1565b50600c805460ff19169055600190565b6006546001600160a01b03163314610af15760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60606005805461082c90611e58565b6006546001600160a01b03163314610b555760405162461bcd60e51b815260040161095390611ec1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610be35760405162461bcd60e51b815260206004820152602360248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015262414d4d60e81b6064820152608401610953565b610bed8282611654565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b610c803385858403610e37565b5060019392505050565b60006108bc338484610f5b565b6006546001600160a01b03163314610cc15760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b03163314610d4a5760405162461bcd60e51b815260040161095390611ec1565b600c805462ffff0019166201010017905543601555565b6006546000906001600160a01b03163314610d8e5760405162461bcd60e51b815260040161095390611ec1565b50600a81905560015b919050565b6006546001600160a01b03163314610dc65760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b038116610e2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b610e3481611602565b50565b6001600160a01b038316610e995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b038216610efa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f815760405162461bcd60e51b815260040161095390611ef6565b6001600160a01b038216610fa75760405162461bcd60e51b815260040161095390611f3b565b80610fbd57610fb8838360006116a8565b505050565b600c5460ff1615611333576006546001600160a01b03848116911614801590610ff457506006546001600160a01b03838116911614155b801561100857506001600160a01b03821615155b801561101f57506001600160a01b03821661dead14155b80156110355750600654600160a01b900460ff16155b1561133357600c54610100900460ff166110cd576001600160a01b03831660009081526017602052604090205460ff168061108857506001600160a01b03821660009081526017602052604090205460ff165b6110cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610953565b6001600160a01b03831660009081526019602052604090205460ff16801561110e57506001600160a01b03821660009081526018602052604090205460ff16155b156111f2576009548111156111835760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610953565b600b546001600160a01b0383166000908152602081905260409020546111a99083611ea9565b11156111ed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610953565b611333565b6001600160a01b03821660009081526019602052604090205460ff16801561123357506001600160a01b03831660009081526018602052604090205460ff16155b156112a9576009548111156111ed5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610953565b6001600160a01b03821660009081526018602052604090205460ff1661133357600b546001600160a01b0383166000908152602081905260409020546112ef9083611ea9565b11156113335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610953565b30600090815260208190526040902054600a548110801590819061135f5750600c5462010000900460ff165b80156113755750600654600160a01b900460ff16155b801561139a57506001600160a01b03851660009081526019602052604090205460ff16155b80156113bf57506001600160a01b03851660009081526017602052604090205460ff16155b80156113e457506001600160a01b03841660009081526017602052604090205460ff16155b15611412576006805460ff60a01b1916600160a01b1790556114046117fd565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526017602052604090205460ff600160a01b90920482161591168061146057506001600160a01b03851660009081526017602052604090205460ff165b15611469575060005b600081156115ee576001600160a01b03861660009081526019602052604090205460ff16801561149b57506000601054115b15611523576064601054866114b09190611f7e565b6114ba9190611f9d565b9050601054601154826114cd9190611f7e565b6114d79190611f9d565b601360008282546114e89190611ea9565b90915550506010546012546114fd9083611f7e565b6115079190611f9d565b601460008282546115189190611ea9565b909155506115d09050565b6001600160a01b03871660009081526019602052604090205460ff16801561154d57506000600d54115b156115d0576064600d54866115629190611f7e565b61156c9190611f9d565b9050600d54600e548261157f9190611f7e565b6115899190611f9d565b6013600082825461159a9190611ea9565b9091555050600d54600f546115af9083611f7e565b6115b99190611f9d565b601460008282546115ca9190611ea9565b90915550505b80156115e1576115e18730836116a8565b6115eb8186611fbf565b94505b6115f98787876116a8565b50505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166116ce5760405162461bcd60e51b815260040161095390611ef6565b6001600160a01b0382166116f45760405162461bcd60e51b815260040161095390611f3b565b6001600160a01b0383166000908152602081905260409020548181101561176c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610953565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906117a3908490611ea9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ef91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006014546013546118219190611ea9565b90506000821580611830575081155b1561183a57505050565b600a54611848906014611f7e565b83111561186057600a5461185d906014611f7e565b92505b6000600283601354866118739190611f7e565b61187d9190611f9d565b6118879190611f9d565b905060006118958286611fbf565b9050476118a1826119d3565b60006118ad8247611fbf565b9050600086601454836118c09190611f7e565b6118ca9190611f9d565b90506000600a6118db836003611f7e565b6118e59190611f9d565b905060006118f38385611fbf565b600060138190556014559050861580159061190e5750600081115b1561191d5761191d8782611b93565b6008546040516001600160a01b03909116908390600081818185875af1925050503d806000811461196a576040519150601f19603f3d011682016040523d82523d6000602084013e61196f565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d80600081146119bf576040519150601f19603f3d011682016040523d82523d6000602084013e6119c4565b606091505b50505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a0857611a08611fd6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaa9190611fec565b81600181518110611abd57611abd611fd6565b60200260200101906001600160a01b031690816001600160a01b031681525050611b08307f000000000000000000000000000000000000000000000000000000000000000084610e37565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b5d908590600090869030904290600401612009565b600060405180830381600087803b158015611b7757600080fd5b505af1158015611b8b573d6000803e3d6000fd5b505050505050565b611bbe307f000000000000000000000000000000000000000000000000000000000000000084610e37565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015611c4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c72919061207a565b5050505050565b600060208083528351808285015260005b81811015611ca657858101830151858201604001528201611c8a565b81811115611cb8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e3457600080fd5b60008060408385031215611cf657600080fd5b8235611d0181611cce565b946020939093013593505050565b600060208284031215611d2157600080fd5b8135611d2c81611cce565b9392505050565b600080600060608486031215611d4857600080fd5b8335611d5381611cce565b92506020840135611d6381611cce565b929592945050506040919091013590565b60008060008060808587031215611d8a57600080fd5b5050823594602084013594506040840135936060013592509050565b80358015158114610d9757600080fd5b600060208284031215611dc857600080fd5b611d2c82611da6565b60008060408385031215611de457600080fd5b8235611def81611cce565b9150611dfd60208401611da6565b90509250929050565b600060208284031215611e1857600080fd5b5035919050565b60008060408385031215611e3257600080fd5b8235611e3d81611cce565b91506020830135611e4d81611cce565b809150509250929050565b600181811c90821680611e6c57607f821691505b60208210811415611e8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ebc57611ebc611e93565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615611f9857611f98611e93565b500290565b600082611fba57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611fd157611fd1611e93565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ffe57600080fd5b8151611d2c81611cce565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120595784516001600160a01b031683529383019391830191600101612034565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561208f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206b3f1acaca76a9c29ca34d12f329cf49b200e517a2471e48a081e86e07cf899f64736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80638b27306d11610144578063c9567bf9116100b6578063e2f456051161007a578063e2f456051461078f578063ee40166e146107a5578063f11a24d3146107bb578063f2fde38b146107d1578063f6374342146107f1578063f8b45b051461080757600080fd5b8063c9567bf9146106ce578063d257b34f146106e3578063d65d788614610703578063d85ba06314610733578063dd62ed3e1461074957600080fd5b80639a7a23d6116101085780639a7a23d614610619578063a457c2d714610639578063a9059cbb14610659578063bbc0c74214610679578063c024666814610698578063c8c8ebe4146106b857600080fd5b80638b27306d146105865780638da5cb5b1461059c578063910a8e95146105ba57806392136913146105ee57806395d89b411461060457600080fd5b80634fbee193116101dd57806370a08231116101a157806370a08231146104d0578063715018a61461050657806371e658401461051b578063751039fc1461053b5780637571336a146105505780637bce5a041461057057600080fd5b80634fbee1931461041f5780636a486a8e146104585780636ac5eeee1461046e5780636c027fd61461048e5780636fcba377146104ae57600080fd5b8063313ce5671161022f578063313ce5671461034157806338f7a86714610363578063395093511461039b57806349bd5a5e146103bb5780634a62bb65146103ef5780634b8ce6021461040957600080fd5b806306fdde0314610277578063095ea7b3146102a257806310d5de53146102d257806318160ddd1461030257806323b872dd1461032157600080fd5b3661027257005b600080fd5b34801561028357600080fd5b5061028c61081d565b6040516102999190611c79565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd366004611ce3565b6108af565b6040519015158152602001610299565b3480156102de57600080fd5b506102c26102ed366004611d0f565b60186020526000908152604090205460ff1681565b34801561030e57600080fd5b506002545b604051908152602001610299565b34801561032d57600080fd5b506102c261033c366004611d33565b6108c5565b34801561034d57600080fd5b5060035460405160ff9091168152602001610299565b34801561036f57600080fd5b50600854610383906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103a757600080fd5b506102c26103b6366004611ce3565b610974565b3480156103c757600080fd5b506103837f000000000000000000000000ff7cb8adb58dd80029fe894bfe485bcc4f419e9481565b3480156103fb57600080fd5b50600c546102c29060ff1681565b34801561041557600080fd5b5061031360135481565b34801561042b57600080fd5b506102c261043a366004611d0f565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561046457600080fd5b5061031360105481565b34801561047a57600080fd5b50600c546102c29062010000900460ff1681565b34801561049a57600080fd5b50600754610383906001600160a01b031681565b3480156104ba57600080fd5b506104ce6104c9366004611d74565b6109b0565b005b3480156104dc57600080fd5b506103136104eb366004611d0f565b6001600160a01b031660009081526020819052604090205490565b34801561051257600080fd5b506104ce610a0e565b34801561052757600080fd5b506104ce610536366004611db6565b610a44565b34801561054757600080fd5b506102c2610a8a565b34801561055c57600080fd5b506104ce61056b366004611dd1565b610ac7565b34801561057c57600080fd5b50610313600f5481565b34801561059257600080fd5b5061031360145481565b3480156105a857600080fd5b506006546001600160a01b0316610383565b3480156105c657600080fd5b506103837f000000000000000000000000e57ed81fbd363f80411100a4948767464e87d18a81565b3480156105fa57600080fd5b5061031360125481565b34801561061057600080fd5b5061028c610b1c565b34801561062557600080fd5b506104ce610634366004611dd1565b610b2b565b34801561064557600080fd5b506102c2610654366004611ce3565b610bf1565b34801561066557600080fd5b506102c2610674366004611ce3565b610c8a565b34801561068557600080fd5b50600c546102c290610100900460ff1681565b3480156106a457600080fd5b506104ce6106b3366004611dd1565b610c97565b3480156106c457600080fd5b5061031360095481565b3480156106da57600080fd5b506104ce610d20565b3480156106ef57600080fd5b506102c26106fe366004611e06565b610d61565b34801561070f57600080fd5b506102c261071e366004611d0f565b60196020526000908152604090205460ff1681565b34801561073f57600080fd5b50610313600d5481565b34801561075557600080fd5b50610313610764366004611e1f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561079b57600080fd5b50610313600a5481565b3480156107b157600080fd5b5061031360155481565b3480156107c757600080fd5b50610313600e5481565b3480156107dd57600080fd5b506104ce6107ec366004611d0f565b610d9c565b3480156107fd57600080fd5b5061031360115481565b34801561081357600080fd5b50610313600b5481565b60606004805461082c90611e58565b80601f016020809104026020016040519081016040528092919081815260200182805461085890611e58565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b5050505050905090565b60006108bc338484610e37565b50600192915050565b60006108d2848484610f5b565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561095c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6109698533858403610e37565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108bc9185906109ab908690611ea9565b610e37565b6006546001600160a01b031633146109da5760405162461bcd60e51b815260040161095390611ec1565b600e849055600f8390556109ee8385611ea9565b600d5560118290556012819055610a058183611ea9565b60105550505050565b6006546001600160a01b03163314610a385760405162461bcd60e51b815260040161095390611ec1565b610a426000611602565b565b6006546001600160a01b03163314610a6e5760405162461bcd60e51b815260040161095390611ec1565b600c8054911515620100000262ff000019909216919091179055565b6006546000906001600160a01b03163314610ab75760405162461bcd60e51b815260040161095390611ec1565b50600c805460ff19169055600190565b6006546001600160a01b03163314610af15760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b60606005805461082c90611e58565b6006546001600160a01b03163314610b555760405162461bcd60e51b815260040161095390611ec1565b7f000000000000000000000000ff7cb8adb58dd80029fe894bfe485bcc4f419e946001600160a01b0316826001600160a01b03161415610be35760405162461bcd60e51b815260206004820152602360248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015262414d4d60e81b6064820152608401610953565b610bed8282611654565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610c735760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610953565b610c803385858403610e37565b5060019392505050565b60006108bc338484610f5b565b6006546001600160a01b03163314610cc15760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6006546001600160a01b03163314610d4a5760405162461bcd60e51b815260040161095390611ec1565b600c805462ffff0019166201010017905543601555565b6006546000906001600160a01b03163314610d8e5760405162461bcd60e51b815260040161095390611ec1565b50600a81905560015b919050565b6006546001600160a01b03163314610dc65760405162461bcd60e51b815260040161095390611ec1565b6001600160a01b038116610e2b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610953565b610e3481611602565b50565b6001600160a01b038316610e995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610953565b6001600160a01b038216610efa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610953565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610f815760405162461bcd60e51b815260040161095390611ef6565b6001600160a01b038216610fa75760405162461bcd60e51b815260040161095390611f3b565b80610fbd57610fb8838360006116a8565b505050565b600c5460ff1615611333576006546001600160a01b03848116911614801590610ff457506006546001600160a01b03838116911614155b801561100857506001600160a01b03821615155b801561101f57506001600160a01b03821661dead14155b80156110355750600654600160a01b900460ff16155b1561133357600c54610100900460ff166110cd576001600160a01b03831660009081526017602052604090205460ff168061108857506001600160a01b03821660009081526017602052604090205460ff165b6110cd5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610953565b6001600160a01b03831660009081526019602052604090205460ff16801561110e57506001600160a01b03821660009081526018602052604090205460ff16155b156111f2576009548111156111835760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610953565b600b546001600160a01b0383166000908152602081905260409020546111a99083611ea9565b11156111ed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610953565b611333565b6001600160a01b03821660009081526019602052604090205460ff16801561123357506001600160a01b03831660009081526018602052604090205460ff16155b156112a9576009548111156111ed5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610953565b6001600160a01b03821660009081526018602052604090205460ff1661133357600b546001600160a01b0383166000908152602081905260409020546112ef9083611ea9565b11156113335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610953565b30600090815260208190526040902054600a548110801590819061135f5750600c5462010000900460ff165b80156113755750600654600160a01b900460ff16155b801561139a57506001600160a01b03851660009081526019602052604090205460ff16155b80156113bf57506001600160a01b03851660009081526017602052604090205460ff16155b80156113e457506001600160a01b03841660009081526017602052604090205460ff16155b15611412576006805460ff60a01b1916600160a01b1790556114046117fd565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526017602052604090205460ff600160a01b90920482161591168061146057506001600160a01b03851660009081526017602052604090205460ff165b15611469575060005b600081156115ee576001600160a01b03861660009081526019602052604090205460ff16801561149b57506000601054115b15611523576064601054866114b09190611f7e565b6114ba9190611f9d565b9050601054601154826114cd9190611f7e565b6114d79190611f9d565b601360008282546114e89190611ea9565b90915550506010546012546114fd9083611f7e565b6115079190611f9d565b601460008282546115189190611ea9565b909155506115d09050565b6001600160a01b03871660009081526019602052604090205460ff16801561154d57506000600d54115b156115d0576064600d54866115629190611f7e565b61156c9190611f9d565b9050600d54600e548261157f9190611f7e565b6115899190611f9d565b6013600082825461159a9190611ea9565b9091555050600d54600f546115af9083611f7e565b6115b99190611f9d565b601460008282546115ca9190611ea9565b90915550505b80156115e1576115e18730836116a8565b6115eb8186611fbf565b94505b6115f98787876116a8565b50505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166116ce5760405162461bcd60e51b815260040161095390611ef6565b6001600160a01b0382166116f45760405162461bcd60e51b815260040161095390611f3b565b6001600160a01b0383166000908152602081905260409020548181101561176c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610953565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906117a3908490611ea9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ef91815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006014546013546118219190611ea9565b90506000821580611830575081155b1561183a57505050565b600a54611848906014611f7e565b83111561186057600a5461185d906014611f7e565b92505b6000600283601354866118739190611f7e565b61187d9190611f9d565b6118879190611f9d565b905060006118958286611fbf565b9050476118a1826119d3565b60006118ad8247611fbf565b9050600086601454836118c09190611f7e565b6118ca9190611f9d565b90506000600a6118db836003611f7e565b6118e59190611f9d565b905060006118f38385611fbf565b600060138190556014559050861580159061190e5750600081115b1561191d5761191d8782611b93565b6008546040516001600160a01b03909116908390600081818185875af1925050503d806000811461196a576040519150601f19603f3d011682016040523d82523d6000602084013e61196f565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d80600081146119bf576040519150601f19603f3d011682016040523d82523d6000602084013e6119c4565b606091505b50505050505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a0857611a08611fd6565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaa9190611fec565b81600181518110611abd57611abd611fd6565b60200260200101906001600160a01b031690816001600160a01b031681525050611b08307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e37565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b5d908590600090869030904290600401612009565b600060405180830381600087803b158015611b7757600080fd5b505af1158015611b8b573d6000803e3d6000fd5b505050505050565b611bbe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e37565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015611c4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c72919061207a565b5050505050565b600060208083528351808285015260005b81811015611ca657858101830151858201604001528201611c8a565b81811115611cb8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e3457600080fd5b60008060408385031215611cf657600080fd5b8235611d0181611cce565b946020939093013593505050565b600060208284031215611d2157600080fd5b8135611d2c81611cce565b9392505050565b600080600060608486031215611d4857600080fd5b8335611d5381611cce565b92506020840135611d6381611cce565b929592945050506040919091013590565b60008060008060808587031215611d8a57600080fd5b5050823594602084013594506040840135936060013592509050565b80358015158114610d9757600080fd5b600060208284031215611dc857600080fd5b611d2c82611da6565b60008060408385031215611de457600080fd5b8235611def81611cce565b9150611dfd60208401611da6565b90509250929050565b600060208284031215611e1857600080fd5b5035919050565b60008060408385031215611e3257600080fd5b8235611e3d81611cce565b91506020830135611e4d81611cce565b809150509250929050565b600181811c90821680611e6c57607f821691505b60208210811415611e8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ebc57611ebc611e93565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000816000190483118215151615611f9857611f98611e93565b500290565b600082611fba57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611fd157611fd1611e93565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ffe57600080fd5b8151611d2c81611cce565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120595784516001600160a01b031683529383019391830191600101612034565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561208f57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206b3f1acaca76a9c29ca34d12f329cf49b200e517a2471e48a081e86e07cf899f64736f6c634300080a0033

Deployed Bytecode Sourcemap

12332:12223:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2686:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3607:169;;;;;;;;;;-1:-1:-1;3607:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;3607:169:0;1072:187:1;13411:63:0;;;;;;;;;;-1:-1:-1;13411:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3014:108;;;;;;;;;;-1:-1:-1;3102:12:0;;3014:108;;;1662:25:1;;;1650:2;1635:18;3014:108:0;1516:177:1;3784:492:0;;;;;;;;;;-1:-1:-1;3784:492:0;;;;;:::i;:::-;;:::i;2906:100::-;;;;;;;;;;-1:-1:-1;2989:9:0;;2906:100;;2989:9;;;;2301:36:1;;2289:2;2274:18;2906:100:0;2159:184:1;12658:26:0;;;;;;;;;;-1:-1:-1;12658:26:0;;;;-1:-1:-1;;;;;12658:26:0;;;;;;-1:-1:-1;;;;;2512:32:1;;;2494:51;;2482:2;2467:18;12658:26:0;2348:203:1;4284:215:0;;;;;;;;;;-1:-1:-1;4284:215:0;;;;;:::i;:::-;;:::i;12497:38::-;;;;;;;;;;;;;;;12809:33;;;;;;;;;;-1:-1:-1;12809:33:0;;;;;;;;13146:30;;;;;;;;;;;;;;;;18273:126;;;;;;;;;;-1:-1:-1;18273:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;18363:28:0;18339:4;18363:28;;;:19;:28;;;;;;;;;18273:126;13036:28;;;;;;;;;;;;;;;;12889;;;;;;;;;;-1:-1:-1;12889:28:0;;;;;;;;;;;12619:32;;;;;;;;;;-1:-1:-1;12619:32:0;;;;-1:-1:-1;;;;;12619:32:0;;;16408:457;;;;;;;;;;-1:-1:-1;16408:457:0;;;;;:::i;:::-;;:::i;:::-;;3130:127;;;;;;;;;;-1:-1:-1;3130:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3231:18:0;3204:7;3231:18;;;;;;;;;;;;3130:127;815:103;;;;;;;;;;;;;:::i;17527:84::-;;;;;;;;;;-1:-1:-1;17527:84:0;;;;;:::i;:::-;;:::i;16874:121::-;;;;;;;;;;;;;:::i;17264:167::-;;;;;;;;;;-1:-1:-1;17264:167:0;;;;;:::i;:::-;;:::i;12997:30::-;;;;;;;;;;;;;;;;13183;;;;;;;;;;;;;;;;592:87;;;;;;;;;;-1:-1:-1;665:6:0;;-1:-1:-1;;;;;665:6:0;592:87;;12542:38;;;;;;;;;;;;;;;13109:31;;;;;;;;;;;;;;;;2794:104;;;;;;;;;;;;;:::i;17809:282::-;;;;;;;;;;-1:-1:-1;17809:282:0;;;;;:::i;:::-;;:::i;4507:413::-;;;;;;;;;;-1:-1:-1;4507:413:0;;;;;:::i;:::-;;:::i;3265:175::-;;;;;;;;;;-1:-1:-1;3265:175:0;;;;;:::i;:::-;;:::i;12849:33::-;;;;;;;;;;-1:-1:-1;12849:33:0;;;;;;;;;;;17619:182;;;;;;;;;;-1:-1:-1;17619:182:0;;;;;:::i;:::-;;:::i;12694:35::-;;;;;;;;;;;;;;;;16249:151;;;;;;;;;;;;;:::i;17065:190::-;;;;;;;;;;-1:-1:-1;17065:190:0;;;;;:::i;:::-;;:::i;13632:35::-;;;;;;;;;;-1:-1:-1;13632:35:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12926:27;;;;;;;;;;;;;;;;3448:151;;;;;;;;;;-1:-1:-1;3448:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3564:18:0;;;3537:7;3564:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3448:151;12736:33;;;;;;;;;;;;;;;;13220;;;;;;;;;;;;;;;;12960:30;;;;;;;;;;;;;;;;926:201;;;;;;;;;;-1:-1:-1;926:201:0;;;;;:::i;:::-;;:::i;13071:31::-;;;;;;;;;;;;;;;;12776:24;;;;;;;;;;;;;;;;2686:100;2740:13;2773:5;2766:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2686:100;:::o;3607:169::-;3690:4;3707:39;218:10;3730:7;3739:6;3707:8;:39::i;:::-;-1:-1:-1;3764:4:0;3607:169;;;;:::o;3784:492::-;3924:4;3941:36;3951:6;3959:9;3970:6;3941:9;:36::i;:::-;-1:-1:-1;;;;;4017:19:0;;3990:24;4017:19;;;:11;:19;;;;;;;;218:10;4017:33;;;;;;;;4069:26;;;;4061:79;;;;-1:-1:-1;;;4061:79:0;;4781:2:1;4061:79:0;;;4763:21:1;4820:2;4800:18;;;4793:30;4859:34;4839:18;;;4832:62;-1:-1:-1;;;4910:18:1;;;4903:38;4958:19;;4061:79:0;;;;;;;;;4176:57;4185:6;218:10;4226:6;4207:16;:25;4176:8;:57::i;:::-;-1:-1:-1;4264:4:0;;3784:492;-1:-1:-1;;;;3784:492:0:o;4284:215::-;218:10;4372:4;4421:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4421:34:0;;;;;;;;;;4372:4;;4389:80;;4412:7;;4421:47;;4458:10;;4421:47;:::i;:::-;4389:8;:80::i;16408:457::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;16561:15:::1;:34:::0;;;16606:15:::1;:34:::0;;;16666:33:::1;16624:16:::0;16579;16666:33:::1;:::i;:::-;16651:12;:48:::0;16712:16:::1;:36:::0;;;16759:16:::1;:36:::0;;;16822:35:::1;16778:17:::0;16731;16822:35:::1;:::i;:::-;16806:13;:51:::0;-1:-1:-1;;;;16408:457:0:o;815:103::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;880:30:::1;907:1;880:18;:30::i;:::-;815:103::o:0;17527:84::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;17590:8:::1;:13:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;17590:13:0;;::::1;::::0;;;::::1;::::0;;17527:84::o;16874:121::-;665:6;;16926:4;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;-1:-1:-1;16943:14:0::1;:22:::0;;-1:-1:-1;;16943:22:0::1;::::0;;;16874:121;:::o;17264:167::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17377:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17377:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17264:167::o;2794:104::-;2850:13;2883:7;2876:14;;;;;:::i;17809:282::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;17953:13:::1;-1:-1:-1::0;;;;;17945:21:0::1;:4;-1:-1:-1::0;;;;;17945:21:0::1;;;17923:106;;;::::0;-1:-1:-1;;;17923:106:0;;5816:2:1;17923:106:0::1;::::0;::::1;5798:21:1::0;5855:2;5835:18;;;5828:30;5894:34;5874:18;;;5867:62;-1:-1:-1;;;5945:18:1;;;5938:33;5988:19;;17923:106:0::1;5614:399:1::0;17923:106:0::1;18042:41;18071:4;18077:5;18042:28;:41::i;:::-;17809:282:::0;;:::o;4507:413::-;218:10;4600:4;4644:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4644:34:0;;;;;;;;;;4697:35;;;;4689:85;;;;-1:-1:-1;;;4689:85:0;;6220:2:1;4689:85:0;;;6202:21:1;6259:2;6239:18;;;6232:30;6298:34;6278:18;;;6271:62;-1:-1:-1;;;6349:18:1;;;6342:35;6394:19;;4689:85:0;6018:401:1;4689:85:0;4810:67;218:10;4833:7;4861:15;4842:16;:34;4810:8;:67::i;:::-;-1:-1:-1;4908:4:0;;4507:413;-1:-1:-1;;;4507:413:0:o;3265:175::-;3351:4;3368:42;218:10;3392:9;3403:6;3368:9;:42::i;17619:182::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17704:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17704:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17759:34;;1212:41:1;;;17759:34:0::1;::::0;1185:18:1;17759:34:0::1;;;;;;;17619:182:::0;;:::o;16249:151::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;16302:13:::1;:20:::0;;-1:-1:-1;;16333:15:0;;;;;16380:12:::1;16359:18;:33:::0;16249:151::o;17065:190::-;665:6;;17173:4;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;-1:-1:-1;17195:18:0::1;:30:::0;;;17243:4:::1;798:1;17065:190:::0;;;:::o;926:201::-;665:6;;-1:-1:-1;;;;;665:6:0;218:10;727:23;719:68;;;;-1:-1:-1;;;719:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1015:22:0;::::1;1007:73;;;::::0;-1:-1:-1;;;1007:73:0;;6626:2:1;1007:73:0::1;::::0;::::1;6608:21:1::0;6665:2;6645:18;;;6638:30;6704:34;6684:18;;;6677:62;-1:-1:-1;;;6755:18:1;;;6748:36;6801:19;;1007:73:0::1;6424:402:1::0;1007:73:0::1;1091:28;1110:8;1091:18;:28::i;:::-;926:201:::0;:::o;6675:380::-;-1:-1:-1;;;;;6811:19:0;;6803:68;;;;-1:-1:-1;;;6803:68:0;;7033:2:1;6803:68:0;;;7015:21:1;7072:2;7052:18;;;7045:30;7111:34;7091:18;;;7084:62;-1:-1:-1;;;7162:18:1;;;7155:34;7206:19;;6803:68:0;6831:400:1;6803:68:0;-1:-1:-1;;;;;6890:21:0;;6882:68;;;;-1:-1:-1;;;6882:68:0;;7438:2:1;6882:68:0;;;7420:21:1;7477:2;7457:18;;;7450:30;7516:34;7496:18;;;7489:62;-1:-1:-1;;;7567:18:1;;;7560:32;7609:19;;6882:68:0;7236:398:1;6882:68:0;-1:-1:-1;;;;;6963:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7015:32;;1662:25:1;;;7015:32:0;;1635:18:1;7015:32:0;;;;;;;6675:380;;;:::o;18407:3665::-;-1:-1:-1;;;;;18539:18:0;;18531:68;;;;-1:-1:-1;;;18531:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18618:16:0;;18610:64;;;;-1:-1:-1;;;18610:64:0;;;;;;;:::i;:::-;18691:11;18687:93;;18719:28;18735:4;18741:2;18745:1;18719:15;:28::i;:::-;18407:3665;;;:::o;18687:93::-;18796:14;;;;18792:1650;;;665:6;;-1:-1:-1;;;;;18849:15:0;;;665:6;;18849:15;;;;:49;;-1:-1:-1;665:6:0;;-1:-1:-1;;;;;18885:13:0;;;665:6;;18885:13;;18849:49;:86;;;;-1:-1:-1;;;;;;18919:16:0;;;;18849:86;:128;;;;-1:-1:-1;;;;;;18956:21:0;;18970:6;18956:21;;18849:128;:158;;;;-1:-1:-1;18999:8:0;;-1:-1:-1;;;18999:8:0;;;;18998:9;18849:158;18827:1604;;;19047:13;;;;;;;19042:223;;-1:-1:-1;;;;;19119:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;19148:23:0;;;;;;:19;:23;;;;;;;;19119:52;19085:160;;;;-1:-1:-1;;;19085:160:0;;8651:2:1;19085:160:0;;;8633:21:1;8690:2;8670:18;;;8663:30;-1:-1:-1;;;8709:18:1;;;8702:52;8771:18;;19085:160:0;8449:346:1;19085:160:0;-1:-1:-1;;;;;19339:9:0;;;;;;:3;:9;;;;;;;;:70;;;;-1:-1:-1;;;;;;19374:35:0;;;;;;:31;:35;;;;;;;;19373:36;19339:70;19313:1103;;;19496:20;;19486:6;:30;;19452:169;;;;-1:-1:-1;;;19452:169:0;;9002:2:1;19452:169:0;;;8984:21:1;9041:2;9021:18;;;9014:30;9080:34;9060:18;;;9053:62;-1:-1:-1;;;9131:18:1;;;9124:51;9192:19;;19452:169:0;8800:417:1;19452:169:0;19704:9;;-1:-1:-1;;;;;3231:18:0;;3204:7;3231:18;;;;;;;;;;;19678:22;;:6;:22;:::i;:::-;:35;;19644:140;;;;-1:-1:-1;;;19644:140:0;;9424:2:1;19644:140:0;;;9406:21:1;9463:2;9443:18;;;9436:30;-1:-1:-1;;;9482:18:1;;;9475:49;9541:18;;19644:140:0;9222:343:1;19644:140:0;19313:1103;;;-1:-1:-1;;;;;19882:7:0;;;;;;:3;:7;;;;;;;;:70;;;;-1:-1:-1;;;;;;19915:37:0;;;;;;:31;:37;;;;;;;;19914:38;19882:70;19856:560;;;20039:20;;20029:6;:30;;19995:170;;;;-1:-1:-1;;;19995:170:0;;9772:2:1;19995:170:0;;;9754:21:1;9811:2;9791:18;;;9784:30;9850:34;9830:18;;;9823:62;-1:-1:-1;;;9901:18:1;;;9894:52;9963:19;;19995:170:0;9570:418:1;19856:560:0;-1:-1:-1;;;;;20196:35:0;;;;;;:31;:35;;;;;;;;20191:225;;20316:9;;-1:-1:-1;;;;;3231:18:0;;3204:7;3231:18;;;;;;;;;;;20290:22;;:6;:22;:::i;:::-;:35;;20256:140;;;;-1:-1:-1;;;20256:140:0;;9424:2:1;20256:140:0;;;9406:21:1;9463:2;9443:18;;;9436:30;-1:-1:-1;;;9482:18:1;;;9475:49;9541:18;;20256:140:0;9222:343:1;20256:140:0;20503:4;20454:28;3231:18;;;;;;;;;;;20561;;20537:42;;;;;;;20610:32;;-1:-1:-1;20634:8:0;;;;;;;20610:32;:58;;;;-1:-1:-1;20660:8:0;;-1:-1:-1;;;20660:8:0;;;;20659:9;20610:58;:85;;;;-1:-1:-1;;;;;;20686:9:0;;;;;;:3;:9;;;;;;;;20685:10;20610:85;:128;;;;-1:-1:-1;;;;;;20713:25:0;;;;;;:19;:25;;;;;;;;20712:26;20610:128;:169;;;;-1:-1:-1;;;;;;20756:23:0;;;;;;:19;:23;;;;;;;;20755:24;20610:169;20592:299;;;20806:8;:15;;-1:-1:-1;;;;20806:15:0;-1:-1:-1;;;20806:15:0;;;20838:8;:6;:8::i;:::-;20863;:16;;-1:-1:-1;;;;20863:16:0;;;20592:299;20919:8;;-1:-1:-1;;;;;21029:25:0;;20903:12;21029:25;;;:19;:25;;;;;;20919:8;-1:-1:-1;;;20919:8:0;;;;;20918:9;;21029:25;;:52;;-1:-1:-1;;;;;;21058:23:0;;;;;;:19;:23;;;;;;;;21029:52;21025:100;;;-1:-1:-1;21108:5:0;21025:100;21137:12;21242:7;21238:781;;;-1:-1:-1;;;;;21296:7:0;;;;;;:3;:7;;;;;;;;:28;;;;;21323:1;21307:13;;:17;21296:28;21292:578;;;21377:3;21361:13;;21352:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;21345:35;;21446:13;;21426:16;;21419:4;:23;;;;:::i;:::-;21418:41;;;;:::i;:::-;21399:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;21525:13:0;;21505:16;;21498:23;;:4;:23;:::i;:::-;21497:41;;;;:::i;:::-;21478:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;21292:578:0;;-1:-1:-1;21292:578:0;;-1:-1:-1;;;;;21616:9:0;;;;;;:3;:9;;;;;;;;:29;;;;;21644:1;21629:12;;:16;21616:29;21612:258;;;21697:3;21682:12;;21673:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;21666:34;;21765:12;;21746:15;;21739:4;:22;;;;:::i;:::-;21738:39;;;;:::i;:::-;21719:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;21842:12:0;;21823:15;;21816:22;;:4;:22;:::i;:::-;21815:39;;;;:::i;:::-;21796:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;21612:258:0;21890:8;;21886:91;;21919:42;21935:4;21949;21956;21919:15;:42::i;:::-;21993:14;22003:4;21993:14;;:::i;:::-;;;21238:781;22031:33;22047:4;22053:2;22057:6;22031:15;:33::i;:::-;18520:3552;;;;18407:3665;;;:::o;1133:191::-;1226:6;;;-1:-1:-1;;;;;1243:17:0;;;-1:-1:-1;;;;;;1243:17:0;;;;;;;1276:40;;1226:6;;;1243:17;1226:6;;1276:40;;1207:16;;1276:40;1196:128;1133:191;:::o;18099:166::-;-1:-1:-1;;;;;18182:9:0;;;;;;:3;:9;;;;;;:17;;-1:-1:-1;;18182:17:0;;;;;;;;;;18217:40;;18182:17;;:9;18217:40;;;18099:166;;:::o;4928:733::-;-1:-1:-1;;;;;5068:20:0;;5060:70;;;;-1:-1:-1;;;5060:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5149:23:0;;5141:71;;;;-1:-1:-1;;;5141:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5309:17:0;;5285:21;5309:17;;;;;;;;;;;5345:23;;;;5337:74;;;;-1:-1:-1;;;5337:74:0;;10720:2:1;5337:74:0;;;10702:21:1;10759:2;10739:18;;;10732:30;10798:34;10778:18;;;10771:62;-1:-1:-1;;;10849:18:1;;;10842:36;10895:19;;5337:74:0;10518:402:1;5337:74:0;-1:-1:-1;;;;;5447:17:0;;;:9;:17;;;;;;;;;;;5467:22;;;5447:42;;5511:20;;;;;;;;:30;;5483:6;;5447:9;5511:30;;5483:6;;5511:30;:::i;:::-;;;;;;;;5576:9;-1:-1:-1;;;;;5559:35:0;5568:6;-1:-1:-1;;;;;5559:35:0;;5587:6;5559:35;;;;1662:25:1;;1650:2;1635:18;;1516:177;5559:35:0;;;;;;;;5049:612;4928:733;;;:::o;23115:1437::-;23196:4;23152:23;3231:18;;;;;;;;;;;23152:50;;23213:25;23259:15;;23241;;:33;;;;:::i;:::-;23213:61;-1:-1:-1;23285:12:0;23314:20;;;:46;;-1:-1:-1;23338:22:0;;23314:46;23310:85;;;23377:7;;;23115:1437::o;23310:85::-;23429:18;;:23;;23450:2;23429:23;:::i;:::-;23411:15;:41;23407:115;;;23487:18;;:23;;23508:2;23487:23;:::i;:::-;23469:41;;23407:115;23583:26;23670:1;23650:17;23631:15;;23613;:33;;;;:::i;:::-;23612:55;;;;:::i;:::-;:59;;;;:::i;:::-;23583:88;-1:-1:-1;23682:26:0;23711:36;23583:88;23711:15;:36;:::i;:::-;23682:65;-1:-1:-1;23788:21:0;23822:30;23682:65;23822:10;:30::i;:::-;23865:18;23886:41;23910:17;23886:21;:41;:::i;:::-;23865:62;;23941:20;23995:17;23977:15;;23964:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;23941:71;-1:-1:-1;24023:19:0;24064:2;24045:16;23941:71;24060:1;24045:16;:::i;:::-;:21;;;;:::i;:::-;24023:43;-1:-1:-1;24079:20:0;24102:25;24115:12;24102:10;:25;:::i;:::-;24158:1;24140:15;:19;;;24170:15;:19;24079:48;-1:-1:-1;24206:22:0;;;;;:42;;;24247:1;24232:12;:16;24206:42;24202:121;;;24265:46;24278:18;24298:12;24265;:46::i;:::-;24413:11;;24405:49;;-1:-1:-1;;;;;24413:11:0;;;;24438;;24405:49;;;;24438:11;24413;24405:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24487:17:0;;24479:65;;24391:63;;-1:-1:-1;;;;;;24487:17:0;;24518:21;;24479:65;;;;24518:21;24487:17;24479:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;23115:1437:0:o;22080:496::-;22164:16;;;22178:1;22164:16;;;;;;;;22140:21;;22164:16;;;;;;;;;;-1:-1:-1;22164:16:0;22140:40;;22209:4;22191;22196:1;22191:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22191:23:0;;;-1:-1:-1;;;;;22191:23:0;;;;;22235:15;-1:-1:-1;;;;;22235:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22225:4;22230:1;22225:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;22225:32:0;;;-1:-1:-1;;;;;22225:32:0;;;;;22270:62;22287:4;22302:15;22320:11;22270:8;:62::i;:::-;22371:197;;-1:-1:-1;;;22371:197:0;;-1:-1:-1;;;;;22371:15:0;:66;;;;:197;;22452:11;;22478:1;;22495:4;;22522;;22542:15;;22371:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22129:447;22080:496;:::o;22584:523::-;22732:62;22749:4;22764:15;22782:11;22732:8;:62::i;:::-;23041:17;;22837:262;;-1:-1:-1;;;22837:262:0;;22909:4;22837:262;;;12981:34:1;13031:18;;;13024:34;;;22955:1:0;13074:18:1;;;13067:34;;;13117:18;;;13110:34;-1:-1:-1;;;;;23041:17:0;;;13160:19:1;;;13153:44;23073:15:0;13213:19:1;;;13206:35;22837:15:0;:31;;;;;;22876:9;;12915:19:1;;22837:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22584:523;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;:::-;1500:5;1264:247;-1:-1:-1;;;1264:247:1:o;1698:456::-;1775:6;1783;1791;1844:2;1832:9;1823:7;1819:23;1815:32;1812:52;;;1860:1;1857;1850:12;1812:52;1899:9;1886:23;1918:31;1943:5;1918:31;:::i;:::-;1968:5;-1:-1:-1;2025:2:1;2010:18;;1997:32;2038:33;1997:32;2038:33;:::i;:::-;1698:456;;2090:7;;-1:-1:-1;;;2144:2:1;2129:18;;;;2116:32;;1698:456::o;2556:385::-;2642:6;2650;2658;2666;2719:3;2707:9;2698:7;2694:23;2690:33;2687:53;;;2736:1;2733;2726:12;2687:53;-1:-1:-1;;2759:23:1;;;2829:2;2814:18;;2801:32;;-1:-1:-1;2880:2:1;2865:18;;2852:32;;2931:2;2916:18;2903:32;;-1:-1:-1;2556:385:1;-1:-1:-1;2556:385:1:o;2946:160::-;3011:20;;3067:13;;3060:21;3050:32;;3040:60;;3096:1;3093;3086:12;3111:180;3167:6;3220:2;3208:9;3199:7;3195:23;3191:32;3188:52;;;3236:1;3233;3226:12;3188:52;3259:26;3275:9;3259:26;:::i;3296:315::-;3361:6;3369;3422:2;3410:9;3401:7;3397:23;3393:32;3390:52;;;3438:1;3435;3428:12;3390:52;3477:9;3464:23;3496:31;3521:5;3496:31;:::i;:::-;3546:5;-1:-1:-1;3570:35:1;3601:2;3586:18;;3570:35;:::i;:::-;3560:45;;3296:315;;;;;:::o;3616:180::-;3675:6;3728:2;3716:9;3707:7;3703:23;3699:32;3696:52;;;3744:1;3741;3734:12;3696:52;-1:-1:-1;3767:23:1;;3616:180;-1:-1:-1;3616:180:1:o;3801:388::-;3869:6;3877;3930:2;3918:9;3909:7;3905:23;3901:32;3898:52;;;3946:1;3943;3936:12;3898:52;3985:9;3972:23;4004:31;4029:5;4004:31;:::i;:::-;4054:5;-1:-1:-1;4111:2:1;4096:18;;4083:32;4124:33;4083:32;4124:33;:::i;:::-;4176:7;4166:17;;;3801:388;;;;;:::o;4194:380::-;4273:1;4269:12;;;;4316;;;4337:61;;4391:4;4383:6;4379:17;4369:27;;4337:61;4444:2;4436:6;4433:14;4413:18;4410:38;4407:161;;;4490:10;4485:3;4481:20;4478:1;4471:31;4525:4;4522:1;4515:15;4553:4;4550:1;4543:15;4407:161;;4194:380;;;:::o;4988:127::-;5049:10;5044:3;5040:20;5037:1;5030:31;5080:4;5077:1;5070:15;5104:4;5101:1;5094:15;5120:128;5160:3;5191:1;5187:6;5184:1;5181:13;5178:39;;;5197:18;;:::i;:::-;-1:-1:-1;5233:9:1;;5120:128::o;5253:356::-;5455:2;5437:21;;;5474:18;;;5467:30;5533:34;5528:2;5513:18;;5506:62;5600:2;5585:18;;5253:356::o;7639:401::-;7841:2;7823:21;;;7880:2;7860:18;;;7853:30;7919:34;7914:2;7899:18;;7892:62;-1:-1:-1;;;7985:2:1;7970:18;;7963:35;8030:3;8015:19;;7639:401::o;8045:399::-;8247:2;8229:21;;;8286:2;8266:18;;;8259:30;8325:34;8320:2;8305:18;;8298:62;-1:-1:-1;;;8391:2:1;8376:18;;8369:33;8434:3;8419:19;;8045:399::o;9993:168::-;10033:7;10099:1;10095;10091:6;10087:14;10084:1;10081:21;10076:1;10069:9;10062:17;10058:45;10055:71;;;10106:18;;:::i;:::-;-1:-1:-1;10146:9:1;;9993:168::o;10166:217::-;10206:1;10232;10222:132;;10276:10;10271:3;10267:20;10264:1;10257:31;10311:4;10308:1;10301:15;10339:4;10336:1;10329:15;10222:132;-1:-1:-1;10368:9:1;;10166:217::o;10388:125::-;10428:4;10456:1;10453;10450:8;10447:34;;;10461:18;;:::i;:::-;-1:-1:-1;10498:9:1;;10388:125::o;11267:127::-;11328:10;11323:3;11319:20;11316:1;11309:31;11359:4;11356:1;11349:15;11383:4;11380:1;11373:15;11399:251;11469:6;11522:2;11510:9;11501:7;11497:23;11493:32;11490:52;;;11538:1;11535;11528:12;11490:52;11570:9;11564:16;11589:31;11614:5;11589:31;:::i;11655:980::-;11917:4;11965:3;11954:9;11950:19;11996:6;11985:9;11978:25;12022:2;12060:6;12055:2;12044:9;12040:18;12033:34;12103:3;12098:2;12087:9;12083:18;12076:31;12127:6;12162;12156:13;12193:6;12185;12178:22;12231:3;12220:9;12216:19;12209:26;;12270:2;12262:6;12258:15;12244:29;;12291:1;12301:195;12315:6;12312:1;12309:13;12301:195;;;12380:13;;-1:-1:-1;;;;;12376:39:1;12364:52;;12471:15;;;;12436:12;;;;12412:1;12330:9;12301:195;;;-1:-1:-1;;;;;;;12552:32:1;;;;12547:2;12532:18;;12525:60;-1:-1:-1;;;12616:3:1;12601:19;12594:35;12513:3;11655:980;-1:-1:-1;;;11655:980:1:o;13252:306::-;13340:6;13348;13356;13409:2;13397:9;13388:7;13384:23;13380:32;13377:52;;;13425:1;13422;13415:12;13377:52;13454:9;13448:16;13438:26;;13504:2;13493:9;13489:18;13483:25;13473:35;;13548:2;13537:9;13533:18;13527:25;13517:35;;13252:306;;;;;:::o

Swarm Source

ipfs://6b3f1acaca76a9c29ca34d12f329cf49b200e517a2471e48a081e86e07cf899f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.