ETH Price: $3,474.66 (-1.23%)
Gas: 5 Gwei

Token

DRAGONITE INU (DRAGONITE)
 

Overview

Max Total Supply

1,000,000,000,000,000 DRAGONITE

Holders

128

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.192228733 DRAGONITE

Value
$0.00
0x6B6B1C0a3e5Ae34BAc162296A9E2cea4a0a00E60
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:
DRAGONITE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : DRAGONITE.sol
// t.me/Dragonite_INU
// WEB : DragooniteINU.net

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.9.0;

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

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

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

contract DRAGONITE is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply = 1_000_000_000_000_000;

    string private _name = "DRAGONITE INU";
    string private _symbol = "DRAGONITE";

    uint256 public _buyFee = 1000;
    uint256 public _sellFee = 1000;
    uint256 public _transferFee = 3000;

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 5000;
    uint256 constant public maxTransferTaxes = 2000;

    uint256 public _liquidityRatio = 3;
    uint256 public _marketingRatio = 4;
    uint256 public _devRatio = 3;

    uint256 private constant masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 constant private _decimals = 9;
    uint256 constant private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address payable private _marketingWallet = payable(0xdE921c7aB3C287573eC4EF624eD9b10a24769E90);
    address payable private _devWallet = payable(0xe411DD774e27bb9645176E215aCB4d6Ed79fccf4);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent = 1;
    uint256 private maxTxDivisor = 100;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor;

    uint256 private maxWalletPercent = 2;
    uint256 private maxWalletDivisor = 100;
    uint256 private _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
    uint256 public maxWalletSizeUI = (startingSupply * maxWalletPercent) / maxWalletDivisor;

    uint256 private swapThreshold = (_tTotal * 5) / 10000;
    uint256 private swapAmount = (_tTotal * 5) / 1000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        _tOwned[_msgSender()] = _tTotal;

        // Set the owner.
        _owner = msg.sender;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;

        // Approve the owner for PancakeSwap, timesaver.
        _approve(_msgSender(), _routerAddress, _tTotal);

        // Ever-growing sniper/tool blacklist
        _isSniperOrBlacklisted[0xE4882975f933A199C92b5A925C9A8fE65d599Aa8] = true;
        _isSniperOrBlacklisted[0x86C70C4a3BC775FB4030448c9fdb73Dc09dd8444] = true;
        _isSniperOrBlacklisted[0xa4A25AdcFCA938aa030191C297321323C57148Bd] = true;
        _isSniperOrBlacklisted[0x20C00AFf15Bb04cC631DB07ee9ce361ae91D12f8] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x6e44DdAb5c29c9557F275C9DB6D12d670125FE17] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x0538856b6d0383cde1709c6531B9a0437185462b] = true;
        _isSniperOrBlacklisted[0x90484Bb9bc05fD3B5FF1fe412A492676cd81790C] = true;
        _isSniperOrBlacklisted[0xA62c5bA4D3C95b3dDb247EAbAa2C8E56BAC9D6dA] = true;
        _isSniperOrBlacklisted[0xA94E56EFc384088717bb6edCccEc289A72Ec2381] = true;
        _isSniperOrBlacklisted[0x3066Cc1523dE539D36f94597e233719727599693] = true;
        _isSniperOrBlacklisted[0xf13FFadd3682feD42183AF8F3f0b409A9A0fdE31] = true;
        _isSniperOrBlacklisted[0x376a6EFE8E98f3ae2af230B3D45B8Cc5e962bC27] = true;
        _isSniperOrBlacklisted[0x201044fa39866E6dD3552D922CDa815899F63f20] = true;
        _isSniperOrBlacklisted[0x6F3aC41265916DD06165b750D88AB93baF1a11F8] = true;
        _isSniperOrBlacklisted[0x27C71ef1B1bb5a9C9Ee0CfeCEf4072AbAc686ba6] = true;
        _isSniperOrBlacklisted[0xDEF441C00B5Ca72De73b322aA4e5FE2b21D2D593] = true;
        _isSniperOrBlacklisted[0x5668e6e8f3C31D140CC0bE918Ab8bB5C5B593418] = true;
        _isSniperOrBlacklisted[0x4b9BDDFB48fB1529125C14f7730346fe0E8b5b40] = true;
        _isSniperOrBlacklisted[0x7e2b3808cFD46fF740fBd35C584D67292A407b95] = true;
        _isSniperOrBlacklisted[0xe89C7309595E3e720D8B316F065ecB2730e34757] = true;
        _isSniperOrBlacklisted[0x725AD056625326B490B128E02759007BA5E4eBF1] = true;


        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "One week cooldown.");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }

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

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function isProtected(uint256 rInitializer) external onlyOwner {
        require (_liqAddStatus == 0, "Error.");
        _liqAddStatus = rInitializer;
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner() {
        _isSniperOrBlacklisted[account] = enabled;
    }

    function setStartingProtections(uint8 _block) external onlyOwner{
        require (snipeBlockAmt == 0 && !_hasLiqBeenAdded);
        snipeBlockAmt = _block;
    }

    function setProtectionSettings(bool antiSnipe, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        sameBlockActive = antiBlock;
    }

    function setTaxes(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _buyFee = buyFee;
        _sellFee = sellFee;
        _transferFee = transferFee;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        require (liquidity + marketing == 100, "Must add up to 100%");
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxWalletSize = check;
        maxWalletSizeUI = (startingSupply * percent) / divisor;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable marketingWallet, address payable devWallet) external onlyOwner {
        _marketingWallet = payable(marketingWallet);
        _devWallet = payable(devWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
            }
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
            }
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (_liquidityRatio + _marketingRatio + _devRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio + _devRatio)) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(((currentBalance - liquidityBalance) * _marketingRatio) / (_marketingRatio + _devRatio));
            _devWallet.transfer(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 5) {
                _liqAddBlock = block.number + 5000;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Sniper rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (from == lpPair) {
            currentFee = _buyFee;
        } else if (to == lpPair) {
            currentFee = _sellFee;
        } else {
            currentFee = _transferFee;
        }

        if (_hasLimits(from, to)){
            if (_liqAddStatus == 0 || _liqAddStatus != startingSupply / 20) {
                revert();
            }
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_block","type":"uint8"}],"name":"setStartingProtections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060035566038d7ea4c680006008556040518060400160405280600d81526020017f445241474f4e49544520494e55000000000000000000000000000000000000008152506009908051906020019062000061929190620017d0565b506040518060400160405280600981526020017f445241474f4e4954450000000000000000000000000000000000000000000000815250600a9080519060200190620000af929190620017d0565b506103e8600b556103e8600c55610bb8600d556003600e556004600f556003601055600960ff16600a620000e4919062001a22565b600854620000f3919062001b5f565b601155737a250d5630b4cf539739df2c5dacb4c659f2488d601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de921c7ab3c287573ec4ef624ed9b10a24769e90601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e411dd774e27bb9645176e215acb4d6ed79fccf4601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760156101000a81548160ff021916908315150217905550600160185560646019556019546018546011546200022f919062001b5f565b6200023b91906200198f565b601a5560195460185460085462000253919062001b5f565b6200025f91906200198f565b601b556002601c556064601d55601d54601c5460115462000281919062001b5f565b6200028d91906200198f565b601e55601d54601c54600854620002a5919062001b5f565b620002b191906200198f565b601f556127106005601154620002c8919062001b5f565b620002d491906200198f565b6020556103e86005601154620002eb919062001b5f565b620002f791906200198f565b6021556001602260006101000a81548160ff0219169083151502179055506000602260016101000a81548160ff0219169083151502179055506000602355600060245560006025556000602655600060275560006028556001602960006101000a81548160ff0219169083151502179055506011546001600062000380620015cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ca57600080fd5b505afa158015620004df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000505919062001897565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200058957600080fd5b505afa1580156200059e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c4919062001897565b306040518363ffffffff1660e01b8152600401620005e492919062001912565b602060405180830381600087803b158015620005ff57600080fd5b505af115801562000614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200063a919062001897565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620007cd620015d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620008e6620015d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200097d6200094b620015cc60201b60201c565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601154620015fd60201b60201c565b60016006600073e4882975f933a199c92b5a925c9a8fe65d599aa873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007386c70c4a3bc775fb4030448c9fdb73dc09dd844473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a4a25adcfca938aa030191c297321323c57148bd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007320c00aff15bb04cc631db07ee9ce361ae91d12f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000730538856b6d0383cde1709c6531b9a0437185462b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000736e44ddab5c29c9557f275c9db6d12d670125fe1773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007390484bb9bc05fd3b5ff1fe412a492676cd81790c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a62c5ba4d3c95b3ddb247eabaa2c8e56bac9d6da73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a94e56efc384088717bb6edcccec289a72ec238173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000733066cc1523de539d36f94597e23371972759969373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073f13ffadd3682fed42183af8f3f0b409a9a0fde3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073376a6efe8e98f3ae2af230b3d45b8cc5e962bc2773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000730538856b6d0383cde1709c6531b9a0437185462b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007390484bb9bc05fd3b5ff1fe412a492676cd81790c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a62c5ba4d3c95b3ddb247eabaa2c8e56bac9d6da73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073a94e56efc384088717bb6edcccec289a72ec238173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000733066cc1523de539d36f94597e23371972759969373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073f13ffadd3682fed42183af8f3f0b409a9a0fde3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073376a6efe8e98f3ae2af230b3d45b8cc5e962bc2773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073201044fa39866e6dd3552d922cda815899f63f2073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000736f3ac41265916dd06165b750d88ab93baf1a11f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660007327c71ef1b1bb5a9c9ee0cfecef4072abac686ba673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073def441c00b5ca72de73b322aa4e5fe2b21d2d59373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000735668e6e8f3c31d140cc0be918ab8bb5c5b59341873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000734b9bddfb48fb1529125c14f7730346fe0e8b5b4073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000737e2b3808cfd46ff740fbd35c584d67292a407b9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073e89c7309595e3e720d8b316f065ecb2730e3475773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600073725ad056625326b490b128e02759007ba5e4ebf173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200155d620015cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601154604051620015be919062001961565b60405180910390a362001d16565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562001670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001667906200193f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620016e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016da906200193f565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620017c3919062001961565b60405180910390a3505050565b828054620017de9062001bfe565b90600052602060002090601f0160209004810192826200180257600085556200184e565b82601f106200181d57805160ff19168380011785556200184e565b828001600101855582156200184e579182015b828111156200184d57825182559160200191906001019062001830565b5b5090506200185d919062001861565b5090565b5b808211156200187c57600081600090555060010162001862565b5090565b600081519050620018918162001cfc565b92915050565b600060208284031215620018b057620018af62001cc1565b5b6000620018c08482850162001880565b91505092915050565b620018d48162001bc0565b82525050565b6000620018e96013836200197e565b9150620018f68262001cd3565b602082019050919050565b6200190c8162001bf4565b82525050565b6000604082019050620019296000830185620018c9565b620019386020830184620018c9565b9392505050565b600060208201905081810360008301526200195a81620018da565b9050919050565b600060208201905062001978600083018462001901565b92915050565b600082825260208201905092915050565b60006200199c8262001bf4565b9150620019a98362001bf4565b925082620019bc57620019bb62001c63565b5b828204905092915050565b6000808291508390505b600185111562001a1957808604811115620019f157620019f062001c34565b5b600185161562001a015780820291505b808102905062001a118562001cc6565b9450620019d1565b94509492505050565b600062001a2f8262001bf4565b915062001a3c8362001bf4565b925062001a6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001a73565b905092915050565b60008262001a85576001905062001b58565b8162001a95576000905062001b58565b816001811462001aae576002811462001ab95762001aef565b600191505062001b58565b60ff84111562001ace5762001acd62001c34565b5b8360020a91508482111562001ae85762001ae762001c34565b5b5062001b58565b5060208310610133831016604e8410600b841016171562001b295782820a90508381111562001b235762001b2262001c34565b5b62001b58565b62001b388484846001620019c7565b9250905081840481111562001b525762001b5162001c34565b5b81810290505b9392505050565b600062001b6c8262001bf4565b915062001b798362001bf4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001bb55762001bb462001c34565b5b828202905092915050565b600062001bcd8262001bd4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062001c1757607f821691505b6020821081141562001c2e5762001c2d62001c92565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b62001d078162001bc0565b811462001d1357600080fd5b50565b6153018062001d266000396000f3fe6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610ad5578063eec2744e14610afe578063f6540ec714610b27578063fb78680d14610b52576102b9565b8063dd62ed3e14610a44578063e79d416014610a81578063e9dae5ed14610aac576102b9565b8063a8edc79714610934578063a9059cbb1461095f578063b1b08f711461099c578063b3d514fb146109c7578063c49b9a80146109f2578063d3f6a15714610a1b576102b9565b806381c6f11b1161012e57806381c6f11b14610810578063893d20e81461083957806389fd9bc1146108645780638da5cb5b146108a157806395d89b41146108cc578063a457c2d7146108f7576102b9565b8063590ffdce14610716578063640384091461073f5780636639dd931461076a57806370a0823114610793578063715018a6146107d057806380c581d1146107e7576102b9565b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146105f25780634fb2e45d1461061d5780634fbee1931461064657806350a8e01614610683578063571ac8b0146106ae578063590f897e146106eb576102b9565b80633df9a8d2146104f45780633f3cf56c1461051f57806340b9a54b146105485780634129ecee14610573578063452ed4f11461059c5780634a74bb02146105c7576102b9565b806323b872dd1161026b57806323b872dd146103d0578063260039571461040d5780632b28fc7a14610436578063313ce56714610461578063384f6b511461048c57806339509351146104b7576102b9565b806303fd2a45146102be578063044df726146102e957806306fdde03146103125780630758d9241461033d578063095ea7b31461036857806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e091906147ed565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906142e1565b610b81565b005b34801561031e57600080fd5b50610327610c4e565b60405161033491906148c8565b60405180910390f35b34801561034957600080fd5b50610352610ce0565b60405161035f91906148ad565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190614274565b610d06565b60405161039c9190614892565b60405180910390f35b3480156103b157600080fd5b506103ba610d24565b6040516103c79190614aca565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906141e1565b610d2e565b6040516104049190614892565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061434e565b610e7b565b005b34801561044257600080fd5b5061044b610faa565b6040516104589190614aca565b60405180910390f35b34801561046d57600080fd5b50610476610fb0565b6040516104839190614b76565b60405180910390f35b34801561049857600080fd5b506104a1610fb9565b6040516104ae9190614aca565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614274565b610fbf565b6040516104eb9190614892565b60405180910390f35b34801561050057600080fd5b5061050961106b565b6040516105169190614aca565b60405180910390f35b34801561052b57600080fd5b506105466004803603810190610541919061434e565b611071565b005b34801561055457600080fd5b5061055d6111a0565b60405161056a9190614aca565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061449b565b6111a6565b005b3480156105a857600080fd5b506105b1611270565b6040516105be91906147ed565b60405180910390f35b3480156105d357600080fd5b506105dc611296565b6040516105e99190614892565b60405180910390f35b3480156105fe57600080fd5b506106076112a9565b6040516106149190614aca565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614107565b6112af565b005b34801561065257600080fd5b5061066d60048036038101906106689190614107565b611720565b60405161067a9190614892565b60405180910390f35b34801561068f57600080fd5b50610698611776565b6040516106a59190614892565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190614107565b611789565b6040516106e29190614892565b60405180910390f35b3480156106f757600080fd5b506107006117bc565b60405161070d9190614aca565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614234565b6117c2565b005b34801561074b57600080fd5b506107546118b2565b6040516107619190614aca565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061434e565b6118b8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614107565b6119ad565b6040516107c79190614aca565b60405180910390f35b3480156107dc57600080fd5b506107e56119f6565b005b3480156107f357600080fd5b5061080e60048036038101906108099190614234565b611b74565b005b34801561081c57600080fd5b5061083760048036038101906108329190614321565b611d34565b005b34801561084557600080fd5b5061084e611e18565b60405161085b91906147ed565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614107565b611e27565b6040516108989190614892565b60405180910390f35b3480156108ad57600080fd5b506108b6611e7d565b6040516108c391906147ed565b60405180910390f35b3480156108d857600080fd5b506108e1611ea6565b6040516108ee91906148c8565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614274565b611f38565b60405161092b9190614892565b60405180910390f35b34801561094057600080fd5b50610949611fe4565b6040516109569190614aca565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614274565b611fea565b6040516109939190614892565b60405180910390f35b3480156109a857600080fd5b506109b1612009565b6040516109be9190614aca565b60405180910390f35b3480156109d357600080fd5b506109dc61200f565b6040516109e99190614aca565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906142b4565b612015565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614161565b6120fe565b005b348015610a5057600080fd5b50610a6b6004803603810190610a6691906141a1565b612219565b604051610a789190614aca565b60405180910390f35b348015610a8d57600080fd5b50610a966122a0565b604051610aa39190614aca565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace919061438e565b6122a6565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614107565b6123b6565b005b348015610b0a57600080fd5b50610b256004803603810190610b209190614234565b612862565b005b348015610b3357600080fd5b50610b3c612952565b604051610b499190614aca565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614434565b612958565b005b61dead81565b610b89612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d906148ea565b60405180910390fd5b81602260006101000a81548160ff02191690831515021790555080602960006101000a81548160ff0219169083151502179055505050565b606060098054610c5d90614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990614ddd565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d1a610d13612a31565b8484612a39565b6001905092915050565b6000601154905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e675781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5f9190614cc7565b925050819055505b610e72848484612c04565b90509392505050565b610e83612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906148ea565b60405180910390fd5b60008183601154610f219190614c6d565b610f2b9190614c3c565b90506103e8601154610f3d9190614c3c565b811015610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f769061496a565b60405180910390fd5b80601e819055508183600854610f959190614c6d565b610f9f9190614c3c565b601f81905550505050565b6107d081565b60006009905090565b600e5481565b6000611061610fcc612a31565b848460046000610fda612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c9190614be6565b612a39565b6001905092915050565b600d5481565b611079612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906148ea565b60405180910390fd5b600081836011546111179190614c6d565b6111219190614c3c565b90506103e86011546111339190614c3c565b811015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c9061496a565b60405180910390fd5b80601a81905550818360085461118b9190614c6d565b6111959190614c3c565b601b81905550505050565b600b5481565b6111ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148ea565b60405180910390fd5b600060275414801561125a5750602260019054906101000a900460ff16155b61126357600080fd5b8060ff1660278190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b600f5481565b6112b7612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906148ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614aaa565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614aaa565b60405180910390fd5b61145060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b61145b8160016117c2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115135780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61153c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061160860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b11156116635761166160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261165c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b612c04565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602260019054906101000a900460ff1681565b60006117b5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d06565b9050919050565b600c5481565b6117ca612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906148ea565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6118c0612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906148ea565b60405180910390fd5b6064818361195b9190614be6565b1461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614a6a565b60405180910390fd5b81600e8190555080600f819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119fe612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906148ea565b60405180910390fd5b611ab660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611b7c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906148ea565b60405180910390fd5b600015158115151415611c73576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d30565b600060035414611cd05762093a8060035442611c8f9190614cc7565b11611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906149aa565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b611d3c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906148ea565b60405180910390fd5b600060235414611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614a2a565b60405180910390fd5b8060238190555050565b6000611e22611e7d565b905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611eb590614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee190614ddd565b8015611f2e5780601f10611f0357610100808354040283529160200191611f2e565b820191906000526020600020905b815481529060010190602001808311611f1157829003601f168201915b5050505050905090565b6000611fda611f45612a31565b848460046000611f53612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd59190614cc7565b612a39565b6001905092915050565b60105481565b6000611ffe611ff7612a31565b8484612c04565b506001905092915050565b6107d081565b61138881565b61201d612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906148ea565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f39190614892565b60405180910390a150565b612106612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906148ea565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60285481565b6122ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906148ea565b60405180910390fd5b6107d0831115801561234f57506113888211155b801561235d57506107d08111155b61239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061494a565b60405180910390fd5b82600b8190555081600c8190555080600d81905550505050565b6123be612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906148ea565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561249857600080fd5b505afa1580156124ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d09190614134565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a9190614134565b6040518363ffffffff1660e01b8152600401612587929190614808565b60206040518083038186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d79190614134565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190614134565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ee57600080fd5b505afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614134565b6040518363ffffffff1660e01b8152600401612743929190614808565b602060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127959190614134565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061281c565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61286a612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee906148ea565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f5481565b612960612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906148ea565b60405180910390fd5b82846011546129fc9190614c6d565b612a069190614c3c565b6020819055508082601154612a1b9190614c6d565b612a259190614c3c565b60218190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10906149ea565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bf79190614aca565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c9061498a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061498a565b60405180910390fd5b60008211612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906149ca565b60405180910390fd5b612d328484613231565b156130b857602960009054906101000a900460ff1615612ec557600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e335743602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dea57600080fd5b43602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec4565b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7f57600080fd5b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f665750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb157601a54821115612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614a8a565b60405180910390fd5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130595750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b757601e548261306b856119ad565b6130759190614be6565b11156130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614a4a565b60405180910390fd5b5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061315f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561316957600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561321b57601760149054906101000a900460ff161580156131e45750601760159054906101000a900460ff165b1561321a5760006131f4306119ad565b9050602054811061321857602154811061320e5760215490505b61321781613408565b5b505b5b61322785858584613680565b9150509392505050565b600061323b611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132a95750613279611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132ff5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561340057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601760146101000a81548160ff0219169083151502179055506000601054600f54600e546134389190614be6565b6134429190614be6565b141561344d57613662565b60006002601054600f54600e546134649190614be6565b61346e9190614be6565b600e548461347c9190614c6d565b6134869190614c3c565b6134909190614c3c565b9050600081836134a09190614cc7565b90506134ab816139e3565b600047905060006002601054600f54600e546134c79190614be6565b6134d19190614be6565b600e54846134df9190614c6d565b6134e99190614c3c565b6134f39190614c3c565b90506000841115613544576135088482613c08565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161353b93929190614b3f565b60405180910390a15b600084866135529190614cc7565b111561365d57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601054600f546135a49190614be6565b600f5484866135b39190614cc7565b6135bd9190614c6d565b6135c79190614c3c565b9081150290604051600060405180830381858888f193505050501580156135f2573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561365b573d6000803e3d6000fd5b505b505050505b6000601760146101000a81548160ff02191690831515021790555050565b6000602260009054906101000a900460ff16156138aa576136a085611e27565b806136b057506136af84611e27565b5b156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790614a0a565b60405180910390fd5b602260019054906101000a900460ff166137765761370e8585613cca565b602260019054906101000a900460ff1615801561373157506137308585613231565b5b15613771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137689061492a565b60405180910390fd5b6138a9565b60006024541180156137d15750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137e357506137e28585613231565b5b156138a857602754602454436137f99190614cc7565b10156138a7576001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506028600081548092919061386a90614e0f565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e58460405161389e91906147ed565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138f99190614cc7565b9250508190555060008261390d5783613919565b613918868686613e80565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396a9190614be6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ce9190614aca565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613a00576139ff614f14565b5b604051908082528060200260200182016040528015613a2e5781602001602082028036833780820191505090505b5090503081600081518110613a4657613a45614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ae857600080fd5b505afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190614134565b81600181518110613b3457613b33614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bd2959493929190614ae5565b600060405180830381600087803b158015613bec57600080fd5b505af1158015613c00573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613c7196959493929190614831565b6060604051808303818588803b158015613c8a57600080fd5b505af1158015613c9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc391906143e1565b5050505050565b602260019054906101000a900460ff1615613d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d119061490a565b60405180910390fd5b613d248282613231565b158015613d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613e7c57600560275414613da65761138843613d9b9190614be6565b602481905550613dae565b436024819055505b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260016101000a81548160ff021916908315150217905550426025819055506001601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051613e739190614892565b60405180910390a15b5050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613ee357600b549050613f4a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f4357600c549050613f49565b600d5490505b5b613f548585613231565b15613f855760006023541480613f7a57506014600854613f749190614c3c565b60235414155b15613f8457600080fd5b5b60006127108285613f969190614c6d565b613fa09190614c3c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff19190614be6565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140559190614aca565b60405180910390a380846140699190614cc7565b925050509392505050565b60008135905061408381615258565b92915050565b60008151905061409881615258565b92915050565b6000813590506140ad8161526f565b92915050565b6000813590506140c281615286565b92915050565b6000813590506140d78161529d565b92915050565b6000815190506140ec8161529d565b92915050565b600081359050614101816152b4565b92915050565b60006020828403121561411d5761411c614f43565b5b600061412b84828501614074565b91505092915050565b60006020828403121561414a57614149614f43565b5b600061415884828501614089565b91505092915050565b6000806040838503121561417857614177614f43565b5b60006141868582860161409e565b92505060206141978582860161409e565b9150509250929050565b600080604083850312156141b8576141b7614f43565b5b60006141c685828601614074565b92505060206141d785828601614074565b9150509250929050565b6000806000606084860312156141fa576141f9614f43565b5b600061420886828701614074565b935050602061421986828701614074565b925050604061422a868287016140c8565b9150509250925092565b6000806040838503121561424b5761424a614f43565b5b600061425985828601614074565b925050602061426a858286016140b3565b9150509250929050565b6000806040838503121561428b5761428a614f43565b5b600061429985828601614074565b92505060206142aa858286016140c8565b9150509250929050565b6000602082840312156142ca576142c9614f43565b5b60006142d8848285016140b3565b91505092915050565b600080604083850312156142f8576142f7614f43565b5b6000614306858286016140b3565b9250506020614317858286016140b3565b9150509250929050565b60006020828403121561433757614336614f43565b5b6000614345848285016140c8565b91505092915050565b6000806040838503121561436557614364614f43565b5b6000614373858286016140c8565b9250506020614384858286016140c8565b9150509250929050565b6000806000606084860312156143a7576143a6614f43565b5b60006143b5868287016140c8565b93505060206143c6868287016140c8565b92505060406143d7868287016140c8565b9150509250925092565b6000806000606084860312156143fa576143f9614f43565b5b6000614408868287016140dd565b9350506020614419868287016140dd565b925050604061442a868287016140dd565b9150509250925092565b6000806000806080858703121561444e5761444d614f43565b5b600061445c878288016140c8565b945050602061446d878288016140c8565b935050604061447e878288016140c8565b925050606061448f878288016140c8565b91505092959194509250565b6000602082840312156144b1576144b0614f43565b5b60006144bf848285016140f2565b91505092915050565b60006144d483836144e0565b60208301905092915050565b6144e981614cfb565b82525050565b6144f881614cfb565b82525050565b600061450982614ba1565b6145138185614bc4565b935061451e83614b91565b8060005b8381101561454f57815161453688826144c8565b975061454183614bb7565b925050600181019050614522565b5085935050505092915050565b61456581614d1f565b82525050565b61457481614d62565b82525050565b61458381614d74565b82525050565b600061459482614bac565b61459e8185614bd5565b93506145ae818560208601614daa565b6145b781614f48565b840191505092915050565b60006145cf601183614bd5565b91506145da82614f59565b602082019050919050565b60006145f2602383614bd5565b91506145fd82614f82565b604082019050919050565b6000614615602583614bd5565b915061462082614fd1565b604082019050919050565b6000614638601783614bd5565b915061464382615020565b602082019050919050565b600061465b602383614bd5565b915061466682615049565b604082019050919050565b600061467e601483614bd5565b915061468982615098565b602082019050919050565b60006146a1601283614bd5565b91506146ac826150c1565b602082019050919050565b60006146c4600883614bd5565b91506146cf826150ea565b602082019050919050565b60006146e7601383614bd5565b91506146f282615113565b602082019050919050565b600061470a601083614bd5565b91506147158261513c565b602082019050919050565b600061472d600683614bd5565b915061473882615165565b602082019050919050565b6000614750601a83614bd5565b915061475b8261518e565b602082019050919050565b6000614773601383614bd5565b915061477e826151b7565b602082019050919050565b6000614796601883614bd5565b91506147a1826151e0565b602082019050919050565b60006147b9603d83614bd5565b91506147c482615209565b604082019050919050565b6147d881614d4b565b82525050565b6147e781614d55565b82525050565b600060208201905061480260008301846144ef565b92915050565b600060408201905061481d60008301856144ef565b61482a60208301846144ef565b9392505050565b600060c08201905061484660008301896144ef565b61485360208301886147cf565b614860604083018761457a565b61486d606083018661457a565b61487a60808301856144ef565b61488760a08301846147cf565b979650505050505050565b60006020820190506148a7600083018461455c565b92915050565b60006020820190506148c2600083018461456b565b92915050565b600060208201905081810360008301526148e28184614589565b905092915050565b60006020820190508181036000830152614903816145c2565b9050919050565b60006020820190508181036000830152614923816145e5565b9050919050565b6000602082019050818103600083015261494381614608565b9050919050565b600060208201905081810360008301526149638161462b565b9050919050565b600060208201905081810360008301526149838161464e565b9050919050565b600060208201905081810360008301526149a381614671565b9050919050565b600060208201905081810360008301526149c381614694565b9050919050565b600060208201905081810360008301526149e3816146b7565b9050919050565b60006020820190508181036000830152614a03816146da565b9050919050565b60006020820190508181036000830152614a23816146fd565b9050919050565b60006020820190508181036000830152614a4381614720565b9050919050565b60006020820190508181036000830152614a6381614743565b9050919050565b60006020820190508181036000830152614a8381614766565b9050919050565b60006020820190508181036000830152614aa381614789565b9050919050565b60006020820190508181036000830152614ac3816147ac565b9050919050565b6000602082019050614adf60008301846147cf565b92915050565b600060a082019050614afa60008301886147cf565b614b07602083018761457a565b8181036040830152614b1981866144fe565b9050614b2860608301856144ef565b614b3560808301846147cf565b9695505050505050565b6000606082019050614b5460008301866147cf565b614b6160208301856147cf565b614b6e60408301846147cf565b949350505050565b6000602082019050614b8b60008301846147de565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf182614d4b565b9150614bfc83614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3157614c30614e58565b5b828201905092915050565b6000614c4782614d4b565b9150614c5283614d4b565b925082614c6257614c61614e87565b5b828204905092915050565b6000614c7882614d4b565b9150614c8383614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cbc57614cbb614e58565b5b828202905092915050565b6000614cd282614d4b565b9150614cdd83614d4b565b925082821015614cf057614cef614e58565b5b828203905092915050565b6000614d0682614d2b565b9050919050565b6000614d1882614d2b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6d82614d86565b9050919050565b6000614d7f82614d4b565b9050919050565b6000614d9182614d98565b9050919050565b6000614da382614d2b565b9050919050565b60005b83811015614dc8578082015181840152602081019050614dad565b83811115614dd7576000848401525b50505050565b60006002820490506001821680614df557607f821691505b60208210811415614e0957614e08614eb6565b5b50919050565b6000614e1a82614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4d57614e4c614e58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000600082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b7f4d7573742062652061626f766520302e3125206f6620746f74616c207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b7f4d7573742061646420757020746f203130302500000000000000000000000000600082015250565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b61526181614cfb565b811461526c57600080fd5b50565b61527881614d0d565b811461528357600080fd5b50565b61528f81614d1f565b811461529a57600080fd5b50565b6152a681614d4b565b81146152b157600080fd5b50565b6152bd81614d55565b81146152c857600080fd5b5056fea2646970667358221220b8e575938b61e88018d8099080bee45726788cf35eb3f6fa1e07763c460f09de64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063590ffdce11610175578063a8edc797116100dc578063dd62ed3e11610095578063eafb5a3c1161006f578063eafb5a3c14610ad5578063eec2744e14610afe578063f6540ec714610b27578063fb78680d14610b52576102b9565b8063dd62ed3e14610a44578063e79d416014610a81578063e9dae5ed14610aac576102b9565b8063a8edc79714610934578063a9059cbb1461095f578063b1b08f711461099c578063b3d514fb146109c7578063c49b9a80146109f2578063d3f6a15714610a1b576102b9565b806381c6f11b1161012e57806381c6f11b14610810578063893d20e81461083957806389fd9bc1146108645780638da5cb5b146108a157806395d89b41146108cc578063a457c2d7146108f7576102b9565b8063590ffdce14610716578063640384091461073f5780636639dd931461076a57806370a0823114610793578063715018a6146107d057806380c581d1146107e7576102b9565b80633df9a8d2116102195780634ef3cce5116101d25780634ef3cce5146105f25780634fb2e45d1461061d5780634fbee1931461064657806350a8e01614610683578063571ac8b0146106ae578063590f897e146106eb576102b9565b80633df9a8d2146104f45780633f3cf56c1461051f57806340b9a54b146105485780634129ecee14610573578063452ed4f11461059c5780634a74bb02146105c7576102b9565b806323b872dd1161026b57806323b872dd146103d0578063260039571461040d5780632b28fc7a14610436578063313ce56714610461578063384f6b511461048c57806339509351146104b7576102b9565b806303fd2a45146102be578063044df726146102e957806306fdde03146103125780630758d9241461033d578063095ea7b31461036857806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e091906147ed565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906142e1565b610b81565b005b34801561031e57600080fd5b50610327610c4e565b60405161033491906148c8565b60405180910390f35b34801561034957600080fd5b50610352610ce0565b60405161035f91906148ad565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190614274565b610d06565b60405161039c9190614892565b60405180910390f35b3480156103b157600080fd5b506103ba610d24565b6040516103c79190614aca565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906141e1565b610d2e565b6040516104049190614892565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061434e565b610e7b565b005b34801561044257600080fd5b5061044b610faa565b6040516104589190614aca565b60405180910390f35b34801561046d57600080fd5b50610476610fb0565b6040516104839190614b76565b60405180910390f35b34801561049857600080fd5b506104a1610fb9565b6040516104ae9190614aca565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614274565b610fbf565b6040516104eb9190614892565b60405180910390f35b34801561050057600080fd5b5061050961106b565b6040516105169190614aca565b60405180910390f35b34801561052b57600080fd5b506105466004803603810190610541919061434e565b611071565b005b34801561055457600080fd5b5061055d6111a0565b60405161056a9190614aca565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061449b565b6111a6565b005b3480156105a857600080fd5b506105b1611270565b6040516105be91906147ed565b60405180910390f35b3480156105d357600080fd5b506105dc611296565b6040516105e99190614892565b60405180910390f35b3480156105fe57600080fd5b506106076112a9565b6040516106149190614aca565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614107565b6112af565b005b34801561065257600080fd5b5061066d60048036038101906106689190614107565b611720565b60405161067a9190614892565b60405180910390f35b34801561068f57600080fd5b50610698611776565b6040516106a59190614892565b60405180910390f35b3480156106ba57600080fd5b506106d560048036038101906106d09190614107565b611789565b6040516106e29190614892565b60405180910390f35b3480156106f757600080fd5b506107006117bc565b60405161070d9190614aca565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614234565b6117c2565b005b34801561074b57600080fd5b506107546118b2565b6040516107619190614aca565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c919061434e565b6118b8565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614107565b6119ad565b6040516107c79190614aca565b60405180910390f35b3480156107dc57600080fd5b506107e56119f6565b005b3480156107f357600080fd5b5061080e60048036038101906108099190614234565b611b74565b005b34801561081c57600080fd5b5061083760048036038101906108329190614321565b611d34565b005b34801561084557600080fd5b5061084e611e18565b60405161085b91906147ed565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614107565b611e27565b6040516108989190614892565b60405180910390f35b3480156108ad57600080fd5b506108b6611e7d565b6040516108c391906147ed565b60405180910390f35b3480156108d857600080fd5b506108e1611ea6565b6040516108ee91906148c8565b60405180910390f35b34801561090357600080fd5b5061091e60048036038101906109199190614274565b611f38565b60405161092b9190614892565b60405180910390f35b34801561094057600080fd5b50610949611fe4565b6040516109569190614aca565b60405180910390f35b34801561096b57600080fd5b5061098660048036038101906109819190614274565b611fea565b6040516109939190614892565b60405180910390f35b3480156109a857600080fd5b506109b1612009565b6040516109be9190614aca565b60405180910390f35b3480156109d357600080fd5b506109dc61200f565b6040516109e99190614aca565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a1491906142b4565b612015565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614161565b6120fe565b005b348015610a5057600080fd5b50610a6b6004803603810190610a6691906141a1565b612219565b604051610a789190614aca565b60405180910390f35b348015610a8d57600080fd5b50610a966122a0565b604051610aa39190614aca565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace919061438e565b6122a6565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614107565b6123b6565b005b348015610b0a57600080fd5b50610b256004803603810190610b209190614234565b612862565b005b348015610b3357600080fd5b50610b3c612952565b604051610b499190614aca565b60405180910390f35b348015610b5e57600080fd5b50610b796004803603810190610b749190614434565b612958565b005b61dead81565b610b89612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d906148ea565b60405180910390fd5b81602260006101000a81548160ff02191690831515021790555080602960006101000a81548160ff0219169083151502179055505050565b606060098054610c5d90614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990614ddd565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d1a610d13612a31565b8484612a39565b6001905092915050565b6000601154905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e675781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e5f9190614cc7565b925050819055505b610e72848484612c04565b90509392505050565b610e83612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906148ea565b60405180910390fd5b60008183601154610f219190614c6d565b610f2b9190614c3c565b90506103e8601154610f3d9190614c3c565b811015610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f769061496a565b60405180910390fd5b80601e819055508183600854610f959190614c6d565b610f9f9190614c3c565b601f81905550505050565b6107d081565b60006009905090565b600e5481565b6000611061610fcc612a31565b848460046000610fda612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105c9190614be6565b612a39565b6001905092915050565b600d5481565b611079612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd906148ea565b60405180910390fd5b600081836011546111179190614c6d565b6111219190614c3c565b90506103e86011546111339190614c3c565b811015611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c9061496a565b60405180910390fd5b80601a81905550818360085461118b9190614c6d565b6111959190614c3c565b601b81905550505050565b600b5481565b6111ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611232906148ea565b60405180910390fd5b600060275414801561125a5750602260019054906101000a900460ff16155b61126357600080fd5b8060ff1660278190555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b600f5481565b6112b7612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906148ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90614aaa565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614aaa565b60405180910390fd5b61145060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b61145b8160016117c2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115135780601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61153c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061160860008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b11156116635761166160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261165c60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119ad565b612c04565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602260019054906101000a900460ff1681565b60006117b5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610d06565b9050919050565b600c5481565b6117ca612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906148ea565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b6118c0612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906148ea565b60405180910390fd5b6064818361195b9190614be6565b1461199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290614a6a565b60405180910390fd5b81600e8190555080600f819055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119fe612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906148ea565b60405180910390fd5b611ab660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006117c2565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b611b7c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906148ea565b60405180910390fd5b600015158115151415611c73576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d30565b600060035414611cd05762093a8060035442611c8f9190614cc7565b11611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906149aa565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b611d3c612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906148ea565b60405180910390fd5b600060235414611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590614a2a565b60405180910390fd5b8060238190555050565b6000611e22611e7d565b905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054611eb590614ddd565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee190614ddd565b8015611f2e5780601f10611f0357610100808354040283529160200191611f2e565b820191906000526020600020905b815481529060010190602001808311611f1157829003601f168201915b5050505050905090565b6000611fda611f45612a31565b848460046000611f53612a31565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fd59190614cc7565b612a39565b6001905092915050565b60105481565b6000611ffe611ff7612a31565b8484612c04565b506001905092915050565b6107d081565b61138881565b61201d612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a1906148ea565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120f39190614892565b60405180910390a150565b612106612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906148ea565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60285481565b6122ae612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612332906148ea565b60405180910390fd5b6107d0831115801561234f57506113888211155b801561235d57506107d08111155b61239c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123939061494a565b60405180910390fd5b82600b8190555081600c8190555080600d81905550505050565b6123be612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612442906148ea565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561249857600080fd5b505afa1580156124ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d09190614134565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253257600080fd5b505afa158015612546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256a9190614134565b6040518363ffffffff1660e01b8152600401612587929190614808565b60206040518083038186803b15801561259f57600080fd5b505afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d79190614134565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127da578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268c9190614134565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ee57600080fd5b505afa158015612702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127269190614134565b6040518363ffffffff1660e01b8152600401612743929190614808565b602060405180830381600087803b15801561275d57600080fd5b505af1158015612771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127959190614134565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061281c565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61286a612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee906148ea565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f5481565b612960612a31565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906148ea565b60405180910390fd5b82846011546129fc9190614c6d565b612a069190614c3c565b6020819055508082601154612a1b9190614c6d565b612a259190614c3c565b60218190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149ea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b10906149ea565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bf79190614aca565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6c9061498a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdc9061498a565b60405180910390fd5b60008211612d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1f906149ca565b60405180910390fd5b612d328484613231565b156130b857602960009054906101000a900460ff1615612ec557600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e335743602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612dea57600080fd5b43602a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec4565b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612e7f57600080fd5b43602a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f665750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb157601a54821115612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614a8a565b60405180910390fd5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130595750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b757601e548261306b856119ad565b6130759190614be6565b11156130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614a4a565b60405180910390fd5b5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061315f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561316957600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561321b57601760149054906101000a900460ff161580156131e45750601760159054906101000a900460ff165b1561321a5760006131f4306119ad565b9050602054811061321857602154811061320e5760215490505b61321781613408565b5b505b5b61322785858584613680565b9150509392505050565b600061323b611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132a95750613279611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132ff5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133555750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561338f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133c85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561340057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001601760146101000a81548160ff0219169083151502179055506000601054600f54600e546134389190614be6565b6134429190614be6565b141561344d57613662565b60006002601054600f54600e546134649190614be6565b61346e9190614be6565b600e548461347c9190614c6d565b6134869190614c3c565b6134909190614c3c565b9050600081836134a09190614cc7565b90506134ab816139e3565b600047905060006002601054600f54600e546134c79190614be6565b6134d19190614be6565b600e54846134df9190614c6d565b6134e99190614c3c565b6134f39190614c3c565b90506000841115613544576135088482613c08565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161353b93929190614b3f565b60405180910390a15b600084866135529190614cc7565b111561365d57601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc601054600f546135a49190614be6565b600f5484866135b39190614cc7565b6135bd9190614c6d565b6135c79190614c3c565b9081150290604051600060405180830381858888f193505050501580156135f2573d6000803e3d6000fd5b50601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561365b573d6000803e3d6000fd5b505b505050505b6000601760146101000a81548160ff02191690831515021790555050565b6000602260009054906101000a900460ff16156138aa576136a085611e27565b806136b057506136af84611e27565b5b156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790614a0a565b60405180910390fd5b602260019054906101000a900460ff166137765761370e8585613cca565b602260019054906101000a900460ff1615801561373157506137308585613231565b5b15613771576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137689061492a565b60405180910390fd5b6138a9565b60006024541180156137d15750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137e357506137e28585613231565b5b156138a857602754602454436137f99190614cc7565b10156138a7576001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506028600081548092919061386a90614e0f565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e58460405161389e91906147ed565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138f99190614cc7565b9250508190555060008261390d5783613919565b613918868686613e80565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461396a9190614be6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139ce9190614aca565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613a00576139ff614f14565b5b604051908082528060200260200182016040528015613a2e5781602001602082028036833780820191505090505b5090503081600081518110613a4657613a45614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ae857600080fd5b505afa158015613afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b209190614134565b81600181518110613b3457613b33614ee5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bd2959493929190614ae5565b600060405180830381600087803b158015613bec57600080fd5b505af1158015613c00573d6000803e3d6000fd5b505050505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613c7196959493929190614831565b6060604051808303818588803b158015613c8a57600080fd5b505af1158015613c9e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cc391906143e1565b5050505050565b602260019054906101000a900460ff1615613d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d119061490a565b60405180910390fd5b613d248282613231565b158015613d7e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613e7c57600560275414613da65761138843613d9b9190614be6565b602481905550613dae565b436024819055505b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602260016101000a81548160ff021916908315150217905550426025819055506001601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051613e739190614892565b60405180910390a15b5050565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613ee357600b549050613f4a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f4357600c549050613f49565b600d5490505b5b613f548585613231565b15613f855760006023541480613f7a57506014600854613f749190614c3c565b60235414155b15613f8457600080fd5b5b60006127108285613f969190614c6d565b613fa09190614c3c565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff19190614be6565b925050819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140559190614aca565b60405180910390a380846140699190614cc7565b925050509392505050565b60008135905061408381615258565b92915050565b60008151905061409881615258565b92915050565b6000813590506140ad8161526f565b92915050565b6000813590506140c281615286565b92915050565b6000813590506140d78161529d565b92915050565b6000815190506140ec8161529d565b92915050565b600081359050614101816152b4565b92915050565b60006020828403121561411d5761411c614f43565b5b600061412b84828501614074565b91505092915050565b60006020828403121561414a57614149614f43565b5b600061415884828501614089565b91505092915050565b6000806040838503121561417857614177614f43565b5b60006141868582860161409e565b92505060206141978582860161409e565b9150509250929050565b600080604083850312156141b8576141b7614f43565b5b60006141c685828601614074565b92505060206141d785828601614074565b9150509250929050565b6000806000606084860312156141fa576141f9614f43565b5b600061420886828701614074565b935050602061421986828701614074565b925050604061422a868287016140c8565b9150509250925092565b6000806040838503121561424b5761424a614f43565b5b600061425985828601614074565b925050602061426a858286016140b3565b9150509250929050565b6000806040838503121561428b5761428a614f43565b5b600061429985828601614074565b92505060206142aa858286016140c8565b9150509250929050565b6000602082840312156142ca576142c9614f43565b5b60006142d8848285016140b3565b91505092915050565b600080604083850312156142f8576142f7614f43565b5b6000614306858286016140b3565b9250506020614317858286016140b3565b9150509250929050565b60006020828403121561433757614336614f43565b5b6000614345848285016140c8565b91505092915050565b6000806040838503121561436557614364614f43565b5b6000614373858286016140c8565b9250506020614384858286016140c8565b9150509250929050565b6000806000606084860312156143a7576143a6614f43565b5b60006143b5868287016140c8565b93505060206143c6868287016140c8565b92505060406143d7868287016140c8565b9150509250925092565b6000806000606084860312156143fa576143f9614f43565b5b6000614408868287016140dd565b9350506020614419868287016140dd565b925050604061442a868287016140dd565b9150509250925092565b6000806000806080858703121561444e5761444d614f43565b5b600061445c878288016140c8565b945050602061446d878288016140c8565b935050604061447e878288016140c8565b925050606061448f878288016140c8565b91505092959194509250565b6000602082840312156144b1576144b0614f43565b5b60006144bf848285016140f2565b91505092915050565b60006144d483836144e0565b60208301905092915050565b6144e981614cfb565b82525050565b6144f881614cfb565b82525050565b600061450982614ba1565b6145138185614bc4565b935061451e83614b91565b8060005b8381101561454f57815161453688826144c8565b975061454183614bb7565b925050600181019050614522565b5085935050505092915050565b61456581614d1f565b82525050565b61457481614d62565b82525050565b61458381614d74565b82525050565b600061459482614bac565b61459e8185614bd5565b93506145ae818560208601614daa565b6145b781614f48565b840191505092915050565b60006145cf601183614bd5565b91506145da82614f59565b602082019050919050565b60006145f2602383614bd5565b91506145fd82614f82565b604082019050919050565b6000614615602583614bd5565b915061462082614fd1565b604082019050919050565b6000614638601783614bd5565b915061464382615020565b602082019050919050565b600061465b602383614bd5565b915061466682615049565b604082019050919050565b600061467e601483614bd5565b915061468982615098565b602082019050919050565b60006146a1601283614bd5565b91506146ac826150c1565b602082019050919050565b60006146c4600883614bd5565b91506146cf826150ea565b602082019050919050565b60006146e7601383614bd5565b91506146f282615113565b602082019050919050565b600061470a601083614bd5565b91506147158261513c565b602082019050919050565b600061472d600683614bd5565b915061473882615165565b602082019050919050565b6000614750601a83614bd5565b915061475b8261518e565b602082019050919050565b6000614773601383614bd5565b915061477e826151b7565b602082019050919050565b6000614796601883614bd5565b91506147a1826151e0565b602082019050919050565b60006147b9603d83614bd5565b91506147c482615209565b604082019050919050565b6147d881614d4b565b82525050565b6147e781614d55565b82525050565b600060208201905061480260008301846144ef565b92915050565b600060408201905061481d60008301856144ef565b61482a60208301846144ef565b9392505050565b600060c08201905061484660008301896144ef565b61485360208301886147cf565b614860604083018761457a565b61486d606083018661457a565b61487a60808301856144ef565b61488760a08301846147cf565b979650505050505050565b60006020820190506148a7600083018461455c565b92915050565b60006020820190506148c2600083018461456b565b92915050565b600060208201905081810360008301526148e28184614589565b905092915050565b60006020820190508181036000830152614903816145c2565b9050919050565b60006020820190508181036000830152614923816145e5565b9050919050565b6000602082019050818103600083015261494381614608565b9050919050565b600060208201905081810360008301526149638161462b565b9050919050565b600060208201905081810360008301526149838161464e565b9050919050565b600060208201905081810360008301526149a381614671565b9050919050565b600060208201905081810360008301526149c381614694565b9050919050565b600060208201905081810360008301526149e3816146b7565b9050919050565b60006020820190508181036000830152614a03816146da565b9050919050565b60006020820190508181036000830152614a23816146fd565b9050919050565b60006020820190508181036000830152614a4381614720565b9050919050565b60006020820190508181036000830152614a6381614743565b9050919050565b60006020820190508181036000830152614a8381614766565b9050919050565b60006020820190508181036000830152614aa381614789565b9050919050565b60006020820190508181036000830152614ac3816147ac565b9050919050565b6000602082019050614adf60008301846147cf565b92915050565b600060a082019050614afa60008301886147cf565b614b07602083018761457a565b8181036040830152614b1981866144fe565b9050614b2860608301856144ef565b614b3560808301846147cf565b9695505050505050565b6000606082019050614b5460008301866147cf565b614b6160208301856147cf565b614b6e60408301846147cf565b949350505050565b6000602082019050614b8b60008301846147de565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bf182614d4b565b9150614bfc83614d4b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c3157614c30614e58565b5b828201905092915050565b6000614c4782614d4b565b9150614c5283614d4b565b925082614c6257614c61614e87565b5b828204905092915050565b6000614c7882614d4b565b9150614c8383614d4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cbc57614cbb614e58565b5b828202905092915050565b6000614cd282614d4b565b9150614cdd83614d4b565b925082821015614cf057614cef614e58565b5b828203905092915050565b6000614d0682614d2b565b9050919050565b6000614d1882614d2b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d6d82614d86565b9050919050565b6000614d7f82614d4b565b9050919050565b6000614d9182614d98565b9050919050565b6000614da382614d2b565b9050919050565b60005b83811015614dc8578082015181840152602081019050614dad565b83811115614dd7576000848401525b50505050565b60006002820490506001821680614df557607f821691505b60208210811415614e0957614e08614eb6565b5b50919050565b6000614e1a82614d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e4d57614e4c614e58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f43616c6c6572203d2f3d206f776e65722e000000000000000000000000000000600082015250565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420657863656564206d6178696d756d732e000000000000000000600082015250565b7f4d7573742062652061626f766520302e3125206f6620746f74616c207375707060008201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b7f4d7573742061646420757020746f203130302500000000000000000000000000600082015250565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b61526181614cfb565b811461526c57600080fd5b50565b61527881614d0d565b811461528357600080fd5b50565b61528f81614d1f565b811461529a57600080fd5b50565b6152a681614d4b565b81146152b157600080fd5b50565b6152bd81614d55565b81146152c857600080fd5b5056fea2646970667358221220b8e575938b61e88018d8099080bee45726788cf35eb3f6fa1e07763c460f09de64736f6c63430008070033

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.