ETH Price: $3,021.89 (+2.11%)
Gas: 1 Gwei

Token

WallE (WALLE)
 

Overview

Max Total Supply

100,000,000 WALLE

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
171,520.976339834649432805 WALLE

Value
$0.00
0xd347c5b7e8de03ece2fed2da5c8c6b68ea8f6d2d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WallE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠉⠉⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡀⠀⠀⣠⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⡖⢾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠒⠒⠒⠒⠒⠒⠲⠲⠚⠓⠒⠒⠛⠓⢒⣖⠒⠒⠒⠒⠒⠒⢲⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠀⠀⠀⠀⢠⠖⠋⠉⠷⣄⠀⠀⢠⠖⠉⠉⠑⢦⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⠉⢻⠀⠀⠀⠀⣿⣾⣿⣦⡀⢸⠀⠀⢿⣿⣿⣷⡀⢸⠀⠀⠀⠀⢸⠋⠙⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⢸⠀⣀⠀⠀⠘⢿⣿⢟⣂⠞⠀⠀⠈⠿⣿⣿⣡⠞⠀⠀⠀⠀⢸⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⣾⠉⠉⠙⢧⡀⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⣠⠞⠉⠉⡙⣇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣻⠀⠀⠀⠀⠙⢦⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣠⠞⠁⠀⠀⠀⠇⡏⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⡤⣤⣤⣤⣤⣤⣤⣤⣤⣤⢤⠤⠤⠤⠤⢤⣤⣤⣤⣤⣤⣤⡤⢤⣤⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠟⠛⠦⣄⡀⣀⣿⡛⣛⣛⣛⢛⢛⢛⣷⣀⣀⣴⢛⡛⠶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⠀⠀⣿⣩⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⢿⢭⡉⡇⠀⠸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡇⠀⠀⣿⣽⠀⠀⣶⡆⠀⠀⠀⠀⠀⢠⡄⠀⠀⠀⢠⣇⡇⠀⢀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠃⠘⢦⣰⣿⣿⠀⢰⡿⡇⣄⠀⠀⠀⠀⣼⣇⣠⠀⠀⢸⣿⣇⡠⠞⠈⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⡃⠀⠀⢠⠟⣿⣿⠤⠾⠀⢻⠛⡄⢰⠤⠽⠏⣿⡟⡷⠶⢼⡿⡟⢆⠀⠀⠈⣣⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢠⡟⠛⠦⣴⠏⠀⣿⣼⠀⠀⠀⠀⠀⢻⡞⠀⠀⠀⠻⠇⠀⠀⠀⡇⡇⠈⢷⡴⠚⠙⣆⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⡴⠿⢦⣀⡾⠁⠀⠀⣿⢾⣀⣀⣀⣀⣀⣀⣁⣀⣀⣀⣀⣀⣀⣀⣠⣷⡇⠀⠈⠻⣄⡰⠾⠶⣄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣀⣤⡴⣟⠀⠀⠀⣹⠀⠀⠀⠰⣿⣈⡿⢯⡉⣿⣿⣿⣿⣿⣿⣿⣿⡏⢉⡿⢯⣀⡇⠀⠀⠀⢿⠀⠀⠀⢸⡦⣤⣄⠀⠀⠀
⠀⢀⡴⠋⠀⠁⠹⣤⣀⡤⠏⠀⠀⠀⠐⣿⠹⣄⡼⠟⣿⣿⣿⣿⣿⣿⣿⣿⡶⠻⣶⡴⠿⡇⠀⠀⠀⠘⢦⣀⣠⠞⠃⠀⠈⠳⡀⠀
⢠⡟⠀⢠⡶⣄⠀⠀⢸⠀⠀⠀⠀⠀⠘⢿⣤⣼⣤⣤⣤⣶⣧⣶⣦⣶⣴⣦⣤⣤⣴⣤⣤⡇⠀⠀⠀⠀⠀⣼⠀⠀⣀⠶⣄⠀⠹⡄
⠸⣇⡴⠋⢠⠞⠀⣰⠟⠁⠀⠀⠀⠀⠀⠀⢿⡀⠀⠀⠀⠀⣨⡷⠀⢺⣆⢀⠀⠀⠀⢀⡽⠀⠀⠀⠀⠀⠀⠹⣄⠀⠹⣄⠈⢳⣠⠇
⠀⠙⠁⣴⣋⣀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⣼⠋⠉⠉⠉⠉⠙⣦⡠⣶⠋⠉⠉⠉⠉⠉⢳⠄⠀⠀⠀⠀⠀⠀⠈⠣⣀⣙⣦⡀⠛⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣹⠖⠖⠲⠒⠒⠿⣇⡀⣨⠗⠒⠒⠒⠒⠲⣯⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣤⠤⠤⢴⢶⣶⡟⠂⢙⡦⠤⠤⢤⣤⣤⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠖⠛⠚⠛⠚⠓⠲⢤⡷⠀⣻⠦⠖⠒⠛⠛⠛⠛⠒⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣧⠀⣺⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣿⠁⢻⣄⣀⣀⣀⣀⣀⣀⣀⣀⣀⣀⣹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

    https://www.wallecoin.vip/
    https://t.me/WallE_Coin
*/
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    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
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

        _totalSupply += amount;
        _balances[account] += amount;

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        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);
    }

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

