ETH Price: $3,275.89 (-3.95%)
Gas: 14 Gwei

Token

Elon's Rockets (ELON'S ROCKETS)
 

Overview

Max Total Supply

1,000,000,000,000 ELON'S ROCKETS

Holders

336

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
39,447,156.84 ELON'S ROCKETS

Value
$0.00
0x0d3a5be2ba6132037f921a0922326109b414e1bb
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:
ElonsRockets

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: deployed_erockets.sol
/**
 *Submitted for verification at Etherscan.io on 2021-06-28
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.6;

import "./VRFConsumerBase.sol";

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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);


}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;


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

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

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

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


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


    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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

contract ElonsRockets is Context, IERC20, Ownable, VRFConsumerBase {
    using SafeMath for uint256;
    using Address for address;

    event launchFailed();
    event launchTerminated(uint256 amountBoughtBack);
    event rocketLaunched(uint256 maxBuybackAmount);
    event burnSuccessful(uint256 amount);
    event newLaunchSet(uint256 nextLaunchTime);

    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private m_Balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => User) private cooldown;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _Blacklisted;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**9;
    uint256 private _tFeeTotal;

    string private _name = "Elon's Rockets";
    string private _symbol = "ELON'S ROCKETS";
    uint8 private _decimals = 9;

    address payable private teamDevAddress;

    uint256 public launchTime;
    uint256 private buyLimitEnd;

    // Elon's Rockets constants
    uint256 constant INITIAL_LAUNCH_DELAY = 24 hours;
    uint256 constant MIN_LAUNCH_DELAY = 2 hours;
    uint256 constant MAX_LAUNCH_DELAY = 12 hours;
    uint256 constant LAUNCH_SUCCESS_CHANCE = 33;
    uint256 constant BURN_SUCCESS_CHANCE = 75;
    // As a percentage of session total
    uint256 constant MIN_BURN_AMOUNT = 10;
    uint256 constant MAX_BURN_AMOUNT = 25;

    // random number generation
    uint256 public randomNumber; // for debugging
    bytes32 public lastRequestId;
    uint256 public lastRequestAt;

    uint256 public launchCount = 0;
    uint256 private maxBuybackAmount;
    uint256 private buybackAmount;
    uint256 private remainingSessionEth;
    bool public rocketFueled;
    bool private buybackInProgress;

    bytes32 internal keyHash;
    uint256 internal linkFee;
    // how many multiples of the linkFee should the contract aim to hold
    uint256 internal MIN_LINK_FEES_TO_HOLD = 2;
    uint256 internal MAX_LINK_FEES_TO_HOLD = 5;

    uint private _maxBuyAmount;
    bool private _cooldownEnabled=true;

    bool public tradingOpen = false; //once switched on, can never be switched off.

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    struct User {
        uint256 buy;
        uint256 sell;
        bool exists;
    }

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier processBuyback {
        buybackInProgress = true;
        _;
        buybackInProgress = false;
    }


    constructor ()
        VRFConsumerBase(
            0xf0d54349aDdcf704F77AE15b96510dEA15cb7952, // VRF Coordinator
            0x514910771AF9Ca656af840dff83E8264EcF986CA  // LINK Token
        )
    {
        m_Balances[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);

        /**
         * Constructor inherits VRFConsumerBase
         *
         * Network: Mainnet
         * Chainlink VRF Coordinator address: 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952
         * LINK token address:                0x514910771AF9Ca656af840dff83E8264EcF986CA
         * Key Hash: 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445
         */
        //VRF variables
        keyHash = 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445;
        linkFee = 2 * 10 ** 18;
    }

    function iLoveInari() external onlyOwner() {
        _maxBuyAmount = 3000000000 * 10**9;
        swapAndLiquifyEnabled = true;
        tradingOpen = true;
        buyLimitEnd = block.timestamp + 3 minutes;

        launchTime = block.timestamp.add(INITIAL_LAUNCH_DELAY);
    }

    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0xf0d54349aDdcf704F77AE15b96510dEA15cb7952)] = true; //chainlink VRFCoordinator

        teamDevAddress = payable(0x3F4B61e6c5A24aA1BE655B9E336eA5b89AEDD7aF);
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }


    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        // Early return if this is a buyback
        if (buybackInProgress) {
            _updateBalances(sender, recipient, amount, 0);

            return;
        }

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_Blacklisted[sender] && !_Blacklisted[recipient] && !_Blacklisted[tx.origin]);


        uint256 _taxes = 0;

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && LINK.balanceOf(address(this)) < linkFee * MIN_LINK_FEES_TO_HOLD) {
            swapEthForLink();
        }

        if (!_isExcludedFromFee[sender]) {
            if (launchTime == 0) {
                // Sets a new launch time
                uint256 launchTimeWindowSeed = uint256(keccak256(abi.encodePacked(blockhash(block.number))));
                uint256 newLaunchTime = (launchTimeWindowSeed % (MAX_LAUNCH_DELAY - MIN_LAUNCH_DELAY));

                launchTime = block.timestamp.add(MIN_LAUNCH_DELAY).add(newLaunchTime);

                emit newLaunchSet(launchTime);
            } if (block.timestamp >= launchTime) {
                if (rocketFueled == false) {
                    fuelTheRocket();
                }

                requestBuybackRandomNumber();
            }
        }

        if(sender != owner() && recipient != owner()) {

            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }

            if(_cooldownEnabled) {
                if(!cooldown[msg.sender].exists) {
                    cooldown[msg.sender] = User(0,0,true);
                }
            }
        }

        //buy

        if(sender == uniswapV2Pair && recipient != address(uniswapV2Router) && !_isExcludedFromFee[recipient]) {
                require(tradingOpen, "Trading not yet enabled.");


                if(_cooldownEnabled) {
                    if(buyLimitEnd > block.timestamp) {
                        require(amount <= _maxBuyAmount);
                        require(cooldown[recipient].buy < block.timestamp, "Your buy cooldown has not expired.");
                        cooldown[recipient].buy = block.timestamp + (45 seconds);
                    }
                }
                if(_cooldownEnabled) {
                    cooldown[recipient].sell = block.timestamp + (15 seconds);
                }

                _taxes = _getTaxes(sender, recipient, amount);
        }

        //sell
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && recipient == uniswapV2Pair) {
            //swap contract's tokens for ETH
            uint256 contractTokenBalance = balanceOf(address(this));
             if(contractTokenBalance > 0) {
                swapTokens(contractTokenBalance);
            }

            _taxes = _getTaxes(sender, recipient, amount);
        }

        //execute transfer
        _updateBalances(sender, recipient, amount, _taxes);
    }

	function _getTaxes(address sender, address recipient, uint256 amount) private view returns (uint256) {
        uint256 _netTaxes = 0;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            return _netTaxes;
        }
        _netTaxes = amount.mul(16).div(100);
        return _netTaxes;
    }

    function _updateBalances(address _sender, address _recipient, uint256 _amount, uint256 _taxes) private {
        uint256 _netAmount = _amount.sub(_taxes);
        m_Balances[_sender] = m_Balances[_sender].sub(_amount);
        m_Balances[_recipient] = m_Balances[_recipient].add(_netAmount);
        m_Balances[address(this)] = m_Balances[address(this)].add(_taxes);
        emit Transfer(_sender, _recipient, _netAmount);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 initialBalance = address(this).balance;

        swapTokensForEth(contractTokenBalance);

        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        transferToAddressETH(teamDevAddress, transferredBalance.mul(3).div(8));
    }

    function buybackTokens(uint256 amount) private lockTheSwap {
        if (amount > 0) {
            swapETHForTokens(amount);

            remainingSessionEth -= amount;

            emit burnSuccessful(amount);

            if (remainingSessionEth <= 0) {
                terminateLaunch();
            }
        }

    }

    function swapEthForLink() private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(0x514910771AF9Ca656af840dff83E8264EcF986CA);

        uint256 ethAmount = uniswapV2Router.getAmountsIn(MAX_LINK_FEES_TO_HOLD * linkFee - LINK.balanceOf(address(this)), path)[0];

        if (address(this).balance > ethAmount) {
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
                0, // accept any amount of Tokens
                path,
                address(this), // Burn address
                block.timestamp.add(300)
            );

            emit SwapETHForTokens(ethAmount, path);
        }
    }

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

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

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }

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

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setTeamDevAddress(address _teamDevAddress) external onlyOwner() {
        teamDevAddress = payable(_teamDevAddress);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
        randomNumber = uint256(keccak256(abi.encode(randomness, requestId)));

        attemptBuyback(randomNumber);

        lastRequestId = 0;
    }

    function requestBuybackRandomNumber()  private  {

        if (lastRequestId != 0 && block.timestamp < lastRequestAt + 15 minutes) return;



        if (LINK.balanceOf(address(this)) > linkFee) {
            lastRequestId = requestRandomness(keyHash, linkFee);
            lastRequestAt = block.timestamp;
        }
    }

    function terminateLaunch() private {
        launchCount++;
        launchTime = 0;
        rocketFueled = false;
    }

    function attemptBuyback(uint256 randomResult) private processBuyback {
        // 1-100
        uint256 buybackRoll = randomResult % 100 + 1;

        // 1-9
        uint256 buybackAmountSeed = uint256(keccak256(abi.encodePacked(randomResult)));
        buybackAmount = maxBuybackAmount.
            mul(buybackAmountSeed % (MAX_BURN_AMOUNT - MIN_BURN_AMOUNT) + MIN_BURN_AMOUNT).
            div(100);

        // Debug RNG
        randomNumber = buybackRoll;

        if (remainingSessionEth == maxBuybackAmount && buybackRoll <= LAUNCH_SUCCESS_CHANCE) {
            buybackTokens(buybackAmount);

            emit rocketLaunched(maxBuybackAmount);
        } else {
            if (remainingSessionEth != maxBuybackAmount) {
                if (buybackRoll <= BURN_SUCCESS_CHANCE) {
                    buybackTokens(remainingSessionEth > buybackAmount ? buybackAmount : remainingSessionEth);
                } else {
                    terminateLaunch();

                    emit launchTerminated(maxBuybackAmount - remainingSessionEth);
                }
            } else {
                terminateLaunch();

                emit launchFailed();
            }
        }
    }

    function fuelTheRocket() private {
        // The launch can potentially use half of the BB wallet's balance as of setting the launch time
        maxBuybackAmount = address(this).balance.div(2);
        remainingSessionEth = maxBuybackAmount;

        rocketFueled = true;
    }

    function addTaxWhiteList(address _address) external onlyOwner(){
        _isExcludedFromFee[_address] = true;
    }
    function remTaxWhiteList(address _address) external onlyOwner(){
        _isExcludedFromFee[_address] = false;
    }

    function checkIfBlacklist(address _address) external view returns (bool) {
        return _Blacklisted[_address];
    }
    function blacklist(address _a) external onlyOwner() {
        _Blacklisted[_a] = true;
    }
    function rmBlacklist(address _a) external onlyOwner() {
        _Blacklisted[_a] = false;
    }

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}
}

File 2 of 4: LinkTokenInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface LinkTokenInterface {

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

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

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

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

  function decreaseApproval(
    address spender,
    uint256 addedValue
  )
    external
    returns (
      bool success
    );

  function increaseApproval(
    address spender,
    uint256 subtractedValue
  ) external;

  function name()
    external
    view
    returns (
      string memory tokenName
    );

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

  function totalSupply()
    external
    view
    returns (
      uint256 totalTokensIssued
    );

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

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  )
    external
    returns (
      bool success
    );

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

}

