ETH Price: $2,677.22 (+1.52%)
Gas: 1.02 Gwei

Token

SunShib (SUNSHIB)
 

Overview

Max Total Supply

1,000,000 SUNSHIB

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,800 SUNSHIB

Value
$0.00
0xf847552ffafa48a564125b8a9cf353e9d6851b4f
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:
SunShib

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-05
*/

/*
SunShib

It's time
Let's make Memecoins BRIGHT again!

Tg: https://t.me/SunShib
Web: https://www.sunshib.com/
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.9;
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;
        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;
    }
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return 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;
    }
}



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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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


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

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

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

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

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



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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


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

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

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




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

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



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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping(address => bool) private _isSniper;
    address[] private _confirmedSnipers;
    address public marketingWallet = payable(0x998E582FE537B9bb9A87dF3d1112Fb2Eb16761eC);
	address public devWallet = payable(0x08CFF5DEf841fbd8CEd5CC0B04cc6FEfeee08825);
    bool public tradingOpen = false;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public maxWalletamount = 20000 * 10**18;
    uint256 public launchTime;
    
    string private _name = "SunShib";
    string private _symbol = "SUNSHIB";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 20000 * 10**18;
    uint256 public numTokensSellToAddToLiquidity = 100 * 10**18;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setMarketingWallet(address marketingwalletAddress) public onlyOwner {
        marketingWallet = marketingwalletAddress;
    }

    function setDevWallet(address devwalletAddress) public onlyOwner {
        devWallet = devwalletAddress;
    }

    function normalizeTxAmount() external onlyOwner() {
        _maxTxAmount = 1000000 * 10**18;
    }
    
    function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() {
        numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**18;
    }
    
    function clearStuckBalance() public {
        payable(marketingWallet).transfer(address(this).balance);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function _amnestySniper(address account) external onlyOwner {
        require(_isSniper[account], 'Account is not blacklisted');
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

    function _enableTrading() external onlyOwner() {
        tradingOpen = true;
        launchTime = block.timestamp;
    }
    
    function setMaxWalletAmount(uint256 _maxwalletamount) public onlyOwner {
        require(_maxwalletamount > 5000 * 10**18, "Max wallet amount should be greater than 0.5% of the total supply");
        maxWalletamount = _maxwalletamount;
    }

    function clearERCtokens(IERC20 tokenAddress) external {
        tokenAddress.transfer(marketingWallet, tokenAddress.balanceOf(address(this)));
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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 from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], 'You have no power here!');
        require(!_isSniper[msg.sender], 'You have no power here!');
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if (to != owner() && from == uniswapV2Pair) {
            uint256 BalanceRecepient = balanceOf(to);
            require(
                BalanceRecepient + amount <= maxWalletamount,
                "Transfer exceeds maximum wallet token amount."
            );
        }
 
        // buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, 'Trading not yet enabled.');

            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }
    
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = balanceOf(address(this));
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }


    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 convertQuota = contractTokenBalance.div(6).mul(5);
        uint256 liquHalf = contractTokenBalance.sub(convertQuota);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(convertQuota); 
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.div(5).mul(2);
        payable(marketingWallet).transfer(marketingshare);
		uint256 afterMarketBalance = newBalance.sub(marketingshare);
		uint256 devshare = afterMarketBalance.div(3).mul(2);
		payable(devWallet).transfer(devshare);
		uint256 afterDevBalance = afterMarketBalance.sub(devshare);
        addLiquidity(liquHalf, afterDevBalance);
        emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf);
    }

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

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

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

    function 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
            marketingWallet,
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!tradingOpen){
            require(sender == owner()); // only owner allowed to trade or add liquidity
        }
        
        if(!takeFee)
            removeAllFee();
            
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"clearERCtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletamount","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":"normalizeTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devwalletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingwalletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxwalletamount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60c0604052600980546001600160a01b03191673998e582fe537b9bb9a87df3d1112fb2eb16761ec179055600a80546001600160a81b0319167308cff5def841fbd8ced5cc0b04cc6fefeee0882517905569d3c21bcecceda1000000600b8190556200006e906000196200049e565b6200007c90600019620004c1565b600c5569043c33c1937564800000600e556040805180820190915260078082526629bab729b434b160c91b6020909201918252620000bd91601091620003f8565b506040805180820190915260078082526629aaa729a424a160c91b6020909201918252620000ee91601191620003f8565b506012805460ff19168117905560006013819055601455600c60158190556016556017805461ff00191661010017905569043c33c193756480000060185568056bc75e2d631000006019553480156200014657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526001602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001ea57600080fd5b505afa158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002259190620004e7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026e57600080fd5b505afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a99190620004e7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f257600080fd5b505af115801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d9190620004e7565b6001600160a01b0390811660a0528116608052600160046000620003596000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003a13390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620003e991815260200190565b60405180910390a35062000556565b828054620004069062000519565b90600052602060002090601f0160209004810192826200042a576000855562000475565b82601f106200044557805160ff191683800117855562000475565b8280016001018555821562000475579182015b828111156200047557825182559160200191906001019062000458565b506200048392915062000487565b5090565b5b8082111562000483576000815560010162000488565b600082620004bc57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620004e257634e487b7160e01b600052601160045260246000fd5b500390565b600060208284031215620004fa57600080fd5b81516001600160a01b03811681146200051257600080fd5b9392505050565b600181811c908216806200052e57607f821691505b602082108114156200055057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613002620005bb6000396000818161058d01528181611ae701528181611ba30152611d4201526000818161035d01528181611bdf015281816125b60152818161267e015281816126ba0152818161272c015261279401526130026000f3fe60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063d12a76881161007a578063d12a7688146107f4578063dc4b7f2a1461080a578063dd62ed3e14610820578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b4114610755578063a0ac5e191461076a578063a457c2d71461077f578063a9059cbb1461079f578063ade176f3146107bf578063c49b9a80146107d457600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c7565b6040516102ba9190612bba565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c24565b610959565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c50565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600d545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600b5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c50565b610970565b005b3480156103da57600080fd5b506102e36103e9366004612c6d565b6109c5565b3480156103fa57600080fd5b506103cc610409366004612cae565b610a2e565b34801561041a57600080fd5b506103cc610429366004612c50565b610ae6565b34801561043a57600080fd5b506103cc610449366004612cae565b610bee565b34801561045a57600080fd5b5061033d610469366004612cae565b610c30565b34801561047a57600080fd5b5060125460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c50565b610cb4565b3480156104bc57600080fd5b506103cc610e5e565b3480156104d157600080fd5b506103cc6104e0366004612c50565b610e9a565b3480156104f157600080fd5b506102e3610500366004612c24565b611027565b34801561051157600080fd5b5061033d60135481565b34801561052757600080fd5b506103cc610536366004612cae565b61105d565b34801561054757600080fd5b506103cc610556366004612c50565b611147565b34801561056757600080fd5b5061033d610576366004612cd5565b611195565b34801561058757600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bb57600080fd5b506017546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c50565b611222565b3480156105fa57600080fd5b506102e3610609366004612c50565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c50565b611375565b34801561065357600080fd5b5061033d60155481565b34801561066957600080fd5b5061033d610678366004612c50565b6113c1565b34801561068957600080fd5b506103cc611420565b34801561069e57600080fd5b5060095461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600f5481565b3480156106d457600080fd5b5061033d60185481565b3480156106ea57600080fd5b506102e36106f9366004612c50565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b50600a5461037f906001600160a01b031681565b34801561076157600080fd5b506102ad611494565b34801561077657600080fd5b506103cc6114a3565b34801561078b57600080fd5b506102e361079a366004612c24565b6114e6565b3480156107ab57600080fd5b506102e36107ba366004612c24565b611535565b3480156107cb57600080fd5b506103cc611542565b3480156107e057600080fd5b506103cc6107ef366004612d05565b61157c565b34801561080057600080fd5b5061033d60195481565b34801561081657600080fd5b5061033d600e5481565b34801561082c57600080fd5b5061033d61083b366004612d22565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561087257600080fd5b506103cc610881366004612c50565b6115fa565b34801561089257600080fd5b506103cc6108a1366004612c50565b611645565b3480156108b257600080fd5b50600a546102e390600160a01b900460ff1681565b6060601080546108d690612d50565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612d50565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b600061096633848461172f565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612d8b565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109d2848484611853565b610a248433610a1f85604051806060016040528060288152602001612f80602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e02565b61172f565b5060019392505050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161099a90612d8b565b69010f0cf064dd592000008111610ae15760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a40161099a565b600e55565b6009546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612dc0565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612dd9565b5050565b6000546001600160a01b03163314610c185760405162461bcd60e51b815260040161099a90612d8b565b610c2a81670de0b6b3a7640000612e0c565b60195550565b6000600c54821115610c975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161099a565b6000610ca1611e3c565b9050610cad8382611e5f565b9392505050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526007602052604090205460ff16610d465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161099a565b60005b600854811015610bea57816001600160a01b031660088281548110610d7057610d70612e2b565b6000918252602090912001546001600160a01b03161415610e4c5760088054610d9b90600190612e41565b81548110610dab57610dab612e2b565b600091825260209091200154600880546001600160a01b039092169183908110610dd757610dd7612e2b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e2657610e26612e58565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5681612e6e565b915050610d49565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526005602052604090205460ff16610f2c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b60005b600654811015610bea57816001600160a01b031660068281548110610f5657610f56612e2b565b6000918252602090912001546001600160a01b031614156110155760068054610f8190600190612e41565b81548110610f9157610f91612e2b565b600091825260209091200154600680546001600160a01b039092169183908110610fbd57610fbd612e2b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e2657610e26612e58565b8061101f81612e6e565b915050610f2f565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610966918590610a1f9086611ea1565b3360008181526005602052604090205460ff16156110d25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099a565b60006110dd83611f00565b505050506001600160a01b03841660009081526001602052604090205491925061110991905082611f4f565b6001600160a01b038316600090815260016020526040902055600c5461112f9082611f4f565b600c55600d5461113f9084611ea1565b600d55505050565b6000546001600160a01b031633146111715760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b548311156111e95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099a565b816112085760006111f984611f00565b5093955061096a945050505050565b600061121384611f00565b5092955061096a945050505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526005602052604090205460ff16156112b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b6001600160a01b0381166000908152600160205260409020541561130f576001600160a01b0381166000908152600160205260409020546112f590610c30565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461139f5760405162461bcd60e51b815260040161099a90612d8b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113fe57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096a90610c30565b6000546001600160a01b0316331461144a5760405162461bcd60e51b815260040161099a90612d8b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601180546108d690612d50565b6000546001600160a01b031633146114cd5760405162461bcd60e51b815260040161099a90612d8b565b600a805460ff60a01b1916600160a01b17905542600f55565b60006109663384610a1f85604051806060016040528060258152602001612fa8602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e02565b6000610966338484611853565b6000546001600160a01b0316331461156c5760405162461bcd60e51b815260040161099a90612d8b565b69d3c21bcecceda1000000601855565b6000546001600160a01b031633146115a65760405162461bcd60e51b815260040161099a90612d8b565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ef90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116245760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b0381166116d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099a565b6001600160a01b0382166117f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099a565b6001600160a01b0382166119195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099a565b6000811161197b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099a565b6001600160a01b03821660009081526007602052604090205460ff16156119de5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b3360009081526007602052604090205460ff1615611a385760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b6000546001600160a01b03848116911614801590611a6457506000546001600160a01b03838116911614155b15611acc57601854811115611acc5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099a565b6000546001600160a01b03838116911614801590611b1b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611ba1576000611b2b836113c1565b600e54909150611b3b8383612e89565b1115611b9f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161099a565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611c1457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c3957506001600160a01b03821660009081526004602052604090205460ff16155b15611d0757600a54600160a01b900460ff16611c975760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161099a565b600f54421415611d07576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611d12306113c1565b90506018548110611d2257506018545b60195481108015908190611d39575060175460ff16155b8015611d7757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611d8a5750601754610100900460ff165b15611da357611d98306113c1565b9150611da382611f91565b6001600160a01b03851660009081526004602052604090205460019060ff1680611de557506001600160a01b03851660009081526004602052604090205460ff165b15611dee575060005b611dfa868686846120f6565b505050505050565b60008184841115611e265760405162461bcd60e51b815260040161099a9190612bba565b506000611e338486612e41565b95945050505050565b6000806000611e4961229e565b9092509050611e588282611e5f565b9250505090565b6000610cad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612420565b600080611eae8385612e89565b905083811015610cad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099a565b6000806000806000806000806000611f178a61244e565b9250925092506000806000611f358d8686611f30611e3c565b612490565b919f909e50909c50959a5093985091965092945050505050565b6000610cad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e02565b6017805460ff191660011790556000611fb66005611fb0846006611e5f565b906124e0565b90506000611fc48383611f4f565b905047611fd08361255f565b6000611fdc4783611f4f565b90506000611ff06002611fb0846005611e5f565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561202b573d6000803e3d6000fd5b5060006120388383611f4f565b9050600061204c6002611fb0846003611e5f565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612087573d6000803e3d6000fd5b5060006120948383611f4f565b90506120a08782612726565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff1916905550505050505050565b600a54600160a01b900460ff16612121576000546001600160a01b0385811691161461212157600080fd5b8061212e5761212e61281b565b6001600160a01b03841660009081526005602052604090205460ff16801561216f57506001600160a01b03831660009081526005602052604090205460ff16155b156121845761217f848484612849565b612282565b6001600160a01b03841660009081526005602052604090205460ff161580156121c557506001600160a01b03831660009081526005602052604090205460ff165b156121d55761217f84848461296f565b6001600160a01b03841660009081526005602052604090205460ff1615801561221757506001600160a01b03831660009081526005602052604090205460ff16155b156122275761217f848484612a18565b6001600160a01b03841660009081526005602052604090205460ff16801561226757506001600160a01b03831660009081526005602052604090205460ff165b156122775761217f848484612a5c565b612282848484612a18565b8061229857612298601454601355601654601555565b50505050565b600c54600b546000918291825b6006548110156123f0578260016000600684815481106122cd576122cd612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612338575081600260006006848154811061231157612311612e2b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561234e57600c54600b54945094505050509091565b612394600160006006848154811061236857612368612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f4f565b92506123dc60026000600684815481106123b0576123b0612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f4f565b9150806123e881612e6e565b9150506122ab565b50600b54600c5461240091611e5f565b82101561241757600c54600b549350935050509091565b90939092509050565b600081836124415760405162461bcd60e51b815260040161099a9190612bba565b506000611e338486612ea1565b60008060008061245d85612acf565b9050600061246a86612af1565b905060006124828261247c8986611f4f565b90611f4f565b979296509094509092505050565b600080808061249f88866124e0565b905060006124ad88876124e0565b905060006124bb88886124e0565b905060006124cd8261247c8686611f4f565b939b939a50919850919650505050505050565b6000826124ef5750600061096a565b60006124fb8385612e0c565b9050826125088583612ea1565b14610cad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259457612594612e2b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260d57600080fd5b505afa158015612621573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126459190612ec3565b8160018151811061265857612658612e2b565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a3307f00000000000000000000000000000000000000000000000000000000000000008461172f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126f8908590600090869030904290600401612ee0565b600060405180830381600087803b15801561271257600080fd5b505af1158015611dfa573d6000803e3d6000fd5b612751307f00000000000000000000000000000000000000000000000000000000000000008461172f565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128149190612f51565b5050505050565b60135415801561282b5750601554155b1561283257565b601380546014556015805460165560009182905555565b60008060008060008061285b87611f00565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061288d9088611f4f565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128bc9087611f4f565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128eb9086611ea1565b6001600160a01b03891660009081526001602052604090205561290d81612b0d565b6129178483612b96565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161295c91815260200190565b60405180910390a3505050505050505050565b60008060008060008061298187611f00565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129b39087611f4f565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129e99084611ea1565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128eb9086611ea1565b600080600080600080612a2a87611f00565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128bc9087611f4f565b600080600080600080612a6e87611f00565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612aa09088611f4f565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129b39087611f4f565b600061096a6064612aeb601354856124e090919063ffffffff16565b90611e5f565b600061096a6064612aeb601554856124e090919063ffffffff16565b6000612b17611e3c565b90506000612b2583836124e0565b30600090815260016020526040902054909150612b429082611ea1565b3060009081526001602090815260408083209390935560059052205460ff1615612b915730600090815260026020526040902054612b809084611ea1565b306000908152600260205260409020555b505050565b600c54612ba39083611f4f565b600c55600d54612bb39082611ea1565b600d555050565b600060208083528351808285015260005b81811015612be757858101830151858201604001528201612bcb565b81811115612bf9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9757600080fd5b60008060408385031215612c3757600080fd5b8235612c4281612c0f565b946020939093013593505050565b600060208284031215612c6257600080fd5b8135610cad81612c0f565b600080600060608486031215612c8257600080fd5b8335612c8d81612c0f565b92506020840135612c9d81612c0f565b929592945050506040919091013590565b600060208284031215612cc057600080fd5b5035919050565b8015158114610e9757600080fd5b60008060408385031215612ce857600080fd5b823591506020830135612cfa81612cc7565b809150509250929050565b600060208284031215612d1757600080fd5b8135610cad81612cc7565b60008060408385031215612d3557600080fd5b8235612d4081612c0f565b91506020830135612cfa81612c0f565b600181811c90821680612d6457607f821691505b60208210811415612d8557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612dd257600080fd5b5051919050565b600060208284031215612deb57600080fd5b8151610cad81612cc7565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e2657612e26612df6565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5357612e53612df6565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8257612e82612df6565b5060010190565b60008219821115612e9c57612e9c612df6565b500190565b600082612ebe57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ed557600080fd5b8151610cad81612c0f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f305784516001600160a01b031683529383019391830191600101612f0b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f6657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016392a9902c87d7fd5511f8c4348917084e0991c35ec9e1b8ef1358e4c6f123b64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806352390c021161015a57806395d89b41116100c1578063d12a76881161007a578063d12a7688146107f4578063dc4b7f2a1461080a578063dd62ed3e14610820578063ea2f0b3714610866578063f2fde38b14610886578063ffb54a99146108a657600080fd5b806395d89b4114610755578063a0ac5e191461076a578063a457c2d71461077f578063a9059cbb1461079f578063ade176f3146107bf578063c49b9a80146107d457600080fd5b806375f0a8741161011357806375f0a87414610692578063790ca413146106b25780637d1db4a5146106c857806388f82020146106de5780638da5cb5b146107175780638ea5220f1461073557600080fd5b806352390c02146105ce5780635342acb4146105ee5780635d098b38146106275780636bc87c3a1461064757806370a082311461065d578063715018a61461067d57600080fd5b80632d838119116101fe5780633b124fe7116101b75780633b124fe7146105055780633bd5d1731461051b578063437823ec1461053b5780634549b0391461055b57806349bd5a5e1461057b5780634a74bb02146105af57600080fd5b80632d8381191461044e578063313ce5671461046e578063362a3c5d14610490578063364333f4146104b05780633685d419146104c557806339509351146104e557600080fd5b806318160ddd1161025057806318160ddd146103975780631f53ac02146103ac57806323b872dd146103ce57806327a14fc2146103ee57806328c7157d1461040e57806329e04b4a1461042e57600080fd5b806306fdde0314610298578063095ea7b3146102c35780630f3a325f146102f357806313114a9d1461032c5780631694505e1461034b57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108c7565b6040516102ba9190612bba565b60405180910390f35b3480156102cf57600080fd5b506102e36102de366004612c24565b610959565b60405190151581526020016102ba565b3480156102ff57600080fd5b506102e361030e366004612c50565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561033857600080fd5b50600d545b6040519081526020016102ba565b34801561035757600080fd5b5061037f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ba565b3480156103a357600080fd5b50600b5461033d565b3480156103b857600080fd5b506103cc6103c7366004612c50565b610970565b005b3480156103da57600080fd5b506102e36103e9366004612c6d565b6109c5565b3480156103fa57600080fd5b506103cc610409366004612cae565b610a2e565b34801561041a57600080fd5b506103cc610429366004612c50565b610ae6565b34801561043a57600080fd5b506103cc610449366004612cae565b610bee565b34801561045a57600080fd5b5061033d610469366004612cae565b610c30565b34801561047a57600080fd5b5060125460405160ff90911681526020016102ba565b34801561049c57600080fd5b506103cc6104ab366004612c50565b610cb4565b3480156104bc57600080fd5b506103cc610e5e565b3480156104d157600080fd5b506103cc6104e0366004612c50565b610e9a565b3480156104f157600080fd5b506102e3610500366004612c24565b611027565b34801561051157600080fd5b5061033d60135481565b34801561052757600080fd5b506103cc610536366004612cae565b61105d565b34801561054757600080fd5b506103cc610556366004612c50565b611147565b34801561056757600080fd5b5061033d610576366004612cd5565b611195565b34801561058757600080fd5b5061037f7f000000000000000000000000145b5cb916fbd20113357a508a0a6c81bab8686e81565b3480156105bb57600080fd5b506017546102e390610100900460ff1681565b3480156105da57600080fd5b506103cc6105e9366004612c50565b611222565b3480156105fa57600080fd5b506102e3610609366004612c50565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063357600080fd5b506103cc610642366004612c50565b611375565b34801561065357600080fd5b5061033d60155481565b34801561066957600080fd5b5061033d610678366004612c50565b6113c1565b34801561068957600080fd5b506103cc611420565b34801561069e57600080fd5b5060095461037f906001600160a01b031681565b3480156106be57600080fd5b5061033d600f5481565b3480156106d457600080fd5b5061033d60185481565b3480156106ea57600080fd5b506102e36106f9366004612c50565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561072357600080fd5b506000546001600160a01b031661037f565b34801561074157600080fd5b50600a5461037f906001600160a01b031681565b34801561076157600080fd5b506102ad611494565b34801561077657600080fd5b506103cc6114a3565b34801561078b57600080fd5b506102e361079a366004612c24565b6114e6565b3480156107ab57600080fd5b506102e36107ba366004612c24565b611535565b3480156107cb57600080fd5b506103cc611542565b3480156107e057600080fd5b506103cc6107ef366004612d05565b61157c565b34801561080057600080fd5b5061033d60195481565b34801561081657600080fd5b5061033d600e5481565b34801561082c57600080fd5b5061033d61083b366004612d22565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561087257600080fd5b506103cc610881366004612c50565b6115fa565b34801561089257600080fd5b506103cc6108a1366004612c50565b611645565b3480156108b257600080fd5b50600a546102e390600160a01b900460ff1681565b6060601080546108d690612d50565b80601f016020809104026020016040519081016040528092919081815260200182805461090290612d50565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b600061096633848461172f565b5060015b92915050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260040161099a90612d8b565b60405180910390fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006109d2848484611853565b610a248433610a1f85604051806060016040528060288152602001612f80602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611e02565b61172f565b5060019392505050565b6000546001600160a01b03163314610a585760405162461bcd60e51b815260040161099a90612d8b565b69010f0cf064dd592000008111610ae15760405162461bcd60e51b815260206004820152604160248201527f4d61782077616c6c657420616d6f756e742073686f756c64206265206772656160448201527f746572207468616e20302e3525206f662074686520746f74616c20737570706c6064820152607960f81b608482015260a40161099a565b600e55565b6009546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610b3457600080fd5b505afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190612dc0565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612dd9565b5050565b6000546001600160a01b03163314610c185760405162461bcd60e51b815260040161099a90612d8b565b610c2a81670de0b6b3a7640000612e0c565b60195550565b6000600c54821115610c975760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161099a565b6000610ca1611e3c565b9050610cad8382611e5f565b9392505050565b6000546001600160a01b03163314610cde5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526007602052604090205460ff16610d465760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161099a565b60005b600854811015610bea57816001600160a01b031660088281548110610d7057610d70612e2b565b6000918252602090912001546001600160a01b03161415610e4c5760088054610d9b90600190612e41565b81548110610dab57610dab612e2b565b600091825260209091200154600880546001600160a01b039092169183908110610dd757610dd7612e2b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610e2657610e26612e58565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5681612e6e565b915050610d49565b6009546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610e97573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610ec45760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526005602052604090205460ff16610f2c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b60005b600654811015610bea57816001600160a01b031660068281548110610f5657610f56612e2b565b6000918252602090912001546001600160a01b031614156110155760068054610f8190600190612e41565b81548110610f9157610f91612e2b565b600091825260209091200154600680546001600160a01b039092169183908110610fbd57610fbd612e2b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610e2657610e26612e58565b8061101f81612e6e565b915050610f2f565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610966918590610a1f9086611ea1565b3360008181526005602052604090205460ff16156110d25760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161099a565b60006110dd83611f00565b505050506001600160a01b03841660009081526001602052604090205491925061110991905082611f4f565b6001600160a01b038316600090815260016020526040902055600c5461112f9082611f4f565b600c55600d5461113f9084611ea1565b600d55505050565b6000546001600160a01b031633146111715760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600b548311156111e95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161099a565b816112085760006111f984611f00565b5093955061096a945050505050565b600061121384611f00565b5092955061096a945050505050565b6000546001600160a01b0316331461124c5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03811660009081526005602052604090205460ff16156112b55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161099a565b6001600160a01b0381166000908152600160205260409020541561130f576001600160a01b0381166000908152600160205260409020546112f590610c30565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461139f5760405162461bcd60e51b815260040161099a90612d8b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156113fe57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461096a90610c30565b6000546001600160a01b0316331461144a5760405162461bcd60e51b815260040161099a90612d8b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601180546108d690612d50565b6000546001600160a01b031633146114cd5760405162461bcd60e51b815260040161099a90612d8b565b600a805460ff60a01b1916600160a01b17905542600f55565b60006109663384610a1f85604051806060016040528060258152602001612fa8602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190611e02565b6000610966338484611853565b6000546001600160a01b0316331461156c5760405162461bcd60e51b815260040161099a90612d8b565b69d3c21bcecceda1000000601855565b6000546001600160a01b031633146115a65760405162461bcd60e51b815260040161099a90612d8b565b601780548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906115ef90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116245760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461166f5760405162461bcd60e51b815260040161099a90612d8b565b6001600160a01b0381166116d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161099a565b6001600160a01b0382166117f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161099a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118b75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161099a565b6001600160a01b0382166119195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161099a565b6000811161197b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161099a565b6001600160a01b03821660009081526007602052604090205460ff16156119de5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b3360009081526007602052604090205460ff1615611a385760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015260640161099a565b6000546001600160a01b03848116911614801590611a6457506000546001600160a01b03838116911614155b15611acc57601854811115611acc5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161099a565b6000546001600160a01b03838116911614801590611b1b57507f000000000000000000000000145b5cb916fbd20113357a508a0a6c81bab8686e6001600160a01b0316836001600160a01b0316145b15611ba1576000611b2b836113c1565b600e54909150611b3b8383612e89565b1115611b9f5760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722065786365656473206d6178696d756d2077616c6c65742060448201526c3a37b5b2b71030b6b7bab73a1760991b606482015260840161099a565b505b7f000000000000000000000000145b5cb916fbd20113357a508a0a6c81bab8686e6001600160a01b0316836001600160a01b0316148015611c1457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c3957506001600160a01b03821660009081526004602052604090205460ff16155b15611d0757600a54600160a01b900460ff16611c975760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161099a565b600f54421415611d07576001600160a01b0382166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b03191690911790555b6000611d12306113c1565b90506018548110611d2257506018545b60195481108015908190611d39575060175460ff16155b8015611d7757507f000000000000000000000000145b5cb916fbd20113357a508a0a6c81bab8686e6001600160a01b0316856001600160a01b031614155b8015611d8a5750601754610100900460ff165b15611da357611d98306113c1565b9150611da382611f91565b6001600160a01b03851660009081526004602052604090205460019060ff1680611de557506001600160a01b03851660009081526004602052604090205460ff165b15611dee575060005b611dfa868686846120f6565b505050505050565b60008184841115611e265760405162461bcd60e51b815260040161099a9190612bba565b506000611e338486612e41565b95945050505050565b6000806000611e4961229e565b9092509050611e588282611e5f565b9250505090565b6000610cad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612420565b600080611eae8385612e89565b905083811015610cad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161099a565b6000806000806000806000806000611f178a61244e565b9250925092506000806000611f358d8686611f30611e3c565b612490565b919f909e50909c50959a5093985091965092945050505050565b6000610cad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e02565b6017805460ff191660011790556000611fb66005611fb0846006611e5f565b906124e0565b90506000611fc48383611f4f565b905047611fd08361255f565b6000611fdc4783611f4f565b90506000611ff06002611fb0846005611e5f565b6009546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561202b573d6000803e3d6000fd5b5060006120388383611f4f565b9050600061204c6002611fb0846003611e5f565b600a546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612087573d6000803e3d6000fd5b5060006120948383611f4f565b90506120a08782612726565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506017805460ff1916905550505050505050565b600a54600160a01b900460ff16612121576000546001600160a01b0385811691161461212157600080fd5b8061212e5761212e61281b565b6001600160a01b03841660009081526005602052604090205460ff16801561216f57506001600160a01b03831660009081526005602052604090205460ff16155b156121845761217f848484612849565b612282565b6001600160a01b03841660009081526005602052604090205460ff161580156121c557506001600160a01b03831660009081526005602052604090205460ff165b156121d55761217f84848461296f565b6001600160a01b03841660009081526005602052604090205460ff1615801561221757506001600160a01b03831660009081526005602052604090205460ff16155b156122275761217f848484612a18565b6001600160a01b03841660009081526005602052604090205460ff16801561226757506001600160a01b03831660009081526005602052604090205460ff165b156122775761217f848484612a5c565b612282848484612a18565b8061229857612298601454601355601654601555565b50505050565b600c54600b546000918291825b6006548110156123f0578260016000600684815481106122cd576122cd612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612338575081600260006006848154811061231157612311612e2b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561234e57600c54600b54945094505050509091565b612394600160006006848154811061236857612368612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f4f565b92506123dc60026000600684815481106123b0576123b0612e2b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f4f565b9150806123e881612e6e565b9150506122ab565b50600b54600c5461240091611e5f565b82101561241757600c54600b549350935050509091565b90939092509050565b600081836124415760405162461bcd60e51b815260040161099a9190612bba565b506000611e338486612ea1565b60008060008061245d85612acf565b9050600061246a86612af1565b905060006124828261247c8986611f4f565b90611f4f565b979296509094509092505050565b600080808061249f88866124e0565b905060006124ad88876124e0565b905060006124bb88886124e0565b905060006124cd8261247c8686611f4f565b939b939a50919850919650505050505050565b6000826124ef5750600061096a565b60006124fb8385612e0c565b9050826125088583612ea1565b14610cad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161099a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061259457612594612e2b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561260d57600080fd5b505afa158015612621573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126459190612ec3565b8160018151811061265857612658612e2b565b60200260200101906001600160a01b031690816001600160a01b0316815250506126a3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461172f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126f8908590600090869030904290600401612ee0565b600060405180830381600087803b15801561271257600080fd5b505af1158015611dfa573d6000803e3d6000fd5b612751307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461172f565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b1580156127db57600080fd5b505af11580156127ef573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128149190612f51565b5050505050565b60135415801561282b5750601554155b1561283257565b601380546014556015805460165560009182905555565b60008060008060008061285b87611f00565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061288d9088611f4f565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546128bc9087611f4f565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546128eb9086611ea1565b6001600160a01b03891660009081526001602052604090205561290d81612b0d565b6129178483612b96565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161295c91815260200190565b60405180910390a3505050505050505050565b60008060008060008061298187611f00565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506129b39087611f4f565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546129e99084611ea1565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546128eb9086611ea1565b600080600080600080612a2a87611f00565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506128bc9087611f4f565b600080600080600080612a6e87611f00565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612aa09088611f4f565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546129b39087611f4f565b600061096a6064612aeb601354856124e090919063ffffffff16565b90611e5f565b600061096a6064612aeb601554856124e090919063ffffffff16565b6000612b17611e3c565b90506000612b2583836124e0565b30600090815260016020526040902054909150612b429082611ea1565b3060009081526001602090815260408083209390935560059052205460ff1615612b915730600090815260026020526040902054612b809084611ea1565b306000908152600260205260409020555b505050565b600c54612ba39083611f4f565b600c55600d54612bb39082611ea1565b600d555050565b600060208083528351808285015260005b81811015612be757858101830151858201604001528201612bcb565b81811115612bf9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610e9757600080fd5b60008060408385031215612c3757600080fd5b8235612c4281612c0f565b946020939093013593505050565b600060208284031215612c6257600080fd5b8135610cad81612c0f565b600080600060608486031215612c8257600080fd5b8335612c8d81612c0f565b92506020840135612c9d81612c0f565b929592945050506040919091013590565b600060208284031215612cc057600080fd5b5035919050565b8015158114610e9757600080fd5b60008060408385031215612ce857600080fd5b823591506020830135612cfa81612cc7565b809150509250929050565b600060208284031215612d1757600080fd5b8135610cad81612cc7565b60008060408385031215612d3557600080fd5b8235612d4081612c0f565b91506020830135612cfa81612c0f565b600181811c90821680612d6457607f821691505b60208210811415612d8557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612dd257600080fd5b5051919050565b600060208284031215612deb57600080fd5b8151610cad81612cc7565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e2657612e26612df6565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5357612e53612df6565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8257612e82612df6565b5060010190565b60008219821115612e9c57612e9c612df6565b500190565b600082612ebe57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612ed557600080fd5b8151610cad81612c0f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f305784516001600160a01b031683529383019391830191600101612f0b565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f6657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016392a9902c87d7fd5511f8c4348917084e0991c35ec9e1b8ef1358e4c6f123b64736f6c63430008090033

Deployed Bytecode Sourcemap

14732:20666:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17507:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18419:161;;;;;;;;;;-1:-1:-1;18419:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;18419:161:0;1072:187:1;23236:106:0;;;;;;;;;;-1:-1:-1;23236:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;23316:18:0;23292:4;23316:18;;;:9;:18;;;;;;;;;23236:106;19540:87;;;;;;;;;;-1:-1:-1;19609:10:0;;19540:87;;;1662:25:1;;;1650:2;1635:18;19540:87:0;1516:177:1;16076:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;16076:51:0;1698:230:1;17784:95:0;;;;;;;;;;-1:-1:-1;17864:7:0;;17784:95;;22708:112;;;;;;;;;;-1:-1:-1;22708:112:0;;;;;:::i;:::-;;:::i;:::-;;18588:313;;;;;;;;;;-1:-1:-1;18588:313:0;;;;;:::i;:::-;;:::i;23973:245::-;;;;;;;;;;-1:-1:-1;23973:245:0;;;;;:::i;:::-;;:::i;24226:150::-;;;;;;;;;;-1:-1:-1;24226:150:0;;;;;:::i;:::-;;:::i;22940:161::-;;;;;;;;;;-1:-1:-1;22940:161:0;;;;;:::i;:::-;;:::i;20464:253::-;;;;;;;;;;-1:-1:-1;20464:253:0;;;;;:::i;:::-;;:::i;17693:83::-;;;;;;;;;;-1:-1:-1;17759:9:0;;17693:83;;17759:9;;;;2986:36:1;;2974:2;2959:18;17693:83:0;2844:184:1;23350:480:0;;;;;;;;;;-1:-1:-1;23350:480:0;;;;;:::i;:::-;;:::i;23113:111::-;;;;;;;;;;;;;:::i;21180:479::-;;;;;;;;;;-1:-1:-1;21180:479:0;;;;;:::i;:::-;;:::i;18909:218::-;;;;;;;;;;-1:-1:-1;18909:218:0;;;;;:::i;:::-;;:::i;15887:26::-;;;;;;;;;;;;;;;;19635:377;;;;;;;;;;-1:-1:-1;19635:377:0;;;;;:::i;:::-;;:::i;22323:111::-;;;;;;;;;;-1:-1:-1;22323:111:0;;;;;:::i;:::-;;:::i;20020:436::-;;;;;;;;;;-1:-1:-1;20020:436:0;;;;;:::i;:::-;;:::i;16134:38::-;;;;;;;;;;;;;;;16213:40;;;;;;;;;;-1:-1:-1;16213:40:0;;;;;;;;;;;20725:447;;;;;;;;;;-1:-1:-1;20725:447:0;;;;;:::i;:::-;;:::i;27872:123::-;;;;;;;;;;-1:-1:-1;27872:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;27960:27:0;27936:4;27960:27;;;:18;:27;;;;;;;;;27872:123;22564:136;;;;;;;;;;-1:-1:-1;22564:136:0;;;;;:::i;:::-;;:::i;15974:33::-;;;;;;;;;;;;;;;;17887:198;;;;;;;;;;-1:-1:-1;17887:198:0;;;;;:::i;:::-;;:::i;6344:148::-;;;;;;;;;;;;;:::i;15271:84::-;;;;;;;;;;-1:-1:-1;15271:84:0;;;;-1:-1:-1;;;;;15271:84:0;;;15728:25;;;;;;;;;;;;;;;;16266:44;;;;;;;;;;;;;;;;19412:120;;;;;;;;;;-1:-1:-1;19412:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19504:20:0;19480:4;19504:20;;;:11;:20;;;;;;;;;19412:120;6130:79;;;;;;;;;;-1:-1:-1;6168:7:0;6195:6;-1:-1:-1;;;;;6195:6:0;6130:79;;15359:78;;;;;;;;;;-1:-1:-1;15359:78:0;;;;-1:-1:-1;;;;;15359:78:0;;;17598:87;;;;;;;;;;;;;:::i;23838:123::-;;;;;;;;;;;;;:::i;19135:269::-;;;;;;;;;;-1:-1:-1;19135:269:0;;;;;:::i;:::-;;:::i;18093:167::-;;;;;;;;;;-1:-1:-1;18093:167:0;;;;;:::i;:::-;;:::i;22828:100::-;;;;;;;;;;;;;:::i;24388:171::-;;;;;;;;;;-1:-1:-1;24388:171:0;;;;;:::i;:::-;;:::i;16317:59::-;;;;;;;;;;;;;;;;15674:47;;;;;;;;;;;;;;;;18268:143;;;;;;;;;;-1:-1:-1;18268:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18376:18:0;;;18349:7;18376:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18268:143;22446:110;;;;;;;;;;-1:-1:-1;22446:110:0;;;;;:::i;:::-;;:::i;6500:244::-;;;;;;;;;;-1:-1:-1;6500:244:0;;;;;:::i;:::-;;:::i;15444:31::-;;;;;;;;;;-1:-1:-1;15444:31:0;;;;-1:-1:-1;;;15444:31:0;;;;;;17507:83;17544:13;17577:5;17570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17507:83;:::o;18419:161::-;18494:4;18511:39;2546:10;18534:7;18543:6;18511:8;:39::i;:::-;-1:-1:-1;18568:4:0;18419:161;;;;;:::o;22708:112::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;;;;;;;;;22784:9:::1;:28:::0;;-1:-1:-1;;;;;;22784:28:0::1;-1:-1:-1::0;;;;;22784:28:0;;;::::1;::::0;;;::::1;::::0;;22708:112::o;18588:313::-;18686:4;18703:36;18713:6;18721:9;18732:6;18703:9;:36::i;:::-;18750:121;18759:6;2546:10;18781:89;18819:6;18781:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18781:19:0;;;;;;:11;:19;;;;;;;;2546:10;18781:33;;;;;;;;;;:37;:89::i;:::-;18750:8;:121::i;:::-;-1:-1:-1;18889:4:0;18588:313;;;;;:::o;23973:245::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;24082:13:::1;24063:16;:32;24055:110;;;::::0;-1:-1:-1;;;24055:110:0;;5265:2:1;24055:110:0::1;::::0;::::1;5247:21:1::0;5304:2;5284:18;;;5277:30;5343:34;5323:18;;;5316:62;5414:34;5394:18;;;5387:62;-1:-1:-1;;;5465:19:1;;;5458:32;5507:19;;24055:110:0::1;5063:469:1::0;24055:110:0::1;24176:15;:34:::0;23973:245::o;24226:150::-;24313:15;;24330:37;;-1:-1:-1;;;24330:37:0;;24361:4;24330:37;;;1871:51:1;-1:-1:-1;;;;;24291:21:0;;;;;;24313:15;;;24291:21;;24330:22;;1844:18:1;;24330:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24291:77;;-1:-1:-1;;;;;;24291:77:0;;;;;;;-1:-1:-1;;;;;5918:32:1;;;24291:77:0;;;5900:51:1;5967:18;;;5960:34;5873:18;;24291:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24226:150;:::o;22940:161::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;23065:28:::1;:19:::0;23087:6:::1;23065:28;:::i;:::-;23033:29;:60:::0;-1:-1:-1;22940:161:0:o;20464:253::-;20530:7;20569;;20558;:18;;20550:73;;;;-1:-1:-1;;;20550:73:0;;6762:2:1;20550:73:0;;;6744:21:1;6801:2;6781:18;;;6774:30;6840:34;6820:18;;;6813:62;-1:-1:-1;;;6891:18:1;;;6884:40;6941:19;;20550:73:0;6560:406:1;20550:73:0;20634:19;20657:10;:8;:10::i;:::-;20634:33;-1:-1:-1;20685:24:0;:7;20634:33;20685:11;:24::i;:::-;20678:31;20464:253;-1:-1:-1;;;20464:253:0:o;23350:480::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23429:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;23421:57;;;::::0;-1:-1:-1;;;23421:57:0;;7173:2:1;23421:57:0::1;::::0;::::1;7155:21:1::0;7212:2;7192:18;;;7185:30;7251:28;7231:18;;;7224:56;7297:18;;23421:57:0::1;6971:350:1::0;23421:57:0::1;23494:9;23489:334;23513:17;:24:::0;23509:28;::::1;23489:334;;;23587:7;-1:-1:-1::0;;;;;23563:31:0::1;:17;23581:1;23563:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23563:20:0::1;:31;23559:253;;;23638:17;23656:24:::0;;:28:::1;::::0;23683:1:::1;::::0;23656:28:::1;:::i;:::-;23638:47;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23615:17:::1;:20:::0;;-1:-1:-1;;;;;23638:47:0;;::::1;::::0;23633:1;;23615:20;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;23615:70:0::1;-1:-1:-1::0;;;;;23615:70:0;;::::1;;::::0;;23704:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;23704:26:0::1;::::0;;23749:17:::1;:23:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23749:23:0;;;;;-1:-1:-1;;;;;;23749:23:0::1;::::0;;;;;24291:77;24226:150;:::o;23559:253::-:1;23539:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23489:334;;23113:111:::0;23168:15;;23160:56;;-1:-1:-1;;;;;23168:15:0;;;;23194:21;23160:56;;;;;23168:15;23160:56;23168:15;23160:56;23194:21;23168:15;23160:56;;;;;;;;;;;;;;;;;;;;;23113:111::o;21180:479::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21262:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21254:60;;;::::0;-1:-1:-1;;;21254:60:0;;8062:2:1;21254:60:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;21254:60:0::1;7860:351:1::0;21254:60:0::1;21330:9;21325:327;21349:9;:16:::0;21345:20;::::1;21325:327;;;21407:7;-1:-1:-1::0;;;;;21391:23:0::1;:9;21401:1;21391:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21391:12:0::1;:23;21387:254;;;21450:9;21460:16:::0;;:20:::1;::::0;21479:1:::1;::::0;21460:20:::1;:::i;:::-;21450:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21435:9:::1;:12:::0;;-1:-1:-1;;;;;21450:31:0;;::::1;::::0;21445:1;;21435:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21435:46:0::1;-1:-1:-1::0;;;;;21435:46:0;;::::1;;::::0;;21500:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21539:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21539:28:0::1;::::0;;21586:9:::1;:15:::0;;;::::1;;;;:::i;21387:254::-;21367:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21325:327;;18909:218:::0;2546:10;18997:4;19046:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19046:34:0;;;;;;;;;;18997:4;;19014:83;;19037:7;;19046:50;;19085:10;19046:38;:50::i;19635:377::-;2546:10;19687:14;19736:19;;;:11;:19;;;;;;;;19735:20;19727:77;;;;-1:-1:-1;;;19727:77:0;;8418:2:1;19727:77:0;;;8400:21:1;8457:2;8437:18;;;8430:30;8496:34;8476:18;;;8469:62;-1:-1:-1;;;8547:18:1;;;8540:42;8599:19;;19727:77:0;8216:408:1;19727:77:0;19816:15;19840:19;19851:7;19840:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19888:15:0;;;;;;:7;:15;;;;;;19815:44;;-1:-1:-1;19888:28:0;;:15;-1:-1:-1;19815:44:0;19888:19;:28::i;:::-;-1:-1:-1;;;;;19870:15:0;;;;;;:7;:15;;;;;:46;19937:7;;:20;;19949:7;19937:11;:20::i;:::-;19927:7;:30;19981:10;;:23;;19996:7;19981:14;:23::i;:::-;19968:10;:36;-1:-1:-1;;;19635:377:0:o;22323:111::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22392:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;22392:34:0::1;22422:4;22392:34;::::0;;22323:111::o;20020:436::-;20110:7;20149;;20138;:18;;20130:62;;;;-1:-1:-1;;;20130:62:0;;8831:2:1;20130:62:0;;;8813:21:1;8870:2;8850:18;;;8843:30;8909:33;8889:18;;;8882:61;8960:18;;20130:62:0;8629:355:1;20130:62:0;20208:17;20203:246;;20243:15;20267:19;20278:7;20267:10;:19::i;:::-;-1:-1:-1;20242:44:0;;-1:-1:-1;20301:14:0;;-1:-1:-1;;;;;20301:14:0;20203:246;20350:23;20381:19;20392:7;20381:10;:19::i;:::-;-1:-1:-1;20348:52:0;;-1:-1:-1;20415:22:0;;-1:-1:-1;;;;;20415:22:0;20725:447;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20922:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20921:21;20913:61;;;::::0;-1:-1:-1;;;20913:61:0;;8062:2:1;20913:61:0::1;::::0;::::1;8044:21:1::0;8101:2;8081:18;;;8074:30;8140:29;8120:18;;;8113:57;8187:18;;20913:61:0::1;7860:351:1::0;20913:61:0::1;-1:-1:-1::0;;;;;20988:16:0;::::1;21007:1;20988:16:::0;;;:7:::1;:16;::::0;;;;;:20;20985:108:::1;;-1:-1:-1::0;;;;;21064:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21044:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21025:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20985:108:::1;-1:-1:-1::0;;;;;21103:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21103:27:0::1;21126:4;21103:27:::0;;::::1;::::0;;;21141:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21141:23:0::1;::::0;;::::1;::::0;;20725:447::o;22564:136::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;22652:15:::1;:40:::0;;-1:-1:-1;;;;;;22652:40:0::1;-1:-1:-1::0;;;;;22652:40:0;;;::::1;::::0;;;::::1;::::0;;22564:136::o;17887:198::-;-1:-1:-1;;;;;17977:20:0;;17953:7;17977:20;;;:11;:20;;;;;;;;17973:49;;;-1:-1:-1;;;;;;18006:16:0;;;;;:7;:16;;;;;;;17887:198::o;17973:49::-;-1:-1:-1;;;;;18060:16:0;;;;;;:7;:16;;;;;;18040:37;;:19;:37::i;6344:148::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;6451:1:::1;6435:6:::0;;6414:40:::1;::::0;-1:-1:-1;;;;;6435:6:0;;::::1;::::0;6414:40:::1;::::0;6451:1;;6414:40:::1;6482:1;6465:19:::0;;-1:-1:-1;;;;;;6465:19:0::1;::::0;;6344:148::o;17598:87::-;17637:13;17670:7;17663:14;;;;;:::i;23838:123::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;23896:11:::1;:18:::0;;-1:-1:-1;;;;23896:18:0::1;-1:-1:-1::0;;;23896:18:0::1;::::0;;23938:15:::1;23925:10;:28:::0;23838:123::o;19135:269::-;19228:4;19245:129;2546:10;19268:7;19277:96;19316:15;19277:96;;;;;;;;;;;;;;;;;2546:10;19277:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19277:34:0;;;;;;;;;;;;:38;:96::i;18093:167::-;18171:4;18188:42;2546:10;18212:9;18223:6;18188:9;:42::i;22828:100::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;22904:16:::1;22889:12;:31:::0;22828:100::o;24388:171::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;24465:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;24465:32:0;;::::1;;::::0;;24513:38:::1;::::0;::::1;::::0;::::1;::::0;24489:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;24513:38:0::1;;;;;;;;24388:171:::0;:::o;22446:110::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22513:27:0::1;22543:5;22513:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;22513:35:0::1;::::0;;22446:110::o;6500:244::-;6257:6;;-1:-1:-1;;;;;6257:6:0;2546:10;6257:22;6249:67;;;;-1:-1:-1;;;6249:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6589:22:0;::::1;6581:73;;;::::0;-1:-1:-1;;;6581:73:0;;9191:2:1;6581:73:0::1;::::0;::::1;9173:21:1::0;9230:2;9210:18;;;9203:30;9269:34;9249:18;;;9242:62;-1:-1:-1;;;9320:18:1;;;9313:36;9366:19;;6581:73:0::1;8989:402:1::0;6581:73:0::1;6691:6;::::0;;6670:38:::1;::::0;-1:-1:-1;;;;;6670:38:0;;::::1;::::0;6691:6;::::1;::::0;6670:38:::1;::::0;::::1;6719:6;:17:::0;;-1:-1:-1;;;;;;6719:17:0::1;-1:-1:-1::0;;;;;6719:17:0;;;::::1;::::0;;;::::1;::::0;;6500:244::o;28003:337::-;-1:-1:-1;;;;;28096:19:0;;28088:68;;;;-1:-1:-1;;;28088:68:0;;9598:2:1;28088:68:0;;;9580:21:1;9637:2;9617:18;;;9610:30;9676:34;9656:18;;;9649:62;-1:-1:-1;;;9727:18:1;;;9720:34;9771:19;;28088:68:0;9396:400:1;28088:68:0;-1:-1:-1;;;;;28175:21:0;;28167:68;;;;-1:-1:-1;;;28167:68:0;;10003:2:1;28167:68:0;;;9985:21:1;10042:2;10022:18;;;10015:30;10081:34;10061:18;;;10054:62;-1:-1:-1;;;10132:18:1;;;10125:32;10174:19;;28167:68:0;9801:398:1;28167:68:0;-1:-1:-1;;;;;28248:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28300:32;;1662:25:1;;;28300:32:0;;1635:18:1;28300:32:0;;;;;;;28003:337;;;:::o;28348:2323::-;-1:-1:-1;;;;;28470:18:0;;28462:68;;;;-1:-1:-1;;;28462:68:0;;10406:2:1;28462:68:0;;;10388:21:1;10445:2;10425:18;;;10418:30;10484:34;10464:18;;;10457:62;-1:-1:-1;;;10535:18:1;;;10528:35;10580:19;;28462:68:0;10204:401:1;28462:68:0;-1:-1:-1;;;;;28549:16:0;;28541:64;;;;-1:-1:-1;;;28541:64:0;;10812:2:1;28541:64:0;;;10794:21:1;10851:2;10831:18;;;10824:30;10890:34;10870:18;;;10863:62;-1:-1:-1;;;10941:18:1;;;10934:33;10984:19;;28541:64:0;10610:399:1;28541:64:0;28633:1;28624:6;:10;28616:64;;;;-1:-1:-1;;;28616:64:0;;11216:2:1;28616:64:0;;;11198:21:1;11255:2;11235:18;;;11228:30;11294:34;11274:18;;;11267:62;-1:-1:-1;;;11345:18:1;;;11338:39;11394:19;;28616:64:0;11014:405:1;28616:64:0;-1:-1:-1;;;;;28700:13:0;;;;;;:9;:13;;;;;;;;28699:14;28691:50;;;;-1:-1:-1;;;28691:50:0;;11626:2:1;28691:50:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28691:50:0;11424:347:1;28691:50:0;28771:10;28761:21;;;;:9;:21;;;;;;;;28760:22;28752:58;;;;-1:-1:-1;;;28752:58:0;;11626:2:1;28752:58:0;;;11608:21:1;11665:2;11645:18;;;11638:30;-1:-1:-1;;;11684:18:1;;;11677:53;11747:18;;28752:58:0;11424:347:1;28752:58:0;6168:7;6195:6;-1:-1:-1;;;;;28824:15:0;;;6195:6;;28824:15;;;;:32;;-1:-1:-1;6168:7:0;6195:6;-1:-1:-1;;;;;28843:13:0;;;6195:6;;28843:13;;28824:32;28821:125;;;28889:12;;28879:6;:22;;28871:75;;;;-1:-1:-1;;;28871:75:0;;11978:2:1;28871:75:0;;;11960:21:1;12017:2;11997:18;;;11990:30;12056:34;12036:18;;;12029:62;-1:-1:-1;;;12107:18:1;;;12100:38;12155:19;;28871:75:0;11776:404:1;28871:75:0;6168:7;6195:6;-1:-1:-1;;;;;28971:13:0;;;6195:6;;28971:13;;;;:38;;;28996:13;-1:-1:-1;;;;;28988:21:0;:4;-1:-1:-1;;;;;28988:21:0;;28971:38;28967:277;;;29026:24;29053:13;29063:2;29053:9;:13::i;:::-;29136:15;;29026:40;;-1:-1:-1;29107:25:0;29126:6;29026:40;29107:25;:::i;:::-;:44;;29081:151;;;;-1:-1:-1;;;29081:151:0;;12520:2:1;29081:151:0;;;12502:21:1;12559:2;12539:18;;;12532:30;12598:34;12578:18;;;12571:62;-1:-1:-1;;;12649:18:1;;;12642:43;12702:19;;29081:151:0;12318:409:1;29081:151:0;29011:233;28967:277;29285:13;-1:-1:-1;;;;;29277:21:0;:4;-1:-1:-1;;;;;29277:21:0;;:55;;;;;29316:15;-1:-1:-1;;;;;29302:30:0;:2;-1:-1:-1;;;;;29302:30:0;;;29277:55;:82;;;;-1:-1:-1;;;;;;29337:22:0;;;;;;:18;:22;;;;;;;;29336:23;29277:82;29273:337;;;29384:11;;-1:-1:-1;;;29384:11:0;;;;29376:48;;;;-1:-1:-1;;;29376:48:0;;12934:2:1;29376:48:0;;;12916:21:1;12973:2;12953:18;;;12946:30;13012:26;12992:18;;;12985:54;13056:18;;29376:48:0;12732:348:1;29376:48:0;29487:10;;29468:15;:29;29464:135;;;-1:-1:-1;;;;;29518:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;29518:20:0;29534:4;29518:20;;;;;;29557:17;:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;29557:26:0;;;;;;29464:135;29626:28;29657:24;29675:4;29657:9;:24::i;:::-;29626:55;;29729:12;;29705:20;:36;29702:112;;-1:-1:-1;29790:12:0;;29702:112;29885:29;;29861:53;;;;;;;29943;;-1:-1:-1;29980:16:0;;;;29979:17;29943:53;:91;;;;;30021:13;-1:-1:-1;;;;;30013:21:0;:4;-1:-1:-1;;;;;30013:21:0;;;29943:91;:129;;;;-1:-1:-1;30051:21:0;;;;;;;29943:129;29925:313;;;30122:24;30140:4;30122:9;:24::i;:::-;30099:47;;30190:36;30205:20;30190:14;:36::i;:::-;-1:-1:-1;;;;;30446:24:0;;30319:12;30446:24;;;:18;:24;;;;;;30334:4;;30446:24;;;:50;;-1:-1:-1;;;;;;30474:22:0;;;;;;:18;:22;;;;;;;;30446:50;30443:96;;;-1:-1:-1;30522:5:0;30443:96;30625:38;30640:4;30645:2;30648:6;30655:7;30625:14;:38::i;:::-;28451:2220;;;28348:2323;;;:::o;1239:192::-;1325:7;1361:12;1353:6;;;;1345:29;;;;-1:-1:-1;;;1345:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1385:9:0;1397:5;1401:1;1397;:5;:::i;:::-;1385:17;1239:192;-1:-1:-1;;;;;1239:192:0:o;26022:163::-;26063:7;26084:15;26101;26120:19;:17;:19::i;:::-;26083:56;;-1:-1:-1;26083:56:0;-1:-1:-1;26157:20:0;26083:56;;26157:11;:20::i;:::-;26150:27;;;;26022:163;:::o;1702:132::-;1760:7;1787:39;1791:1;1794;1787:39;;;;;;;;;;;;;;;;;:3;:39::i;905:181::-;963:7;;995:5;999:1;995;:5;:::i;:::-;983:17;;1024:1;1019;:6;;1011:46;;;;-1:-1:-1;;;1011:46:0;;13287:2:1;1011:46:0;;;13269:21:1;13326:2;13306:18;;;13299:30;13365:29;13345:18;;;13338:57;13412:18;;1011:46:0;13085:351:1;24820:419:0;24879:7;24888;24897;24906;24915;24924;24945:23;24970:12;24984:18;25006:20;25018:7;25006:11;:20::i;:::-;24944:82;;;;;;25038:15;25055:23;25080:12;25096:50;25108:7;25117:4;25123:10;25135;:8;:10::i;:::-;25096:11;:50::i;:::-;25037:109;;;;-1:-1:-1;25037:109:0;;-1:-1:-1;25197:15:0;;-1:-1:-1;25214:4:0;;-1:-1:-1;25220:10:0;;-1:-1:-1;24820:419:0;;-1:-1:-1;;;;;24820:419:0:o;1094:136::-;1152:7;1179:43;1183:1;1186;1179:43;;;;;;;;;;;;;;;;;:3;:43::i;30681:852::-;16683:16;:23;;-1:-1:-1;;16683:23:0;16702:4;16683:23;;;:16;30789:34:::1;30821:1;30789:27;:20:::0;30814:1:::1;30789:24;:27::i;:::-;:31:::0;::::1;:34::i;:::-;30766:57:::0;-1:-1:-1;30834:16:0::1;30853:38;:20:::0;30766:57;30853:24:::1;:38::i;:::-;30834:57:::0;-1:-1:-1;30927:21:0::1;30959:30;30976:12:::0;30959:16:::1;:30::i;:::-;31001:18;31022:41;:21;31048:14:::0;31022:25:::1;:41::i;:::-;31001:62:::0;-1:-1:-1;31074:22:0::1;31099:24;31121:1;31099:17;31001:62:::0;31114:1:::1;31099:14;:17::i;:24::-;31142:15;::::0;31134:49:::1;::::0;31074;;-1:-1:-1;;;;;;31142:15:0::1;::::0;31134:49;::::1;;;::::0;31074;;31142:15:::1;31134:49:::0;31142:15;31134:49;31074;31142:15;31134:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31188:26:0::1;31217:30;:10:::0;31232:14;31217::::1;:30::i;:::-;31188:59:::0;-1:-1:-1;31252:16:0::1;31271:32;31301:1;31271:25;31188:59:::0;31294:1:::1;31271:22;:25::i;:32::-;31316:9;::::0;31308:37:::1;::::0;31252:51;;-1:-1:-1;;;;;;31316:9:0::1;::::0;31308:37;::::1;;;::::0;31252:51;;31316:9:::1;31308:37:::0;31316:9;31308:37;31252:51;31316:9;31308:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31350:23:0::1;31376:32;:18:::0;31399:8;31376:22:::1;:32::i;:::-;31350:58;;31419:39;31432:8;31442:15;31419:12;:39::i;:::-;31474:51;::::0;;13643:25:1;;;13699:2;13684:18;;13677:34;;;13727:18;;;13720:34;;;31474:51:0::1;::::0;13631:2:1;13616:18;31474:51:0::1;;;;;;;-1:-1:-1::0;;16729:16:0;:24;;-1:-1:-1;;16729:24:0;;;-1:-1:-1;;;;;;;30681:852:0:o;32740:975::-;32851:11;;-1:-1:-1;;;32851:11:0;;;;32847:117;;6168:7;6195:6;-1:-1:-1;;;;;32886:17:0;;;6195:6;;32886:17;32878:26;;;;;;32988:7;32984:40;;33010:14;:12;:14::i;:::-;-1:-1:-1;;;;;33053:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;33077:22:0;;;;;;:11;:22;;;;;;;;33076:23;33053:46;33049:597;;;33116:48;33138:6;33146:9;33157:6;33116:21;:48::i;:::-;33049:597;;;-1:-1:-1;;;;;33187:19:0;;;;;;:11;:19;;;;;;;;33186:20;:46;;;;-1:-1:-1;;;;;;33210:22:0;;;;;;:11;:22;;;;;;;;33186:46;33182:464;;;33249:46;33269:6;33277:9;33288:6;33249:19;:46::i;33182:464::-;-1:-1:-1;;;;;33318:19:0;;;;;;:11;:19;;;;;;;;33317:20;:47;;;;-1:-1:-1;;;;;;33342:22:0;;;;;;:11;:22;;;;;;;;33341:23;33317:47;33313:333;;;33381:44;33399:6;33407:9;33418:6;33381:17;:44::i;33313:333::-;-1:-1:-1;;;;;33447:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;33470:22:0;;;;;;:11;:22;;;;;;;;33447:45;33443:203;;;33509:48;33531:6;33539:9;33550:6;33509:21;:48::i;33443:203::-;33590:44;33608:6;33616:9;33627:6;33590:17;:44::i;:::-;33670:7;33666:41;;33692:15;27789;;27779:7;:25;27831:21;;27815:13;:37;27735:125;33692:15;32740:975;;;;:::o;26193:561::-;26290:7;;26326;;26243;;;;;26350:289;26374:9;:16;26370:20;;26350:289;;;26440:7;26416;:21;26424:9;26434:1;26424:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26424:12:0;26416:21;;;;;;;;;;;;;:31;;:66;;;26475:7;26451;:21;26459:9;26469:1;26459:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26459:12:0;26451:21;;;;;;;;;;;;;:31;26416:66;26412:97;;;26492:7;;26501;;26484:25;;;;;;;26193:561;;:::o;26412:97::-;26534:34;26546:7;:21;26554:9;26564:1;26554:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26554:12:0;26546:21;;;;;;;;;;;;;26534:7;;:11;:34::i;:::-;26524:44;;26593:34;26605:7;:21;26613:9;26623:1;26613:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26613:12:0;26605:21;;;;;;;;;;;;;26593:7;;:11;:34::i;:::-;26583:44;-1:-1:-1;26392:3:0;;;;:::i;:::-;;;;26350:289;;;-1:-1:-1;26675:7:0;;26663;;:20;;:11;:20::i;:::-;26653:7;:30;26649:61;;;26693:7;;26702;;26685:25;;;;;;26193:561;;:::o;26649:61::-;26729:7;;26738;;-1:-1:-1;26193:561:0;-1:-1:-1;26193:561:0:o;1842:189::-;1928:7;1963:12;1956:5;1948:28;;;;-1:-1:-1;;;1948:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1987:9:0;1999:5;2003:1;1999;:5;:::i;25247:330::-;25307:7;25316;25325;25345:12;25360:24;25376:7;25360:15;:24::i;:::-;25345:39;;25395:18;25416:30;25438:7;25416:21;:30::i;:::-;25395:51;-1:-1:-1;25457:23:0;25483:33;25395:51;25483:17;:7;25495:4;25483:11;:17::i;:::-;:21;;:33::i;:::-;25457:59;25552:4;;-1:-1:-1;25558:10:0;;-1:-1:-1;25247:330:0;;-1:-1:-1;;;25247:330:0:o;25585:429::-;25700:7;;;;25756:24;:7;25768:11;25756;:24::i;:::-;25738:42;-1:-1:-1;25791:12:0;25806:21;:4;25815:11;25806:8;:21::i;:::-;25791:36;-1:-1:-1;25838:18:0;25859:27;:10;25874:11;25859:14;:27::i;:::-;25838:48;-1:-1:-1;25897:23:0;25923:33;25838:48;25923:17;:7;25935:4;25923:11;:17::i;:33::-;25975:7;;;;-1:-1:-1;26001:4:0;;-1:-1:-1;25585:429:0;;-1:-1:-1;;;;;;;25585:429:0:o;1439:250::-;1497:7;1521:6;1517:47;;-1:-1:-1;1551:1:0;1544:8;;1517:47;1576:9;1588:5;1592:1;1588;:5;:::i;:::-;1576:17;-1:-1:-1;1621:1:0;1612:5;1616:1;1576:17;1612:5;:::i;:::-;:10;1604:56;;;;-1:-1:-1;;;1604:56:0;;14189:2:1;1604:56:0;;;14171:21:1;14228:2;14208:18;;;14201:30;14267:34;14247:18;;;14240:62;-1:-1:-1;;;14318:18:1;;;14311:31;14359:19;;1604:56:0;13987:397:1;31541:589:0;31691:16;;;31705:1;31691:16;;;;;;;;31667:21;;31691:16;;;;;;;;;;-1:-1:-1;31691:16:0;31667:40;;31736:4;31718;31723:1;31718:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31718:23:0;;;-1:-1:-1;;;;;31718:23:0;;;;;31762:15;-1:-1:-1;;;;;31762:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31752:4;31757:1;31752:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31752:32:0;;;-1:-1:-1;;;;;31752:32:0;;;;;31797:62;31814:4;31829:15;31847:11;31797:8;:62::i;:::-;31898:224;;-1:-1:-1;;;31898:224:0;;-1:-1:-1;;;;;31898:15:0;:66;;;;:224;;31979:11;;32005:1;;32049:4;;32076;;32096:15;;31898:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32138:521;32286:62;32303:4;32318:15;32336:11;32286:8;:62::i;:::-;32595:15;;32391:260;;-1:-1:-1;;;32391:260:0;;32463:4;32391:260;;;16103:34:1;16153:18;;;16146:34;;;32509:1:0;16196:18:1;;;16189:34;;;16239:18;;;16232:34;-1:-1:-1;;;;;32595:15:0;;;16282:19:1;;;16275:44;32625:15:0;16335:19:1;;;16328:35;32391:15:0;:31;;;;;;32430:9;;16037:19:1;;32391:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32138:521;;:::o;27473:250::-;27519:7;;:12;:34;;;;-1:-1:-1;27535:13:0;;:18;27519:34;27516:46;;;27473:250::o;27516:46::-;27600:7;;;27582:15;:25;27642:13;;;27618:21;:37;-1:-1:-1;27676:11:0;;;;27698:17;27473:250::o;34827:566::-;34930:15;34947:23;34972:12;34986:23;35011:12;35025:18;35047:19;35058:7;35047:10;:19::i;:::-;-1:-1:-1;;;;;35095:15:0;;;;;;:7;:15;;;;;;34929:137;;-1:-1:-1;34929:137:0;;-1:-1:-1;34929:137:0;;-1:-1:-1;34929:137:0;-1:-1:-1;34929:137:0;-1:-1:-1;34929:137:0;-1:-1:-1;35095:28:0;;35115:7;35095:19;:28::i;:::-;-1:-1:-1;;;;;35077:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35152:7;:15;;;;:28;;35172:7;35152:19;:28::i;:::-;-1:-1:-1;;;;;35134:15:0;;;;;;;:7;:15;;;;;;:46;;;;35212:18;;;;;;;:39;;35235:15;35212:22;:39::i;:::-;-1:-1:-1;;;;;35191:18:0;;;;;;:7;:18;;;;;:60;35265:26;35280:10;35265:14;:26::i;:::-;35302:23;35314:4;35320;35302:11;:23::i;:::-;35358:9;-1:-1:-1;;;;;35341:44:0;35350:6;-1:-1:-1;;;;;35341:44:0;;35369:15;35341:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;35341:44:0;;;;;;;;34918:475;;;;;;34827:566;;;:::o;34233:586::-;34334:15;34351:23;34376:12;34390:23;34415:12;34429:18;34451:19;34462:7;34451:10;:19::i;:::-;-1:-1:-1;;;;;34499:15:0;;;;;;:7;:15;;;;;;34333:137;;-1:-1:-1;34333:137:0;;-1:-1:-1;34333:137:0;;-1:-1:-1;34333:137:0;-1:-1:-1;34333:137:0;-1:-1:-1;34333:137:0;-1:-1:-1;34499:28:0;;34333:137;34499:19;:28::i;:::-;-1:-1:-1;;;;;34481:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34559:18;;;;;:7;:18;;;;;:39;;34582:15;34559:22;:39::i;:::-;-1:-1:-1;;;;;34538:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34630:7;:18;;;;:39;;34653:15;34630:22;:39::i;33723:502::-;33822:15;33839:23;33864:12;33878:23;33903:12;33917:18;33939:19;33950:7;33939:10;:19::i;:::-;-1:-1:-1;;;;;33987:15:0;;;;;;:7;:15;;;;;;33821:137;;-1:-1:-1;33821:137:0;;-1:-1:-1;33821:137:0;;-1:-1:-1;33821:137:0;-1:-1:-1;33821:137:0;-1:-1:-1;33821:137:0;-1:-1:-1;33987:28:0;;33821:137;33987:19;:28::i;21669:642::-;21772:15;21789:23;21814:12;21828:23;21853:12;21867:18;21889:19;21900:7;21889:10;:19::i;:::-;-1:-1:-1;;;;;21937:15:0;;;;;;:7;:15;;;;;;21771:137;;-1:-1:-1;21771:137:0;;-1:-1:-1;21771:137:0;;-1:-1:-1;21771:137:0;-1:-1:-1;21771:137:0;-1:-1:-1;21771:137:0;-1:-1:-1;21937:28:0;;21957:7;21937:19;:28::i;:::-;-1:-1:-1;;;;;21919:15:0;;;;;;:7;:15;;;;;;;;:46;;;;21994:7;:15;;;;:28;;22014:7;21994:19;:28::i;27133:154::-;27197:7;27224:55;27263:5;27224:20;27236:7;;27224;:11;;:20;;;;:::i;:::-;:24;;:55::i;27295:166::-;27365:7;27392:61;27437:5;27392:26;27404:13;;27392:7;:11;;:26;;;;:::i;26766:355::-;26829:19;26852:10;:8;:10::i;:::-;26829:33;-1:-1:-1;26873:18:0;26894:27;:10;26829:33;26894:14;:27::i;:::-;26973:4;26957:22;;;;:7;:22;;;;;;26873:48;;-1:-1:-1;26957:38:0;;26873:48;26957:26;:38::i;:::-;26948:4;26932:22;;;;:7;:22;;;;;;;;:63;;;;27009:11;:26;;;;;;27006:107;;;27091:4;27075:22;;;;:7;:22;;;;;;:38;;27102:10;27075:26;:38::i;:::-;27066:4;27050:22;;;;:7;:22;;;;;:63;27006:107;26818:303;;26766:355;:::o;24665:147::-;24743:7;;:17;;24755:4;24743:11;:17::i;:::-;24733:7;:27;24784:10;;:20;;24799:4;24784:14;:20::i;:::-;24771:10;:33;-1:-1:-1;;24665:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:241::-;3734:6;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3842:9;3829:23;3861:28;3883:5;3861:28;:::i;3924:388::-;3992:6;4000;4053:2;4041:9;4032:7;4028:23;4024:32;4021:52;;;4069:1;4066;4059:12;4021:52;4108:9;4095:23;4127:31;4152:5;4127:31;:::i;:::-;4177:5;-1:-1:-1;4234:2:1;4219:18;;4206:32;4247:33;4206:32;4247:33;:::i;4317:380::-;4396:1;4392:12;;;;4439;;;4460:61;;4514:4;4506:6;4502:17;4492:27;;4460:61;4567:2;4559:6;4556:14;4536:18;4533:38;4530:161;;;4613:10;4608:3;4604:20;4601:1;4594:31;4648:4;4645:1;4638:15;4676:4;4673:1;4666:15;4530:161;;4317:380;;;:::o;4702:356::-;4904:2;4886:21;;;4923:18;;;4916:30;4982:34;4977:2;4962:18;;4955:62;5049:2;5034:18;;4702:356::o;5537:184::-;5607:6;5660:2;5648:9;5639:7;5635:23;5631:32;5628:52;;;5676:1;5673;5666:12;5628:52;-1:-1:-1;5699:16:1;;5537:184;-1:-1:-1;5537:184:1:o;6005:245::-;6072:6;6125:2;6113:9;6104:7;6100:23;6096:32;6093:52;;;6141:1;6138;6131:12;6093:52;6173:9;6167:16;6192:28;6214:5;6192:28;:::i;6255:127::-;6316:10;6311:3;6307:20;6304:1;6297:31;6347:4;6344:1;6337:15;6371:4;6368:1;6361:15;6387:168;6427:7;6493:1;6489;6485:6;6481:14;6478:1;6475:21;6470:1;6463:9;6456:17;6452:45;6449:71;;;6500:18;;:::i;:::-;-1:-1:-1;6540:9:1;;6387:168::o;7326:127::-;7387:10;7382:3;7378:20;7375:1;7368:31;7418:4;7415:1;7408:15;7442:4;7439:1;7432:15;7458:125;7498:4;7526:1;7523;7520:8;7517:34;;;7531:18;;:::i;:::-;-1:-1:-1;7568:9:1;;7458:125::o;7588:127::-;7649:10;7644:3;7640:20;7637:1;7630:31;7680:4;7677:1;7670:15;7704:4;7701:1;7694:15;7720:135;7759:3;-1:-1:-1;;7780:17:1;;7777:43;;;7800:18;;:::i;:::-;-1:-1:-1;7847:1:1;7836:13;;7720:135::o;12185:128::-;12225:3;12256:1;12252:6;12249:1;12246:13;12243:39;;;12262:18;;:::i;:::-;-1:-1:-1;12298:9:1;;12185:128::o;13765:217::-;13805:1;13831;13821:132;;13875:10;13870:3;13866:20;13863:1;13856:31;13910:4;13907:1;13900:15;13938:4;13935:1;13928:15;13821:132;-1:-1:-1;13967:9:1;;13765:217::o;14521:251::-;14591:6;14644:2;14632:9;14623:7;14619:23;14615:32;14612:52;;;14660:1;14657;14650:12;14612:52;14692:9;14686:16;14711:31;14736:5;14711:31;:::i;14777:980::-;15039:4;15087:3;15076:9;15072:19;15118:6;15107:9;15100:25;15144:2;15182:6;15177:2;15166:9;15162:18;15155:34;15225:3;15220:2;15209:9;15205:18;15198:31;15249:6;15284;15278:13;15315:6;15307;15300:22;15353:3;15342:9;15338:19;15331:26;;15392:2;15384:6;15380:15;15366:29;;15413:1;15423:195;15437:6;15434:1;15431:13;15423:195;;;15502:13;;-1:-1:-1;;;;;15498:39:1;15486:52;;15593:15;;;;15558:12;;;;15534:1;15452:9;15423:195;;;-1:-1:-1;;;;;;;15674:32:1;;;;15669:2;15654:18;;15647:60;-1:-1:-1;;;15738:3:1;15723:19;15716:35;15635:3;14777:980;-1:-1:-1;;;14777:980:1:o;16374:306::-;16462:6;16470;16478;16531:2;16519:9;16510:7;16506:23;16502:32;16499:52;;;16547:1;16544;16537:12;16499:52;16576:9;16570:16;16560:26;;16626:2;16615:9;16611:18;16605:25;16595:35;;16670:2;16659:9;16655:18;16649:25;16639:35;;16374:306;;;;;:::o

Swarm Source

ipfs://16392a9902c87d7fd5511f8c4348917084e0991c35ec9e1b8ef1358e4c6f123b
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.