contract WallE is ERC20, Ownable {
    uint256 public constant MAX_SUPPLY = 100_000_000 ether;
    uint256 public constant BPS_DENOMINATOR = 10_000;
    uint256 public constant SNIPE_BLOCKS = 0;
    uint256 constant FEE_ACCELERATE = MAX_SUPPLY;

    IUniswapV2Router02 public immutable _router;
    address public immutable _pair;

    uint256[2] public buyTaxes = [0, 0];
    uint256[2] public sellTaxes = [0, 0];
    uint256[2] public totalTaxes;
    address payable[2] public taxWallets;
    mapping(address => bool) public taxExcluded;
    mapping(address => bool) public blacklist;

    uint256 public minTokenBalance = 1;
    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;
    bool public autoSwap = true;
    bool public tradingActive = false;
    uint256 public maxBuy = (MAX_SUPPLY * 2) / 100;
    uint256 public tradingBlock;
    uint256 private _latestPurchaseTime;
    uint256 internal _totalSupply = 0;
    mapping(address => uint256) private _balances;
    mapping(address => SwapInfo) private _purchaseUsers;

    struct SwapInfo {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingDuration;
    }

    event TaxWalletsChanged(
        address payable[2] previousWallets,
        address payable[2] nextWallets
    );
    event BuyTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event SellTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event MinTokenBalanceChanged(uint256 previousMin, uint256 nextMin);
    event MaxBuyChanged(uint256 nextMax);
    event TaxesRescued(uint256 index, uint256 amount);
    event TradingActiveChanged(bool enabled);
    event TaxExclusionChanged(address user, bool taxExcluded);
    event BlacklistUpdated(address user, bool previousStatus, bool nextStatus);
    event AutoSwapChanged(bool enabled);

    modifier lockSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd() {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    constructor() ERC20("WallE", "WALLE") Ownable() {
        taxWallets[0] = payable(
            address(0x64779BcAEeFBb2B8b3c05C06A9Cd04c00c8cbaad)
        );
        taxWallets[1] = payable(
            address(0x63F95bfF53182F775F855E55f38A427dFBcf6369)
        );
        taxExcluded[owner()] = true;
        taxExcluded[address(this)] = true;
        taxExcluded[taxWallets[0]] = true;
        taxExcluded[taxWallets[1]] = true;
        _router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _pair = IUniswapV2Factory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        taxExcluded[address(_router)] = true;
        _mint(owner(), MAX_SUPPLY);
    }

    /// @notice Change the buy tax rates
    /// @param _buyTaxes The new buy tax rates
    function setBuyTaxes(uint256[2] memory _buyTaxes) external onlyOwner {
        require(
            _buyTaxes[0] + _buyTaxes[1] <= BPS_DENOMINATOR,
            "sum(_buyTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit BuyTaxesChanged(buyTaxes, _buyTaxes);
        buyTaxes = _buyTaxes;
    }

    /// @notice Change the sell tax rates
    /// @param _sellTaxes The new sell tax rates
    function setSellTaxes(uint256[2] memory _sellTaxes) external onlyOwner {
        require(
            _sellTaxes[0] + _sellTaxes[1] <= BPS_DENOMINATOR,
            "sum(_sellTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit SellTaxesChanged(sellTaxes, _sellTaxes);
        sellTaxes = _sellTaxes;
    }

    /// @notice Change the minimum contract WAGMI balance before `_swap` gets invoked
    /// @param _minTokenBalance The new minimum balance
    function setMinTokenBalance(uint256 _minTokenBalance) external onlyOwner {
        emit MinTokenBalanceChanged(minTokenBalance, _minTokenBalance);
        minTokenBalance = _minTokenBalance;
    }

    /// @notice Rescue WAGMI from the taxes
    /// @dev Should only be used in an emergency
    /// @param _index The tax allocation to rescue from
    /// @param _amount The amount of WAGMI to rescue
    /// @param _recipient The recipient of the rescued WAGMI
    function rescueTaxTokens(
        uint256 _index,
        uint256 _amount,
        address _recipient
    ) external onlyOwner {
        require(0 <= _index && _index < totalTaxes.length, "_index OOB");
        require(
            _amount <= totalTaxes[_index],
            "Amount cannot be greater than totalTax"
        );
        _transferStandard(address(this), _recipient, _amount, true);
        emit TaxesRescued(_index, _amount);
        totalTaxes[_index] -= _amount;
    }

    /// @notice Change the address of the tax wallets
    /// @param _taxWallets The new address of the tax wallets
    function setTaxWallets(address payable[2] memory _taxWallets)
        external
        onlyOwner
    {
        emit TaxWalletsChanged(taxWallets, _taxWallets);
        taxWallets = _taxWallets;
    }

    function addLiquidity(uint256 tokens)
        external
        payable
        onlyOwner
        liquidityAdd
    {
        _mint(address(this), tokens);
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value: msg.value}(
            address(this),
            tokens,
            0,
            0,
            owner(),
            // solhint-disable-next-line not-rely-on-time
            block.timestamp
        );
    }

    /// @notice Admin function to update a recipient's blacklist status
    /// @param user the recipient
    /// @param status the new status
    function updateBlacklist(address user, bool status)
        external
        virtual
        onlyOwner
    {
        _updateBlacklist(user, status);
    }

    function _updateBlacklist(address user, bool status) internal {
        emit BlacklistUpdated(user, blacklist[user], status);
        blacklist[user] = status;
    }

    /// @notice Enables or disables trading on Uniswap
    function openTrading() external onlyOwner {
        tradingActive = true;
        tradingBlock = block.number;
        emit TradingActiveChanged(true);
    }

    /// @notice Updates tax exclusion status
    /// @param _account Account to update the tax exclusion status of
    /// @param _taxExcluded If true, exclude taxes for this user
    function setTaxExcluded(address _account, bool _taxExcluded)
        external
        onlyOwner
    {
        taxExcluded[_account] = _taxExcluded;
        emit TaxExclusionChanged(_account, _taxExcluded);
    }

    /// @notice Enable or disable whether swap occurs during `_transfer`
    /// @param _autoSwap If true, enables swap during `_transfer`
    function setAutoSwap(bool _autoSwap) external onlyOwner {
        autoSwap = _autoSwap;
        emit AutoSwapChanged(_autoSwap);
    }

    /// @notice Update maxBuy
    /// @param _maxBuy The new maxBuy
    function setMaxBuy(uint256 _maxBuy) external onlyOwner {
        require(
            _maxBuy > (_totalSupply * 5) / 1000,
            "max buy should be more than .5%"
        );
        maxBuy = _maxBuy;
        emit MaxBuyChanged(_maxBuy);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        unchecked {
            _balances[account] = _balances[account] - amount;
        }
    }

    function _mint(address account, uint256 amount) internal {
        require(_totalSupply + amount <= MAX_SUPPLY, "Max supply exceeded");
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(!blacklist[recipient], "Recipient is blacklisted");

        if (taxExcluded[sender] || taxExcluded[recipient]) {
            _latestPurchaseTime = block.timestamp;
            _transferStandard(sender, recipient, amount, false);
            return;
        }

        _countSwap(sender, recipient);

        if (!_inSwap && sender != _pair && autoSwap) {
            _swap();
        }
        uint256 send = amount;
        uint256[2] memory taxes;
        if (sender == _pair) {
            require(tradingActive, "Trading is not yet active");
            require(amount <= maxBuy, "Buy amount exceeds maxBuy");
            if (block.number <= tradingBlock + SNIPE_BLOCKS) {
                _updateBlacklist(recipient, true);
            }
            (send, taxes) = _getTaxAmounts(amount, true);
        } else if (recipient == _pair) {
            require(tradingActive, "Trading is not yet active");
            (send, taxes) = _getTaxAmounts(amount, false);
        }
        _transferStandard(sender, recipient, send, true);
        _takeTaxes(sender, taxes);
    }

    // modified from OpenZeppelin ERC20
    function _transferStandard(
        address sender,
        address recipient,
        uint256 amount,
        bool feeCheckFlag
    ) internal {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");

        uint256 senderBalance = balanceOf(sender);
        if (feeCheckFlag) {
            require(senderBalance >= amount, "transfer amount exceeds balance");
        }
        _subtractBalance(sender, amount);
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

    /// @notice Perform a Uniswap v2 swap from WAGMI to ETH and handle tax distribution
    function _swap() internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        uint256 totalTax = totalTaxes[0] + totalTaxes[1];
        if (totalTax == 0) {
            return;
        }
        uint256 walletTaxes = totalTax;
        if (walletTaxes > balanceOf(address(this))) {
            walletTaxes = balanceOf(address(this));
        }
        _approve(address(this), address(_router), walletTaxes);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            walletTaxes,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        uint256 contractEthBalance = address(this).balance;
        uint256 tax0Eth = (contractEthBalance * totalTaxes[0]) / totalTax;
        uint256 tax1Eth = (contractEthBalance * totalTaxes[1]) / totalTax;
        totalTaxes = [0, 0];

        if (tax0Eth > 0) {
            (bool success, ) = taxWallets[0].call{value: tax0Eth}("");
            require(success, "failed swap");
        }
        if (tax1Eth > 0) {
            (bool success, ) = taxWallets[1].call{value: tax1Eth}("");
            require(success, "failed swap");
        }
    }

    function swapAll() external {
        if (!_inSwap) {
            _swap();
        }
    }

    function withdrawAll() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    /// @notice Transfers WAGMI from an account to this contract for taxes
    /// @param _account The account to transfer WAGMI from
    /// @param _taxAmounts The amount for each tax
    function _takeTaxes(address _account, uint256[2] memory _taxAmounts)
        internal
    {
        require(_account != address(0), "taxation from the zero address");

        uint256 totalAmount = _taxAmounts[0] + _taxAmounts[1];
        _transferStandard(_account, address(this), totalAmount, true);
        totalTaxes[0] += _taxAmounts[0];
        totalTaxes[1] += _taxAmounts[1];
    }

    function _countSwap(address sender, address recipient) internal {
        if (!taxExcluded[sender] && !taxExcluded[recipient]) {
            if (sender == _pair) {
                SwapInfo storage swapInfo = _purchaseUsers[recipient];
                if (swapInfo.lastSwapBuy == 0 && balanceOf(recipient) == 0) {
                    swapInfo.lastSwapBuy = block.timestamp;
                }
            } else {
                SwapInfo storage swapInfo = _purchaseUsers[sender];
                swapInfo.holdingDuration =
                    swapInfo.lastSwapBuy -
                    _latestPurchaseTime;
                swapInfo.lastSwapSell = block.timestamp;
            }
        }
    }

    /// @notice Get a breakdown of send and tax amounts
    /// @param amount The amount to tax in wei
    /// @return send The raw amount to send
    /// @return taxes The raw tax amounts
    function _getTaxAmounts(uint256 amount, bool buying)
        internal
        view
        returns (uint256 send, uint256[2] memory taxes)
    {
        if (buying) {
            taxes = [
                (amount * buyTaxes[0]) / BPS_DENOMINATOR,
                (amount * buyTaxes[1]) / BPS_DENOMINATOR
            ];
        } else {
            taxes = [
                (amount * sellTaxes[0]) / BPS_DENOMINATOR,
                (amount * sellTaxes[1]) / BPS_DENOMINATOR
            ];
        }
        send = amount - taxes[0] - taxes[1];
    }

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

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoSwapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"previousStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"nextStatus","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"BuyTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextMax","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextMin","type":"uint256"}],"name":"MinTokenBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"SellTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"taxExcluded","type":"bool"}],"name":"TaxExclusionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable[2]","name":"previousWallets","type":"address[2]"},{"indexed":false,"internalType":"address payable[2]","name":"nextWallets","type":"address[2]"}],"name":"TaxWalletsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingActiveChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNIPE_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":[],"name":"autoSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyTaxes","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBalance","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueTaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoSwap","type":"bool"}],"name":"setAutoSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_buyTaxes","type":"uint256[2]"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuy","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_sellTaxes","type":"uint256[2]"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_taxExcluded","type":"bool"}],"name":"setTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[2]","name":"_taxWallets","type":"address[2]"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxWallets","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTaxes","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":"tradingBlock","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":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600060c081815260e09190915262000022906006906002620004e5565b50604080518082019091526000808252602082015262000047906008906002620004e5565b5060016010556011805463ffffffff1916620100001790556064620000796a52b7d2dcc80cd2e400000060026200055a565b6200008591906200057a565b60125560006015553480156200009a57600080fd5b506040518060400160405280600581526020016457616c6c4560d81b8152506040518060400160405280600581526020016457414c4c4560d81b8152508160039081620000e8919062000642565b506004620000f7828262000642565b50505060006200010c620003c160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80546001600160a01b03199081167364779bcaeefbb2b8b3c05c06a9cd04c00c8cbaad178255600d80549091167363f95bff53182f775f855e55f38a427dfbcf63691781556005546001600160a01b039081166000908152600e60209081526040808320805460ff1990811660019081179092553085528285208054821683179055965485168452818420805488168217905594549093168252908290208054909416909217909255737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052825163c45a015560e01b81529251909263c45a01559260048083019391928290030181865afa15801562000257573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027d91906200070e565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f391906200070e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036791906200070e565b6001600160a01b0390811660a052608051166000908152600e60205260409020805460ff19166001179055620003bb620003a96005546001600160a01b031690565b6a52b7d2dcc80cd2e4000000620003c5565b62000756565b3390565b6a52b7d2dcc80cd2e400000081601554620003e1919062000740565b1115620004345760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640160405180910390fd5b806015600082825462000448919062000740565b909155506200045a905082826200049f565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216600090815260166020526040902054620004c590829062000740565b6001600160a01b0390921660009081526016602052604090209190915550565b82600281019282156200051b579160200282015b828111156200051b578251829060ff16905591602001919060010190620004f9565b50620005299291506200052d565b5090565b5b808211156200052957600081556001016200052e565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000574576200057462000544565b92915050565b6000826200059857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005c857607f821691505b602082108103620005e957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200063d57600081815260208120601f850160051c81016020861015620006185750805b601f850160051c820191505b81811015620006395782815560010162000624565b5050505b505050565b81516001600160401b038111156200065e576200065e6200059d565b62000676816200066f8454620005b3565b84620005ef565b602080601f831160018114620006ae5760008415620006955750858301515b600019600386901b1c1916600185901b17855562000639565b600085815260208120601f198616915b82811015620006df57888601518255948401946001909101908401620006be565b5085821015620006fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200072157600080fd5b81516001600160a01b03811681146200073957600080fd5b9392505050565b8082018082111562000574576200057462000544565b60805160a051612855620007bb6000396000818161066001528181611654015281816116b5015281816117ca0152611f6b01526000818161073c01528181610b1101528181610b38015281816118e9015281816119e90152611a2501526128556000f3fe6080604052600436106102605760003560e01c8063853828b611610144578063bbc0c742116100b6578063edae876f1161007a578063edae876f1461072a578063f016d83b1461075e578063f2fde38b14610773578063f50a243b14610793578063f53bc835146107b3578063f9f92be4146107d357600080fd5b8063bbc0c74214610682578063c9567bf9146106a3578063cd51e6d4146106b8578063dd62ed3e146106ce578063e1a452181461071457600080fd5b806395d89b411161010857806395d89b41146105b9578063a457c2d7146105ce578063a894185d146105ee578063a9059cbb1461060e578063b0ac15711461062e578063b51449bb1461064e57600080fd5b8063853828b6146105125780638da5cb5b14610527578063912c048c146105595780639155e0831461057957806393818cfa1461059957600080fd5b806339b622d3116101dd57806364071d9f116101a157806364071d9f1461045157806370a082311461047157806370db69d6146104a7578063715018a6146104bd57806377004851146104d2578063821f6580146104f257600080fd5b806339b622d3146103c35780633e9ffbea146103f357806351c6590a1461040857806352f892fa1461041b5780635b78f35f1461043b57600080fd5b806323b872dd1161022457806323b872dd146103285780632c8dc14714610348578063313ce5671461036857806332cb6b0c1461038457806339509351146103a357600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806318160ddd146102e957806319c2c40d1461030857600080fd5b3661026757005b600080fd5b34801561027857600080fd5b50610281610803565b60405161028e91906122d0565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612333565b610895565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e2366004612396565b6108ac565b005b3480156102f557600080fd5b506015545b60405190815260200161028e565b34801561031457600080fd5b506102e7610323366004612414565b61092a565b34801561033457600080fd5b506102b7610343366004612449565b6109b7565b34801561035457600080fd5b506102fa61036336600461248a565b610a61565b34801561037457600080fd5b506040516012815260200161028e565b34801561039057600080fd5b506102fa6a52b7d2dcc80cd2e400000081565b3480156103af57600080fd5b506102b76103be366004612333565b610a78565b3480156103cf57600080fd5b506102b76103de3660046124a3565b600e6020526000908152604090205460ff1681565b3480156103ff57600080fd5b506102e7610ab4565b6102e761041636600461248a565b610ac8565b34801561042757600080fd5b506102e76104363660046124c7565b610c1b565b34801561044757600080fd5b506102fa60105481565b34801561045d57600080fd5b506102e761046c3660046124c7565b610d03565b34801561047d57600080fd5b506102fa61048c3660046124a3565b6001600160a01b031660009081526016602052604090205490565b3480156104b357600080fd5b506102fa60125481565b3480156104c957600080fd5b506102e7610dec565b3480156104de57600080fd5b506011546102b79062010000900460ff1681565b3480156104fe57600080fd5b506102fa61050d36600461248a565b610e60565b34801561051e57600080fd5b506102e7610e70565b34801561053357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561056557600080fd5b5061054161057436600461248a565b610ed6565b34801561058557600080fd5b506102e7610594366004612414565b610ef6565b3480156105a557600080fd5b506102e76105b436600461251c565b610f2a565b3480156105c557600080fd5b50610281610faa565b3480156105da57600080fd5b506102b76105e9366004612333565b610fb9565b3480156105fa57600080fd5b506102e7610609366004612537565b611052565b34801561061a57600080fd5b506102b7610629366004612333565b6111a0565b34801561063a57600080fd5b506102e761064936600461248a565b6111ad565b34801561065a57600080fd5b506105417f000000000000000000000000000000000000000000000000000000000000000081565b34801561068e57600080fd5b506011546102b7906301000000900460ff1681565b3480156106af57600080fd5b506102e7611218565b3480156106c457600080fd5b506102fa60135481565b3480156106da57600080fd5b506102fa6106e9366004612570565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561072057600080fd5b506102fa61271081565b34801561073657600080fd5b506105417f000000000000000000000000000000000000000000000000000000000000000081565b34801561076a57600080fd5b506102fa600081565b34801561077f57600080fd5b506102e761078e3660046124a3565b61128f565b34801561079f57600080fd5b506102fa6107ae36600461248a565b61137a565b3480156107bf57600080fd5b506102e76107ce36600461248a565b61138a565b3480156107df57600080fd5b506102b76107ee3660046124a3565b600f6020526000908152604090205460ff1681565b606060038054610812906125a9565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906125a9565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a2338484611453565b5060015b92915050565b6005546001600160a01b031633146108df5760405162461bcd60e51b81526004016108d6906125e3565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c82604051610911929190612618565b60405180910390a1610926600c8260026121e4565b5050565b6005546001600160a01b031633146109545760405162461bcd60e51b81526004016108d6906125e3565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b60006109c4848484611577565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108d6565b610a568533858403611453565b506001949350505050565b60088160028110610a7157600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108a2918590610aaf90869061269c565b611453565b60115460ff16610ac657610ac6611885565b565b6005546001600160a01b03163314610af25760405162461bcd60e51b81526004016108d6906125e3565b6011805461ff001916610100179055610b0b3082611c3d565b610b36307f000000000000000000000000000000000000000000000000000000000000000083611453565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719343084600080610b7d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c0a91906126af565b50506011805461ff00191690555050565b6005546001600160a01b03163314610c455760405162461bcd60e51b81526004016108d6906125e3565b6020810151815161271091610c599161269c565b1115610cbc5760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108d6565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610cee9291906126f3565b60405180910390a1610926600682600261223c565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016108d6906125e3565b6020810151815161271091610d419161269c565b1115610da55760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108d6565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610dd79291906126f3565b60405180910390a1610926600882600261223c565b6005546001600160a01b03163314610e165760405162461bcd60e51b81526004016108d6906125e3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610a7157600080fd5b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016108d6906125e3565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ed3573d6000803e3d6000fd5b50565b600c8160028110610ee657600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f205760405162461bcd60e51b81526004016108d6906125e3565b6109268282611d02565b6005546001600160a01b03163314610f545760405162461bcd60e51b81526004016108d6906125e3565b60118054821515620100000262ff0000199091161790556040517f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d90610f9f90831515815260200190565b60405180910390a150565b606060048054610812906125a9565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561103b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108d6565b6110483385858403611453565b5060019392505050565b6005546001600160a01b0316331461107c5760405162461bcd60e51b81526004016108d6906125e3565b600283106110b95760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108d6565b600a83600281106110cc576110cc6126dd565b015482111561112c5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108d6565b6111393082846001611d8a565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a8460028110611186576111866126dd565b0160008282546111969190612745565b9091555050505050565b60006108a2338484611577565b6005546001600160a01b031633146111d75760405162461bcd60e51b81526004016108d6906125e3565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b031633146112425760405162461bcd60e51b81526004016108d6906125e3565b6011805463ff0000001916630100000017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146112b95760405162461bcd60e51b81526004016108d6906125e3565b6001600160a01b03811661131e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610a7157600080fd5b6005546001600160a01b031633146113b45760405162461bcd60e51b81526004016108d6906125e3565b6103e860155460056113c69190612758565b6113d0919061276f565b811161141e5760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108d6565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610f9f565b6001600160a01b0383166114b55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b6001600160a01b0382166115165760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108d6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115e05760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108d6565b6001600160a01b0383166000908152600e602052604090205460ff168061161f57506001600160a01b0382166000908152600e602052604090205460ff165b1561163a57426014556116358383836000611d8a565b505050565b6116448383611f22565b60115460ff1615801561168957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561169d575060115462010000900460ff165b156116aa576116aa611885565b806116b361226a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036117c8576011546301000000900460ff166117415760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108d6565b6012548311156117935760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108d6565b60006013546117a2919061269c565b43116117b3576117b3846001611d02565b6117be836001612022565b9092509050611867565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603611867576011546301000000900460ff166118565760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108d6565b611861836000612022565b90925090505b6118748585846001611d8a565b61187e85826120f8565b5050505050565b6011805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106118c7576118c76126dd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190612791565b8160018151811061197c5761197c6126dd565b6001600160a01b039290921660209283029190910190910152600b54600a546000916119a79161269c565b9050806000036119b8575050611c31565b3060009081526016602052604090205481908111156119e35750306000908152601660205260409020545b611a0e307f000000000000000000000000000000000000000000000000000000000000000083611453565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a639084906000908890309042906004016127ae565b600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b5050600a54479250600091508490611aa99084612758565b611ab3919061276f565b9050600084600a60010154611ac89085612758565b611ad2919061276f565b6040805180820190915260008082526020820152909150611af790600a906002612288565b508115611b9157600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b4b576040519150601f19603f3d011682016040523d82523d6000602084013e611b50565b606091505b5050905080611b8f5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108d6565b505b8015611c2a57600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611be4576040519150601f19603f3d011682016040523d82523d6000602084013e611be9565b606091505b5050905080611c285760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108d6565b505b5050505050505b6011805460ff19169055565b6a52b7d2dcc80cd2e400000081601554611c57919061269c565b1115611c9b5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108d6565b8060156000828254611cad919061269c565b90915550611cbd905082826121a0565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038416611de05760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108d6565b6001600160a01b038316611e365760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108d6565b6001600160a01b0384166000908152601660205260409020548115611ea55782811015611ea55760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108d6565b6001600160a01b038516600090815260166020526040902080548490039055611ece84846121a0565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f1391815260200190565b60405180910390a35050505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f6457506001600160a01b0381166000908152600e602052604090205460ff16155b15610926577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611feb576001600160a01b03811660009081526017602052604090208054158015611fdf57506001600160a01b038216600090815260166020526040902054155b15611635574290555050565b6001600160a01b038216600090815260176020526040902060145481546120129190612745565b6002820155426001909101555050565b600061202c61226a565b82156120855760408051808201909152806127106006600001546120509088612758565b61205a919061276f565b81526020016127106006600101546120729088612758565b61207c919061276f565b905290506120d4565b60408051808201909152806127106008600001546120a39088612758565b6120ad919061276f565b81526020016127106008600101546120c59088612758565b6120cf919061276f565b905290505b602081015181516120e59086612745565b6120ef9190612745565b91509250929050565b6001600160a01b03821661214e5760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108d6565b602081015181516000916121619161269c565b90506121708330836001611d8a565b8151600a805460009061218490849061269c565b90915550506020820151600b805460009061119690849061269c565b6001600160a01b0382166000908152601660205260409020546121c490829061269c565b6001600160a01b0390921660009081526016602052604090209190915550565b826002810192821561222c579160200282015b8281111561222c57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121f7565b506122389291506122bb565b5090565b826002810192821561222c579160200282015b8281111561222c57825182559160200191906001019061224f565b60405180604001604052806002906020820280368337509192915050565b826002810192821561222c579160200282015b8281111561222c578251829060ff1690559160200191906001019061229b565b5b8082111561223857600081556001016122bc565b600060208083528351808285015260005b818110156122fd578581018301518582016040015282016122e1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ed357600080fd5b6000806040838503121561234657600080fd5b82356123518161231e565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561239057634e487b7160e01b600052604160045260246000fd5b60405290565b6000604082840312156123a857600080fd5b82601f8301126123b757600080fd5b6123bf61235f565b8060408401858111156123d157600080fd5b845b818110156123f45780356123e68161231e565b8452602093840193016123d3565b509095945050505050565b8035801515811461240f57600080fd5b919050565b6000806040838503121561242757600080fd5b82356124328161231e565b9150612440602084016123ff565b90509250929050565b60008060006060848603121561245e57600080fd5b83356124698161231e565b925060208401356124798161231e565b929592945050506040919091013590565b60006020828403121561249c57600080fd5b5035919050565b6000602082840312156124b557600080fd5b81356124c08161231e565b9392505050565b6000604082840312156124d957600080fd5b82601f8301126124e857600080fd5b6124f061235f565b80604084018581111561250257600080fd5b845b818110156123f4578035845260209384019301612504565b60006020828403121561252e57600080fd5b6124c0826123ff565b60008060006060848603121561254c57600080fd5b833592506020840135915060408401356125658161231e565b809150509250925092565b6000806040838503121561258357600080fd5b823561258e8161231e565b9150602083013561259e8161231e565b809150509250929050565b600181811c908216806125bd57607f821691505b6020821081036125dd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b60028110156126495781546001600160a01b0316835260209092019160019182019101612621565b505050604082018360005b600281101561267c5781516001600160a01b0316835260209283019290910190600101612654565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108a6576108a6612686565b6000806000606084860312156126c457600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b600281101561271b5781548352602090920191600191820191016126fc565b505050604082018360005b600281101561267c578151835260209283019290910190600101612726565b818103818111156108a6576108a6612686565b80820281158282048414176108a6576108a6612686565b60008261278c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127a357600080fd5b81516124c08161231e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127fe5784516001600160a01b0316835293830193918301916001016127d9565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205eb86b4041835ca9019c8eac4a5da3573cdb34ca2412b993cb00fed5107b444164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063853828b611610144578063bbc0c742116100b6578063edae876f1161007a578063edae876f1461072a578063f016d83b1461075e578063f2fde38b14610773578063f50a243b14610793578063f53bc835146107b3578063f9f92be4146107d357600080fd5b8063bbc0c74214610682578063c9567bf9146106a3578063cd51e6d4146106b8578063dd62ed3e146106ce578063e1a452181461071457600080fd5b806395d89b411161010857806395d89b41146105b9578063a457c2d7146105ce578063a894185d146105ee578063a9059cbb1461060e578063b0ac15711461062e578063b51449bb1461064e57600080fd5b8063853828b6146105125780638da5cb5b14610527578063912c048c146105595780639155e0831461057957806393818cfa1461059957600080fd5b806339b622d3116101dd57806364071d9f116101a157806364071d9f1461045157806370a082311461047157806370db69d6146104a7578063715018a6146104bd57806377004851146104d2578063821f6580146104f257600080fd5b806339b622d3146103c35780633e9ffbea146103f357806351c6590a1461040857806352f892fa1461041b5780635b78f35f1461043b57600080fd5b806323b872dd1161022457806323b872dd146103285780632c8dc14714610348578063313ce5671461036857806332cb6b0c1461038457806339509351146103a357600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806318160ddd146102e957806319c2c40d1461030857600080fd5b3661026757005b600080fd5b34801561027857600080fd5b50610281610803565b60405161028e91906122d0565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612333565b610895565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e2366004612396565b6108ac565b005b3480156102f557600080fd5b506015545b60405190815260200161028e565b34801561031457600080fd5b506102e7610323366004612414565b61092a565b34801561033457600080fd5b506102b7610343366004612449565b6109b7565b34801561035457600080fd5b506102fa61036336600461248a565b610a61565b34801561037457600080fd5b506040516012815260200161028e565b34801561039057600080fd5b506102fa6a52b7d2dcc80cd2e400000081565b3480156103af57600080fd5b506102b76103be366004612333565b610a78565b3480156103cf57600080fd5b506102b76103de3660046124a3565b600e6020526000908152604090205460ff1681565b3480156103ff57600080fd5b506102e7610ab4565b6102e761041636600461248a565b610ac8565b34801561042757600080fd5b506102e76104363660046124c7565b610c1b565b34801561044757600080fd5b506102fa60105481565b34801561045d57600080fd5b506102e761046c3660046124c7565b610d03565b34801561047d57600080fd5b506102fa61048c3660046124a3565b6001600160a01b031660009081526016602052604090205490565b3480156104b357600080fd5b506102fa60125481565b3480156104c957600080fd5b506102e7610dec565b3480156104de57600080fd5b506011546102b79062010000900460ff1681565b3480156104fe57600080fd5b506102fa61050d36600461248a565b610e60565b34801561051e57600080fd5b506102e7610e70565b34801561053357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561056557600080fd5b5061054161057436600461248a565b610ed6565b34801561058557600080fd5b506102e7610594366004612414565b610ef6565b3480156105a557600080fd5b506102e76105b436600461251c565b610f2a565b3480156105c557600080fd5b50610281610faa565b3480156105da57600080fd5b506102b76105e9366004612333565b610fb9565b3480156105fa57600080fd5b506102e7610609366004612537565b611052565b34801561061a57600080fd5b506102b7610629366004612333565b6111a0565b34801561063a57600080fd5b506102e761064936600461248a565b6111ad565b34801561065a57600080fd5b506105417f000000000000000000000000494104c49c636e6eb371fa004db0b6fc50bd774681565b34801561068e57600080fd5b506011546102b7906301000000900460ff1681565b3480156106af57600080fd5b506102e7611218565b3480156106c457600080fd5b506102fa60135481565b3480156106da57600080fd5b506102fa6106e9366004612570565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561072057600080fd5b506102fa61271081565b34801561073657600080fd5b506105417f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561076a57600080fd5b506102fa600081565b34801561077f57600080fd5b506102e761078e3660046124a3565b61128f565b34801561079f57600080fd5b506102fa6107ae36600461248a565b61137a565b3480156107bf57600080fd5b506102e76107ce36600461248a565b61138a565b3480156107df57600080fd5b506102b76107ee3660046124a3565b600f6020526000908152604090205460ff1681565b606060038054610812906125a9565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906125a9565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b60006108a2338484611453565b5060015b92915050565b6005546001600160a01b031633146108df5760405162461bcd60e51b81526004016108d6906125e3565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c82604051610911929190612618565b60405180910390a1610926600c8260026121e4565b5050565b6005546001600160a01b031633146109545760405162461bcd60e51b81526004016108d6906125e3565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b60006109c4848484611577565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a495760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108d6565b610a568533858403611453565b506001949350505050565b60088160028110610a7157600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108a2918590610aaf90869061269c565b611453565b60115460ff16610ac657610ac6611885565b565b6005546001600160a01b03163314610af25760405162461bcd60e51b81526004016108d6906125e3565b6011805461ff001916610100179055610b0b3082611c3d565b610b36307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611453565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719343084600080610b7d6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c0a91906126af565b50506011805461ff00191690555050565b6005546001600160a01b03163314610c455760405162461bcd60e51b81526004016108d6906125e3565b6020810151815161271091610c599161269c565b1115610cbc5760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108d6565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610cee9291906126f3565b60405180910390a1610926600682600261223c565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016108d6906125e3565b6020810151815161271091610d419161269c565b1115610da55760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108d6565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610dd79291906126f3565b60405180910390a1610926600882600261223c565b6005546001600160a01b03163314610e165760405162461bcd60e51b81526004016108d6906125e3565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610a7157600080fd5b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016108d6906125e3565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ed3573d6000803e3d6000fd5b50565b600c8160028110610ee657600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f205760405162461bcd60e51b81526004016108d6906125e3565b6109268282611d02565b6005546001600160a01b03163314610f545760405162461bcd60e51b81526004016108d6906125e3565b60118054821515620100000262ff0000199091161790556040517f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d90610f9f90831515815260200190565b60405180910390a150565b606060048054610812906125a9565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561103b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108d6565b6110483385858403611453565b5060019392505050565b6005546001600160a01b0316331461107c5760405162461bcd60e51b81526004016108d6906125e3565b600283106110b95760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108d6565b600a83600281106110cc576110cc6126dd565b015482111561112c5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108d6565b6111393082846001611d8a565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a8460028110611186576111866126dd565b0160008282546111969190612745565b9091555050505050565b60006108a2338484611577565b6005546001600160a01b031633146111d75760405162461bcd60e51b81526004016108d6906125e3565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b031633146112425760405162461bcd60e51b81526004016108d6906125e3565b6011805463ff0000001916630100000017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146112b95760405162461bcd60e51b81526004016108d6906125e3565b6001600160a01b03811661131e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610a7157600080fd5b6005546001600160a01b031633146113b45760405162461bcd60e51b81526004016108d6906125e3565b6103e860155460056113c69190612758565b6113d0919061276f565b811161141e5760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108d6565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610f9f565b6001600160a01b0383166114b55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b6001600160a01b0382166115165760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108d6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115e05760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108d6565b6001600160a01b0383166000908152600e602052604090205460ff168061161f57506001600160a01b0382166000908152600e602052604090205460ff165b1561163a57426014556116358383836000611d8a565b505050565b6116448383611f22565b60115460ff1615801561168957507f000000000000000000000000494104c49c636e6eb371fa004db0b6fc50bd77466001600160a01b0316836001600160a01b031614155b801561169d575060115462010000900460ff165b156116aa576116aa611885565b806116b361226a565b7f000000000000000000000000494104c49c636e6eb371fa004db0b6fc50bd77466001600160a01b0316856001600160a01b0316036117c8576011546301000000900460ff166117415760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108d6565b6012548311156117935760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108d6565b60006013546117a2919061269c565b43116117b3576117b3846001611d02565b6117be836001612022565b9092509050611867565b7f000000000000000000000000494104c49c636e6eb371fa004db0b6fc50bd77466001600160a01b0316846001600160a01b031603611867576011546301000000900460ff166118565760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108d6565b611861836000612022565b90925090505b6118748585846001611d8a565b61187e85826120f8565b5050505050565b6011805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106118c7576118c76126dd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190612791565b8160018151811061197c5761197c6126dd565b6001600160a01b039290921660209283029190910190910152600b54600a546000916119a79161269c565b9050806000036119b8575050611c31565b3060009081526016602052604090205481908111156119e35750306000908152601660205260409020545b611a0e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611453565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a639084906000908890309042906004016127ae565b600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b5050600a54479250600091508490611aa99084612758565b611ab3919061276f565b9050600084600a60010154611ac89085612758565b611ad2919061276f565b6040805180820190915260008082526020820152909150611af790600a906002612288565b508115611b9157600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b4b576040519150601f19603f3d011682016040523d82523d6000602084013e611b50565b606091505b5050905080611b8f5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108d6565b505b8015611c2a57600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611be4576040519150601f19603f3d011682016040523d82523d6000602084013e611be9565b606091505b5050905080611c285760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108d6565b505b5050505050505b6011805460ff19169055565b6a52b7d2dcc80cd2e400000081601554611c57919061269c565b1115611c9b5760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108d6565b8060156000828254611cad919061269c565b90915550611cbd905082826121a0565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038416611de05760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108d6565b6001600160a01b038316611e365760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108d6565b6001600160a01b0384166000908152601660205260409020548115611ea55782811015611ea55760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108d6565b6001600160a01b038516600090815260166020526040902080548490039055611ece84846121a0565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611f1391815260200190565b60405180910390a35050505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f6457506001600160a01b0381166000908152600e602052604090205460ff16155b15610926577f000000000000000000000000494104c49c636e6eb371fa004db0b6fc50bd77466001600160a01b0316826001600160a01b031603611feb576001600160a01b03811660009081526017602052604090208054158015611fdf57506001600160a01b038216600090815260166020526040902054155b15611635574290555050565b6001600160a01b038216600090815260176020526040902060145481546120129190612745565b6002820155426001909101555050565b600061202c61226a565b82156120855760408051808201909152806127106006600001546120509088612758565b61205a919061276f565b81526020016127106006600101546120729088612758565b61207c919061276f565b905290506120d4565b60408051808201909152806127106008600001546120a39088612758565b6120ad919061276f565b81526020016127106008600101546120c59088612758565b6120cf919061276f565b905290505b602081015181516120e59086612745565b6120ef9190612745565b91509250929050565b6001600160a01b03821661214e5760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108d6565b602081015181516000916121619161269c565b90506121708330836001611d8a565b8151600a805460009061218490849061269c565b90915550506020820151600b805460009061119690849061269c565b6001600160a01b0382166000908152601660205260409020546121c490829061269c565b6001600160a01b0390921660009081526016602052604090209190915550565b826002810192821561222c579160200282015b8281111561222c57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121f7565b506122389291506122bb565b5090565b826002810192821561222c579160200282015b8281111561222c57825182559160200191906001019061224f565b60405180604001604052806002906020820280368337509192915050565b826002810192821561222c579160200282015b8281111561222c578251829060ff1690559160200191906001019061229b565b5b8082111561223857600081556001016122bc565b600060208083528351808285015260005b818110156122fd578581018301518582016040015282016122e1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ed357600080fd5b6000806040838503121561234657600080fd5b82356123518161231e565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561239057634e487b7160e01b600052604160045260246000fd5b60405290565b6000604082840312156123a857600080fd5b82601f8301126123b757600080fd5b6123bf61235f565b8060408401858111156123d157600080fd5b845b818110156123f45780356123e68161231e565b8452602093840193016123d3565b509095945050505050565b8035801515811461240f57600080fd5b919050565b6000806040838503121561242757600080fd5b82356124328161231e565b9150612440602084016123ff565b90509250929050565b60008060006060848603121561245e57600080fd5b83356124698161231e565b925060208401356124798161231e565b929592945050506040919091013590565b60006020828403121561249c57600080fd5b5035919050565b6000602082840312156124b557600080fd5b81356124c08161231e565b9392505050565b6000604082840312156124d957600080fd5b82601f8301126124e857600080fd5b6124f061235f565b80604084018581111561250257600080fd5b845b818110156123f4578035845260209384019301612504565b60006020828403121561252e57600080fd5b6124c0826123ff565b60008060006060848603121561254c57600080fd5b833592506020840135915060408401356125658161231e565b809150509250925092565b6000806040838503121561258357600080fd5b823561258e8161231e565b9150602083013561259e8161231e565b809150509250929050565b600181811c908216806125bd57607f821691505b6020821081036125dd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b60028110156126495781546001600160a01b0316835260209092019160019182019101612621565b505050604082018360005b600281101561267c5781516001600160a01b0316835260209283019290910190600101612654565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108a6576108a6612686565b6000806000606084860312156126c457600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b600281101561271b5781548352602090920191600191820191016126fc565b505050604082018360005b600281101561267c578151835260209283019290910190600101612726565b818103818111156108a6576108a6612686565b80820281158282048414176108a6576108a6612686565b60008261278c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156127a357600080fd5b81516124c08161231e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127fe5784516001600160a01b0316835293830193918301916001016127d9565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205eb86b4041835ca9019c8eac4a5da3573cdb34ca2412b993cb00fed5107b444164736f6c63430008130033