File 3 of 4: VRFConsumerBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./LinkTokenInterface.sol";

import "./VRFRequestIDBase.sol";

/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constuctor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator, _link) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash), and have told you the minimum LINK
 * @dev price for VRF service. Make sure your contract has sufficient LINK, and
 * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you
 * @dev want to generate randomness from.
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomness method.
 *
 * @dev The randomness argument to fulfillRandomness is the actual random value
 * @dev generated from your seed.
 *
 * @dev The requestId argument is generated from the keyHash and the seed by
 * @dev makeRequestId(keyHash, seed). If your contract could have concurrent
 * @dev requests open, you can use the requestId to track which seed is
 * @dev associated with which randomness. See VRFRequestIDBase.sol for more
 * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.)
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ. (Which is critical to making unpredictable randomness! See the
 * @dev next section.)
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the ultimate input to the VRF is mixed with the block hash of the
 * @dev block in which the request is made, user-provided seeds have no impact
 * @dev on its economic security properties. They are only included for API
 * @dev compatability with previous versions of this contract.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request.
 */
abstract contract VRFConsumerBase is VRFRequestIDBase {

  /**
   * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBase expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomness the VRF output
   */
  function fulfillRandomness(
    bytes32 requestId,
    uint256 randomness
  )
    internal
    virtual;

  /**
   * @dev In order to keep backwards compatibility we have kept the user
   * seed field around. We remove the use of it because given that the blockhash
   * enters later, it overrides whatever randomness the used seed provides.
   * Given that it adds no security, and can easily lead to misunderstandings,
   * we have removed it from usage and can now provide a simpler API.
   */
  uint256 constant private USER_SEED_PLACEHOLDER = 0;

  /**
   * @notice requestRandomness initiates a request for VRF output given _seed
   *
   * @dev The fulfillRandomness method receives the output, once it's provided
   * @dev by the Oracle, and verified by the vrfCoordinator.
   *
   * @dev The _keyHash must already be registered with the VRFCoordinator, and
   * @dev the _fee must exceed the fee specified during registration of the
   * @dev _keyHash.
   *
   * @dev The _seed parameter is vestigial, and is kept only for API
   * @dev compatibility with older versions. It can't *hurt* to mix in some of
   * @dev your own randomness, here, but it's not necessary because the VRF
   * @dev oracle will mix the hash of the block containing your request into the
   * @dev VRF seed it ultimately uses.
   *
   * @param _keyHash ID of public key against which randomness is generated
   * @param _fee The amount of LINK to send with the request
   *
   * @return requestId unique ID for this request
   *
   * @dev The returned requestId can be used to distinguish responses to
   * @dev concurrent requests. It is passed as the first argument to
   * @dev fulfillRandomness.
   */
  function requestRandomness(
    bytes32 _keyHash,
    uint256 _fee
  )
    internal
    returns (
      bytes32 requestId
    )
  {
    LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER));
    // This is the seed passed to VRFCoordinator. The oracle will mix this with
    // the hash of the block containing this request to obtain the seed/input
    // which is finally passed to the VRF cryptographic machinery.
    uint256 vRFSeed  = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]);
    // nonces[_keyHash] must stay in sync with
    // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above
    // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest).
    // This provides protection against the user repeating their input seed,
    // which would result in a predictable/duplicate output, if multiple such
    // requests appeared in the same block.
    nonces[_keyHash] = nonces[_keyHash] + 1;
    return makeRequestId(_keyHash, vRFSeed);
  }

  LinkTokenInterface immutable internal LINK;
  address immutable private vrfCoordinator;

  // Nonces for each VRF key from which randomness has been requested.
  //
  // Must stay in sync with VRFCoordinator[_keyHash][this]
  mapping(bytes32 /* keyHash */ => uint256 /* nonce */) private nonces;

  /**
   * @param _vrfCoordinator address of VRFCoordinator contract
   * @param _link address of LINK token contract
   *
   * @dev https://docs.chain.link/docs/link-token-contracts
   */
  constructor(
    address _vrfCoordinator,
    address _link
  ) {
    vrfCoordinator = _vrfCoordinator;
    LINK = LinkTokenInterface(_link);
  }

  // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
  // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
  // the origin of the call
  function rawFulfillRandomness(
    bytes32 requestId,
    uint256 randomness
  )
    external
  {
    require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill");
    fulfillRandomness(requestId, randomness);
  }
}