Deployed Bytecode Sourcemap

21152:13941:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16701:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17756:210;;;;;;;;;;-1:-1:-1;17756:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;17756:210:0;1023:187:1;26119:205:0;;;;;;;;;;-1:-1:-1;26119:205:0;;;;;:::i;:::-;;:::i;:::-;;34953:100;;;;;;;;;;-1:-1:-1;35033:12:0;;34953:100;;;2520:25:1;;;2508:2;2493:18;34953:100:0;2374:177:1;27721:217:0;;;;;;;;;;-1:-1:-1;27721:217:0;;;;;:::i;:::-;;:::i;17974:529::-;;;;;;;;;;-1:-1:-1;17974:529:0;;;;;:::i;:::-;;:::i;21539:36::-;;;;;;;;;;-1:-1:-1;21539:36:0;;;;;:::i;:::-;;:::i;16921:93::-;;;;;;;;;;-1:-1:-1;16921:93:0;;17004:2;3829:36:1;;3817:2;3802:18;16921:93:0;3687:184:1;21192:54:0;;;;;;;;;;;;21229:17;21192:54;;18511:297;;;;;;;;;;-1:-1:-1;18511:297:0;;;;;:::i;:::-;;:::i;21660:43::-;;;;;;;;;;-1:-1:-1;21660:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32656:94;;;;;;;;;;;;;:::i;26332:483::-;;;;;;:::i;:::-;;:::i;24136:311::-;;;;;;;;;;-1:-1:-1;24136:311:0;;;;;:::i;:::-;;:::i;21760:34::-;;;;;;;;;;;;;;;;24548:321;;;;;;;;;;-1:-1:-1;24548:321:0;;;;;:::i;:::-;;:::i;28565:177::-;;;;;;;;;;-1:-1:-1;28565:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;28716:18:0;28684:7;28716:18;;;:9;:18;;;;;;;28565:177;21955:46;;;;;;;;;;;;;;;;15852:150;;;;;;;;;;;;;:::i;21881:27::-;;;;;;;;;;-1:-1:-1;21881:27:0;;;;;;;;;;;21497:35;;;;;;;;;;-1:-1:-1;21497:35:0;;;;;:::i;:::-;;:::i;32758:109::-;;;;;;;;;;;;;:::i;15638:79::-;;;;;;;;;;-1:-1:-1;15703:6:0;;-1:-1:-1;;;;;15703:6:0;15638:79;;;-1:-1:-1;;;;;4888:32:1;;;4870:51;;4858:2;4843:18;15638:79:0;4724:203:1;21617:36:0;;;;;;;;;;-1:-1:-1;21617:36:0;;;;;:::i;:::-;;:::i;26969:160::-;;;;;;;;;;-1:-1:-1;26969:160:0;;;;;:::i;:::-;;:::i;28087:137::-;;;;;;;;;;-1:-1:-1;28087:137:0;;;;;:::i;:::-;;:::i;16809:104::-;;;;;;;;;;;;;:::i;18816:482::-;;;;;;;;;;-1:-1:-1;18816:482:0;;;;;:::i;:::-;;:::i;25496:497::-;;;;;;;;;;-1:-1:-1;25496:497:0;;;;;:::i;:::-;;:::i;17323:216::-;;;;;;;;;;-1:-1:-1;17323:216:0;;;;;:::i;:::-;;:::i;25021:199::-;;;;;;;;;;-1:-1:-1;25021:199:0;;;;;:::i;:::-;;:::i;21458:30::-;;;;;;;;;;;;;;;21915:33;;;;;;;;;;-1:-1:-1;21915:33:0;;;;;;;;;;;27369:161;;;;;;;;;;;;;:::i;22008:27::-;;;;;;;;;;;;;;;;17547:201;;;;;;;;;;-1:-1:-1;17547:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;17713:18:0;;;17681:7;17713:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17547:201;21253:48;;;;;;;;;;;;21295:6;21253:48;;21408:43;;;;;;;;;;;;;;;21308:40;;;;;;;;;;;;21347:1;21308:40;;16010:281;;;;;;;;;;-1:-1:-1;16010:281:0;;;;;:::i;:::-;;:::i;21582:28::-;;;;;;;;;;-1:-1:-1;21582:28:0;;;;;:::i;:::-;;:::i;28302:255::-;;;;;;;;;;-1:-1:-1;28302:255:0;;;;;:::i;:::-;;:::i;21710:41::-;;;;;;;;;;-1:-1:-1;21710:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16701:100;16755:13;16788:5;16781:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16701:100;:::o;17756:210::-;17875:4;17897:39;15145:10;17920:7;17929:6;17897:8;:39::i;:::-;-1:-1:-1;17954:4:0;17756:210;;;;;:::o;26119:205::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;;;;;;;;;26239:42:::1;26257:10;26269:11;26239:42;;;;;;;:::i;:::-;;;;;;;;26292:24;:10;26305:11:::0;26292:24:::1;;:::i;:::-;;26119:205:::0;:::o;27721:217::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27835:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;;:36;;-1:-1:-1;;27835:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27887:43;;8235:51:1;;;8302:18;;;8295:50;27887:43:0::1;::::0;8208:18:1;27887:43:0::1;;;;;;;27721:217:::0;;:::o;17974:529::-;18114:4;18131:36;18141:6;18149:9;18160:6;18131:9;:36::i;:::-;-1:-1:-1;;;;;18207:19:0;;18180:24;18207:19;;;:11;:19;;;;;;;;15145:10;18207:33;;;;;;;;18273:26;;;;18251:116;;;;-1:-1:-1;;;18251:116:0;;8558:2:1;18251:116:0;;;8540:21:1;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;-1:-1:-1;;;8687:18:1;;;8680:38;8735:19;;18251:116:0;8356:404:1;18251:116:0;18403:57;18412:6;15145:10;18453:6;18434:16;:25;18403:8;:57::i;:::-;-1:-1:-1;18491:4:0;;17974:529;-1:-1:-1;;;;17974:529:0:o;21539:36::-;;;;;;;;;;;;;;;-1:-1:-1;21539:36:0;:::o;18511:297::-;15145:10;18626:4;18720:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18720:34:0;;;;;;;;;;18626:4;;18648:130;;18698:7;;18720:47;;18757:10;;18720:47;:::i;:::-;18648:8;:130::i;32656:94::-;32700:7;;;;32695:48;;32724:7;:5;:7::i;:::-;32656:94::o;26332:483::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;23181:15:::1;:22:::0;;-1:-1:-1;;23181:22:0::1;;;::::0;;26462:28:::2;26476:4;26483:6:::0;26462:5:::2;:28::i;:::-;26501:49;26518:4;26533:7;26543:6;26501:8;:49::i;:::-;26563:7;-1:-1:-1::0;;;;;26563:23:0::2;;26594:9;26627:4;26647:6;26668:1;26684::::0;26700:7:::2;15703:6:::0;;-1:-1:-1;;;;;15703:6:0;;15638:79;26700:7:::2;26563:244;::::0;::::2;::::0;;;-1:-1:-1;;;;;;26563:244:0;;;-1:-1:-1;;;;;9386:15:1;;;26563:244:0::2;::::0;::::2;9368:34:1::0;9418:18;;;9411:34;;;;9461:18;;;9454:34;;;;9504:18;;;9497:34;9568:15;;;9547:19;;;9540:44;26781:15:0::2;9600:19:1::0;;;9593:35;9302:19;;26563:244:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23226:15:0::1;:23:::0;;-1:-1:-1;;23226:23:0::1;::::0;;-1:-1:-1;;26332:483:0:o;24136:311::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;24253:12:::1;::::0;::::1;::::0;24238;;21295:6:::1;::::0;24238:27:::1;::::0;::::1;:::i;:::-;:46;;24216:140;;;::::0;-1:-1:-1;;;24216:140:0;;10284:2:1;24216:140:0::1;::::0;::::1;10266:21:1::0;10323:2;10303:18;;;10296:30;10362:34;10342:18;;;10335:62;-1:-1:-1;;;10413:18:1;;;10406:42;10465:19;;24216:140:0::1;10082:408:1::0;24216:140:0::1;24372:36;24388:8;24398:9;24372:36;;;;;;;:::i;:::-;;;;;;;;24419:20;:8;24430:9:::0;24419:20:::1;;:::i;24548:321::-:0;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;24668:13:::1;::::0;::::1;::::0;24652;;21295:6:::1;::::0;24652:29:::1;::::0;::::1;:::i;:::-;:48;;24630:143;;;::::0;-1:-1:-1;;;24630:143:0;;11578:2:1;24630:143:0::1;::::0;::::1;11560:21:1::0;11617:2;11597:18;;;11590:30;11656:34;11636:18;;;11629:62;-1:-1:-1;;;11707:18:1;;;11700:43;11760:19;;24630:143:0::1;11376:409:1::0;24630:143:0::1;24789:39;24806:9;24817:10;24789:39;;;;;;;:::i;:::-;;;;;;;;24839:22;:9;24851:10:::0;24839:22:::1;;:::i;15852:150::-:0;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;15945:6:::1;::::0;15924:40:::1;::::0;15961:1:::1;::::0;-1:-1:-1;;;;;15945:6:0::1;::::0;15924:40:::1;::::0;15961:1;;15924:40:::1;15975:6;:19:::0;;-1:-1:-1;;;;;;15975:19:0::1;::::0;;15852:150::o;21497:35::-;;;;;;;;;;;32758:109;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;15703:6;;32811:48:::1;::::0;-1:-1:-1;;;;;15703:6:0;;;;32837:21:::1;32811:48:::0;::::1;;;::::0;::::1;::::0;;;32837:21;15703:6;32811:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32758:109::o:0;21617:36::-;;;;;;;;;;;;;;-1:-1:-1;;;;;21617:36:0;;-1:-1:-1;21617:36:0;:::o;26969:160::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;27091:30:::1;27108:4;27114:6;27091:16;:30::i;28087:137::-:0;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;28154:8:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;28154:20:0;;::::1;;::::0;;28190:26:::1;::::0;::::1;::::0;::::1;::::0;28165:9;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;28190:26:0::1;;;;;;;;28087:137:::0;:::o;16809:104::-;16865:13;16898:7;16891:14;;;;;:::i;18816:482::-;15145:10;18936:4;18985:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18985:34:0;;;;;;;;;;19052:35;;;;19030:122;;;;-1:-1:-1;;;19030:122:0;;11992:2:1;19030:122:0;;;11974:21:1;12031:2;12011:18;;;12004:30;12070:34;12050:18;;;12043:62;-1:-1:-1;;;12121:18:1;;;12114:35;12166:19;;19030:122:0;11790:401:1;19030:122:0;19188:67;15145:10;19211:7;19239:15;19220:16;:34;19188:8;:67::i;:::-;-1:-1:-1;19286:4:0;;18816:482;-1:-1:-1;;;18816:482:0:o;25496:497::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;25670:17:::1;25661:6;:26;25638:64;;;::::0;-1:-1:-1;;;25638:64:0;;12398:2:1;25638:64:0::1;::::0;::::1;12380:21:1::0;12437:2;12417:18;;;12410:30;-1:-1:-1;;;12456:18:1;;;12449:40;12506:18;;25638:64:0::1;12196:334:1::0;25638:64:0::1;25746:10;25757:6;25746:18;;;;;;;:::i;:::-;;;25735:7;:29;;25713:117;;;::::0;-1:-1:-1;;;25713:117:0;;12737:2:1;25713:117:0::1;::::0;::::1;12719:21:1::0;12776:2;12756:18;;;12749:30;12815:34;12795:18;;;12788:62;-1:-1:-1;;;12866:18:1;;;12859:36;12912:19;;25713:117:0::1;12535:402:1::0;25713:117:0::1;25841:59;25867:4;25874:10;25886:7;25895:4;25841:17;:59::i;:::-;25916:29;::::0;;13116:25:1;;;13172:2;13157:18;;13150:34;;;25916:29:0::1;::::0;13089:18:1;25916:29:0::1;;;;;;;25978:7;25956:10;25967:6;25956:18;;;;;;;:::i;:::-;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;25496:497:0:o;17323:216::-;17445:4;17467:42;15145:10;17491:9;17502:6;17467:9;:42::i;25021:199::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;25133:15:::1;::::0;25110:57:::1;::::0;;13116:25:1;;;13172:2;13157:18;;13150:34;;;25110:57:0::1;::::0;13089:18:1;25110:57:0::1;;;;;;;25178:15;:34:::0;25021:199::o;27369:161::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;27422:13:::1;:20:::0;;-1:-1:-1;;27422:20:0::1;::::0;::::1;::::0;;27468:12:::1;27453;:27:::0;27496:26:::1;::::0;-1:-1:-1;1163:41:1;;27496:26:0::1;::::0;1151:2:1;1136:18;27496:26:0::1;;;;;;;27369:161::o:0;16010:281::-;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16113:22:0;::::1;16091:110;;;::::0;-1:-1:-1;;;16091:110:0;;13530:2:1;16091:110:0::1;::::0;::::1;13512:21:1::0;13569:2;13549:18;;;13542:30;13608:34;13588:18;;;13581:62;-1:-1:-1;;;13659:18:1;;;13652:36;13705:19;;16091:110:0::1;13328:402:1::0;16091:110:0::1;16238:6;::::0;16217:38:::1;::::0;-1:-1:-1;;;;;16217:38:0;;::::1;::::0;16238:6:::1;::::0;16217:38:::1;::::0;16238:6:::1;::::0;16217:38:::1;16266:6;:17:::0;;-1:-1:-1;;;;;;16266:17:0::1;-1:-1:-1::0;;;;;16266:17:0;;;::::1;::::0;;;::::1;::::0;;16010:281::o;21582:28::-;;;;;;;;;;;28302:255;15765:6;;-1:-1:-1;;;;;15765:6:0;15145:10;15765:22;15757:67;;;;-1:-1:-1;;;15757:67:0;;;;;;;:::i;:::-;28421:4:::1;28401:12;;28416:1;28401:16;;;;:::i;:::-;28400:25;;;;:::i;:::-;28390:7;:35;28368:116;;;::::0;-1:-1:-1;;;28368:116:0;;14332:2:1;28368:116:0::1;::::0;::::1;14314:21:1::0;14371:2;14351:18;;;14344:30;14410:33;14390:18;;;14383:61;14461:18;;28368:116:0::1;14130:355:1::0;28368:116:0::1;28495:6;:16:::0;;;28527:22:::1;::::0;2520:25:1;;;28527:22:0::1;::::0;2508:2:1;2493:18;28527:22:0::1;2374:177:1::0;20765:380:0;-1:-1:-1;;;;;20901:19:0;;20893:68;;;;-1:-1:-1;;;20893:68:0;;14692:2:1;20893:68:0;;;14674:21:1;14731:2;14711:18;;;14704:30;14770:34;14750:18;;;14743:62;-1:-1:-1;;;14821:18:1;;;14814:34;14865:19;;20893:68:0;14490:400:1;20893:68:0;-1:-1:-1;;;;;20980:21:0;;20972:68;;;;-1:-1:-1;;;20972:68:0;;15097:2:1;20972:68:0;;;15079:21:1;15136:2;15116:18;;;15109:30;15175:34;15155:18;;;15148:62;-1:-1:-1;;;15226:18:1;;;15219:32;15268:19;;20972:68:0;14895:398:1;20972:68:0;-1:-1:-1;;;;;21053:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21105:32;;2520:25:1;;;21105:32:0;;2493:18:1;21105:32:0;;;;;;;20765:380;;;:::o;29343:1243::-;-1:-1:-1;;;;;29485:20:0;;;;;;:9;:20;;;;;;;;29484:21;29476:58;;;;-1:-1:-1;;;29476:58:0;;15500:2:1;29476:58:0;;;15482:21:1;15539:2;15519:18;;;15512:30;15578:26;15558:18;;;15551:54;15622:18;;29476:58:0;15298:348:1;29476:58:0;-1:-1:-1;;;;;29551:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;29574:22:0;;;;;;:11;:22;;;;;;;;29551:45;29547:202;;;29635:15;29613:19;:37;29665:51;29683:6;29691:9;29702:6;29710:5;29665:17;:51::i;:::-;29343:1243;;;:::o;29547:202::-;29761:29;29772:6;29780:9;29761:10;:29::i;:::-;29808:7;;;;29807:8;:27;;;;;29829:5;-1:-1:-1;;;;;29819:15:0;:6;-1:-1:-1;;;;;29819:15:0;;;29807:27;:39;;;;-1:-1:-1;29838:8:0;;;;;;;29807:39;29803:79;;;29863:7;:5;:7::i;:::-;29907:6;29924:23;;:::i;:::-;29972:5;-1:-1:-1;;;;;29962:15:0;:6;-1:-1:-1;;;;;29962:15:0;;29958:526;;30002:13;;;;;;;29994:51;;;;-1:-1:-1;;;29994:51:0;;15853:2:1;29994:51:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:55;15976:18;;29994:51:0;15651:349:1;29994:51:0;30078:6;;30068;:16;;30060:54;;;;-1:-1:-1;;;30060:54:0;;16207:2:1;30060:54:0;;;16189:21:1;16246:2;16226:18;;;16219:30;16285:27;16265:18;;;16258:55;16330:18;;30060:54:0;16005:349:1;30060:54:0;21347:1;30149:12;;:27;;;;:::i;:::-;30133:12;:43;30129:117;;30197:33;30214:9;30225:4;30197:16;:33::i;:::-;30276:28;30291:6;30299:4;30276:14;:28::i;:::-;30260:44;;-1:-1:-1;30260:44:0;-1:-1:-1;29958:526:0;;;30339:5;-1:-1:-1;;;;;30326:18:0;:9;-1:-1:-1;;;;;30326:18:0;;30322:162;;30369:13;;;;;;;30361:51;;;;-1:-1:-1;;;30361:51:0;;15853:2:1;30361:51:0;;;15835:21:1;15892:2;15872:18;;;15865:30;-1:-1:-1;;;15911:18:1;;;15904:55;15976:18;;30361:51:0;15651:349:1;30361:51:0;30443:29;30458:6;30466:5;30443:14;:29::i;:::-;30427:45;;-1:-1:-1;30427:45:0;-1:-1:-1;30322:162:0;30494:48;30512:6;30520:9;30531:4;30537;30494:17;:48::i;:::-;30553:25;30564:6;30572:5;30553:10;:25::i;:::-;29465:1121;;29343:1243;;;:::o;31351:1297::-;23078:7;:14;;-1:-1:-1;;23078:14:0;23088:4;23078:14;;;31421:16:::1;::::0;;31435:1:::1;31421:16:::0;;;;;::::1;::::0;;-1:-1:-1;;31421:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31421:16:0::1;31397:40;;31466:4;31448;31453:1;31448:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;31448:23:0::1;;;-1:-1:-1::0;;;;;31448:23:0::1;;;::::0;::::1;31492:7;-1:-1:-1::0;;;;;31492:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31482:4;31487:1;31482:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31482:24:0;;;::::1;:7;::::0;;::::1;::::0;;;;;;;:24;31554:13;;:10:::1;31538:13:::0;31519:16:::1;::::0;31538:29:::1;::::0;::::1;:::i;:::-;31519:48;;31582:8;31594:1;31582:13:::0;31578:52:::1;;31612:7;;;;31578:52;31717:4;28684:7:::0;28716:18;;;:9;:18;;;;;;31662:8;;31685:11:::1;:38;31681:109;;;-1:-1:-1::0;31772:4:0::1;28684:7:::0;28716:18;;;:9;:18;;;;;;31681:109:::1;31800:54;31817:4;31832:7;31842:11;31800:8;:54::i;:::-;31865:216;::::0;-1:-1:-1;;;31865:216:0;;-1:-1:-1;;;;;31865:7:0::1;:58;::::0;::::1;::::0;:216:::1;::::0;31938:11;;31964:1:::1;::::0;32008:4;;32035::::1;::::0;32055:15:::1;::::0;31865:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32193:10:0::1;:13:::0;32121:21:::1;::::0;-1:-1:-1;32092:26:0::1;::::0;-1:-1:-1;32210:8:0;;32172:34:::1;::::0;32121:21;32172:34:::1;:::i;:::-;32171:47;;;;:::i;:::-;32153:65:::0;-1:-1:-1;32229:15:0::1;32286:8:::0;32269:10:::1;32280:1;32269:13;::::0;32248:34:::1;::::0;:18;:34:::1;:::i;:::-;32247:47;;;;:::i;:::-;32305:19;::::0;;;;::::1;::::0;;;-1:-1:-1;32305:19:0;;;::::1;::::0;::::1;::::0;32229:65;;-1:-1:-1;32305:19:0::1;::::0;:10:::1;::::0;:19:::1;;:::i;:::-;-1:-1:-1::0;32341:11:0;;32337:147:::1;;32388:10;:13:::0;:38:::1;::::0;32370:12:::1;::::0;-1:-1:-1;;;;;32388:13:0::1;::::0;32414:7;;32370:12;32388:38;32370:12;32388:38;32414:7;32388:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32369:57;;;32449:7;32441:31;;;::::0;-1:-1:-1;;;32441:31:0;;18012:2:1;32441:31:0::1;::::0;::::1;17994:21:1::0;18051:2;18031:18;;;18024:30;-1:-1:-1;;;18070:18:1;;;18063:41;18121:18;;32441:31:0::1;17810:335:1::0;32441:31:0::1;32354:130;32337:147;32498:11:::0;;32494:147:::1;;32545:13:::0;;:38:::1;::::0;32527:12:::1;::::0;-1:-1:-1;;;;;32545:13:0::1;::::0;32571:7;;32527:12;32545:38;32527:12;32545:38;32571:7;32545:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32526:57;;;32606:7;32598:31;;;::::0;-1:-1:-1;;;32598:31:0;;18012:2:1;32598:31:0::1;::::0;::::1;17994:21:1::0;18051:2;18031:18;;;18024:30;-1:-1:-1;;;18070:18:1;;;18063:41;18121:18;;32598:31:0::1;17810:335:1::0;32598:31:0::1;32511:130;32494:147;31386:1262;;;;;;23103:1;23115:7:::0;:15;;-1:-1:-1;;23115:15:0;;;31351:1297::o;29067:268::-;21229:17;29158:6;29143:12;;:21;;;;:::i;:::-;:35;;29135:67;;;;-1:-1:-1;;;29135:67:0;;18352:2:1;29135:67:0;;;18334:21:1;18391:2;18371:18;;;18364:30;-1:-1:-1;;;18410:18:1;;;18403:49;18469:18;;29135:67:0;18150:343:1;29135:67:0;29229:6;29213:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;29246:28:0;;-1:-1:-1;29258:7:0;29267:6;29246:11;:28::i;:::-;29290:37;;2520:25:1;;;-1:-1:-1;;;;;29290:37:0;;;29307:1;;29290:37;;2508:2:1;2493:18;29290:37:0;;;;;;;29067:268;;:::o;27137:168::-;-1:-1:-1;;;;;27238:15:0;;;;;;:9;:15;;;;;;;;;;27215:47;;18688:51:1;;;27238:15:0;;18782:14:1;18775:22;18755:18;;;18748:50;18841:14;;18834:22;18814:18;;;18807:50;27215:47:0;;;;;;18676:2:1;27215:47:0;;;-1:-1:-1;;;;;27273:15:0;;;;;;;;:9;:15;;;;;:24;;-1:-1:-1;;27273:24:0;;;;;;;;;;27137:168::o;30635:619::-;-1:-1:-1;;;;;30803:20:0;;30795:63;;;;-1:-1:-1;;;30795:63:0;;19070:2:1;30795:63:0;;;19052:21:1;19109:2;19089:18;;;19082:30;19148:32;19128:18;;;19121:60;19198:18;;30795:63:0;18868:354:1;30795:63:0;-1:-1:-1;;;;;30877:23:0;;30869:64;;;;-1:-1:-1;;;30869:64:0;;19429:2:1;30869:64:0;;;19411:21:1;19468:2;19448:18;;;19441:30;19507;19487:18;;;19480:58;19555:18;;30869:64:0;19227:352:1;30869:64:0;-1:-1:-1;;;;;28716:18:0;;30946:21;28716:18;;;:9;:18;;;;;;30998:112;;;;31056:6;31039:13;:23;;31031:67;;;;-1:-1:-1;;;31031:67:0;;19786:2:1;31031:67:0;;;19768:21:1;19825:2;19805:18;;;19798:30;19864:33;19844:18;;;19837:61;19915:18;;31031:67:0;19584:355:1;31031:67:0;-1:-1:-1;;;;;29013:18:0;;;;;;:9;:18;;;;;;;:27;;;28992:48;;31163:30;31175:9;31186:6;31163:11;:30::i;:::-;31228:9;-1:-1:-1;;;;;31211:35:0;31220:6;-1:-1:-1;;;;;31211:35:0;;31239:6;31211:35;;;;2520:25:1;;2508:2;2493:18;;2374:177;31211:35:0;;;;;;;;30784:470;30635:619;;;;:::o;33469:708::-;-1:-1:-1;;;;;33549:19:0;;;;;;:11;:19;;;;;;;;33548:20;:47;;;;-1:-1:-1;;;;;;33573:22:0;;;;;;:11;:22;;;;;;;;33572:23;33548:47;33544:626;;;33626:5;-1:-1:-1;;;;;33616:15:0;:6;-1:-1:-1;;;;;33616:15:0;;33612:547;;-1:-1:-1;;;;;33680:25:0;;33652;33680;;;:14;:25;;;;;33728:20;;:25;:54;;;;-1:-1:-1;;;;;;28716:18:0;;28684:7;28716:18;;;:9;:18;;;;;;33757:25;33728:54;33724:141;;;33830:15;33807:38;;-1:-1:-1;;26119:205:0:o;33612:547::-;-1:-1:-1;;;;;33933:22:0;;33905:25;33933:22;;;:14;:22;;;;;34066:19;;34022:20;;:63;;34066:19;34022:63;:::i;:::-;33974:24;;;:111;34128:15;34104:21;;;;:39;33469:708;;:::o;34378:567::-;34481:12;34495:23;;:::i;:::-;34540:6;34536:356;;;34563:141;;;;;;;;;;21295:6;34600:8;-1:-1:-1;34600:11:0;;34591:20;;:6;:20;:::i;:::-;34590:40;;;;:::i;:::-;34563:141;;;;21295:6;34659:8;34668:1;34659:11;;34650:20;;:6;:20;:::i;:::-;34649:40;;;;:::i;:::-;34563:141;;;-1:-1:-1;34536:356:0;;;34737:143;;;;;;;;;;21295:6;34774:9;-1:-1:-1;34774:12:0;;34765:21;;:6;:21;:::i;:::-;34764:41;;;;:::i;:::-;34737:143;;;;21295:6;34834:9;34844:1;34834:12;;34825:21;;:6;:21;:::i;:::-;34824:41;;;;:::i;:::-;34737:143;;;-1:-1:-1;34536:356:0;34929:8;;;;34918;;34909:17;;:6;:17;:::i;:::-;:28;;;;:::i;:::-;34902:35;;34378:567;;;;;:::o;33063:398::-;-1:-1:-1;;;;;33174:22:0;;33166:65;;;;-1:-1:-1;;;33166:65:0;;20146:2:1;33166:65:0;;;20128:21:1;20185:2;20165:18;;;20158:30;20224:32;20204:18;;;20197:60;20274:18;;33166:65:0;19944:354:1;33166:65:0;33283:14;;;;33266;;33244:19;;33266:31;;;:::i;:::-;33244:53;;33308:61;33326:8;33344:4;33351:11;33364:4;33308:17;:61::i;:::-;33397:14;;33380:10;:31;;33409:1;;33380:31;;33397:14;;33380:31;:::i;:::-;;;;-1:-1:-1;;33439:14:0;;;;33422:13;:31;;:13;;:31;;33439:14;;33422:31;:::i;28750:130::-;-1:-1:-1;;;;;28845:18:0;;;;;;:9;:18;;;;;;:27;;28866:6;;28845:27;:::i;:::-;-1:-1:-1;;;;;28824:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;28750:130:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548: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;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1347:343::-;1414:2;1408:9;;;1444:15;;1489:18;1474:34;;1510:22;;;1471:62;1468:185;;;1575:10;1570:3;1566:20;1563:1;1556:31;1610:4;1607:1;1600:15;1638:4;1635:1;1628:15;1468:185;1669:2;1662:22;1347:343;:::o;1695:674::-;1785:6;1838:2;1826:9;1817:7;1813:23;1809:32;1806:52;;;1854:1;1851;1844:12;1806:52;1903:7;1896:4;1885:9;1881:20;1877:34;1867:62;;1925:1;1922;1915:12;1867:62;1949:17;;:::i;:::-;1988:3;2029:2;2018:9;2014:18;2055:7;2047:6;2044:19;2041:39;;;2076:1;2073;2066:12;2041:39;2100:9;2118:221;2134:6;2129:3;2126:15;2118:221;;;2216:3;2203:17;2233:31;2258:5;2233:31;:::i;:::-;2277:18;;2324:4;2315:14;;;;2151;2118:221;;;-1:-1:-1;2358:5:1;;1695:674;-1:-1:-1;;;;;1695:674:1:o;2556:160::-;2621:20;;2677:13;;2670:21;2660:32;;2650:60;;2706:1;2703;2696:12;2650:60;2556:160;;;:::o;2721:315::-;2786:6;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;2902:9;2889:23;2921:31;2946:5;2921:31;:::i;:::-;2971:5;-1:-1:-1;2995:35:1;3026:2;3011:18;;2995:35;:::i;:::-;2985:45;;2721:315;;;;;:::o;3041:456::-;3118:6;3126;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3242:9;3229:23;3261:31;3286:5;3261:31;:::i;:::-;3311:5;-1:-1:-1;3368:2:1;3353:18;;3340:32;3381:33;3340:32;3381:33;:::i;:::-;3041:456;;3433:7;;-1:-1:-1;;;3487:2:1;3472:18;;;;3459:32;;3041:456::o;3502:180::-;3561:6;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;3653:23:1;;3502:180;-1:-1:-1;3502:180:1:o;3876:247::-;3935:6;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:31;4087:5;4062:31;:::i;:::-;4112:5;3876:247;-1:-1:-1;;;3876:247:1:o;4128:591::-;4210:6;4263:2;4251:9;4242:7;4238:23;4234:32;4231:52;;;4279:1;4276;4269:12;4231:52;4328:7;4321:4;4310:9;4306:20;4302:34;4292:62;;4350:1;4347;4340:12;4292:62;4374:17;;:::i;:::-;4413:3;4454:2;4443:9;4439:18;4480:7;4472:6;4469:19;4466:39;;;4501:1;4498;4491:12;4466:39;4525:9;4543:146;4559:6;4554:3;4551:15;4543:146;;;4627:17;;4615:30;;4674:4;4665:14;;;;4576;4543:146;;5156:180;5212:6;5265:2;5253:9;5244:7;5240:23;5236:32;5233:52;;;5281:1;5278;5271:12;5233:52;5304:26;5320:9;5304:26;:::i;5341:383::-;5418:6;5426;5434;5487:2;5475:9;5466:7;5462:23;5458:32;5455:52;;;5503:1;5500;5493:12;5455:52;5539:9;5526:23;5516:33;;5596:2;5585:9;5581:18;5568:32;5558:42;;5650:2;5639:9;5635:18;5622:32;5663:31;5688:5;5663:31;:::i;:::-;5713:5;5703:15;;;5341:383;;;;;:::o;5729:388::-;5797:6;5805;5858:2;5846:9;5837:7;5833:23;5829:32;5826:52;;;5874:1;5871;5864:12;5826:52;5913:9;5900:23;5932:31;5957:5;5932:31;:::i;:::-;5982:5;-1:-1:-1;6039:2:1;6024:18;;6011:32;6052:33;6011:32;6052:33;:::i;:::-;6104:7;6094:17;;;5729:388;;;;;:::o;6356:380::-;6435:1;6431:12;;;;6478;;;6499:61;;6553:4;6545:6;6541:17;6531:27;;6499:61;6606:2;6598:6;6595:14;6575:18;6572:38;6569:161;;6652:10;6647:3;6643:20;6640:1;6633:31;6687:4;6684:1;6677:15;6715:4;6712:1;6705:15;6569:161;;6356:380;;;:::o;6741:356::-;6943:2;6925:21;;;6962:18;;;6955:30;7021:34;7016:2;7001:18;;6994:62;7088:2;7073:18;;6741:356::o;7102:960::-;7385:3;7370:19;;7374:9;7466:6;7343:4;7500:194;7514:4;7511:1;7508:11;7500:194;;;7577:13;;-1:-1:-1;;;;;7573:39:1;7561:52;;7642:4;7633:14;;;;7609:1;7670:14;;;;7527:9;7500:194;;;7504:3;;;7731:2;7720:9;7716:18;7782:6;7808:1;7818:238;7834:4;7829:3;7826:13;7818:238;;;7903:15;;-1:-1:-1;;;;;7899:41:1;7885:56;;7964:4;7990:14;;;;8029:17;;;;7937:1;7849:11;7818:238;;;7822:3;;;7102:960;;;;;:::o;8765:127::-;8826:10;8821:3;8817:20;8814:1;8807:31;8857:4;8854:1;8847:15;8881:4;8878:1;8871:15;8897:125;8962:9;;;8983:10;;;8980:36;;;8996:18;;:::i;9639:306::-;9727:6;9735;9743;9796:2;9784:9;9775:7;9771:23;9767:32;9764:52;;;9812:1;9809;9802:12;9764:52;9841:9;9835:16;9825:26;;9891:2;9880:9;9876:18;9870:25;9860:35;;9935:2;9924:9;9920:18;9914:25;9904:35;;9639:306;;;;;:::o;9950:127::-;10011:10;10006:3;10002:20;9999:1;9992:31;10042:4;10039:1;10032:15;10066:4;10063:1;10056:15;10495:876;10746:3;10731:19;;10735:9;10827:6;10704:4;10861:168;10875:4;10872:1;10869:11;10861:168;;;10934:13;;10922:26;;10977:4;10968:14;;;;11017:1;11005:14;;;;10888:9;10861:168;;;10865:3;;;11066:2;11055:9;11051:18;11117:6;11143:1;11153:212;11169:4;11164:3;11161:13;11153:212;;;11234:15;;11220:30;;11273:4;11299:14;;;;11338:17;;;;11193:1;11184:11;11153:212;;13195:128;13262:9;;;13283:11;;;13280:37;;;13297:18;;:::i;13735:168::-;13808:9;;;13839;;13856:15;;;13850:22;;13836:37;13826:71;;13877:18;;:::i;13908:217::-;13948:1;13974;13964:132;;14018:10;14013:3;14009:20;14006:1;13999:31;14053:4;14050:1;14043:15;14081:4;14078:1;14071:15;13964:132;-1:-1:-1;14110:9:1;;13908:217::o;16359:251::-;16429:6;16482:2;16470:9;16461:7;16457:23;16453:32;16450:52;;;16498:1;16495;16488:12;16450:52;16530:9;16524:16;16549:31;16574:5;16549:31;:::i;16615:980::-;16877:4;16925:3;16914:9;16910:19;16956:6;16945:9;16938:25;16982:2;17020:6;17015:2;17004:9;17000:18;16993:34;17063:3;17058:2;17047:9;17043:18;17036:31;17087:6;17122;17116:13;17153:6;17145;17138:22;17191:3;17180:9;17176:19;17169:26;;17230:2;17222:6;17218:15;17204:29;;17251:1;17261:195;17275:6;17272:1;17269:13;17261:195;;;17340:13;;-1:-1:-1;;;;;17336:39:1;17324:52;;17431:15;;;;17396:12;;;;17372:1;17290:9;17261:195;;;-1:-1:-1;;;;;;;17512:32:1;;;;17507:2;17492:18;;17485:60;-1:-1:-1;;;17576:3:1;17561:19;17554:35;17473:3;16615:980;-1:-1:-1;;;16615:980:1:o

Swarm Source

ipfs://5eb86b4041835ca9019c8eac4a5da3573cdb34ca2412b993cb00fed5107b4441
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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