File 4 of 4: VRFRequestIDBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract VRFRequestIDBase {

  /**
   * @notice returns the seed which is actually input to the VRF coordinator
   *
   * @dev To prevent repetition of VRF output due to repetition of the
   * @dev user-supplied seed, that seed is combined in a hash with the
   * @dev user-specific nonce, and the address of the consuming contract. The
   * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in
   * @dev the final seed, but the nonce does protect against repetition in
   * @dev requests which are included in a single block.
   *
   * @param _userSeed VRF seed input provided by user
   * @param _requester Address of the requesting contract
   * @param _nonce User-specific nonce at the time of the request
   */
  function makeVRFInputSeed(
    bytes32 _keyHash,
    uint256 _userSeed,
    address _requester,
    uint256 _nonce
  )
    internal
    pure
    returns (
      uint256
    )
  {
    return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce)));
  }

  /**
   * @notice Returns the id for this request
   * @param _keyHash The serviceAgreement ID to be used for this request
   * @param _vRFInputSeed The seed to be passed directly to the VRF
   * @return The id for this request
   *
   * @dev Note that _vRFInputSeed is not the seed passed by the consuming
   * @dev contract, but the one generated by makeVRFInputSeed
   */
  function makeRequestId(
    bytes32 _keyHash,
    uint256 _vRFInputSeed
  )
    internal
    pure
    returns (
      bytes32
    )
  {
    return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnSuccessful","type":"event"},{"anonymous":false,"inputs":[],"name":"launchFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBoughtBack","type":"uint256"}],"name":"launchTerminated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextLaunchTime","type":"uint256"}],"name":"newLaunchSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuybackAmount","type":"uint256"}],"name":"rocketLaunched","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addTaxWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkIfBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iLoveInari","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRequestAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRequestId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","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":"randomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"remTaxWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"rmBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rocketFueled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_teamDevAddress","type":"address"}],"name":"setTeamDevAddress","outputs":[],"stateMutability":"nonpayable","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6ddead00000000000000000000000060c052683635c9adc5dea00000600855610120604052600e60e08190526d456c6f6e277320526f636b65747360901b6101009081526200005291600a919062000206565b5060408051808201909152600e8082526d454c4f4e275320524f434b45545360901b60209092019182526200008a91600b9162000206565b50600c805460ff19166009179055600060125560026019556005601a55601c805461ffff19166001179055601d805460ff60a81b19169055348015620000cf57600080fd5b50600080546001600160a01b03191633908117825560405173f0d54349addcf704f77ae15b96510dea15cb79529273514910771af9ca656af840dff83e8264ecf986ca92918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606092831b811660a052911b1660805260085460036000620001653390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620001c891815260200190565b60405180910390a37faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445601755671bc16d674ec80000601855620002e9565b8280546200021490620002ac565b90600052602060002090601f01602090048101928262000238576000855562000283565b82601f106200025357805160ff191683800117855562000283565b8280016001018555821562000283579182015b828111156200028357825182559160200191906001019062000266565b506200029192915062000295565b5090565b5b8082111562000291576000815560010162000296565b600181811c90821680620002c157607f821691505b60208210811415620002e357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c60c05160601c612eba620003456000396000818161035e01526128f6015260008181610c0a01526122ea01526000818161149501528181611cc401528181611f1301526122bb0152612eba6000f3fe6080604052600436106102535760003560e01c80638da5cb5b11610138578063c9f9b28b116100b0578063f03e63b41161007f578063f9f92be411610064578063f9f92be4146106d5578063fc2a88c3146106f5578063ffb54a991461070b57600080fd5b8063f03e63b414610695578063f2fde38b146106b557600080fd5b8063c9f9b28b14610609578063ccbac9f514610623578063dd62ed3e14610639578063e02b489d1461067f57600080fd5b8063a457c2d711610107578063b0d1d3f1116100ec578063b0d1d3f11461059b578063c7ab8d9d146105b0578063c7f418e9146105e957600080fd5b8063a457c2d71461055b578063a9059cbb1461057b57600080fd5b80638da5cb5b146104e857806394985ddd1461050657806395d89b411461052657806398d5a5cb1461053b57600080fd5b8063313ce567116101cb5780635342acb41161019a57806370a082311161017f57806370a0823114610487578063790ca413146104bd5780638203f5fe146104d357600080fd5b80635342acb41461043b578063557ed1ba1461047457600080fd5b8063313ce567146103b857806339509351146103da57806349bd5a5e146103fa5780634a74bb021461041a57600080fd5b806318160ddd1161022257806327c8f8351161020757806327c8f8351461034c57806327cca59f14610380578063290dc70c1461039657600080fd5b806318160ddd1461031757806323b872dd1461032c57600080fd5b806306fdde031461025f578063095ea7b31461028a57806313114a9d146102ba5780631694505e146102d957600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b5061027461072a565b6040516102819190612c93565b60405180910390f35b34801561029657600080fd5b506102aa6102a5366004612a57565b6107bc565b6040519015158152602001610281565b3480156102c657600080fd5b506009545b604051908152602001610281565b3480156102e557600080fd5b50601c546102ff906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032357600080fd5b506008546102cb565b34801561033857600080fd5b506102aa610347366004612a16565b6107d3565b34801561035857600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b34801561038c57600080fd5b506102cb60125481565b3480156103a257600080fd5b506103b66103b13660046129a3565b61083d565b005b3480156103c457600080fd5b50600c5460405160ff9091168152602001610281565b3480156103e657600080fd5b506102aa6103f5366004612a57565b6108c0565b34801561040657600080fd5b50601d546102ff906001600160a01b031681565b34801561042657600080fd5b50601d546102aa90600160a81b900460ff1681565b34801561044757600080fd5b506102aa6104563660046129a3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561048057600080fd5b50426102cb565b34801561049357600080fd5b506102cb6104a23660046129a3565b6001600160a01b031660009081526003602052604090205490565b3480156104c957600080fd5b506102cb600d5481565b3480156104df57600080fd5b506103b66108f6565b3480156104f457600080fd5b506000546001600160a01b03166102ff565b34801561051257600080fd5b506103b6610521366004612b6a565b610bff565b34801561053257600080fd5b50610274610c85565b34801561054757600080fd5b506103b66105563660046129a3565b610c94565b34801561056757600080fd5b506102aa610576366004612a57565b610d0f565b34801561058757600080fd5b506102aa610596366004612a57565b610d5e565b3480156105a757600080fd5b506103b6610d6b565b3480156105bc57600080fd5b506102aa6105cb3660046129a3565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105f557600080fd5b506103b66106043660046129a3565b610e2e565b34801561061557600080fd5b506016546102aa9060ff1681565b34801561062f57600080fd5b506102cb600f5481565b34801561064557600080fd5b506102cb6106543660046129dd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561068b57600080fd5b506102cb60115481565b3480156106a157600080fd5b506103b66106b03660046129a3565b610ea9565b3480156106c157600080fd5b506103b66106d03660046129a3565b610f38565b3480156106e157600080fd5b506103b66106f03660046129a3565b611076565b34801561070157600080fd5b506102cb60105481565b34801561071757600080fd5b50601c546102aa90610100900460ff1681565b6060600a805461073990612d5d565b80601f016020809104026020016040519081016040528092919081815260200182805461076590612d5d565b80156107b25780601f10610787576101008083540402835291602001916107b2565b820191906000526020600020905b81548152906001019060200180831161079557829003601f168201915b5050505050905090565b60006107c93384846110f4565b5060015b92915050565b60006107e084848461124c565b610832843361082d85604051806060016040528060288152602001612e38602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906119a8565b6110f4565b5060015b9392505050565b6000546001600160a01b0316331461089c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916107c991859061082d90866119e2565b6000546001600160a01b031633146109505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156109a257600080fd5b505afa1580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da91906129c0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a91906129c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610aba57600080fd5b505af1158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af291906129c0565b601d80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff19909116179055601c805492821662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff9093169290921790915560008054909116815260066020526040808220805460ff199081166001908117909255308452918320805483168217905573f0d54349addcf704f77ae15b96510dea15cb79529092527ffd283a492b53e4bff1ac7e0a25603a448b84d2cf0b850c12bede3e637517d79280549091169091179055600c805474ffffffffffffffffffffffffffffffffffffffff001916743f4b61e6c5a24aa1be655b9e336ea5b89aedd7af00179055565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c775760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610893565b610c818282611a41565b5050565b6060600b805461073990612d5d565b6000546001600160a01b03163314610cee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600760205260409020805460ff19169055565b60006107c9338461082d85604051806060016040528060258152602001612e60602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906119a8565b60006107c933848461124c565b6000546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6729a2241af62c0000601b55601d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b179055601c805461ff001916610100179055610e194260b4612cfb565b600e55610e2942620151806119e2565b600d55565b6000546001600160a01b03163314610e885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610f035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b600c80546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000546001600160a01b03163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03811661100e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610893565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6001600160a01b03831661116f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0382166111eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601654610100900460ff161561126e576112698383836000611a84565b505050565b6001600160a01b0383166112ea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0382166113665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610893565b600081116113dc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b03831660009081526007602052604090205460ff1615801561141e57506001600160a01b03821660009081526007602052604090205460ff16155b801561143a57503260009081526007602052604090205460ff16155b61144357600080fd5b601d54600090600160a01b900460ff161580156114695750601d54600160a81b900460ff165b801561151957506019546018546114809190612d27565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156114df57600080fd5b505afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190612b8c565b105b1561152657611526611b6e565b6001600160a01b03841660009081526006602052604090205460ff1661160057600d546115dd5760408051434060208083019190915282518083038201815291830190925280519101206000611580611c2061a8c0612d46565b61158a9083612db3565b90506115a28161159c42611c206119e2565b906119e2565b600d8190556040519081527fe7fbf01c8bd9a3bd551abe59e00260f51de41edee18882ea268369175a4881319060200160405180910390a150505b600d5442106116005760165460ff166115f8576115f8611eb4565b611600611ed6565b6000546001600160a01b0385811691161480159061162c57506000546001600160a01b03848116911614155b1561175e57601c54610100900460ff166116ea576001600160a01b03841630148061165f57506001600160a01b03831630145b8061167757506000546001600160a01b038581169116145b8061168f57506000546001600160a01b038481169116145b6116ea57601c54610100900460ff166116ea5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f7420656e61626c6564000000000000000000006044820152606401610893565b601c5460ff161561175e573360009081526005602052604090206002015460ff1661175e57604080516060810182526000808252602080830182815260018486018181523385526005909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b601d546001600160a01b03858116911614801561178f5750601c546001600160a01b03848116620100009092041614155b80156117b457506001600160a01b03831660009081526006602052604090205460ff16155b1561192757601c54610100900460ff166118105760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610893565b601c5460ff16156118e65742600e5411156118e657601b5482111561183457600080fd5b6001600160a01b03831660009081526005602052604090205442116118c15760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f742065787069726560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610893565b6118cc42602d612cfb565b6001600160a01b0384166000908152600560205260409020555b601c5460ff1615611919576118fc42600f612cfb565b6001600160a01b0384166000908152600560205260409020600101555b611924848484611fb3565b90505b601d54600160a01b900460ff1615801561194a5750601d54600160a81b900460ff165b80156119635750601d546001600160a01b038481169116145b15611996573060009081526003602052604090205480156119875761198781612016565b611992858585611fb3565b9150505b6119a284848484611a84565b50505050565b600081848411156119cc5760405162461bcd60e51b81526004016108939190612c93565b5060006119d98486612d46565b95945050505050565b6000806119ef8385612cfb565b9050838110156108365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610893565b604080516020810183905290810183905260600160408051601f198184030181529190528051602090910120600f819055611a7b9061207e565b50506000601055565b6000611a908383612233565b6001600160a01b038616600090815260036020526040902054909150611ab69084612233565b6001600160a01b038087166000908152600360205260408082209390935590861681522054611ae590826119e2565b6001600160a01b038516600090815260036020526040808220929092553081522054611b1190836119e2565b3060009081526003602090815260409182902092909255518281526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b601d805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf057600080fd5b505afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2891906129c0565b81600081518110611c3b57611c3b612df3565b60200260200101906001600160a01b031690816001600160a01b03168152505073514910771af9ca656af840dff83e8264ecf986ca81600181518110611c8357611c83612df3565b6001600160a01b039283166020918202929092010152601c546040516370a0823160e01b815230600482015260009262010000909204821691631f00ca74917f0000000000000000000000000000000000000000000000000000000000000000909116906370a082319060240160206040518083038186803b158015611d0857600080fd5b505afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612b8c565b601854601a54611d509190612d27565b611d5a9190612d46565b846040518363ffffffff1660e01b8152600401611d78929190612ca6565b60006040518083038186803b158015611d9057600080fd5b505afa158015611da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dcc9190810190612a83565b600081518110611dde57611dde612df3565b6020026020010151905080471115611ea357601c546201000090046001600160a01b031663b6f9de958260008530611e184261012c6119e2565b6040518663ffffffff1660e01b8152600401611e379493929190612c5e565b6000604051808303818588803b158015611e5057600080fd5b505af1158015611e64573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248183604051611e9a929190612ca6565b60405180910390a15b5050601d805460ff60a01b19169055565b611ebf476002612275565b60138190556015556016805460ff19166001179055565b60105415801590611ef45750601154611ef190610384612cfb565b42105b15611efb57565b6018546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611f5d57600080fd5b505afa158015611f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f959190612b8c565b1115611fb157611fa96017546018546122b7565b601055426011555b565b6001600160a01b038316600090815260066020526040812054819060ff1680611ff457506001600160a01b03841660009081526006602052604090205460ff165b15612000579050610836565b6119d9606461201085601061244a565b90612275565b601d805460ff60a01b1916600160a01b17905547612033826124e5565b600061203f4783612233565b600c5490915061206c9061010090046001600160a01b0316612067600861201085600361244a565b6126c5565b5050601d805460ff60a01b1916905550565b6016805461ff001916610100179055600061209a606483612db3565b6120a5906001612cfb565b90506000826040516020016120bc91815260200190565b60408051601f19818403018152919052805160209091012090506121086064612010600a6120eb816019612d46565b6120f59086612db3565b6120ff9190612cfb565b6013549061244a565b601455600f829055601354601554148015612124575060218211155b15612174576121346014546126fb565b7fac265c9db2ed5cacc7f7e650d75d404eb4caaf526f67cee91c38361314a2585c60135460405161216791815260200190565b60405180910390a1612223565b601354601554146121f157604b82116121aa576121a56014546015541161219d576015546126fb565b6014546126fb565b612223565b6121b2612789565b7f0c9e145d7fd7874a8fab54ecd13c2ebb80127609daae9c04c9a108c84e7e8ad76015546013546121e39190612d46565b604051908152602001612167565b6121f9612789565b6040517fea105bff1130cfa8d35196df2292dd002019d837ff0ca0e0493a60aa73288a2290600090a15b50506016805461ff001916905550565b600061083683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119a8565b600061083683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127af565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634000aea07f000000000000000000000000000000000000000000000000000000000000000084866000604051602001612327929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161235493929190612c36565b602060405180830381600087803b15801561236e57600080fd5b505af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b48565b50600083815260026020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a090910190925281519183019190912093879052919052612402906001612cfb565b6000858152600260205260409020556124428482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b949350505050565b600082612459575060006107cd565b60006124658385612d27565b9050826124728583612d13565b146108365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610893565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251a5761251a612df3565b60200260200101906001600160a01b031690816001600160a01b031681525050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c091906129c0565b816001815181106125d3576125d3612df3565b6001600160a01b039283166020918202929092010152601c546125ff91309162010000900416846110f4565b601c546040517f791ac947000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b03169063791ac94790612656908590600090869030904290600401612cbf565b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126b9929190612ca6565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611269573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b17905580156127795761271d816127dd565b806015600082825461272f9190612d46565b90915550506040518181527fd463c2b2679d55e1f3b590c61592741ec541e3cb0ba49668226ab27f0cccb05c9060200160405180910390a160006015541161277957612779612789565b50601d805460ff60a01b19169055565b6012805490600061279983612d98565b90915550506000600d556016805460ff19169055565b600081836127d05760405162461bcd60e51b81526004016108939190612c93565b5060006119d98486612d13565b604080516002808252606082018352600092602083019080368337019050509050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561284c57600080fd5b505afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288491906129c0565b8160008151811061289757612897612df3565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106128cb576128cb612df3565b6001600160a01b039283166020918202929092010152601c546201000090041663b6f9de95836000847f00000000000000000000000000000000000000000000000000000000000000006129214261012c6119e2565b6040518663ffffffff1660e01b81526004016129409493929190612c5e565b6000604051808303818588803b15801561295957600080fd5b505af115801561296d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516126b9929190612ca6565b6000602082840312156129b557600080fd5b813561083681612e1f565b6000602082840312156129d257600080fd5b815161083681612e1f565b600080604083850312156129f057600080fd5b82356129fb81612e1f565b91506020830135612a0b81612e1f565b809150509250929050565b600080600060608486031215612a2b57600080fd5b8335612a3681612e1f565b92506020840135612a4681612e1f565b929592945050506040919091013590565b60008060408385031215612a6a57600080fd5b8235612a7581612e1f565b946020939093013593505050565b60006020808385031215612a9657600080fd5b825167ffffffffffffffff80821115612aae57600080fd5b818501915085601f830112612ac257600080fd5b815181811115612ad457612ad4612e09565b8060051b604051601f19603f83011681018181108582111715612af957612af9612e09565b604052828152858101935084860182860187018a1015612b1857600080fd5b600095505b83861015612b3b578051855260019590950194938601938601612b1d565b5098975050505050505050565b600060208284031215612b5a57600080fd5b8151801515811461083657600080fd5b60008060408385031215612b7d57600080fd5b50508035926020909101359150565b600060208284031215612b9e57600080fd5b5051919050565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b6000815180845260005b81811015612c0f57602081850181015186830182015201612bf3565b81811115612c21576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03841681528260208201526060604082015260006119d96060830184612be9565b848152608060208201526000612c776080830186612ba5565b6001600160a01b03949094166040830152506060015292915050565b6020815260006108366020830184612be9565b8281526040602082015260006124426040830184612ba5565b85815284602082015260a060408201526000612cde60a0830186612ba5565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612d0e57612d0e612dc7565b500190565b600082612d2257612d22612ddd565b500490565b6000816000190483118215151615612d4157612d41612dc7565b500290565b600082821015612d5857612d58612dc7565b500390565b600181811c90821680612d7157607f821691505b60208210811415612d9257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dac57612dac612dc7565b5060010190565b600082612dc257612dc2612ddd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220596b7d106180c6013b2b2fbd8e8c79242a83d74aef617bb376ef0893d1de7bbc64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106102535760003560e01c80638da5cb5b11610138578063c9f9b28b116100b0578063f03e63b41161007f578063f9f92be411610064578063f9f92be4146106d5578063fc2a88c3146106f5578063ffb54a991461070b57600080fd5b8063f03e63b414610695578063f2fde38b146106b557600080fd5b8063c9f9b28b14610609578063ccbac9f514610623578063dd62ed3e14610639578063e02b489d1461067f57600080fd5b8063a457c2d711610107578063b0d1d3f1116100ec578063b0d1d3f11461059b578063c7ab8d9d146105b0578063c7f418e9146105e957600080fd5b8063a457c2d71461055b578063a9059cbb1461057b57600080fd5b80638da5cb5b146104e857806394985ddd1461050657806395d89b411461052657806398d5a5cb1461053b57600080fd5b8063313ce567116101cb5780635342acb41161019a57806370a082311161017f57806370a0823114610487578063790ca413146104bd5780638203f5fe146104d357600080fd5b80635342acb41461043b578063557ed1ba1461047457600080fd5b8063313ce567146103b857806339509351146103da57806349bd5a5e146103fa5780634a74bb021461041a57600080fd5b806318160ddd1161022257806327c8f8351161020757806327c8f8351461034c57806327cca59f14610380578063290dc70c1461039657600080fd5b806318160ddd1461031757806323b872dd1461032c57600080fd5b806306fdde031461025f578063095ea7b31461028a57806313114a9d146102ba5780631694505e146102d957600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b5061027461072a565b6040516102819190612c93565b60405180910390f35b34801561029657600080fd5b506102aa6102a5366004612a57565b6107bc565b6040519015158152602001610281565b3480156102c657600080fd5b506009545b604051908152602001610281565b3480156102e557600080fd5b50601c546102ff906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032357600080fd5b506008546102cb565b34801561033857600080fd5b506102aa610347366004612a16565b6107d3565b34801561035857600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561038c57600080fd5b506102cb60125481565b3480156103a257600080fd5b506103b66103b13660046129a3565b61083d565b005b3480156103c457600080fd5b50600c5460405160ff9091168152602001610281565b3480156103e657600080fd5b506102aa6103f5366004612a57565b6108c0565b34801561040657600080fd5b50601d546102ff906001600160a01b031681565b34801561042657600080fd5b50601d546102aa90600160a81b900460ff1681565b34801561044757600080fd5b506102aa6104563660046129a3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561048057600080fd5b50426102cb565b34801561049357600080fd5b506102cb6104a23660046129a3565b6001600160a01b031660009081526003602052604090205490565b3480156104c957600080fd5b506102cb600d5481565b3480156104df57600080fd5b506103b66108f6565b3480156104f457600080fd5b506000546001600160a01b03166102ff565b34801561051257600080fd5b506103b6610521366004612b6a565b610bff565b34801561053257600080fd5b50610274610c85565b34801561054757600080fd5b506103b66105563660046129a3565b610c94565b34801561056757600080fd5b506102aa610576366004612a57565b610d0f565b34801561058757600080fd5b506102aa610596366004612a57565b610d5e565b3480156105a757600080fd5b506103b6610d6b565b3480156105bc57600080fd5b506102aa6105cb3660046129a3565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156105f557600080fd5b506103b66106043660046129a3565b610e2e565b34801561061557600080fd5b506016546102aa9060ff1681565b34801561062f57600080fd5b506102cb600f5481565b34801561064557600080fd5b506102cb6106543660046129dd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561068b57600080fd5b506102cb60115481565b3480156106a157600080fd5b506103b66106b03660046129a3565b610ea9565b3480156106c157600080fd5b506103b66106d03660046129a3565b610f38565b3480156106e157600080fd5b506103b66106f03660046129a3565b611076565b34801561070157600080fd5b506102cb60105481565b34801561071757600080fd5b50601c546102aa90610100900460ff1681565b6060600a805461073990612d5d565b80601f016020809104026020016040519081016040528092919081815260200182805461076590612d5d565b80156107b25780601f10610787576101008083540402835291602001916107b2565b820191906000526020600020905b81548152906001019060200180831161079557829003601f168201915b5050505050905090565b60006107c93384846110f4565b5060015b92915050565b60006107e084848461124c565b610832843361082d85604051806060016040528060288152602001612e38602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906119a8565b6110f4565b5060015b9392505050565b6000546001600160a01b0316331461089c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916107c991859061082d90866119e2565b6000546001600160a01b031633146109505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156109a257600080fd5b505afa1580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da91906129c0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a91906129c0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610aba57600080fd5b505af1158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af291906129c0565b601d80546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff19909116179055601c805492821662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff9093169290921790915560008054909116815260066020526040808220805460ff199081166001908117909255308452918320805483168217905573f0d54349addcf704f77ae15b96510dea15cb79529092527ffd283a492b53e4bff1ac7e0a25603a448b84d2cf0b850c12bede3e637517d79280549091169091179055600c805474ffffffffffffffffffffffffffffffffffffffff001916743f4b61e6c5a24aa1be655b9e336ea5b89aedd7af00179055565b336001600160a01b037f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb79521614610c775760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610893565b610c818282611a41565b5050565b6060600b805461073990612d5d565b6000546001600160a01b03163314610cee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600760205260409020805460ff19169055565b60006107c9338461082d85604051806060016040528060258152602001612e60602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906119a8565b60006107c933848461124c565b6000546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6729a2241af62c0000601b55601d80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b179055601c805461ff001916610100179055610e194260b4612cfb565b600e55610e2942620151806119e2565b600d55565b6000546001600160a01b03163314610e885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610f035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b600c80546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000546001600160a01b03163314610f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03811661100e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610893565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110d05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610893565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6001600160a01b03831661116f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0382166111eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601654610100900460ff161561126e576112698383836000611a84565b505050565b6001600160a01b0383166112ea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b0382166113665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610893565b600081116113dc5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610893565b6001600160a01b03831660009081526007602052604090205460ff1615801561141e57506001600160a01b03821660009081526007602052604090205460ff16155b801561143a57503260009081526007602052604090205460ff16155b61144357600080fd5b601d54600090600160a01b900460ff161580156114695750601d54600160a81b900460ff165b801561151957506019546018546114809190612d27565b6040516370a0823160e01b81523060048201527f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316906370a082319060240160206040518083038186803b1580156114df57600080fd5b505afa1580156114f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115179190612b8c565b105b1561152657611526611b6e565b6001600160a01b03841660009081526006602052604090205460ff1661160057600d546115dd5760408051434060208083019190915282518083038201815291830190925280519101206000611580611c2061a8c0612d46565b61158a9083612db3565b90506115a28161159c42611c206119e2565b906119e2565b600d8190556040519081527fe7fbf01c8bd9a3bd551abe59e00260f51de41edee18882ea268369175a4881319060200160405180910390a150505b600d5442106116005760165460ff166115f8576115f8611eb4565b611600611ed6565b6000546001600160a01b0385811691161480159061162c57506000546001600160a01b03848116911614155b1561175e57601c54610100900460ff166116ea576001600160a01b03841630148061165f57506001600160a01b03831630145b8061167757506000546001600160a01b038581169116145b8061168f57506000546001600160a01b038481169116145b6116ea57601c54610100900460ff166116ea5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f7420656e61626c6564000000000000000000006044820152606401610893565b601c5460ff161561175e573360009081526005602052604090206002015460ff1661175e57604080516060810182526000808252602080830182815260018486018181523385526005909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b601d546001600160a01b03858116911614801561178f5750601c546001600160a01b03848116620100009092041614155b80156117b457506001600160a01b03831660009081526006602052604090205460ff16155b1561192757601c54610100900460ff166118105760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610893565b601c5460ff16156118e65742600e5411156118e657601b5482111561183457600080fd5b6001600160a01b03831660009081526005602052604090205442116118c15760405162461bcd60e51b815260206004820152602260248201527f596f75722062757920636f6f6c646f776e20686173206e6f742065787069726560448201527f642e0000000000000000000000000000000000000000000000000000000000006064820152608401610893565b6118cc42602d612cfb565b6001600160a01b0384166000908152600560205260409020555b601c5460ff1615611919576118fc42600f612cfb565b6001600160a01b0384166000908152600560205260409020600101555b611924848484611fb3565b90505b601d54600160a01b900460ff1615801561194a5750601d54600160a81b900460ff165b80156119635750601d546001600160a01b038481169116145b15611996573060009081526003602052604090205480156119875761198781612016565b611992858585611fb3565b9150505b6119a284848484611a84565b50505050565b600081848411156119cc5760405162461bcd60e51b81526004016108939190612c93565b5060006119d98486612d46565b95945050505050565b6000806119ef8385612cfb565b9050838110156108365760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610893565b604080516020810183905290810183905260600160408051601f198184030181529190528051602090910120600f819055611a7b9061207e565b50506000601055565b6000611a908383612233565b6001600160a01b038616600090815260036020526040902054909150611ab69084612233565b6001600160a01b038087166000908152600360205260408082209390935590861681522054611ae590826119e2565b6001600160a01b038516600090815260036020526040808220929092553081522054611b1190836119e2565b3060009081526003602090815260409182902092909255518281526001600160a01b0386811692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050565b601d805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf057600080fd5b505afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2891906129c0565b81600081518110611c3b57611c3b612df3565b60200260200101906001600160a01b031690816001600160a01b03168152505073514910771af9ca656af840dff83e8264ecf986ca81600181518110611c8357611c83612df3565b6001600160a01b039283166020918202929092010152601c546040516370a0823160e01b815230600482015260009262010000909204821691631f00ca74917f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca909116906370a082319060240160206040518083038186803b158015611d0857600080fd5b505afa158015611d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d409190612b8c565b601854601a54611d509190612d27565b611d5a9190612d46565b846040518363ffffffff1660e01b8152600401611d78929190612ca6565b60006040518083038186803b158015611d9057600080fd5b505afa158015611da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dcc9190810190612a83565b600081518110611dde57611dde612df3565b6020026020010151905080471115611ea357601c546201000090046001600160a01b031663b6f9de958260008530611e184261012c6119e2565b6040518663ffffffff1660e01b8152600401611e379493929190612c5e565b6000604051808303818588803b158015611e5057600080fd5b505af1158015611e64573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248183604051611e9a929190612ca6565b60405180910390a15b5050601d805460ff60a01b19169055565b611ebf476002612275565b60138190556015556016805460ff19166001179055565b60105415801590611ef45750601154611ef190610384612cfb565b42105b15611efb57565b6018546040516370a0823160e01b81523060048201527f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316906370a082319060240160206040518083038186803b158015611f5d57600080fd5b505afa158015611f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f959190612b8c565b1115611fb157611fa96017546018546122b7565b601055426011555b565b6001600160a01b038316600090815260066020526040812054819060ff1680611ff457506001600160a01b03841660009081526006602052604090205460ff165b15612000579050610836565b6119d9606461201085601061244a565b90612275565b601d805460ff60a01b1916600160a01b17905547612033826124e5565b600061203f4783612233565b600c5490915061206c9061010090046001600160a01b0316612067600861201085600361244a565b6126c5565b5050601d805460ff60a01b1916905550565b6016805461ff001916610100179055600061209a606483612db3565b6120a5906001612cfb565b90506000826040516020016120bc91815260200190565b60408051601f19818403018152919052805160209091012090506121086064612010600a6120eb816019612d46565b6120f59086612db3565b6120ff9190612cfb565b6013549061244a565b601455600f829055601354601554148015612124575060218211155b15612174576121346014546126fb565b7fac265c9db2ed5cacc7f7e650d75d404eb4caaf526f67cee91c38361314a2585c60135460405161216791815260200190565b60405180910390a1612223565b601354601554146121f157604b82116121aa576121a56014546015541161219d576015546126fb565b6014546126fb565b612223565b6121b2612789565b7f0c9e145d7fd7874a8fab54ecd13c2ebb80127609daae9c04c9a108c84e7e8ad76015546013546121e39190612d46565b604051908152602001612167565b6121f9612789565b6040517fea105bff1130cfa8d35196df2292dd002019d837ff0ca0e0493a60aa73288a2290600090a15b50506016805461ff001916905550565b600061083683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119a8565b600061083683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127af565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca6001600160a01b0316634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795284866000604051602001612327929190918252602082015260400190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161235493929190612c36565b602060405180830381600087803b15801561236e57600080fd5b505af1158015612382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a69190612b48565b50600083815260026020818152604080842054815180840189905280830186905230606082015260808082018390528351808303909101815260a090910190925281519183019190912093879052919052612402906001612cfb565b6000858152600260205260409020556124428482604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b949350505050565b600082612459575060006107cd565b60006124658385612d27565b9050826124728583612d13565b146108365760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610893565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251a5761251a612df3565b60200260200101906001600160a01b031690816001600160a01b031681525050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561258857600080fd5b505afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c091906129c0565b816001815181106125d3576125d3612df3565b6001600160a01b039283166020918202929092010152601c546125ff91309162010000900416846110f4565b601c546040517f791ac947000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b03169063791ac94790612656908590600090869030904290600401612cbf565b600060405180830381600087803b15801561267057600080fd5b505af1158015612684573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126b9929190612ca6565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611269573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b17905580156127795761271d816127dd565b806015600082825461272f9190612d46565b90915550506040518181527fd463c2b2679d55e1f3b590c61592741ec541e3cb0ba49668226ab27f0cccb05c9060200160405180910390a160006015541161277957612779612789565b50601d805460ff60a01b19169055565b6012805490600061279983612d98565b90915550506000600d556016805460ff19169055565b600081836127d05760405162461bcd60e51b81526004016108939190612c93565b5060006119d98486612d13565b604080516002808252606082018352600092602083019080368337019050509050601c60029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561284c57600080fd5b505afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288491906129c0565b8160008151811061289757612897612df3565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106128cb576128cb612df3565b6001600160a01b039283166020918202929092010152601c546201000090041663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead6129214261012c6119e2565b6040518663ffffffff1660e01b81526004016129409493929190612c5e565b6000604051808303818588803b15801561295957600080fd5b505af115801561296d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516126b9929190612ca6565b6000602082840312156129b557600080fd5b813561083681612e1f565b6000602082840312156129d257600080fd5b815161083681612e1f565b600080604083850312156129f057600080fd5b82356129fb81612e1f565b91506020830135612a0b81612e1f565b809150509250929050565b600080600060608486031215612a2b57600080fd5b8335612a3681612e1f565b92506020840135612a4681612e1f565b929592945050506040919091013590565b60008060408385031215612a6a57600080fd5b8235612a7581612e1f565b946020939093013593505050565b60006020808385031215612a9657600080fd5b825167ffffffffffffffff80821115612aae57600080fd5b818501915085601f830112612ac257600080fd5b815181811115612ad457612ad4612e09565b8060051b604051601f19603f83011681018181108582111715612af957612af9612e09565b604052828152858101935084860182860187018a1015612b1857600080fd5b600095505b83861015612b3b578051855260019590950194938601938601612b1d565b5098975050505050505050565b600060208284031215612b5a57600080fd5b8151801515811461083657600080fd5b60008060408385031215612b7d57600080fd5b50508035926020909101359150565b600060208284031215612b9e57600080fd5b5051919050565b600081518084526020808501945080840160005b83811015612bde5781516001600160a01b031687529582019590820190600101612bb9565b509495945050505050565b6000815180845260005b81811015612c0f57602081850181015186830182015201612bf3565b81811115612c21576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b03841681528260208201526060604082015260006119d96060830184612be9565b848152608060208201526000612c776080830186612ba5565b6001600160a01b03949094166040830152506060015292915050565b6020815260006108366020830184612be9565b8281526040602082015260006124426040830184612ba5565b85815284602082015260a060408201526000612cde60a0830186612ba5565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612d0e57612d0e612dc7565b500190565b600082612d2257612d22612ddd565b500490565b6000816000190483118215151615612d4157612d41612dc7565b500290565b600082821015612d5857612d58612dc7565b500390565b600181811c90821680612d7157607f821691505b60208210811415612d9257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612dac57612dac612dc7565b5060010190565b600082612dc257612dc2612ddd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612e3457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220596b7d106180c6013b2b2fbd8e8c79242a83d74aef617bb376ef0893d1de7bbc64736f6c63430008060033

Deployed Bytecode Sourcemap

13966:17390:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18630:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19437:158;;;;;;;;;;-1:-1:-1;19437:158:3;;;;;:::i;:::-;;:::i;:::-;;;6273:14:4;;6266:22;6248:41;;6236:2;6221:18;19437:158:3;6203:92:4;20409:85:3;;;;;;;;;;-1:-1:-1;20477:10:3;;20409:85;;;6446:25:4;;;6434:2;6419:18;20409:85:3;6401:76:4;16235:41:3;;;;;;;;;;-1:-1:-1;16235:41:3;;;;;;;-1:-1:-1;;;;;16235:41:3;;;;;;-1:-1:-1;;;;;5296:55:4;;;5278:74;;5266:2;5251:18;16235:41:3;5233:125:4;18895:93:3;;;;;;;;;;-1:-1:-1;18974:7:3;;18895:93;;19601:309;;;;;;;;;;-1:-1:-1;19601:309:3;;;;;:::i;:::-;;:::i;14326:81::-;;;;;;;;;;;;;;;15630:30;;;;;;;;;;;;;;;;30705:115;;;;;;;;;;-1:-1:-1;30705:115:3;;;;;:::i;:::-;;:::i;:::-;;18808:81;;;;;;;;;;-1:-1:-1;18873:9:3;;18808:81;;18873:9;;;;14745:36:4;;14733:2;14718:18;18808:81:3;14700:87:4;19916:215:3;;;;;;;;;;-1:-1:-1;19916:215:3;;;;;:::i;:::-;;:::i;16282:28::-;;;;;;;;;;-1:-1:-1;16282:28:3;;;;-1:-1:-1;;;;;16282:28:3;;;16344:41;;;;;;;;;;-1:-1:-1;16344:41:3;;;;-1:-1:-1;;;16344:41:3;;;;;;28142:121;;;;;;;;;;-1:-1:-1;28142:121:3;;;;;:::i;:::-;-1:-1:-1;;;;;28229:27:3;28206:4;28229:27;;;:18;:27;;;;;;;;;28142:121;6166:88;;;;;;;;;;-1:-1:-1;6232:15:3;6166:88;;18994:120;;;;;;;;;;-1:-1:-1;18994:120:3;;;;;:::i;:::-;-1:-1:-1;;;;;19087:20:3;19061:7;19087:20;;;:10;:20;;;;;;;18994:120;15006:25;;;;;;;;;;;;;;;;17997:627;;;;;;;;;;;;;:::i;5713:77::-;;;;;;;;;;-1:-1:-1;5751:7:3;5777:6;-1:-1:-1;;;;;5777:6:3;5713:77;;9628:225:1;;;;;;;;;;-1:-1:-1;9628:225:1;;;;;:::i;:::-;;:::i;18717:85:3:-;;;;;;;;;;;;;:::i;31168:95::-;;;;;;;;;;-1:-1:-1;31168:95:3;;;;;:::i;:::-;;:::i;20137:266::-;;;;;;;;;;-1:-1:-1;20137:266:3;;;;;:::i;:::-;;:::i;19120:164::-;;;;;;;;;;-1:-1:-1;19120:164:3;;;;;:::i;:::-;;:::i;17715:276::-;;;;;;;;;;;;;:::i;30947:119::-;;;;;;;;;;-1:-1:-1;30947:119:3;;;;;:::i;:::-;-1:-1:-1;;;;;31037:22:3;31014:4;31037:22;;;:12;:22;;;;;;;;;30947:119;30825:116;;;;;;;;;;-1:-1:-1;30825:116:3;;;;;:::i;:::-;;:::i;15780:24::-;;;;;;;;;;-1:-1:-1;15780:24:3;;;;;;;;15511:27;;;;;;;;;;;;;;;;19290:141;;;;;;;;;;-1:-1:-1;19290:141:3;;;;;:::i;:::-;-1:-1:-1;;;;;19397:18:3;;;19371:7;19397:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19290:141;15595:28;;;;;;;;;;;;;;;;28269:131;;;;;;;;;;-1:-1:-1;28269:131:3;;;;;:::i;:::-;;:::i;5919:240::-;;;;;;;;;;-1:-1:-1;5919:240:3;;;;;:::i;:::-;;:::i;31071:92::-;;;;;;;;;;-1:-1:-1;31071:92:3;;;;;:::i;:::-;;:::i;15561:28::-;;;;;;;;;;;;;;;;16150:31;;;;;;;;;;-1:-1:-1;16150:31:3;;;;;;;;;;;18630:81;18667:13;18699:5;18692:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18630:81;:::o;19437:158::-;19512:4;19528:39;291:10;19551:7;19560:6;19528:8;:39::i;:::-;-1:-1:-1;19584:4:3;19437:158;;;;;:::o;19601:309::-;19699:4;19715:36;19725:6;19733:9;19744:6;19715:9;:36::i;:::-;19761:121;19770:6;291:10;19792:89;19830:6;19792:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19792:19:3;;;;;;:11;:19;;;;;;;;291:10;19792:33;;;;;;;;;;:37;:89::i;:::-;19761:8;:121::i;:::-;-1:-1:-1;19899:4:3;19601:309;;;;;;:::o;30705:115::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;;;;;;;;;-1:-1:-1;;;;;30778:28:3::1;;::::0;;;:18:::1;:28;::::0;;;;:35;;-1:-1:-1;;30778:35:3::1;30809:4;30778:35;::::0;;30705:115::o;19916:215::-;291:10;20004:4;20052:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20052:34:3;;;;;;;;;;20004:4;;20020:83;;20043:7;;20052:50;;20091:10;20052:38;:50::i;17997:627::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;18052:35:::1;18109:42;18052:100;;18196:16;-1:-1:-1::0;;;;;18196:24:3::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18178:65:3::1;;18252:4;18259:16;-1:-1:-1::0;;;;;18259:21:3::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18178:105;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;5616:15:4;;;18178:105:3::1;::::0;::::1;5598:34:4::0;5668:15;;5648:18;;;5641:43;5510:18;;18178:105:3::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18162:13;:121:::0;;-1:-1:-1;;;;;18162:121:3;;::::1;-1:-1:-1::0;;18162:121:3;;::::1;;::::0;;18294:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;5777:6:3;;;;;18339:27;;:18:::1;:27;::::0;;;;;:34;;-1:-1:-1;;18339:34:3;;::::1;-1:-1:-1::0;18339:34:3;;::::1;::::0;;;18410:4:::1;18383:33:::0;;;;;:40;;;::::1;::::0;::::1;::::0;;18460:42:::1;18433:71:::0;;;;:78;;;;::::1;::::0;;::::1;::::0;;18549:14:::1;:68:::0;;-1:-1:-1;;18549:68:3::1;::::0;::::1;::::0;;17997:627::o;9628:225:1:-;9738:10;-1:-1:-1;;;;;9752:14:1;9738:28;;9730:72;;;;-1:-1:-1;;;9730:72:1;;11899:2:4;9730:72:1;;;11881:21:4;11938:2;11918:18;;;11911:30;11977:33;11957:18;;;11950:61;12028:18;;9730:72:1;11871:181:4;9730:72:1;9808:40;9826:9;9837:10;9808:17;:40::i;:::-;9628:225;;:::o;18717:85:3:-;18756:13;18788:7;18781:14;;;;;:::i;31168:95::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;-1:-1:-1;;;;;31232:16:3::1;31251:5;31232:16:::0;;;:12:::1;:16;::::0;;;;:24;;-1:-1:-1;;31232:24:3::1;::::0;;31168:95::o;20137:266::-;20230:4;20246:129;291:10;20269:7;20278:96;20317:15;20278:96;;;;;;;;;;;;;;;;;291:10;20278:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20278:34:3;;;;;;;;;;;;:38;:96::i;19120:164::-;19198:4;19214:42;291:10;19238:9;19249:6;19214:9;:42::i;17715:276::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;17784:18:::1;17768:13;:34:::0;17812:21:::1;:28:::0;;;::::1;-1:-1:-1::0;;;17812:28:3::1;::::0;;17850:11:::1;:18:::0;;-1:-1:-1;;17850:18:3::1;17812:28;17850:18;::::0;;17892:27:::1;:15;17910:9;17892:27;:::i;:::-;17878:11;:41:::0;17943::::1;:15;15143:8;17943:19;:41::i;:::-;17930:10;:54:::0;17715:276::o;30825:116::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;-1:-1:-1;;;;;30898:28:3::1;30929:5;30898:28:::0;;;:18:::1;:28;::::0;;;;:36;;-1:-1:-1;;30898:36:3::1;::::0;;30825:116::o;28269:131::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;28352:14:::1;:41:::0;;-1:-1:-1;;;;;28352:41:3;;::::1;;;-1:-1:-1::0;;28352:41:3;;::::1;::::0;;;::::1;::::0;;28269:131::o;5919:240::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;-1:-1:-1;;;;;6007:22:3;::::1;5999:73;;;::::0;-1:-1:-1;;;5999:73:3;;8806:2:4;5999:73:3::1;::::0;::::1;8788:21:4::0;8845:2;8825:18;;;8818:30;8884:34;8864:18;;;8857:62;8955:8;8935:18;;;8928:36;8981:19;;5999:73:3::1;8778:228:4::0;5999:73:3::1;6108:6;::::0;;6087:38:::1;::::0;-1:-1:-1;;;;;6087:38:3;;::::1;::::0;6108:6;::::1;::::0;6087:38:::1;::::0;::::1;6135:6;:17:::0;;-1:-1:-1;;6135:17:3::1;-1:-1:-1::0;;;;;6135:17:3;;;::::1;::::0;;;::::1;::::0;;5919:240::o;31071:92::-;5835:6;;-1:-1:-1;;;;;5835:6:3;291:10;5835:22;5827:67;;;;-1:-1:-1;;;5827:67:3;;11128:2:4;5827:67:3;;;11110:21:4;;;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;11258:18;;5827:67:3;11100:182:4;5827:67:3;-1:-1:-1;;;;;31133:16:3::1;;::::0;;;:12:::1;:16;::::0;;;;:23;;-1:-1:-1;;31133:23:3::1;31152:4;31133:23;::::0;;31071:92::o;20501:331::-;-1:-1:-1;;;;;20593:19:3;;20585:68;;;;-1:-1:-1;;;20585:68:3;;12665:2:4;20585:68:3;;;12647:21:4;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;12814:6;12794:18;;;12787:34;12838:19;;20585:68:3;12637:226:4;20585:68:3;-1:-1:-1;;;;;20671:21:3;;20663:68;;;;-1:-1:-1;;;20663:68:3;;9213:2:4;20663:68:3;;;9195:21:4;9252:2;9232:18;;;9225:30;9291:34;9271:18;;;9264:62;9362:4;9342:18;;;9335:32;9384:19;;20663:68:3;9185:224:4;20663:68:3;-1:-1:-1;;;;;20742:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20793:32;;6446:25:4;;;20793:32:3;;6419:18:4;20793:32:3;;;;;;;20501:331;;;:::o;20838:3321::-;21005:17;;;;;;;21001:114;;;21038:45;21054:6;21062:9;21073:6;21081:1;21038:15;:45::i;:::-;20838:3321;;;:::o;21001:114::-;-1:-1:-1;;;;;21133:20:3;;21125:70;;;;-1:-1:-1;;;21125:70:3;;12259:2:4;21125:70:3;;;12241:21:4;12298:2;12278:18;;;12271:30;12337:34;12317:18;;;12310:62;12408:7;12388:18;;;12381:35;12433:19;;21125:70:3;12231:227:4;21125:70:3;-1:-1:-1;;;;;21213:23:3;;21205:71;;;;-1:-1:-1;;;21205:71:3;;8402:2:4;21205:71:3;;;8384:21:4;8441:2;8421:18;;;8414:30;8480:34;8460:18;;;8453:62;8551:5;8531:18;;;8524:33;8574:19;;21205:71:3;8374:225:4;21205:71:3;21303:1;21294:6;:10;21286:64;;;;-1:-1:-1;;;21286:64:3;;11489:2:4;21286:64:3;;;11471:21:4;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;11638:11;11618:18;;;11611:39;11667:19;;21286:64:3;11461:231:4;21286:64:3;-1:-1:-1;;;;;21369:20:3;;;;;;:12;:20;;;;;;;;21368:21;:49;;;;-1:-1:-1;;;;;;21394:23:3;;;;;;:12;:23;;;;;;;;21393:24;21368:49;:77;;;;-1:-1:-1;21435:9:3;21422:23;;;;:12;:23;;;;;;;;21421:24;21368:77;21360:86;;;;;;21492:16;;21458:14;;-1:-1:-1;;;21492:16:3;;;;21491:17;:42;;;;-1:-1:-1;21512:21:3;;-1:-1:-1;;;21512:21:3;;;;21491:42;:109;;;;;21579:21;;21569:7;;:31;;;;:::i;:::-;21537:29;;-1:-1:-1;;;21537:29:3;;21560:4;21537:29;;;5278:74:4;21537:4:3;-1:-1:-1;;;;;21537:14:3;;;;5251:18:4;;21537:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;21491:109;21487:156;;;21616:16;:14;:16::i;:::-;-1:-1:-1;;;;;21658:26:3;;;;;;:18;:26;;;;;;;;21653:683;;21704:10;;21700:428;;21830:41;;;21857:12;21847:23;21830:41;;;;4635:19:4;;;;21830:41:3;;;;;;;;;4670:12:4;;;21830:41:3;;;21820:52;;;;;21781:28;21940:35;15193:7;15242:8;21940:35;:::i;:::-;21916:60;;:20;:60;:::i;:::-;21891:86;-1:-1:-1;22009:56:3;21891:86;22009:37;:15;15193:7;22009:19;:37::i;:::-;:41;;:56::i;:::-;21996:10;:69;;;22089:24;;6446:25:4;;;22089:24:3;;6434:2:4;6419:18;22089:24:3;;;;;;;21721:407;;21700:428;22152:10;;22133:15;:29;22129:197;;22186:12;;;;22182:83;;22231:15;:13;:15::i;:::-;22283:28;:26;:28::i;:::-;5751:7;5777:6;-1:-1:-1;;;;;22349:17:3;;;5777:6;;22349:17;;;;:41;;-1:-1:-1;5751:7:3;5777:6;-1:-1:-1;;;;;22370:20:3;;;5777:6;;22370:20;;22349:41;22346:527;;;22412:11;;;;;;;22407:278;;-1:-1:-1;;;;;22449:23:3;;22467:4;22449:23;;:53;;-1:-1:-1;;;;;;22476:26:3;;22497:4;22476:26;22449:53;:99;;;-1:-1:-1;5751:7:3;5777:6;-1:-1:-1;;;;;22522:26:3;;;5777:6;;22522:26;22449:99;:132;;;-1:-1:-1;5751:7:3;5777:6;-1:-1:-1;;;;;22552:29:3;;;5777:6;;22552:29;22449:132;22443:228;;22614:11;;;;;;;22606:46;;;;-1:-1:-1;;;22606:46:3;;10375:2:4;22606:46:3;;;10357:21:4;10414:2;10394:18;;;10387:30;10453:24;10433:18;;;10426:52;10495:18;;22606:46:3;10347:172:4;22606:46:3;22702:16;;;;22699:164;;;22751:10;22742:20;;;;:8;:20;;;;;:27;;;;;22738:111;;22816:14;;;;;;;;-1:-1:-1;22816:14:3;;;;;;;;;;22825:4;22816:14;;;;;;22802:10;22793:20;;:8;:20;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22793:37:3;;;;;;;;;;22738:111;22911:13;;-1:-1:-1;;;;;22901:23:3;;;22911:13;;22901:23;:64;;;;-1:-1:-1;22949:15:3;;-1:-1:-1;;;;;22928:37:3;;;22949:15;;;;;22928:37;;22901:64;:98;;;;-1:-1:-1;;;;;;22970:29:3;;;;;;:18;:29;;;;;;;;22969:30;22901:98;22898:771;;;23027:11;;;;;;;23019:48;;;;-1:-1:-1;;;23019:48:3;;13070:2:4;23019:48:3;;;13052:21:4;13109:2;13089:18;;;13082:30;13148:26;13128:18;;;13121:54;13192:18;;23019:48:3;13042:174:4;23019:48:3;23090:16;;;;23087:372;;;23147:15;23133:11;;:29;23130:311;;;23208:13;;23198:6;:23;;23190:32;;;;;;-1:-1:-1;;;;;23256:19:3;;;;;;:8;:19;;;;;:23;23282:15;-1:-1:-1;23248:88:3;;;;-1:-1:-1;;;23248:88:3;;9616:2:4;23248:88:3;;;9598:21:4;9655:2;9635:18;;;9628:30;9694:34;9674:18;;;9667:62;9765:4;9745:18;;;9738:32;9787:19;;23248:88:3;9588:224:4;23248:88:3;23388:30;:15;23407:10;23388:30;:::i;:::-;-1:-1:-1;;;;;23362:19:3;;;;;;:8;:19;;;;;:56;23130:311;23479:16;;;;23476:119;;;23546:30;:15;23565:10;23546:30;:::i;:::-;-1:-1:-1;;;;;23519:19:3;;;;;;:8;:19;;;;;:24;;:57;23476:119;23622:36;23632:6;23640:9;23651:6;23622:9;:36::i;:::-;23613:45;;22898:771;23699:16;;-1:-1:-1;;;23699:16:3;;;;23698:17;:42;;;;-1:-1:-1;23719:21:3;;-1:-1:-1;;;23719:21:3;;;;23698:42;:72;;;;-1:-1:-1;23757:13:3;;-1:-1:-1;;;;;23744:26:3;;;23757:13;;23744:26;23698:72;23694:371;;;23880:4;23831:28;19087:20;;;:10;:20;;;;;;23904:24;;23901:94;;23948:32;23959:20;23948:10;:32::i;:::-;24018:36;24028:6;24036:9;24047:6;24018:9;:36::i;:::-;24009:45;;23772:293;23694:371;24102:50;24118:6;24126:9;24137:6;24145;24102:15;:50::i;:::-;20946:3213;20838:3321;;;:::o;1565:187::-;1651:7;1686:12;1678:6;;;;1670:29;;;;-1:-1:-1;;;1670:29:3;;;;;;;;:::i;:::-;-1:-1:-1;1709:9:3;1721:5;1725:1;1721;:5;:::i;:::-;1709:17;1565:187;-1:-1:-1;;;;;1565:187:3:o;1243:176::-;1301:7;;1332:5;1336:1;1332;:5;:::i;:::-;1320:17;;1360:1;1355;:6;;1347:46;;;;-1:-1:-1;;;1347:46:3;;10019:2:4;1347:46:3;;;10001:21:4;10058:2;10038:18;;;10031:30;10097:29;10077:18;;;10070:57;10144:18;;1347:46:3;9991:177:4;28536:236:3;28663:33;;;;;;6656:25:4;;;6697:18;;;6690:34;;;6629:18;;28663:33:3;;;-1:-1:-1;;28663:33:3;;;;;;;;;28653:44;;28663:33;28653:44;;;;28630:12;:68;;;28709:28;;:14;:28::i;:::-;-1:-1:-1;;28764:1:3;28748:13;:17;28536:236::o;24575:428::-;24688:18;24709:19;:7;24721:6;24709:11;:19::i;:::-;-1:-1:-1;;;;;24760:19:3;;;;;;:10;:19;;;;;;24688:40;;-1:-1:-1;24760:32:3;;24784:7;24760:23;:32::i;:::-;-1:-1:-1;;;;;24738:19:3;;;;;;;:10;:19;;;;;;:54;;;;24827:22;;;;;;;:38;;24854:10;24827:26;:38::i;:::-;-1:-1:-1;;;;;24802:22:3;;;;;;:10;:22;;;;;;:63;;;;24922:4;24903:25;;;;:37;;24933:6;24903:29;:37::i;:::-;24894:4;24875:25;;;;:10;:25;;;;;;;;;:65;;;;24955:41;6446:25:4;;;-1:-1:-1;;;;;24955:41:3;;;;;;;;;;6419:18:4;24955:41:3;;;;;;;24678:325;24575:428;;;;:::o;25686:735::-;16682:16;:23;;-1:-1:-1;;;;16682:23:3;-1:-1:-1;;;16682:23:3;;;25766:16:::1;::::0;;25780:1:::1;25766:16:::0;;;;;::::1;::::0;;-1:-1:-1;;25766:16:3::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25766:16:3::1;25742:40;;25802:15;;;;;;;;;-1:-1:-1::0;;;;;25802:15:3::1;-1:-1:-1::0;;;;;25802:20:3::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25792:4;25797:1;25792:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;25792:32:3::1;;;-1:-1:-1::0;;;;;25792:32:3::1;;;::::0;::::1;25852:42;25834:4;25839:1;25834:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25834:61:3;;::::1;:7;::::0;;::::1;::::0;;;;;:61;25926:15:::1;::::0;25989:29:::1;::::0;-1:-1:-1;;;25989:29:3;;26012:4:::1;25989:29;::::0;::::1;5278:74:4::0;25906:17:3::1;::::0;25926:15;;;::::1;::::0;::::1;::::0;:28:::1;::::0;25989:4:::1;:14:::0;;::::1;::::0;::::1;::::0;5251:18:4;;25989:29:3::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25979:7;;25955:21;;:31;;;;:::i;:::-;:63;;;;:::i;:::-;26020:4;25926:99;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;25926:99:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;26026:1;25926:102;;;;;;;;:::i;:::-;;;;;;;25906:122;;26067:9;26043:21;:33;26039:376;;;26092:15;::::0;;;::::1;-1:-1:-1::0;;;;;26092:15:3::1;:66;26166:9:::0;26194:1:::1;26244:4:::0;26274::::1;26313:24;:15;26333:3;26313:19;:24::i;:::-;26092:259;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;26371:33;26388:9;26399:4;26371:33;;;;;;;:::i;:::-;;;;;;;;26039:376;-1:-1:-1::0;;16726:16:3;:24;;-1:-1:-1;;;;16726:24:3;;;25686:735::o;30420:279::-;30586:28;:21;30612:1;30586:25;:28::i;:::-;30567:16;:47;;;30624:19;:38;30673:12;:19;;-1:-1:-1;;30673:19:3;30688:4;30673:19;;;30420:279::o;28778:322::-;28841:13;;:18;;;;:66;;-1:-1:-1;28881:13:3;;:26;;28897:10;28881:26;:::i;:::-;28863:15;:44;28841:66;28837:79;;;28778:322::o;28837:79::-;28964:7;;28932:29;;-1:-1:-1;;;28932:29:3;;28955:4;28932:29;;;5278:74:4;28932:4:3;-1:-1:-1;;;;;28932:14:3;;;;5251:18:4;;28932:29:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;28928:166;;;29003:35;29021:7;;29030;;29003:17;:35::i;:::-;28987:13;:51;29068:15;29052:13;:31;28928:166;28778:322::o;24162:407::-;-1:-1:-1;;;;;24390:26:3;;24254:7;24390:26;;;:18;:26;;;;;;24254:7;;24390:26;;;:59;;-1:-1:-1;;;;;;24420:29:3;;;;;;:18;:29;;;;;;;;24390:59;24387:105;;;24472:9;-1:-1:-1;24465:16:3;;24387:105;24513:23;24532:3;24513:14;:6;24524:2;24513:10;:14::i;:::-;:18;;:23::i;25009:344::-;16682:16;:23;;-1:-1:-1;;;;16682:23:3;-1:-1:-1;;;16682:23:3;;;25114:21:::1;25146:38;25163:20:::0;25146:16:::1;:38::i;:::-;25195:26;25224:41;:21;25250:14:::0;25224:25:::1;:41::i;:::-;25297:14;::::0;25195:70;;-1:-1:-1;25276:70:3::1;::::0;25297:14:::1;::::0;::::1;-1:-1:-1::0;;;;;25297:14:3::1;25313:32;25343:1;25313:25;25195:70:::0;25336:1:::1;25313:22;:25::i;:32::-;25276:20;:70::i;:::-;-1:-1:-1::0;;16726:16:3;:24;;-1:-1:-1;;;;16726:24:3;;;-1:-1:-1;25009:344:3:o;29231:1183::-;16797:17;:24;;-1:-1:-1;;16797:24:3;;;;;;29349:18:::1;29364:3;29349:12:::0;:18:::1;:::i;:::-;:22;::::0;29370:1:::1;29349:22;:::i;:::-;29327:44;;29397:25;29460:12;29443:30;;;;;;4635:19:4::0;;4679:2;4670:12;;4625:63;29443:30:3::1;;::::0;;-1:-1:-1;;29443:30:3;;::::1;::::0;;;;;;29433:41;;29443:30:::1;29433:41:::0;;::::1;::::0;;-1:-1:-1;29501:130:3::1;29627:3;29501:108;15427:2;29556:33;15427:2:::0;15470::::1;29556:33;:::i;:::-;29535:55;::::0;:17;:55:::1;:::i;:::-;:73;;;;:::i;:::-;29501:16;::::0;;:33:::1;:108::i;:130::-;29485:13;:146:::0;29663:12:::1;:26:::0;;;29727:16:::1;::::0;29704:19:::1;::::0;:39:::1;:79:::0;::::1;;;;15297:2;29747:11;:36;;29704:79;29700:708;;;29799:28;29813:13;;29799;:28::i;:::-;29847:32;29862:16;;29847:32;;;;6446:25:4::0;;6434:2;6419:18;;6401:76;29847:32:3::1;;;;;;;;29700:708;;;29937:16;;29914:19;;:39;29910:488;;15344:2;29977:11;:34;29973:317;;30035:88;30071:13;;30049:19;;:35;:73;;30103:19;;30035:13;:88::i;30049:73::-;30087:13;;30035;:88::i;:::-;29910:488;;29973:317;30170:17;:15;:17::i;:::-;30215:56;30251:19;;30232:16;;:38;;;;:::i;:::-;30215:56;::::0;6446:25:4;;;6434:2;6419:18;30215:56:3::1;6401:76:4::0;29910:488:3::1;30328:17;:15;:17::i;:::-;30369:14;::::0;::::1;::::0;;;::::1;29910:488;-1:-1:-1::0;;16842:17:3;:25;;-1:-1:-1;;16842:25:3;;;-1:-1:-1;29231:1183:3:o;1425:134::-;1483:7;1509:43;1513:1;1516;1509:43;;;;;;;;;;;;;;;;;:3;:43::i;2006:130::-;2064:7;2090:39;2094:1;2097;2090:39;;;;;;;;;;;;;;;;;:3;:39::i;7741:1055:1:-;7845:17;7877:4;-1:-1:-1;;;;;7877:20:1;;7898:14;7914:4;7931:8;6598:1;7920:43;;;;;;;;6656:25:4;;;6712:2;6697:18;;6690:34;6644:2;6629:18;;6611:119;7920:43:1;;;;;;;;;;;;;7877:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8195:15:1;8279:16;;;:6;:16;;;;;;;;;1005:51:2;;;;;6966:25:4;;;7007:18;;;7000:34;;;8272:4:1;7050:18:4;;;7043:83;7142:18;;;;7135:34;;;1005:51:2;;;;;;;;;;6938:19:4;;;;1005:51:2;;;995:62;;;;;;;;;8726:16:1;;;;;;;:20;;8745:1;8726:20;:::i;:::-;8707:16;;;;:6;:16;;;;;:39;8759:32;8714:8;8783:7;1600:41:2;;;;;;;4850:19:4;;;;4885:12;;;4878:28;;;;1600:41:2;;;;;;;;;4922:12:4;;;;1600:41:2;;1590:52;;;;;;1443:204;8759:32:1;8752:39;7741:1055;-1:-1:-1;;;;7741:1055:1:o;1758:241:3:-;1816:7;1839:6;1835:45;;-1:-1:-1;1868:1:3;1861:8;;1835:45;1890:9;1902:5;1906:1;1902;:5;:::i;:::-;1890:17;-1:-1:-1;1934:1:3;1925:5;1929:1;1890:17;1925:5;:::i;:::-;:10;1917:56;;;;-1:-1:-1;;;1917:56:3;;10726:2:4;1917:56:3;;;10708:21:4;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;10875:3;10855:18;;;10848:31;10896:19;;1917:56:3;10698:223:4;26427:640:3;26575:16;;;26589:1;26575:16;;;;;;;;26551:21;;26575:16;;;;;;;;;;-1:-1:-1;26575:16:3;26551:40;;26619:4;26601;26606:1;26601:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26601:23:3;;;-1:-1:-1;;;;;26601:23:3;;;;;26644:15;;;;;;;;;-1:-1:-1;;;;;26644:15:3;-1:-1:-1;;;;;26644:20:3;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26634:4;26639:1;26634:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26634:32:3;;;:7;;;;;;;;;:32;26709:15;;26677:62;;26694:4;;26709:15;;;;26727:11;26677:8;:62::i;:::-;26775:15;;:234;;;;;:15;;;;-1:-1:-1;;;;;26775:15:3;;:66;;:234;;26855:11;;26880:1;;26923:4;;26949;;26984:15;;26775:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27025:35;27042:11;27055:4;27025:35;;;;;;;:::i;:::-;;;;;;;;26482:585;26427:640;:::o;28406:124::-;28497:26;;-1:-1:-1;;;;;28497:18:3;;;:26;;;;;28516:6;;28497:26;;;;28516:6;28497:18;:26;;;;;;;;;;;;;;;;;;;25359:321;16682:16;:23;;-1:-1:-1;;;;16682:23:3;-1:-1:-1;;;16682:23:3;;;25432:10;;25428:245:::1;;25458:24;25475:6;25458:16;:24::i;:::-;25520:6;25497:19;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25546:22:3::1;::::0;6446:25:4;;;25546:22:3::1;::::0;6434:2:4;6419:18;25546:22:3::1;;;;;;;25610:1;25587:19;;:24;25583:80;;25631:17;:15;:17::i;:::-;-1:-1:-1::0;16726:16:3;:24;;-1:-1:-1;;;;16726:24:3;;;25359:321::o;29106:119::-;29151:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;29187:1:3;29174:10;:14;29198:12;:20;;-1:-1:-1;;29198:20:3;;;29106:119::o;2142:272::-;2228:7;2262:12;2255:5;2247:28;;;;-1:-1:-1;;;2247:28:3;;;;;;;;:::i;:::-;-1:-1:-1;2285:9:3;2297:5;2301:1;2297;:5;:::i;27073:557::-;27216:16;;;27230:1;27216:16;;;;;;;;27192:21;;27216:16;;;;;;;;;;-1:-1:-1;27216:16:3;27192:40;;27252:15;;;;;;;;;-1:-1:-1;;;;;27252:15:3;-1:-1:-1;;;;;27252:20:3;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27242:4;27247:1;27242:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27242:32:3;;;-1:-1:-1;;;;;27242:32:3;;;;;27302:4;27284;27289:1;27284:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27284:23:3;;;:7;;;;;;;;;:23;27343:15;;;;;;:66;27417:6;27438:1;27484:4;27502:11;27543:24;:15;27563:3;27543:19;:24::i;:::-;27343:234;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27593:30;27610:6;27618:4;27593:30;;;;;;;:::i;14:247:4:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:2;;;667:1;664;657:12;619:2;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:4;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;609:301;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:2;;;1077:1;1074;1067:12;1029:2;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:4;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;1019:352;;1307:7;;-1:-1:-1;;;1361:2:4;1346:18;;;;1333:32;;1019:352::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:2;;;1521:1;1518;1511:12;1473:2;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1463:228:4:o;1696:1116::-;1791:6;1822:2;1865;1853:9;1844:7;1840:23;1836:32;1833:2;;;1881:1;1878;1871:12;1833:2;1914:9;1908:16;1943:18;1984:2;1976:6;1973:14;1970:2;;;2000:1;1997;1990:12;1970:2;2038:6;2027:9;2023:22;2013:32;;2083:7;2076:4;2072:2;2068:13;2064:27;2054:2;;2105:1;2102;2095:12;2054:2;2134;2128:9;2156:2;2152;2149:10;2146:2;;;2162:18;;:::i;:::-;2208:2;2205:1;2201:10;2240:2;2234:9;2303:2;2299:7;2294:2;2290;2286:11;2282:25;2274:6;2270:38;2358:6;2346:10;2343:22;2338:2;2326:10;2323:18;2320:46;2317:2;;;2369:18;;:::i;:::-;2405:2;2398:22;2455:18;;;2489:15;;;;-1:-1:-1;2524:11:4;;;2554;;;2550:20;;2547:33;-1:-1:-1;2544:2:4;;;2593:1;2590;2583:12;2544:2;2615:1;2606:10;;2625:156;2639:2;2636:1;2633:9;2625:156;;;2696:10;;2684:23;;2657:1;2650:9;;;;;2727:12;;;;2759;;2625:156;;;-1:-1:-1;2800:6:4;1802:1010;-1:-1:-1;;;;;;;;1802:1010:4:o;2817:277::-;2884:6;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2985:9;2979:16;3038:5;3031:13;3024:21;3017:5;3014:32;3004:2;;3060:1;3057;3050:12;3099:248;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3244:1;3241;3234:12;3196:2;-1:-1:-1;;3267:23:4;;;3337:2;3322:18;;;3309:32;;-1:-1:-1;3186:161:4:o;3352:184::-;3422:6;3475:2;3463:9;3454:7;3450:23;3446:32;3443:2;;;3491:1;3488;3481:12;3443:2;-1:-1:-1;3514:16:4;;3433:103;-1:-1:-1;3433:103:4:o;3541:484::-;3594:3;3632:5;3626:12;3659:6;3654:3;3647:19;3685:4;3714:2;3709:3;3705:12;3698:19;;3751:2;3744:5;3740:14;3772:1;3782:218;3796:6;3793:1;3790:13;3782:218;;;3861:13;;-1:-1:-1;;;;;3857:62:4;3845:75;;3940:12;;;;3975:15;;;;3818:1;3811:9;3782:218;;;-1:-1:-1;4016:3:4;;3602:423;-1:-1:-1;;;;;3602:423:4:o;4030:471::-;4071:3;4109:5;4103:12;4136:6;4131:3;4124:19;4161:1;4171:162;4185:6;4182:1;4179:13;4171:162;;;4247:4;4303:13;;;4299:22;;4293:29;4275:11;;;4271:20;;4264:59;4200:12;4171:162;;;4351:6;4348:1;4345:13;4342:2;;;4417:1;4410:4;4401:6;4396:3;4392:16;4388:27;4381:38;4342:2;-1:-1:-1;4483:2:4;4462:15;-1:-1:-1;;4458:29:4;4449:39;;;;4490:4;4445:50;;4079:422;-1:-1:-1;;4079:422:4:o;5695:408::-;-1:-1:-1;;;;;5902:6:4;5898:55;5887:9;5880:74;5990:6;5985:2;5974:9;5970:18;5963:34;6033:2;6028;6017:9;6013:18;6006:30;5861:4;6053:44;6093:2;6082:9;6078:18;6070:6;6053:44;:::i;7438:533::-;7709:6;7698:9;7691:25;7752:3;7747:2;7736:9;7732:18;7725:31;7672:4;7773:57;7825:3;7814:9;7810:19;7802:6;7773:57;:::i;:::-;-1:-1:-1;;;;;7866:55:4;;;;7861:2;7846:18;;7839:83;-1:-1:-1;7953:2:4;7938:18;7931:34;7765:65;7681:290;-1:-1:-1;;7681:290:4:o;7976:219::-;8125:2;8114:9;8107:21;8088:4;8145:44;8185:2;8174:9;8170:18;8162:6;8145:44;:::i;13403:332::-;13610:6;13599:9;13592:25;13653:2;13648;13637:9;13633:18;13626:30;13573:4;13673:56;13725:2;13714:9;13710:18;13702:6;13673:56;:::i;13993:605::-;14292:6;14281:9;14274:25;14335:6;14330:2;14319:9;14315:18;14308:34;14378:3;14373:2;14362:9;14358:18;14351:31;14255:4;14399:57;14451:3;14440:9;14436:19;14428:6;14399:57;:::i;:::-;-1:-1:-1;;;;;14492:55:4;;;;14487:2;14472:18;;14465:83;-1:-1:-1;14579:3:4;14564:19;14557:35;14391:65;14264:334;-1:-1:-1;;;14264:334:4:o;14792:128::-;14832:3;14863:1;14859:6;14856:1;14853:13;14850:2;;;14869:18;;:::i;:::-;-1:-1:-1;14905:9:4;;14840:80::o;14925:120::-;14965:1;14991;14981:2;;14996:18;;:::i;:::-;-1:-1:-1;15030:9:4;;14971:74::o;15050:168::-;15090:7;15156:1;15152;15148:6;15144:14;15141:1;15138:21;15133:1;15126:9;15119:17;15115:45;15112:2;;;15163:18;;:::i;:::-;-1:-1:-1;15203:9:4;;15102:116::o;15223:125::-;15263:4;15291:1;15288;15285:8;15282:2;;;15296:18;;:::i;:::-;-1:-1:-1;15333:9:4;;15272:76::o;15353:437::-;15432:1;15428:12;;;;15475;;;15496:2;;15550:4;15542:6;15538:17;15528:27;;15496:2;15603;15595:6;15592:14;15572:18;15569:38;15566:2;;;-1:-1:-1;;;15637:1:4;15630:88;15741:4;15738:1;15731:15;15769:4;15766:1;15759:15;15566:2;;15408:382;;;:::o;15795:135::-;15834:3;-1:-1:-1;;15855:17:4;;15852:2;;;15875:18;;:::i;:::-;-1:-1:-1;15922:1:4;15911:13;;15842:88::o;15935:112::-;15967:1;15993;15983:2;;15998:18;;:::i;:::-;-1:-1:-1;16032:9:4;;15973:74::o;16052:184::-;-1:-1:-1;;;16101:1:4;16094:88;16201:4;16198:1;16191:15;16225:4;16222:1;16215:15;16241:184;-1:-1:-1;;;16290:1:4;16283:88;16390:4;16387:1;16380:15;16414:4;16411:1;16404:15;16430:184;-1:-1:-1;;;16479:1:4;16472:88;16579:4;16576:1;16569:15;16603:4;16600:1;16593:15;16619:184;-1:-1:-1;;;16668:1:4;16661:88;16768:4;16765:1;16758:15;16792:4;16789:1;16782:15;16808:154;-1:-1:-1;;;;;16887:5:4;16883:54;16876:5;16873:65;16863:2;;16952:1;16949;16942:12;16863:2;16853:109;:::o

Swarm Source

ipfs://596b7d106180c6013b2b2fbd8e8c79242a83d74aef617bb376ef0893d1de7bbc
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.