ETH Price: $3,337.59 (-1.12%)
Gas: 11 Gwei

Token

Voltron Inu (VTRON)
 

Overview

Max Total Supply

100,000,000 VTRON

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,083.4 VTRON

Value
$0.00
0x5546ebfee9e2c91e28e7bb85c54c4b1611c12d5c
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:
VTRON

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-09
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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) {
        return payable(address(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 SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

   
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }


    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

library Address {
  
    function isContract(address account) internal view returns (bool) {
        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);
            }
        }
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

abstract 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 createPair(address tokenA, address tokenB) external returns (address pair);
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function 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);
}

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

contract VTRON is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address constant dead = 0x000000000000000000000000000000000000dEaD;
    
    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) public blacklisted;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isWalletLimitExempt;

    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private _tFeeTotal;

    string public constant _name ="Voltron Inu";
    string public constant _symbol = "VTRON";
    uint8 private constant _decimals = 18;

    uint256 public _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public numTokensSellToAddToLiquidity = 1000 * 10**_decimals;

    uint256 public _maxTxAmount = _tTotal.mul(15).div(1000);  //1.5%
    uint256 public _walletMax = _tTotal.mul(30).div(1000);  //3%

    bool public EnableTransactionLimit = true;
    bool public checkWalletLimit = true;

    uint256 private _taxFee = 0;                           
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee = 1;
    uint256 private _previousLiquidtyFee = _liquidityFee;
    
    uint256 private _MarketingFee = 1;
    uint256 private _previousMarketingFee = _MarketingFee;

    uint256 private _DevelopmentFee = 2;
    uint256 private _previousDevelopmentFee = _DevelopmentFee;

    uint256 public AmountForLiquidity;
    uint256 public AmountForMarketing;
    uint256 public AmountForDevelopment;

    IUniswapV2Router02 public UniswapV2Router;
    address public UniswapV2Pair;

    address public MarketingWallet = address(0xE0BB21891a9A50a405A77CD38c87fB779E5C4cf4);
    address public DeveloperWallet = address(0x033708cDfA162efE674A5738Ec929aeb0CB1A42E);
    address public LiquidityReciever;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;    
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    struct BuyFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee; 
        uint256 setDevelopmentFee;    
    }

    struct SellFee{
        uint256 setTaxFee;
        uint256 setLiquidityFee;
        uint256 setMarketingFee;
        uint256 setDevelopmentFee;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

    constructor ()  {       
        
        _rOwned[_msgSender()] = _rTotal;

        buyFee.setTaxFee = 0;
        buyFee.setLiquidityFee = 10;
        buyFee.setMarketingFee = 10;
        buyFee.setDevelopmentFee = 20;

        sellFee.setTaxFee = 0;
        sellFee.setLiquidityFee = 10;
        sellFee.setMarketingFee = 10;
        sellFee.setDevelopmentFee = 20;
                
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(router);
            // 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;

        LiquidityReciever = msg.sender;
        
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dead)] = true;

        isWalletLimitExempt[_msgSender()] = true;
        isWalletLimitExempt[UniswapV2Pair] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[_msgSender()] = true;
        isTxLimitExempt[address(this)] = true;

        // excludeFromReward(address(dead));

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

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

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
        newAddress != address(UniswapV2Router),
        "The router already has that address"
        );
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(newAddress);
            // 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;
    }

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

    function decimals() public pure 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 returns(uint256) {
        require(tAmount <= _tTotal, "Amt 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, "Amt must be less than tot refl");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded from reward");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "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 excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

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

    function setMFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        MarketingWallet = newFeeWallet;
    }

    function setDFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        DeveloperWallet = newFeeWallet;
    }

    function setLFeeWallet(address payable newFeeWallet) external onlyOwner {
        require(newFeeWallet != address(0), "ZERO ADDRESS");
        LiquidityReciever = newFeeWallet;
    }

    //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 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 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**3
        );
    }

    function calculateLiquidityFee(uint256 _amount) private returns (uint256) {

        AmountForLiquidity += _amount.mul(_liquidityFee).div(10**3);
        AmountForMarketing += _amount.mul(_MarketingFee).div(10**3);
        AmountForDevelopment += _amount.mul(_DevelopmentFee).div(10**3);

        return _amount.mul(_liquidityFee + _MarketingFee + _DevelopmentFee).div(
            10**3
        );
    }
  
    function removeAllFee() private {
        uint subtotal = _taxFee.add(_DevelopmentFee).add(_liquidityFee).add(_MarketingFee);
        if(subtotal == 0) return; 
        
        _previousTaxFee = _taxFee;
        _previousLiquidtyFee = _liquidityFee;
        _previousMarketingFee = _MarketingFee;
        _previousDevelopmentFee = _DevelopmentFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _MarketingFee = 0;
        _DevelopmentFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidtyFee;
        _MarketingFee = _previousMarketingFee;
        _DevelopmentFee = _previousDevelopmentFee;
    }

    function setBuy() private {
        _taxFee = buyFee.setTaxFee;
        _liquidityFee = buyFee.setLiquidityFee;
        _MarketingFee = buyFee.setMarketingFee;
        _DevelopmentFee = buyFee.setDevelopmentFee;
    }
    
    function setSell() private {
        _taxFee = sellFee.setTaxFee;
        _liquidityFee = sellFee.setLiquidityFee;
        _MarketingFee = sellFee.setMarketingFee;
        _DevelopmentFee = sellFee.setDevelopmentFee;
    }

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

    function setSwapTokenLimit(uint _value) public onlyOwner {
        numTokensSellToAddToLiquidity = _value;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to 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 zero address");
        require(to != address(0), "ERC20: transfer to zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklisted[from] || !blacklisted[to],"Error: Blacklist Bots/Contracts not Allowed!!");

        if(!isTxLimitExempt[from] && !isTxLimitExempt[to] && EnableTransactionLimit) {
            require(amount <= _maxTxAmount, "Error: Transfer amount exceeds the maxTxAmount.");
        }

        if(checkWalletLimit && !isWalletLimitExempt[to]) {
            require(balanceOf(to).add(amount) <= _walletMax,"Error: Transfer Amount exceeds Wallet Limit.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            to == UniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            if(overMinTokenBalance){
                swapAndLiquify();
            }

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

        _tokenTransfer(from,to,amount,takeFee);

    }

    function swapAndLiquify() private lockTheSwap {
        if(AmountForLiquidity > 0) swapAndLiquidate(AmountForLiquidity);
        if(AmountForMarketing > 0) sendToMarketing(AmountForMarketing);
        if(AmountForDevelopment > 0) sendToDevelopment(AmountForDevelopment);
    }

    function sendToMarketing(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        payable(MarketingWallet).transfer(recieveBalance);
        AmountForMarketing = AmountForMarketing.sub(_token);
    }

    function sendToDevelopment(uint _token) private {
        uint initalBalance = address(this).balance;
        swapTokensForETH(_token);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        payable(DeveloperWallet).transfer(recieveBalance);
        AmountForDevelopment = AmountForDevelopment.sub(_token);
    }

    function swapAndLiquidate(uint _token) private {
        uint half = _token.div(2);
        uint otherhalf = _token.sub(half);
        uint initalBalance = address(this).balance;
        swapTokensForETH(otherhalf);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        addLiquidity(half,recieveBalance);
        AmountForLiquidity = AmountForLiquidity.sub(_token);
    }
        
    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
            LiquidityReciever,
            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 {
        
            removeAllFee();

            if (takeFee){

                if (sender == UniswapV2Pair) {
                    setBuy();
                }
                if (recipient == UniswapV2Pair) {
                    setSell();
                }

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

    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 _tokenTransferNoFee(address sender, address recipient, uint256 amount) private {
        uint256 currentRate =  _getRate();  
        uint256 rAmount = amount.mul(currentRate);   

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount); 
        
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        } 
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        } 
        emit Transfer(sender, recipient, amount);
    }

    function recoverFunds() public onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        if(tokenAddress == address(this)) {
            _tokenTransferNoFee(address(this),owner(),tokenAmount);
        } 
        else {
            IERC20(tokenAddress).transfer(owner(), tokenAmount);
        }
    }

    //To Block Bots to trade
    function blacklistBot(address _adr,bool _status) public onlyOwner {
        // require(Address.isContract(_adr),"Error: BlackList Applicable For Bot/Contracts!!");
        blacklisted[_adr] = _status;
    }

    function setMaxWalletLimit(uint256 newLimit) external onlyOwner() {
        _walletMax = newLimit;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner() {
        _maxTxAmount = newLimit;
    }

    function ExcludeWalletLimit(address _adr,bool _status) public onlyOwner {
        require(isWalletLimitExempt[_adr] != _status,"Not Changed!!");
        isWalletLimitExempt[_adr] = _status;
    }

    function ExcludeTxLimit(address _adr,bool _status) public onlyOwner {
        require(isTxLimitExempt[_adr] != _status,"Not Changed!!");
        isTxLimitExempt[_adr] = _status;
    }

    function enableTxLimit(bool _status) public onlyOwner {
        EnableTransactionLimit = _status;
    }

    function enableWalletLimit(bool _status) public onlyOwner {
        checkWalletLimit = _status;
    }

    function setBuyFee(
        uint _newReflection,
        uint _newLiquidity,
        uint _newMarketing,
        uint _newDevelopment
    ) public onlyOwner {
        buyFee.setTaxFee = _newReflection;
        buyFee.setLiquidityFee = _newLiquidity;
        buyFee.setMarketingFee = _newMarketing;
        buyFee.setDevelopmentFee = _newDevelopment;
    }

    function setSellFee(
        uint _newReflection,
        uint _newLiquidity,
        uint _newMarketing,
        uint _newDevelopment
    ) public onlyOwner {
        sellFee.setTaxFee = _newReflection;
        sellFee.setLiquidityFee = _newLiquidity;
        sellFee.setMarketingFee = _newMarketing;
        sellFee.setDevelopmentFee = _newDevelopment;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AmountForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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"},{"inputs":[],"name":"_maxTxAmount","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":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","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":"address","name":"_adr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDevelopmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableWalletLimit","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"setTaxFee","type":"uint256"},{"internalType":"uint256","name":"setLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"setMarketingFee","type":"uint256"},{"internalType":"uint256","name":"setDevelopmentFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDevelopment","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setDFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setLFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeWallet","type":"address"}],"name":"setMFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReflection","type":"uint256"},{"internalType":"uint256","name":"_newLiquidity","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newDevelopment","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapTokenLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","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":"pure","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d178155620000389060129062000760565b62000048906305f5e10062000771565b600c8190556200005b90600019620007a9565b6200006990600019620007c0565b600d556200007a6012600a62000760565b62000088906103e862000771565b600e55620000c36103e8620000af600f600c546200053360201b62001d971790919060201c565b620005c760201b62001e161790919060201c565b600f55620000ea6103e8620000af601e600c546200053360201b62001d971790919060201c565b6010556011805461010161ffff1990911617905560006012819055601355600160148190556015819055601681905560175560026018819055601955601f80546001600160a01b031990811673e0bb21891a9a50a405a77cd38c87fb779e5c4cf4179091556020805490911673033708cdfa162efe674a5738ec929aeb0cb1a42e1790556021805460ff60a81b1916600160a81b1790553480156200018e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d54336000908152600160209081526040808320939093556022829055600a6023819055602481905560146025819055602693909355602781905560288190556029929092559054825163c45a015560e01b815292516001600160a01b0390911692839263c45a0155926004808401938290030181865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002819190620007da565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f59190620007da565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003699190620007da565b601e80546001600160a01b039283166001600160a01b031991821617909155601d8054928416928216929092179091556021805490911633179055600160046000620003b23390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252812080548316600190811790915561dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd805490931681179092556009906200042f3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601e549091168152600990925280822080548416600190811790915530835290822080549093168117909255600890620004943390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526008909252902080549091166001179055620004dc3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200052491815260200190565b60405180910390a35062000874565b6000826200054457506000620005c1565b600062000552838562000771565b90508262000561858362000805565b14620005be5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620005be83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200061160201b60201c565b60008183620006355760405162461bcd60e51b8152600401620005b591906200081c565b50600062000644848662000805565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006a45781600019048211156200068857620006886200064d565b808516156200069657918102915b93841c939080029062000668565b509250929050565b600082620006bd57506001620005c1565b81620006cc57506000620005c1565b8160018114620006e55760028114620006f05762000710565b6001915050620005c1565b60ff8411156200070457620007046200064d565b50506001821b620005c1565b5060208310610133831016604e8410600b841016171562000735575081810a620005c1565b62000741838362000663565b80600019048211156200075857620007586200064d565b029392505050565b6000620005be60ff841683620006ac565b60008160001904831182151516156200078e576200078e6200064d565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620007bb57620007bb62000793565b500690565b600082821015620007d557620007d56200064d565b500390565b600060208284031215620007ed57600080fd5b81516001600160a01b0381168114620005be57600080fd5b60008262000817576200081762000793565b500490565b600060208083528351808285015260005b818110156200084b578581018301518582016040015282016200082d565b818111156200085e576000604083870101525b50601f01601f1916929092016040019392505050565b6136c980620008846000396000f3fe6080604052600436106103c75760003560e01c8063807c2d9c116101f2578063c867d60b1161010d578063e653da08116100a0578063f872858a1161006f578063f872858a14610c1e578063f887ea4014610c3d578063f8f6329014610c5d578063fa0e16fc14610c7d57600080fd5b8063e653da0814610b9e578063ea2f0b3714610bbe578063ee828db314610bde578063f2fde38b14610bfe57600080fd5b8063d28d8852116100dc578063d28d885214610ad1578063dbac26e914610b08578063dd62ed3e14610b38578063e4a9ada214610b7e57600080fd5b8063c867d60b14610a4b578063d0dd0b3214610a7b578063d12a768814610a9b578063d20c50d514610ab157600080fd5b806395d89b4111610185578063b09f126611610154578063b09f1266146109cf578063b79550be14610a00578063c33dc0ca14610a15578063c49b9a8014610a2b57600080fd5b806395d89b411461094b578063a457c2d714610979578063a9059cbb14610999578063af465a27146109b957600080fd5b80638980f11f116101c15780638980f11f146108bd5780638b42507f146108dd5780638c5a133d1461090d5780638da5cb5b1461092d57600080fd5b8063807c2d9c146108345780638236802e1461084a578063852614851461086a57806388f820201461088457600080fd5b80633bd5d173116102e25780635c85974f1161027557806370a082311161024457806370a08231146107c9578063715018a6146107e9578063728d41c9146107fe5780637d1db4a51461081e57600080fd5b80635c85974f1461074957806365b8dbc0146107695780636bca1890146107895780636f499ae0146107a957600080fd5b80634974d88f116102b15780634974d88f146106af5780634a74bb02146106cf57806352390c02146106f05780635342acb41461071057600080fd5b80633bd5d1731461062c578063437823ec1461064c5780634549b0391461066c578063470624021461068c57600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce567146105b05780633685d419146105cc57806338ec0b11146105ec578063395093511461060c57600080fd5b806323b872dd1461050d5780632598cdb21461052d5780632b14ca561461054d5780632d8381191461059057600080fd5b806310bb8a7a1161039657806310bb8a7a1461049d57806313114a9d146104c157806313ea1d89146104d657806318160ddd146104f857600080fd5b8063055add0d146103d357806306fdde0314610410578063095ea7b31461044d5780630bd11c461461047d57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50601d546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b5060408051808201909152600b81526a566f6c74726f6e20496e7560a81b60208201525b604051610407919061324f565b34801561045957600080fd5b5061046d6104683660046132b9565b610c93565b6040519015158152602001610407565b34801561048957600080fd5b506021546103f3906001600160a01b031681565b3480156104a957600080fd5b506104b3601a5481565b604051908152602001610407565b3480156104cd57600080fd5b50600b546104b3565b3480156104e257600080fd5b506104f66104f13660046132f3565b610caa565b005b34801561050457600080fd5b50600c546104b3565b34801561051957600080fd5b5061046d61052836600461332c565b610d67565b34801561053957600080fd5b50601f546103f3906001600160a01b031681565b34801561055957600080fd5b506026546027546028546029546105709392919084565b604080519485526020850193909352918301526060820152608001610407565b34801561059c57600080fd5b506104b36105ab36600461336d565b610dd0565b3480156105bc57600080fd5b5060405160128152602001610407565b3480156105d857600080fd5b506104f66105e7366004613386565b610e41565b3480156105f857600080fd5b506104f66106073660046132f3565b610feb565b34801561061857600080fd5b5061046d6106273660046132b9565b61109f565b34801561063857600080fd5b506104f661064736600461336d565b6110d5565b34801561065857600080fd5b506104f6610667366004613386565b6111bf565b34801561067857600080fd5b506104b36106873660046133a3565b61120d565b34801561069857600080fd5b506022546023546024546025546105709392919084565b3480156106bb57600080fd5b506104f66106ca3660046133c8565b61129a565b3480156106db57600080fd5b5060215461046d90600160a81b900460ff1681565b3480156106fc57600080fd5b506104f661070b366004613386565b6112de565b34801561071c57600080fd5b5061046d61072b366004613386565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561075557600080fd5b506104f661076436600461336d565b611441565b34801561077557600080fd5b506104f6610784366004613386565b611470565b34801561079557600080fd5b506104f66107a4366004613386565b61167f565b3480156107b557600080fd5b506104f66107c436600461336d565b6116f1565b3480156107d557600080fd5b506104b36107e4366004613386565b611720565b3480156107f557600080fd5b506104f661177f565b34801561080a57600080fd5b506104f661081936600461336d565b6117f3565b34801561082a57600080fd5b506104b3600f5481565b34801561084057600080fd5b506104b360105481565b34801561085657600080fd5b506104f66108653660046132f3565b611822565b34801561087657600080fd5b5060115461046d9060ff1681565b34801561089057600080fd5b5061046d61089f366004613386565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108c957600080fd5b506104f66108d83660046132b9565b611877565b3480156108e957600080fd5b5061046d6108f8366004613386565b60086020526000908152604090205460ff1681565b34801561091957600080fd5b506104f66109283660046133e5565b611965565b34801561093957600080fd5b506000546001600160a01b03166103f3565b34801561095757600080fd5b506040805180820190915260058152642b2a2927a760d91b6020820152610440565b34801561098557600080fd5b5061046d6109943660046132b9565b6119a3565b3480156109a557600080fd5b5061046d6109b43660046132b9565b6119f2565b3480156109c557600080fd5b506104b3600c5481565b3480156109db57600080fd5b50610440604051806040016040528060058152602001642b2a2927a760d91b81525081565b348015610a0c57600080fd5b506104f66119ff565b348015610a2157600080fd5b506104b3601c5481565b348015610a3757600080fd5b506104f6610a463660046133c8565b611a81565b348015610a5757600080fd5b5061046d610a66366004613386565b60096020526000908152604090205460ff1681565b348015610a8757600080fd5b506104f6610a96366004613386565b611b03565b348015610aa757600080fd5b506104b3600e5481565b348015610abd57600080fd5b50601e546103f3906001600160a01b031681565b348015610add57600080fd5b506104406040518060400160405280600b81526020016a566f6c74726f6e20496e7560a81b81525081565b348015610b1457600080fd5b5061046d610b23366004613386565b60076020526000908152604090205460ff1681565b348015610b4457600080fd5b506104b3610b53366004613417565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8a57600080fd5b506104f6610b99366004613386565b611b75565b348015610baa57600080fd5b506104f6610bb93660046133e5565b611be7565b348015610bca57600080fd5b506104f6610bd9366004613386565b611c25565b348015610bea57600080fd5b506104f6610bf93660046133c8565b611c70565b348015610c0a57600080fd5b506104f6610c19366004613386565b611cad565b348015610c2a57600080fd5b5060115461046d90610100900460ff1681565b348015610c4957600080fd5b50600a546103f3906001600160a01b031681565b348015610c6957600080fd5b506020546103f3906001600160a01b031681565b348015610c8957600080fd5b506104b3601b5481565b6000610ca0338484611e58565b5060015b92915050565b6000546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610cd490613445565b60405180910390fd5b6001600160a01b03821660009081526008602052604090205460ff1615158115151415610d3c5760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610cd4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610d74848484611f65565b610dc68433610dc185604051806060016040528060288152602001613647602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612350565b611e58565b5060019392505050565b6000600d54821115610e245760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610cd4565b6000610e2e61238a565b9050610e3a8382611e16565b9392505050565b6000546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03811660009081526005602052604090205460ff16610ec65760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610cd4565b60005b600654811015610fe757816001600160a01b031660068281548110610ef057610ef061347a565b6000918252602090912001546001600160a01b03161415610fd55760068054610f1b906001906134a6565b81548110610f2b57610f2b61347a565b600091825260209091200154600680546001600160a01b039092169183908110610f5757610f5761347a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610faf57610faf6134bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fdf816134d3565b915050610ec9565b5050565b6000546001600160a01b031633146110155760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03821660009081526009602052604090205460ff16151581151514156110745760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610cd4565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ca0918590610dc190866123ad565b3360008181526005602052604090205460ff161561114a5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cd4565b60006111558361240c565b505050506001600160a01b0384166000908152600160205260409020549192506111819190508261245b565b6001600160a01b038316600090815260016020526040902055600d546111a7908261245b565b600d55600b546111b790846123ad565b600b55505050565b6000546001600160a01b031633146111e95760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156112615760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610cd4565b816112805760006112718461240c565b50939550610ca4945050505050565b600061128b8461240c565b50929550610ca4945050505050565b6000546001600160a01b031633146112c45760405162461bcd60e51b8152600401610cd490613445565b601180549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146113085760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03811660009081526005602052604090205460ff16156113815760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610cd4565b6001600160a01b038116600090815260016020526040902054156113db576001600160a01b0381166000908152600160205260409020546113c190610dd0565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461146b5760405162461bcd60e51b8152600401610cd490613445565b600f55565b6000546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610cd490613445565b601d546001600160a01b03828116911614156115045760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610cd4565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b91906134ee565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906134ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d91906134ee565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b6000546001600160a01b031633146116a95760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610cd49061350b565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610cd490613445565b600e55565b6001600160a01b03811660009081526005602052604081205460ff161561175d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ca490610dd0565b6000546001600160a01b031633146117a95760405162461bcd60e51b8152600401610cd490613445565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610cd490613445565b601055565b6000546001600160a01b0316331461184c5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118a15760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b0382163014156118ce57610fe7306118c86000546001600160a01b031690565b8361249d565b816001600160a01b031663a9059cbb6118ef6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561193c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119609190613531565b505050565b6000546001600160a01b0316331461198f5760405162461bcd60e51b8152600401610cd490613445565b602293909355602391909155602455602555565b6000610ca03384610dc18560405180606001604052806025815260200161366f602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612350565b6000610ca0338484611f65565b6000546001600160a01b03163314611a295760405162461bcd60e51b8152600401610cd490613445565b604051600090339047908381818185875af1925050503d8060008114611a6b576040519150601f19603f3d011682016040523d82523d6000602084013e611a70565b606091505b5050905080611a7e57600080fd5b50565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610cd490613445565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611af890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611b535760405162461bcd60e51b8152600401610cd49061350b565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b9f5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611bc55760405162461bcd60e51b8152600401610cd49061350b565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c115760405162461bcd60e51b8152600401610cd490613445565b602693909355602791909155602855602955565b6000546001600160a01b03163314611c4f5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611c9a5760405162461bcd60e51b8152600401610cd490613445565b6011805460ff1916911515919091179055565b6000546001600160a01b03163314611cd75760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611d3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082611da657506000610ca4565b6000611db2838561354e565b905082611dbf858361356d565b14610e3a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cd4565b6000610e3a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061262d565b6001600160a01b038316611eae5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610cd4565b6001600160a01b038216611f045760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610cd4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fc55760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610cd4565b6001600160a01b03821661201b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610cd4565b6000811161207d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cd4565b6001600160a01b03831660009081526007602052604090205460ff1615806120be57506001600160a01b03821660009081526007602052604090205460ff16155b6121205760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060448201526c6e6f7420416c6c6f776564212160981b6064820152608401610cd4565b6001600160a01b03831660009081526008602052604090205460ff1615801561216257506001600160a01b03821660009081526008602052604090205460ff16155b8015612170575060115460ff165b156121df57600f548111156121df5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610cd4565b601154610100900460ff16801561220f57506001600160a01b03821660009081526009602052604090205460ff16155b1561228d5760105461222a8261222485611720565b906123ad565b111561228d5760405162461bcd60e51b815260206004820152602c60248201527f4572726f723a205472616e7366657220416d6f756e742065786365656473205760448201526b30b63632ba102634b6b4ba1760a11b6064820152608401610cd4565b600061229830611720565b600e5460215491925082101590600160a01b900460ff161580156122c95750601e546001600160a01b038581169116145b80156122de5750602154600160a81b900460ff165b156122f15780156122f1576122f161265b565b6001600160a01b03851660009081526004602052604090205460019060ff168061233357506001600160a01b03851660009081526004602052604090205460ff165b1561233c575060005b612348868686846126b6565b505050505050565b600081848411156123745760405162461bcd60e51b8152600401610cd4919061324f565b50600061238184866134a6565b95945050505050565b60008060006123976128a6565b90925090506123a68282611e16565b9250505090565b6000806123ba838561358f565b905083811015610e3a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cd4565b60008060008060008060008060006124238a612a28565b92509250925060008060006124418d868661243c61238a565b612a6a565b919f909e50909c50959a5093985091965092945050505050565b6000610e3a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612350565b60006124a761238a565b905060006124b58383611d97565b6001600160a01b0386166000908152600160205260409020549091506124db908261245b565b6001600160a01b03808716600090815260016020526040808220939093559086168152205461250a90826123ad565b6001600160a01b0380861660009081526001602090815260408083209490945591881681526005909152205460ff161561257b576001600160a01b038516600090815260026020526040902054612561908461245b565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156125d9576001600160a01b0384166000908152600260205260409020546125bf90846123ad565b6001600160a01b0385166000908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161261e91815260200190565b60405180910390a35050505050565b6000818361264e5760405162461bcd60e51b8152600401610cd4919061324f565b506000612381848661356d565b6021805460ff60a01b1916600160a01b179055601a541561268157612681601a54612aba565b601b541561269457612694601b54612b10565b601c54156126a7576126a7601c54612b77565b6021805460ff60a01b19169055565b6126be612bde565b801561272a57601e546001600160a01b03858116911614156126f7576126f7602254601255602354601455602454601655602554601855565b601e546001600160a01b038481169116141561272a5761272a602654601255602754601455602854601655602954601855565b6001600160a01b03841660009081526005602052604090205460ff16801561276b57506001600160a01b03831660009081526005602052604090205460ff16155b156127805761277b848484612c3a565b61287e565b6001600160a01b03841660009081526005602052604090205460ff161580156127c157506001600160a01b03831660009081526005602052604090205460ff165b156127d15761277b848484612d60565b6001600160a01b03841660009081526005602052604090205460ff1615801561281357506001600160a01b03831660009081526005602052604090205460ff16155b156128235761277b848484612e09565b6001600160a01b03841660009081526005602052604090205460ff16801561286357506001600160a01b03831660009081526005602052604090205460ff165b156128735761277b848484612e4d565b61287e848484612e09565b806128a0576128a0601354601255601554601455601754601655601954601855565b50505050565b600d54600c546000918291825b6006548110156129f8578260016000600684815481106128d5576128d561347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061294057508160026000600684815481106129195761291961347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561295657600d54600c54945094505050509091565b61299c60016000600684815481106129705761297061347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061245b565b92506129e460026000600684815481106129b8576129b861347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061245b565b9150806129f0816134d3565b9150506128b3565b50600c54600d54612a0891611e16565b821015612a1f57600d54600c549350935050509091565b90939092509050565b600080600080612a3785612ec0565b90506000612a4486612ee3565b90506000612a5c82612a56898661245b565b9061245b565b979296509094509092505050565b6000808080612a798886611d97565b90506000612a878887611d97565b90506000612a958888611d97565b90506000612aa782612a56868661245b565b939b939a50919850919650505050505050565b6000612ac7826002611e16565b90506000612ad5838361245b565b905047612ae182612f9d565b6000612aed478361245b565b9050612af984826130ef565b601a54612b06908661245b565b601a555050505050565b47612b1a82612f9d565b6000612b26478361245b565b601f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b61573d6000803e3d6000fd5b50601b54612b6f908461245b565b601b55505050565b47612b8182612f9d565b6000612b8d478361245b565b6020546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612bc8573d6000803e3d6000fd5b50601c54612bd6908461245b565b601c55505050565b6000612c036016546122246014546122246018546012546123ad90919063ffffffff16565b905080612c0d5750565b50601280546013556014805460155560168054601755601880546019556000938490559183905582905555565b600080600080600080612c4c8761240c565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612c7e908861245b565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612cad908761245b565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612cdc90866123ad565b6001600160a01b038916600090815260016020526040902055612cfe816131a3565b612d08848361322b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612d4d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612d728761240c565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612da4908761245b565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612dda90846123ad565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612cdc90866123ad565b600080600080600080612e1b8761240c565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612cad908761245b565b600080600080600080612e5f8761240c565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612e91908861245b565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612da4908761245b565b6000610ca46103e8612edd60125485611d9790919063ffffffff16565b90611e16565b6000612f006103e8612edd60145485611d9790919063ffffffff16565b601a6000828254612f11919061358f565b9091555050601654612f2c906103e890612edd908590611d97565b601b6000828254612f3d919061358f565b9091555050601854612f58906103e890612edd908590611d97565b601c6000828254612f69919061358f565b92505081905550610ca46103e8612edd601854601654601454612f8c919061358f565b612f96919061358f565b8590611d97565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fd257612fd261347a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561302b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304f91906134ee565b816001815181106130625761306261347a565b6001600160a01b039283166020918202929092010152601d546130889130911684611e58565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906130c19085906000908690309042906004016135a7565b600060405180830381600087803b1580156130db57600080fd5b505af1158015612348573d6000803e3d6000fd5b601d546131079030906001600160a01b031684611e58565b601d5460215460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613177573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061319c9190613618565b5050505050565b60006131ad61238a565b905060006131bb8383611d97565b306000908152600160205260409020549091506131d890826123ad565b3060009081526001602090815260408083209390935560059052205460ff1615611960573060009081526002602052604090205461321690846123ad565b30600090815260026020526040902055505050565b600d54613238908361245b565b600d55600b5461324890826123ad565b600b555050565b600060208083528351808285015260005b8181101561327c57858101830151858201604001528201613260565b8181111561328e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611a7e57600080fd5b600080604083850312156132cc57600080fd5b82356132d7816132a4565b946020939093013593505050565b8015158114611a7e57600080fd5b6000806040838503121561330657600080fd5b8235613311816132a4565b91506020830135613321816132e5565b809150509250929050565b60008060006060848603121561334157600080fd5b833561334c816132a4565b9250602084013561335c816132a4565b929592945050506040919091013590565b60006020828403121561337f57600080fd5b5035919050565b60006020828403121561339857600080fd5b8135610e3a816132a4565b600080604083850312156133b657600080fd5b823591506020830135613321816132e5565b6000602082840312156133da57600080fd5b8135610e3a816132e5565b600080600080608085870312156133fb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561342a57600080fd5b8235613435816132a4565b91506020830135613321816132a4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156134b8576134b8613490565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156134e7576134e7613490565b5060010190565b60006020828403121561350057600080fd5b8151610e3a816132a4565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b60006020828403121561354357600080fd5b8151610e3a816132e5565b600081600019048311821515161561356857613568613490565b500290565b60008261358a57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156135a2576135a2613490565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135f75784516001600160a01b0316835293830193918301916001016135d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561362d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220449998d044b3a6a7152f1478cda178137350d0c6e0480852b165dd5f5f7418f364736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063807c2d9c116101f2578063c867d60b1161010d578063e653da08116100a0578063f872858a1161006f578063f872858a14610c1e578063f887ea4014610c3d578063f8f6329014610c5d578063fa0e16fc14610c7d57600080fd5b8063e653da0814610b9e578063ea2f0b3714610bbe578063ee828db314610bde578063f2fde38b14610bfe57600080fd5b8063d28d8852116100dc578063d28d885214610ad1578063dbac26e914610b08578063dd62ed3e14610b38578063e4a9ada214610b7e57600080fd5b8063c867d60b14610a4b578063d0dd0b3214610a7b578063d12a768814610a9b578063d20c50d514610ab157600080fd5b806395d89b4111610185578063b09f126611610154578063b09f1266146109cf578063b79550be14610a00578063c33dc0ca14610a15578063c49b9a8014610a2b57600080fd5b806395d89b411461094b578063a457c2d714610979578063a9059cbb14610999578063af465a27146109b957600080fd5b80638980f11f116101c15780638980f11f146108bd5780638b42507f146108dd5780638c5a133d1461090d5780638da5cb5b1461092d57600080fd5b8063807c2d9c146108345780638236802e1461084a578063852614851461086a57806388f820201461088457600080fd5b80633bd5d173116102e25780635c85974f1161027557806370a082311161024457806370a08231146107c9578063715018a6146107e9578063728d41c9146107fe5780637d1db4a51461081e57600080fd5b80635c85974f1461074957806365b8dbc0146107695780636bca1890146107895780636f499ae0146107a957600080fd5b80634974d88f116102b15780634974d88f146106af5780634a74bb02146106cf57806352390c02146106f05780635342acb41461071057600080fd5b80633bd5d1731461062c578063437823ec1461064c5780634549b0391461066c578063470624021461068c57600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce567146105b05780633685d419146105cc57806338ec0b11146105ec578063395093511461060c57600080fd5b806323b872dd1461050d5780632598cdb21461052d5780632b14ca561461054d5780632d8381191461059057600080fd5b806310bb8a7a1161039657806310bb8a7a1461049d57806313114a9d146104c157806313ea1d89146104d657806318160ddd146104f857600080fd5b8063055add0d146103d357806306fdde0314610410578063095ea7b31461044d5780630bd11c461461047d57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50601d546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b5060408051808201909152600b81526a566f6c74726f6e20496e7560a81b60208201525b604051610407919061324f565b34801561045957600080fd5b5061046d6104683660046132b9565b610c93565b6040519015158152602001610407565b34801561048957600080fd5b506021546103f3906001600160a01b031681565b3480156104a957600080fd5b506104b3601a5481565b604051908152602001610407565b3480156104cd57600080fd5b50600b546104b3565b3480156104e257600080fd5b506104f66104f13660046132f3565b610caa565b005b34801561050457600080fd5b50600c546104b3565b34801561051957600080fd5b5061046d61052836600461332c565b610d67565b34801561053957600080fd5b50601f546103f3906001600160a01b031681565b34801561055957600080fd5b506026546027546028546029546105709392919084565b604080519485526020850193909352918301526060820152608001610407565b34801561059c57600080fd5b506104b36105ab36600461336d565b610dd0565b3480156105bc57600080fd5b5060405160128152602001610407565b3480156105d857600080fd5b506104f66105e7366004613386565b610e41565b3480156105f857600080fd5b506104f66106073660046132f3565b610feb565b34801561061857600080fd5b5061046d6106273660046132b9565b61109f565b34801561063857600080fd5b506104f661064736600461336d565b6110d5565b34801561065857600080fd5b506104f6610667366004613386565b6111bf565b34801561067857600080fd5b506104b36106873660046133a3565b61120d565b34801561069857600080fd5b506022546023546024546025546105709392919084565b3480156106bb57600080fd5b506104f66106ca3660046133c8565b61129a565b3480156106db57600080fd5b5060215461046d90600160a81b900460ff1681565b3480156106fc57600080fd5b506104f661070b366004613386565b6112de565b34801561071c57600080fd5b5061046d61072b366004613386565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561075557600080fd5b506104f661076436600461336d565b611441565b34801561077557600080fd5b506104f6610784366004613386565b611470565b34801561079557600080fd5b506104f66107a4366004613386565b61167f565b3480156107b557600080fd5b506104f66107c436600461336d565b6116f1565b3480156107d557600080fd5b506104b36107e4366004613386565b611720565b3480156107f557600080fd5b506104f661177f565b34801561080a57600080fd5b506104f661081936600461336d565b6117f3565b34801561082a57600080fd5b506104b3600f5481565b34801561084057600080fd5b506104b360105481565b34801561085657600080fd5b506104f66108653660046132f3565b611822565b34801561087657600080fd5b5060115461046d9060ff1681565b34801561089057600080fd5b5061046d61089f366004613386565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108c957600080fd5b506104f66108d83660046132b9565b611877565b3480156108e957600080fd5b5061046d6108f8366004613386565b60086020526000908152604090205460ff1681565b34801561091957600080fd5b506104f66109283660046133e5565b611965565b34801561093957600080fd5b506000546001600160a01b03166103f3565b34801561095757600080fd5b506040805180820190915260058152642b2a2927a760d91b6020820152610440565b34801561098557600080fd5b5061046d6109943660046132b9565b6119a3565b3480156109a557600080fd5b5061046d6109b43660046132b9565b6119f2565b3480156109c557600080fd5b506104b3600c5481565b3480156109db57600080fd5b50610440604051806040016040528060058152602001642b2a2927a760d91b81525081565b348015610a0c57600080fd5b506104f66119ff565b348015610a2157600080fd5b506104b3601c5481565b348015610a3757600080fd5b506104f6610a463660046133c8565b611a81565b348015610a5757600080fd5b5061046d610a66366004613386565b60096020526000908152604090205460ff1681565b348015610a8757600080fd5b506104f6610a96366004613386565b611b03565b348015610aa757600080fd5b506104b3600e5481565b348015610abd57600080fd5b50601e546103f3906001600160a01b031681565b348015610add57600080fd5b506104406040518060400160405280600b81526020016a566f6c74726f6e20496e7560a81b81525081565b348015610b1457600080fd5b5061046d610b23366004613386565b60076020526000908152604090205460ff1681565b348015610b4457600080fd5b506104b3610b53366004613417565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8a57600080fd5b506104f6610b99366004613386565b611b75565b348015610baa57600080fd5b506104f6610bb93660046133e5565b611be7565b348015610bca57600080fd5b506104f6610bd9366004613386565b611c25565b348015610bea57600080fd5b506104f6610bf93660046133c8565b611c70565b348015610c0a57600080fd5b506104f6610c19366004613386565b611cad565b348015610c2a57600080fd5b5060115461046d90610100900460ff1681565b348015610c4957600080fd5b50600a546103f3906001600160a01b031681565b348015610c6957600080fd5b506020546103f3906001600160a01b031681565b348015610c8957600080fd5b506104b3601b5481565b6000610ca0338484611e58565b5060015b92915050565b6000546001600160a01b03163314610cdd5760405162461bcd60e51b8152600401610cd490613445565b60405180910390fd5b6001600160a01b03821660009081526008602052604090205460ff1615158115151415610d3c5760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610cd4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610d74848484611f65565b610dc68433610dc185604051806060016040528060288152602001613647602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612350565b611e58565b5060019392505050565b6000600d54821115610e245760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610cd4565b6000610e2e61238a565b9050610e3a8382611e16565b9392505050565b6000546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03811660009081526005602052604090205460ff16610ec65760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b6044820152606401610cd4565b60005b600654811015610fe757816001600160a01b031660068281548110610ef057610ef061347a565b6000918252602090912001546001600160a01b03161415610fd55760068054610f1b906001906134a6565b81548110610f2b57610f2b61347a565b600091825260209091200154600680546001600160a01b039092169183908110610f5757610f5761347a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610faf57610faf6134bd565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fdf816134d3565b915050610ec9565b5050565b6000546001600160a01b031633146110155760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03821660009081526009602052604090205460ff16151581151514156110745760405162461bcd60e51b815260206004820152600d60248201526c4e6f74204368616e676564212160981b6044820152606401610cd4565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ca0918590610dc190866123ad565b3360008181526005602052604090205460ff161561114a5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610cd4565b60006111558361240c565b505050506001600160a01b0384166000908152600160205260409020549192506111819190508261245b565b6001600160a01b038316600090815260016020526040902055600d546111a7908261245b565b600d55600b546111b790846123ad565b600b55505050565b6000546001600160a01b031633146111e95760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600c548311156112615760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610cd4565b816112805760006112718461240c565b50939550610ca4945050505050565b600061128b8461240c565b50929550610ca4945050505050565b6000546001600160a01b031633146112c45760405162461bcd60e51b8152600401610cd490613445565b601180549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146113085760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03811660009081526005602052604090205460ff16156113815760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b6064820152608401610cd4565b6001600160a01b038116600090815260016020526040902054156113db576001600160a01b0381166000908152600160205260409020546113c190610dd0565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461146b5760405162461bcd60e51b8152600401610cd490613445565b600f55565b6000546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610cd490613445565b601d546001600160a01b03828116911614156115045760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610cd4565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b91906134ee565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc91906134ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164d91906134ee565b601e80546001600160a01b039283166001600160a01b031991821617909155601d805493909216921691909117905550565b6000546001600160a01b031633146116a95760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b0381166116cf5760405162461bcd60e51b8152600401610cd49061350b565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461171b5760405162461bcd60e51b8152600401610cd490613445565b600e55565b6001600160a01b03811660009081526005602052604081205460ff161561175d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610ca490610dd0565b6000546001600160a01b031633146117a95760405162461bcd60e51b8152600401610cd490613445565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610cd490613445565b601055565b6000546001600160a01b0316331461184c5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118a15760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b0382163014156118ce57610fe7306118c86000546001600160a01b031690565b8361249d565b816001600160a01b031663a9059cbb6118ef6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561193c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119609190613531565b505050565b6000546001600160a01b0316331461198f5760405162461bcd60e51b8152600401610cd490613445565b602293909355602391909155602455602555565b6000610ca03384610dc18560405180606001604052806025815260200161366f602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190612350565b6000610ca0338484611f65565b6000546001600160a01b03163314611a295760405162461bcd60e51b8152600401610cd490613445565b604051600090339047908381818185875af1925050503d8060008114611a6b576040519150601f19603f3d011682016040523d82523d6000602084013e611a70565b606091505b5050905080611a7e57600080fd5b50565b6000546001600160a01b03163314611aab5760405162461bcd60e51b8152600401610cd490613445565b60218054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611af890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b2d5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611b535760405162461bcd60e51b8152600401610cd49061350b565b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b9f5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611bc55760405162461bcd60e51b8152600401610cd49061350b565b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c115760405162461bcd60e51b8152600401610cd490613445565b602693909355602791909155602855602955565b6000546001600160a01b03163314611c4f5760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611c9a5760405162461bcd60e51b8152600401610cd490613445565b6011805460ff1916911515919091179055565b6000546001600160a01b03163314611cd75760405162461bcd60e51b8152600401610cd490613445565b6001600160a01b038116611d3c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cd4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082611da657506000610ca4565b6000611db2838561354e565b905082611dbf858361356d565b14610e3a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cd4565b6000610e3a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061262d565b6001600160a01b038316611eae5760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610cd4565b6001600160a01b038216611f045760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610cd4565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fc55760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b6064820152608401610cd4565b6001600160a01b03821661201b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f2061646472657373006044820152606401610cd4565b6000811161207d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cd4565b6001600160a01b03831660009081526007602052604090205460ff1615806120be57506001600160a01b03821660009081526007602052604090205460ff16155b6121205760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20426c61636b6c69737420426f74732f436f6e7472616374732060448201526c6e6f7420416c6c6f776564212160981b6064820152608401610cd4565b6001600160a01b03831660009081526008602052604090205460ff1615801561216257506001600160a01b03821660009081526008602052604090205460ff16155b8015612170575060115460ff165b156121df57600f548111156121df5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610cd4565b601154610100900460ff16801561220f57506001600160a01b03821660009081526009602052604090205460ff16155b1561228d5760105461222a8261222485611720565b906123ad565b111561228d5760405162461bcd60e51b815260206004820152602c60248201527f4572726f723a205472616e7366657220416d6f756e742065786365656473205760448201526b30b63632ba102634b6b4ba1760a11b6064820152608401610cd4565b600061229830611720565b600e5460215491925082101590600160a01b900460ff161580156122c95750601e546001600160a01b038581169116145b80156122de5750602154600160a81b900460ff165b156122f15780156122f1576122f161265b565b6001600160a01b03851660009081526004602052604090205460019060ff168061233357506001600160a01b03851660009081526004602052604090205460ff165b1561233c575060005b612348868686846126b6565b505050505050565b600081848411156123745760405162461bcd60e51b8152600401610cd4919061324f565b50600061238184866134a6565b95945050505050565b60008060006123976128a6565b90925090506123a68282611e16565b9250505090565b6000806123ba838561358f565b905083811015610e3a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cd4565b60008060008060008060008060006124238a612a28565b92509250925060008060006124418d868661243c61238a565b612a6a565b919f909e50909c50959a5093985091965092945050505050565b6000610e3a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612350565b60006124a761238a565b905060006124b58383611d97565b6001600160a01b0386166000908152600160205260409020549091506124db908261245b565b6001600160a01b03808716600090815260016020526040808220939093559086168152205461250a90826123ad565b6001600160a01b0380861660009081526001602090815260408083209490945591881681526005909152205460ff161561257b576001600160a01b038516600090815260026020526040902054612561908461245b565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526005602052604090205460ff16156125d9576001600160a01b0384166000908152600260205260409020546125bf90846123ad565b6001600160a01b0385166000908152600260205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161261e91815260200190565b60405180910390a35050505050565b6000818361264e5760405162461bcd60e51b8152600401610cd4919061324f565b506000612381848661356d565b6021805460ff60a01b1916600160a01b179055601a541561268157612681601a54612aba565b601b541561269457612694601b54612b10565b601c54156126a7576126a7601c54612b77565b6021805460ff60a01b19169055565b6126be612bde565b801561272a57601e546001600160a01b03858116911614156126f7576126f7602254601255602354601455602454601655602554601855565b601e546001600160a01b038481169116141561272a5761272a602654601255602754601455602854601655602954601855565b6001600160a01b03841660009081526005602052604090205460ff16801561276b57506001600160a01b03831660009081526005602052604090205460ff16155b156127805761277b848484612c3a565b61287e565b6001600160a01b03841660009081526005602052604090205460ff161580156127c157506001600160a01b03831660009081526005602052604090205460ff165b156127d15761277b848484612d60565b6001600160a01b03841660009081526005602052604090205460ff1615801561281357506001600160a01b03831660009081526005602052604090205460ff16155b156128235761277b848484612e09565b6001600160a01b03841660009081526005602052604090205460ff16801561286357506001600160a01b03831660009081526005602052604090205460ff165b156128735761277b848484612e4d565b61287e848484612e09565b806128a0576128a0601354601255601554601455601754601655601954601855565b50505050565b600d54600c546000918291825b6006548110156129f8578260016000600684815481106128d5576128d561347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061294057508160026000600684815481106129195761291961347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561295657600d54600c54945094505050509091565b61299c60016000600684815481106129705761297061347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061245b565b92506129e460026000600684815481106129b8576129b861347a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061245b565b9150806129f0816134d3565b9150506128b3565b50600c54600d54612a0891611e16565b821015612a1f57600d54600c549350935050509091565b90939092509050565b600080600080612a3785612ec0565b90506000612a4486612ee3565b90506000612a5c82612a56898661245b565b9061245b565b979296509094509092505050565b6000808080612a798886611d97565b90506000612a878887611d97565b90506000612a958888611d97565b90506000612aa782612a56868661245b565b939b939a50919850919650505050505050565b6000612ac7826002611e16565b90506000612ad5838361245b565b905047612ae182612f9d565b6000612aed478361245b565b9050612af984826130ef565b601a54612b06908661245b565b601a555050505050565b47612b1a82612f9d565b6000612b26478361245b565b601f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612b61573d6000803e3d6000fd5b50601b54612b6f908461245b565b601b55505050565b47612b8182612f9d565b6000612b8d478361245b565b6020546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612bc8573d6000803e3d6000fd5b50601c54612bd6908461245b565b601c55505050565b6000612c036016546122246014546122246018546012546123ad90919063ffffffff16565b905080612c0d5750565b50601280546013556014805460155560168054601755601880546019556000938490559183905582905555565b600080600080600080612c4c8761240c565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612c7e908861245b565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612cad908761245b565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612cdc90866123ad565b6001600160a01b038916600090815260016020526040902055612cfe816131a3565b612d08848361322b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612d4d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612d728761240c565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612da4908761245b565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612dda90846123ad565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612cdc90866123ad565b600080600080600080612e1b8761240c565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612cad908761245b565b600080600080600080612e5f8761240c565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612e91908861245b565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612da4908761245b565b6000610ca46103e8612edd60125485611d9790919063ffffffff16565b90611e16565b6000612f006103e8612edd60145485611d9790919063ffffffff16565b601a6000828254612f11919061358f565b9091555050601654612f2c906103e890612edd908590611d97565b601b6000828254612f3d919061358f565b9091555050601854612f58906103e890612edd908590611d97565b601c6000828254612f69919061358f565b92505081905550610ca46103e8612edd601854601654601454612f8c919061358f565b612f96919061358f565b8590611d97565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fd257612fd261347a565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561302b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304f91906134ee565b816001815181106130625761306261347a565b6001600160a01b039283166020918202929092010152601d546130889130911684611e58565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906130c19085906000908690309042906004016135a7565b600060405180830381600087803b1580156130db57600080fd5b505af1158015612348573d6000803e3d6000fd5b601d546131079030906001600160a01b031684611e58565b601d5460215460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613177573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061319c9190613618565b5050505050565b60006131ad61238a565b905060006131bb8383611d97565b306000908152600160205260409020549091506131d890826123ad565b3060009081526001602090815260408083209390935560059052205460ff1615611960573060009081526002602052604090205461321690846123ad565b30600090815260026020526040902055505050565b600d54613238908361245b565b600d55600b5461324890826123ad565b600b555050565b600060208083528351808285015260005b8181101561327c57858101830151858201604001528201613260565b8181111561328e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611a7e57600080fd5b600080604083850312156132cc57600080fd5b82356132d7816132a4565b946020939093013593505050565b8015158114611a7e57600080fd5b6000806040838503121561330657600080fd5b8235613311816132a4565b91506020830135613321816132e5565b809150509250929050565b60008060006060848603121561334157600080fd5b833561334c816132a4565b9250602084013561335c816132a4565b929592945050506040919091013590565b60006020828403121561337f57600080fd5b5035919050565b60006020828403121561339857600080fd5b8135610e3a816132a4565b600080604083850312156133b657600080fd5b823591506020830135613321816132e5565b6000602082840312156133da57600080fd5b8135610e3a816132e5565b600080600080608085870312156133fb57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561342a57600080fd5b8235613435816132a4565b91506020830135613321816132a4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156134b8576134b8613490565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156134e7576134e7613490565b5060010190565b60006020828403121561350057600080fd5b8151610e3a816132a4565b6020808252600c908201526b5a45524f204144445245535360a01b604082015260600190565b60006020828403121561354357600080fd5b8151610e3a816132e5565b600081600019048311821515161561356857613568613490565b500290565b60008261358a57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156135a2576135a2613490565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156135f75784516001600160a01b0316835293830193918301916001016135d2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561362d57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220449998d044b3a6a7152f1478cda178137350d0c6e0480852b165dd5f5f7418f364736f6c634300080a0033

Deployed Bytecode Sourcemap

12261:25579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14345:41;;;;;;;;;;-1:-1:-1;14345:41:0;;;;-1:-1:-1;;;;;14345:41:0;;;;;;-1:-1:-1;;;;;205:32:1;;;187:51;;175:2;160:18;14345:41:0;;;;;;;;16782:83;;;;;;;;;;-1:-1:-1;16852:5:0;;;;;;;;;;;;-1:-1:-1;;;16852:5:0;;;;16782:83;;;;;;;:::i;18275:161::-;;;;;;;;;;-1:-1:-1;18275:161:0;;;;;:::i;:::-;;:::i;:::-;;;1472:14:1;;1465:22;1447:41;;1435:2;1420:18;18275:161:0;1307:187:1;14612:32:0;;;;;;;;;;-1:-1:-1;14612:32:0;;;;-1:-1:-1;;;;;14612:32:0;;;14221:33;;;;;;;;;;;;;;;;;;;1853:25:1;;;1841:2;1826:18;14221:33:0;1707:177:1;19396:87:0;;;;;;;;;;-1:-1:-1;19465:10:0;;19396:87;;36674:186;;;;;;;;;;-1:-1:-1;36674:186:0;;;;;:::i;:::-;;:::i;:::-;;17640:95;;;;;;;;;;-1:-1:-1;17720:7:0;;17640:95;;18444:313;;;;;;;;;;-1:-1:-1;18444:313:0;;;;;:::i;:::-;;:::i;14430:84::-;;;;;;;;;;-1:-1:-1;14430:84:0;;;;-1:-1:-1;;;;;14430:84:0;;;15405:22;;;;;;;;;;-1:-1:-1;15405:22:0;;;;;;;;;;;;;;;;;;;3091:25:1;;;3147:2;3132:18;;3125:34;;;;3175:18;;;3168:34;3233:2;3218:18;;3211:34;3078:3;3063:19;15405:22:0;2860:391:1;20312:241:0;;;;;;;;;;-1:-1:-1;20312:241:0;;;;;:::i;:::-;;:::i;17549:83::-;;;;;;;;;;-1:-1:-1;17549:83:0;;13361:2;3583:36:1;;3571:2;3556:18;17549:83:0;3441:184:1;20914:468:0;;;;;;;;;;-1:-1:-1;20914:468:0;;;;;:::i;:::-;;:::i;36468:198::-;;;;;;;;;;-1:-1:-1;36468:198:0;;;;;:::i;:::-;;:::i;18765:218::-;;;;;;;;;;-1:-1:-1;18765:218:0;;;;;:::i;:::-;;:::i;19491:377::-;;;;;;;;;;-1:-1:-1;19491:377:0;;;;;:::i;:::-;;:::i;21394:113::-;;;;;;;;;;-1:-1:-1;21394:113:0;;;;;:::i;:::-;;:::i;19876:428::-;;;;;;;;;;-1:-1:-1;19876:428:0;;;;;:::i;:::-;;:::i;15378:20::-;;;;;;;;;;-1:-1:-1;15378:20:0;;;;;;;;;;;;;;;36981:103;;;;;;;;;;-1:-1:-1;36981:103:0;;;;;:::i;:::-;;:::i;14681:40::-;;;;;;;;;;-1:-1:-1;14681:40:0;;;;-1:-1:-1;;;14681:40:0;;;;;;20561:345;;;;;;;;;;-1:-1:-1;20561:345:0;;;;;:::i;:::-;;:::i;26716:123::-;;;;;;;;;;-1:-1:-1;26716:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;26804:27:0;26780:4;26804:27;;;:18;:27;;;;;;;;;26716:123;36359:101;;;;;;;;;;-1:-1:-1;36359:101:0;;;;;:::i;:::-;;:::i;16873:573::-;;;;;;;;;;-1:-1:-1;16873:573:0;;;;;:::i;:::-;;:::i;22200:185::-;;;;;;;;;;-1:-1:-1;22200:185:0;;;;;:::i;:::-;;:::i;26847:114::-;;;;;;;;;;-1:-1:-1;26847:114:0;;;;;:::i;:::-;;:::i;17743:198::-;;;;;;;;;;-1:-1:-1;17743:198:0;;;;;:::i;:::-;;:::i;9466:148::-;;;;;;;;;;;;;:::i;36245:106::-;;;;;;;;;;-1:-1:-1;36245:106:0;;;;;:::i;:::-;;:::i;13565:55::-;;;;;;;;;;;;;;;;13635:53;;;;;;;;;;;;;;;;36028:209;;;;;;;;;;-1:-1:-1;36028:209:0;;;;;:::i;:::-;;:::i;13703:41::-;;;;;;;;;;-1:-1:-1;13703:41:0;;;;;;;;19268:120;;;;;;;;;;-1:-1:-1;19268:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19360:20:0;19336:4;19360:20;;;:11;:20;;;;;;;;;19268:120;35681:309;;;;;;;;;;-1:-1:-1;35681:309:0;;;;;:::i;:::-;;:::i;12944:48::-;;;;;;;;;;-1:-1:-1;12944:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37092:365;;;;;;;;;;-1:-1:-1;37092:365:0;;;;;:::i;:::-;;:::i;9252:79::-;;;;;;;;;;-1:-1:-1;9290:7:0;9317:6;-1:-1:-1;;;;;9317:6:0;9252:79;;17454:87;;;;;;;;;;-1:-1:-1;17526:7:0;;;;;;;;;;;;-1:-1:-1;;;17526:7:0;;;;17454:87;;18991:269;;;;;;;;;;-1:-1:-1;18991:269:0;;;;;:::i;:::-;;:::i;17949:167::-;;;;;;;;;;-1:-1:-1;17949:167:0;;;;;:::i;:::-;;:::i;13372:52::-;;;;;;;;;;;;;;;;13279:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13279:40:0;;;;;35520:153;;;;;;;;;;;;;:::i;14301:35::-;;;;;;;;;;;;;;;;21639:171;;;;;;;;;;-1:-1:-1;21639:171:0;;;;;:::i;:::-;;:::i;12999:52::-;;;;;;;;;;-1:-1:-1;12999:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21818:183;;;;;;;;;;-1:-1:-1;21818:183:0;;;;;:::i;:::-;;:::i;13489:67::-;;;;;;;;;;;;;;;;14393:28;;;;;;;;;;-1:-1:-1;14393:28:0;;;;-1:-1:-1;;;;;14393:28:0;;;13229:43;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13229:43:0;;;;;12893:44;;;;;;;;;;-1:-1:-1;12893:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18124:143;;;;;;;;;;-1:-1:-1;18124:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18232:18:0;;;18205:7;18232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18124:143;22009:183;;;;;;;;;;-1:-1:-1;22009:183:0;;;;;:::i;:::-;;:::i;37465:370::-;;;;;;;;;;-1:-1:-1;37465:370:0;;;;;:::i;:::-;;:::i;21519:112::-;;;;;;;;;;-1:-1:-1;21519:112:0;;;;;:::i;:::-;;:::i;36868:105::-;;;;;;;;;;-1:-1:-1;36868:105:0;;;;;:::i;:::-;;:::i;9622:244::-;;;;;;;;;;-1:-1:-1;9622:244:0;;;;;:::i;:::-;;:::i;13751:35::-;;;;;;;;;;-1:-1:-1;13751:35:0;;;;;;;;;;;13060:66;;;;;;;;;;-1:-1:-1;13060:66:0;;;;-1:-1:-1;;;;;13060:66:0;;;14521:84;;;;;;;;;;-1:-1:-1;14521:84:0;;;;-1:-1:-1;;;;;14521:84:0;;;14261:33;;;;;;;;;;;;;;;;18275:161;18350:4;18367:39;2371:10;18390:7;18399:6;18367:8;:39::i;:::-;-1:-1:-1;18424:4:0;18275:161;;;;;:::o;36674:186::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36761:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;::::1;;:32;;::::0;::::1;;;;36753:57;;;::::0;-1:-1:-1;;;36753:57:0;;6048:2:1;36753:57:0::1;::::0;::::1;6030:21:1::0;6087:2;6067:18;;;6060:30;-1:-1:-1;;;6106:18:1;;;6099:43;6159:18;;36753:57:0::1;5846:337:1::0;36753:57:0::1;-1:-1:-1::0;;;;;36821:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:31;;-1:-1:-1;;36821:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36674:186::o;18444:313::-;18542:4;18559:36;18569:6;18577:9;18588:6;18559:9;:36::i;:::-;18606:121;18615:6;2371:10;18637:89;18675:6;18637:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18637:19:0;;;;;;:11;:19;;;;;;;;2371:10;18637:33;;;;;;;;;;:37;:89::i;:::-;18606:8;:121::i;:::-;-1:-1:-1;18745:4:0;18444:313;;;;;:::o;20312:241::-;20378:7;20417;;20406;:18;;20398:61;;;;-1:-1:-1;;;20398:61:0;;6390:2:1;20398:61:0;;;6372:21:1;6429:2;6409:18;;;6402:30;6468:32;6448:18;;;6441:60;6518:18;;20398:61:0;6188:354:1;20398:61:0;20470:19;20493:10;:8;:10::i;:::-;20470:33;-1:-1:-1;20521:24:0;:7;20470:33;20521:11;:24::i;:::-;20514:31;20312:241;-1:-1:-1;;;20312:241:0:o;20914:468::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20996:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20988:49;;;::::0;-1:-1:-1;;;20988:49:0;;6749:2:1;20988:49:0::1;::::0;::::1;6731:21:1::0;6788:2;6768:18;;;6761:30;-1:-1:-1;;;6807:18:1;;;6800:46;6863:18;;20988:49:0::1;6547:340:1::0;20988:49:0::1;21053:9;21048:327;21072:9;:16:::0;21068:20;::::1;21048:327;;;21130:7;-1:-1:-1::0;;;;;21114:23:0::1;:9;21124:1;21114:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21114:12:0::1;:23;21110:254;;;21173:9;21183:16:::0;;:20:::1;::::0;21202:1:::1;::::0;21183:20:::1;:::i;:::-;21173:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21158:9:::1;:12:::0;;-1:-1:-1;;;;;21173:31:0;;::::1;::::0;21168:1;;21158:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21158:46:0::1;-1:-1:-1::0;;;;;21158:46:0;;::::1;;::::0;;21223:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21262:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21262:28:0::1;::::0;;21309:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21309:15:0;;;;;-1:-1:-1;;;;;;21309:15:0::1;::::0;;;;;21048:327:::1;20914:468:::0;:::o;21110:254::-:1;21090:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21048:327;;;;20914:468:::0;:::o;36468:198::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36559:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;:36;;::::0;::::1;;;;36551:61;;;::::0;-1:-1:-1;;;36551:61:0;;6048:2:1;36551:61:0::1;::::0;::::1;6030:21:1::0;6087:2;6067:18;;;6060:30;-1:-1:-1;;;6106:18:1;;;6099:43;6159:18;;36551:61:0::1;5846:337:1::0;36551:61:0::1;-1:-1:-1::0;;;;;36623:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:35;;-1:-1:-1;;36623:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36468:198::o;18765:218::-;2371:10;18853:4;18902:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18902:34:0;;;;;;;;;;18853:4;;18870:83;;18893:7;;18902:50;;18941:10;18902:38;:50::i;19491:377::-;2371:10;19543:14;19592:19;;;:11;:19;;;;;;;;19591:20;19583:77;;;;-1:-1:-1;;;19583:77:0;;7760:2:1;19583:77:0;;;7742:21:1;7799:2;7779:18;;;7772:30;7838:34;7818:18;;;7811:62;-1:-1:-1;;;7889:18:1;;;7882:42;7941:19;;19583:77:0;7558:408:1;19583:77:0;19672:15;19696:19;19707:7;19696:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19744:15:0;;;;;;:7;:15;;;;;;19671:44;;-1:-1:-1;19744:28:0;;:15;-1:-1:-1;19671:44:0;19744:19;:28::i;:::-;-1:-1:-1;;;;;19726:15:0;;;;;;:7;:15;;;;;:46;19793:7;;:20;;19805:7;19793:11;:20::i;:::-;19783:7;:30;19837:10;;:23;;19852:7;19837:14;:23::i;:::-;19824:10;:36;-1:-1:-1;;;19491:377:0:o;21394:113::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21465:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;21465:34:0::1;21495:4;21465:34;::::0;;21394:113::o;19876:428::-;19961:7;20000;;19989;:18;;19981:59;;;;-1:-1:-1;;;19981:59:0;;8173:2:1;19981:59:0;;;8155:21:1;8212:2;8192:18;;;8185:30;8251;8231:18;;;8224:58;8299:18;;19981:59:0;7971:352:1;19981:59:0;20056:17;20051:246;;20091:15;20115:19;20126:7;20115:10;:19::i;:::-;-1:-1:-1;20090:44:0;;-1:-1:-1;20149:14:0;;-1:-1:-1;;;;;20149:14:0;20051:246;20198:23;20229:19;20240:7;20229:10;:19::i;:::-;-1:-1:-1;20196:52:0;;-1:-1:-1;20263:22:0;;-1:-1:-1;;;;;20263:22:0;36981:103;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;37050:16:::1;:26:::0;;;::::1;;;;-1:-1:-1::0;;37050:26:0;;::::1;::::0;;;::::1;::::0;;36981:103::o;20561:345::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20644:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20643:21;20635:73;;;::::0;-1:-1:-1;;;20635:73:0;;8530:2:1;20635:73:0::1;::::0;::::1;8512:21:1::0;8569:2;8549:18;;;8542:30;8608:34;8588:18;;;8581:62;-1:-1:-1;;;8659:18:1;;;8652:37;8706:19;;20635:73:0::1;8328:403:1::0;20635:73:0::1;-1:-1:-1::0;;;;;20722:16:0;::::1;20741:1;20722:16:::0;;;:7:::1;:16;::::0;;;;;:20;20719:108:::1;;-1:-1:-1::0;;;;;20798:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20778:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20759:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20719:108:::1;-1:-1:-1::0;;;;;20837:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20837:27:0::1;20860:4;20837:27:::0;;::::1;::::0;;;20875:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20875:23:0::1;::::0;;::::1;::::0;;20561:345::o;36359:101::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;36429:12:::1;:23:::0;36359:101::o;16873:573::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;16992:15:::1;::::0;-1:-1:-1;;;;;16970:38:0;;::::1;16992:15:::0;::::1;16970:38;;16952:115;;;::::0;-1:-1:-1;;;16952:115:0;;8938:2:1;16952:115:0::1;::::0;::::1;8920:21:1::0;8977:2;8957:18;;;8950:30;9016:34;8996:18;;;8989:62;-1:-1:-1;;;9067:18:1;;;9060:33;9110:19;;16952:115:0::1;8736:399:1::0;16952:115:0::1;17078:35;17135:10;17078:68;;17248:16;-1:-1:-1::0;;;;;17248:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17230:70:0::1;;17309:4;17316:16;-1:-1:-1::0;;;;;17316:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17230:110;::::0;-1:-1:-1;;;;;;17230:110:0::1;::::0;;;;;;-1:-1:-1;;;;;9626:15:1;;;17230:110:0::1;::::0;::::1;9608:34:1::0;9678:15;;9658:18;;;9651:43;9543:18;;17230:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17214:13;:126:::0;;-1:-1:-1;;;;;17214:126:0;;::::1;-1:-1:-1::0;;;;;;17214:126:0;;::::1;;::::0;;;17404:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;16873:573:0:o;22200:185::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22291:26:0;::::1;22283:51;;;;-1:-1:-1::0;;;22283:51:0::1;;;;;;;:::i;:::-;22345:17;:32:::0;;-1:-1:-1;;;;;;22345:32:0::1;-1:-1:-1::0;;;;;22345:32:0;;;::::1;::::0;;;::::1;::::0;;22200:185::o;26847:114::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;26915:29:::1;:38:::0;26847:114::o;17743:198::-;-1:-1:-1;;;;;17833:20:0;;17809:7;17833:20;;;:11;:20;;;;;;;;17829:49;;;-1:-1:-1;;;;;;17862:16:0;;;;;:7;:16;;;;;;;17743:198::o;17829:49::-;-1:-1:-1;;;;;17916:16:0;;;;;;:7;:16;;;;;;17896:37;;:19;:37::i;9466:148::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;9573:1:::1;9557:6:::0;;9536:40:::1;::::0;-1:-1:-1;;;;;9557:6:0;;::::1;::::0;9536:40:::1;::::0;9573:1;;9536:40:::1;9604:1;9587:19:::0;;-1:-1:-1;;;;;;9587:19:0::1;::::0;;9466:148::o;36245:106::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;36322:10:::1;:21:::0;36245:106::o;36028:209::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36202:17:0;;;::::1;;::::0;;;:11:::1;:17;::::0;;;;:27;;-1:-1:-1;;36202:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36028:209::o;35681:309::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35777:29:0;::::1;35801:4;35777:29;35774:209;;;35823:54;35851:4;35857:7;9290::::0;9317:6;-1:-1:-1;;;;;9317:6:0;;9252:79;35857:7:::1;35865:11;35823:19;:54::i;35774:209::-;35927:12;-1:-1:-1::0;;;;;35920:29:0::1;;35950:7;9290::::0;9317:6;-1:-1:-1;;;;;9317:6:0;;9252:79;35950:7:::1;35920:51;::::0;-1:-1:-1;;;;;;35920:51:0::1;::::0;;;;;;-1:-1:-1;;;;;10238:32:1;;;35920:51:0::1;::::0;::::1;10220::1::0;10287:18;;;10280:34;;;10193:18;;35920:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35681:309:::0;;:::o;37092:365::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;37265:6:::1;:33:::0;;;;37309:22;:38;;;;37358:22;:38;37407:24;:42;37092:365::o;18991:269::-;19084:4;19101:129;2371:10;19124:7;19133:96;19172:15;19133:96;;;;;;;;;;;;;;;;;2371:10;19133:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19133:34:0;;;;;;;;;;;;:38;:96::i;17949:167::-;18027:4;18044:42;2371:10;18068:9;18079:6;18044:9;:42::i;35520:153::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;35585:58:::1;::::0;35573:7:::1;::::0;35593:10:::1;::::0;35617:21:::1;::::0;35573:7;35585:58;35573:7;35585:58;35617:21;35593:10;35585:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35572:71;;;35662:2;35654:11;;;::::0;::::1;;35561:112;35520:153::o:0;21639:171::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;21716:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;21716:32:0::1;-1:-1:-1::0;;;;21716:32:0;;::::1;;::::0;;21764:38:::1;::::0;::::1;::::0;::::1;::::0;21740:8;1472:14:1;1465:22;1447:41;;1435:2;1420:18;;1307:187;21764:38:0::1;;;;;;;;21639:171:::0;:::o;21818:183::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21909:26:0;::::1;21901:51;;;;-1:-1:-1::0;;;21901:51:0::1;;;;;;;:::i;:::-;21963:15;:30:::0;;-1:-1:-1;;;;;;21963:30:0::1;-1:-1:-1::0;;;;;21963:30:0;;;::::1;::::0;;;::::1;::::0;;21818:183::o;22009:::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22100:26:0;::::1;22092:51;;;;-1:-1:-1::0;;;22092:51:0::1;;;;;;;:::i;:::-;22154:15;:30:::0;;-1:-1:-1;;;;;;22154:30:0::1;-1:-1:-1::0;;;;;22154:30:0;;;::::1;::::0;;;::::1;::::0;;22009:183::o;37465:370::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;37639:7:::1;:34:::0;;;;37684:23;:39;;;;37734:23;:39;37784:25;:43;37465:370::o;21519:112::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21588:27:0::1;21618:5;21588:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;21588:35:0::1;::::0;;21519:112::o;36868:105::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;36933:22:::1;:32:::0;;-1:-1:-1;;36933:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36868:105::o;9622:244::-;9379:6;;-1:-1:-1;;;;;9379:6:0;2371:10;9379:22;9371:67;;;;-1:-1:-1;;;9371:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9711:22:0;::::1;9703:73;;;::::0;-1:-1:-1;;;9703:73:0;;10987:2:1;9703:73:0::1;::::0;::::1;10969:21:1::0;11026:2;11006:18;;;10999:30;11065:34;11045:18;;;11038:62;-1:-1:-1;;;11116:18:1;;;11109:36;11162:19;;9703:73:0::1;10785:402:1::0;9703:73:0::1;9813:6;::::0;;9792:38:::1;::::0;-1:-1:-1;;;;;9792:38:0;;::::1;::::0;9813:6;::::1;::::0;9792:38:::1;::::0;::::1;9841:6;:17:::0;;-1:-1:-1;;;;;;9841:17:0::1;-1:-1:-1::0;;;;;9841:17:0;;;::::1;::::0;;;::::1;::::0;;9622:244::o;1320:256::-;1378:7;1408:6;1404:47;;-1:-1:-1;1438:1:0;1431:8;;1404:47;1463:9;1475:5;1479:1;1475;:5;:::i;:::-;1463:17;-1:-1:-1;1508:1:0;1499:5;1503:1;1463:17;1499:5;:::i;:::-;:10;1491:56;;;;-1:-1:-1;;;1491:56:0;;11789:2:1;1491:56:0;;;11771:21:1;11828:2;11808:18;;;11801:30;11867:34;11847:18;;;11840:62;-1:-1:-1;;;11918:18:1;;;11911:31;11959:19;;1491:56:0;11587:397:1;1584:132:0;1642:7;1669:39;1673:1;1676;1669:39;;;;;;;;;;;;;;;;;:3;:39::i;26969:329::-;-1:-1:-1;;;;;27062:19:0;;27054:64;;;;-1:-1:-1;;;27054:64:0;;12191:2:1;27054:64:0;;;12173:21:1;;;12210:18;;;12203:30;12269:34;12249:18;;;12242:62;12321:18;;27054:64:0;11989:356:1;27054:64:0;-1:-1:-1;;;;;27137:21:0;;27129:64;;;;-1:-1:-1;;;27129:64:0;;12552:2:1;27129:64:0;;;12534:21:1;12591:2;12571:18;;;12564:30;12630:32;12610:18;;;12603:60;12680:18;;27129:64:0;12350:354:1;27129:64:0;-1:-1:-1;;;;;27206:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27258:32;;1853:25:1;;;27258:32:0;;1826:18:1;27258:32:0;;;;;;;26969:329;;;:::o;27306:1575::-;-1:-1:-1;;;;;27428:18:0;;27420:64;;;;-1:-1:-1;;;27420:64:0;;12911:2:1;27420:64:0;;;12893:21:1;12950:2;12930:18;;;12923:30;12989:34;12969:18;;;12962:62;-1:-1:-1;;;13040:18:1;;;13033:31;13081:19;;27420:64:0;12709:397:1;27420:64:0;-1:-1:-1;;;;;27503:16:0;;27495:60;;;;-1:-1:-1;;;27495:60:0;;13313:2:1;27495:60:0;;;13295:21:1;13352:2;13332:18;;;13325:30;13391:33;13371:18;;;13364:61;13442:18;;27495:60:0;13111:355:1;27495:60:0;27583:1;27574:6;:10;27566:64;;;;-1:-1:-1;;;27566:64:0;;13673:2:1;27566:64:0;;;13655:21:1;13712:2;13692:18;;;13685:30;13751:34;13731:18;;;13724:62;-1:-1:-1;;;13802:18:1;;;13795:39;13851:19;;27566:64:0;13471:405:1;27566:64:0;-1:-1:-1;;;;;27650:17:0;;;;;;:11;:17;;;;;;;;27649:18;;:38;;-1:-1:-1;;;;;;27672:15:0;;;;;;:11;:15;;;;;;;;27671:16;27649:38;27641:95;;;;-1:-1:-1;;;27641:95:0;;14083:2:1;27641:95:0;;;14065:21:1;14122:2;14102:18;;;14095:30;14161:34;14141:18;;;14134:62;-1:-1:-1;;;14212:18:1;;;14205:43;14265:19;;27641:95:0;13881:409:1;27641:95:0;-1:-1:-1;;;;;27753:21:0;;;;;;:15;:21;;;;;;;;27752:22;:46;;;;-1:-1:-1;;;;;;27779:19:0;;;;;;:15;:19;;;;;;;;27778:20;27752:46;:72;;;;-1:-1:-1;27802:22:0;;;;27752:72;27749:186;;;27859:12;;27849:6;:22;;27841:82;;;;-1:-1:-1;;;27841:82:0;;14497:2:1;27841:82:0;;;14479:21:1;14536:2;14516:18;;;14509:30;14575:34;14555:18;;;14548:62;-1:-1:-1;;;14626:18:1;;;14619:45;14681:19;;27841:82:0;14295:411:1;27841:82:0;27950:16;;;;;;;:44;;;;-1:-1:-1;;;;;;27971:23:0;;;;;;:19;:23;;;;;;;;27970:24;27950:44;27947:171;;;28048:10;;28019:25;28037:6;28019:13;28029:2;28019:9;:13::i;:::-;:17;;:25::i;:::-;:39;;28011:95;;;;-1:-1:-1;;;28011:95:0;;14913:2:1;28011:95:0;;;14895:21:1;14952:2;14932:18;;;14925:30;14991:34;14971:18;;;14964:62;-1:-1:-1;;;15042:18:1;;;15035:42;15094:19;;28011:95:0;14711:408:1;28011:95:0;28130:28;28161:24;28179:4;28161:9;:24::i;:::-;28257:29;;28316:16;;28130:55;;-1:-1:-1;28233:53:0;;;;-1:-1:-1;;;28316:16:0;;;;28315:17;:53;;;;-1:-1:-1;28355:13:0;;-1:-1:-1;;;;;28349:19:0;;;28355:13;;28349:19;28315:53;:91;;;;-1:-1:-1;28385:21:0;;-1:-1:-1;;;28385:21:0;;;;28315:91;28297:223;;;28436:19;28433:74;;;28475:16;:14;:16::i;:::-;-1:-1:-1;;;;;28728:24:0;;28601:12;28728:24;;;:18;:24;;;;;;28616:4;;28728:24;;;:50;;-1:-1:-1;;;;;;28756:22:0;;;;;;:18;:22;;;;;;;;28728:50;28725:96;;;-1:-1:-1;28804:5:0;28725:96;28833:38;28848:4;28853:2;28856:6;28863:7;28833:14;:38::i;:::-;27409:1472;;;27306:1575;;;:::o;1120:192::-;1206:7;1242:12;1234:6;;;;1226:29;;;;-1:-1:-1;;;1226:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1266:9:0;1278:5;1282:1;1278;:5;:::i;:::-;1266:17;1120:192;-1:-1:-1;;;;;1120:192:0:o;23833:163::-;23874:7;23895:15;23912;23931:19;:17;:19::i;:::-;23894:56;;-1:-1:-1;23894:56:0;-1:-1:-1;23968:20:0;23894:56;;23968:11;:20::i;:::-;23961:27;;;;23833:163;:::o;787:181::-;845:7;;877:5;881:1;877;:5;:::i;:::-;865:17;;906:1;901;:6;;893:46;;;;-1:-1:-1;;;893:46:0;;15459:2:1;893:46:0;;;15441:21:1;15498:2;15478:18;;;15471:30;15537:29;15517:18;;;15510:57;15584:18;;893:46:0;15257:351:1;22641:414:0;22695:7;22704;22713;22722;22731;22740;22761:23;22786:12;22800:18;22822:20;22834:7;22822:11;:20::i;:::-;22760:82;;;;;;22854:15;22871:23;22896:12;22912:50;22924:7;22933:4;22939:10;22951;:8;:10::i;:::-;22912:11;:50::i;:::-;22853:109;;;;-1:-1:-1;22853:109:0;;-1:-1:-1;23013:15:0;;-1:-1:-1;23030:4:0;;-1:-1:-1;23036:10:0;;-1:-1:-1;22641:414:0;;-1:-1:-1;;;;;22641:414:0:o;976:136::-;1034:7;1061:43;1065:1;1068;1061:43;;;;;;;;;;;;;;;;;:3;:43::i;34906:606::-;35005:19;35028:10;:8;:10::i;:::-;35005:33;-1:-1:-1;35051:15:0;35069:23;:6;35005:33;35069:10;:23::i;:::-;-1:-1:-1;;;;;35126:15:0;;;;;;:7;:15;;;;;;35051:41;;-1:-1:-1;35126:28:0;;35051:41;35126:19;:28::i;:::-;-1:-1:-1;;;;;35108:15:0;;;;;;;:7;:15;;;;;;:46;;;;35186:18;;;;;;;:31;;35209:7;35186:22;:31::i;:::-;-1:-1:-1;;;;;35165:18:0;;;;;;;:7;:18;;;;;;;;:52;;;;35243:19;;;;;:11;:19;;;;;;;35239:97;;;-1:-1:-1;;;;;35297:15:0;;;;;;:7;:15;;;;;;:27;;35317:6;35297:19;:27::i;:::-;-1:-1:-1;;;;;35279:15:0;;;;;;:7;:15;;;;;:45;35239:97;-1:-1:-1;;;;;35351:22:0;;;;;;:11;:22;;;;;;;;35347:106;;;-1:-1:-1;;;;;35411:18:0;;;;;;:7;:18;;;;;;:30;;35434:6;35411:22;:30::i;:::-;-1:-1:-1;;;;;35390:18:0;;;;;;:7;:18;;;;;:51;35347:106;35486:9;-1:-1:-1;;;;;35469:35:0;35478:6;-1:-1:-1;;;;;35469:35:0;;35497:6;35469:35;;;;1853:25:1;;1841:2;1826:18;;1707:177;35469:35:0;;;;;;;;34994:518;;34906:606;;;:::o;1724:191::-;1810:7;1845:12;1838:5;1830:28;;;;-1:-1:-1;;;1830:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1869:9:0;1881:5;1885:1;1881;:5;:::i;28889:280::-;14964:16;:23;;-1:-1:-1;;;;14964:23:0;-1:-1:-1;;;14964:23:0;;;28949:18:::1;::::0;:22;28946:63:::1;;28973:36;28990:18;;28973:16;:36::i;:::-;29023:18;::::0;:22;29020:62:::1;;29047:35;29063:18;;29047:15;:35::i;:::-;29096:20;::::0;:24;29093:68:::1;;29122:39;29140:20;;29122:17;:39::i;:::-;15010:16:::0;:24;;-1:-1:-1;;;;15010:24:0;;;28889:280::o;31499:1071::-;31620:14;:12;:14::i;:::-;31655:7;31651:232;;;31698:13;;-1:-1:-1;;;;;31688:23:0;;;31698:13;;31688:23;31684:80;;;31736:8;26294:6;:16;26284:7;:26;26337:22;;26321:13;:38;26386:22;;26370:13;:38;26437:24;;26419:15;:42;26247:222;31736:8;31799:13;;-1:-1:-1;;;;;31786:26:0;;;31799:13;;31786:26;31782:84;;;31837:9;26529:7;:17;26519:7;:27;26573:23;;-1:-1:-1;26557:39:0;26623:23;;26607:13;:39;26675:25;;26657:15;:43;26481:227;31837:9;-1:-1:-1;;;;;31908:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31932:22:0;;;;;;:11;:22;;;;;;;;31931:23;31908:46;31904:597;;;31971:48;31993:6;32001:9;32012:6;31971:21;:48::i;:::-;31904:597;;;-1:-1:-1;;;;;32042:19:0;;;;;;:11;:19;;;;;;;;32041:20;:46;;;;-1:-1:-1;;;;;;32065:22:0;;;;;;:11;:22;;;;;;;;32041:46;32037:464;;;32104:46;32124:6;32132:9;32143:6;32104:19;:46::i;32037:464::-;-1:-1:-1;;;;;32173:19:0;;;;;;:11;:19;;;;;;;;32172:20;:47;;;;-1:-1:-1;;;;;;32197:22:0;;;;;;:11;:22;;;;;;;;32196:23;32172:47;32168:333;;;32236:44;32254:6;32262:9;32273:6;32236:17;:44::i;32168:333::-;-1:-1:-1;;;;;32302:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32325:22:0;;;;;;:11;:22;;;;;;;;32302:45;32298:203;;;32364:48;32386:6;32394:9;32405:6;32364:21;:48::i;32298:203::-;32445:44;32463:6;32471:9;32482:6;32445:17;:44::i;:::-;32525:7;32521:41;;32547:15;26069;;26059:7;:25;26111:20;;26095:13;:36;26158:21;;26142:13;:37;26208:23;;26190:15;:41;26015:224;32547:15;31499:1071;;;;:::o;24004:561::-;24101:7;;24137;;24054;;;;;24161:289;24185:9;:16;24181:20;;24161:289;;;24251:7;24227;:21;24235:9;24245:1;24235:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24235:12:0;24227:21;;;;;;;;;;;;;:31;;:66;;;24286:7;24262;:21;24270:9;24280:1;24270:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24270:12:0;24262:21;;;;;;;;;;;;;:31;24227:66;24223:97;;;24303:7;;24312;;24295:25;;;;;;;24004:561;;:::o;24223:97::-;24345:34;24357:7;:21;24365:9;24375:1;24365:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24365:12:0;24357:21;;;;;;;;;;;;;24345:7;;:11;:34::i;:::-;24335:44;;24404:34;24416:7;:21;24424:9;24434:1;24424:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24424:12:0;24416:21;;;;;;;;;;;;;24404:7;;:11;:34::i;:::-;24394:44;-1:-1:-1;24203:3:0;;;;:::i;:::-;;;;24161:289;;;-1:-1:-1;24486:7:0;;24474;;:20;;:11;:20::i;:::-;24464:7;:30;24460:61;;;24504:7;;24513;;24496:25;;;;;;24004:561;;:::o;24460:61::-;24540:7;;24549;;-1:-1:-1;24004:561:0;-1:-1:-1;24004:561:0:o;23063:325::-;23118:7;23127;23136;23156:12;23171:24;23187:7;23171:15;:24::i;:::-;23156:39;;23206:18;23227:30;23249:7;23227:21;:30::i;:::-;23206:51;-1:-1:-1;23268:23:0;23294:33;23206:51;23294:17;:7;23306:4;23294:11;:17::i;:::-;:21;;:33::i;:::-;23268:59;23363:4;;-1:-1:-1;23369:10:0;;-1:-1:-1;23063:325:0;;-1:-1:-1;;;23063:325:0:o;23396:429::-;23511:7;;;;23567:24;:7;23579:11;23567;:24::i;:::-;23549:42;-1:-1:-1;23602:12:0;23617:21;:4;23626:11;23617:8;:21::i;:::-;23602:36;-1:-1:-1;23649:18:0;23670:27;:10;23685:11;23670:14;:27::i;:::-;23649:48;-1:-1:-1;23708:23:0;23734:33;23649:48;23734:17;:7;23746:4;23734:11;:17::i;:33::-;23786:7;;;;-1:-1:-1;23812:4:0;;-1:-1:-1;23396:429:0;;-1:-1:-1;;;;;;;23396:429:0:o;29873:405::-;29931:9;29943:13;:6;29954:1;29943:10;:13::i;:::-;29931:25;-1:-1:-1;29967:14:0;29984:16;:6;29931:25;29984:10;:16::i;:::-;29967:33;-1:-1:-1;30032:21:0;30064:27;29967:33;30064:16;:27::i;:::-;30102:19;30124:40;:21;30150:13;30124:25;:40::i;:::-;30102:62;;30175:33;30188:4;30193:14;30175:12;:33::i;:::-;30240:18;;:30;;30263:6;30240:22;:30::i;:::-;30219:18;:51;-1:-1:-1;;;;;29873:405:0:o;29177:337::-;29255:21;29287:24;29304:6;29287:16;:24::i;:::-;29322:19;29344:40;:21;29370:13;29344:25;:40::i;:::-;29403:15;;29395:49;;29322:62;;-1:-1:-1;;;;;;29403:15:0;;29395:49;;;;;29322:62;;29403:15;29395:49;29403:15;29395:49;29322:62;29403:15;29395:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29476:18:0;;:30;;29499:6;29476:22;:30::i;:::-;29455:18;:51;-1:-1:-1;;;29177:337:0:o;29522:343::-;29602:21;29634:24;29651:6;29634:16;:24::i;:::-;29669:19;29691:40;:21;29717:13;29691:25;:40::i;:::-;29750:15;;29742:49;;29669:62;;-1:-1:-1;;;;;;29750:15:0;;29742:49;;;;;29669:62;;29750:15;29742:49;29750:15;29742:49;29669:62;29750:15;29742:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29825:20:0;;:32;;29850:6;29825:24;:32::i;:::-;29802:20;:55;-1:-1:-1;;;29522:343:0:o;25531:472::-;25574:13;25590:66;25642:13;;25590:47;25623:13;;25590:28;25602:15;;25590:7;;:11;;:28;;;;:::i;:66::-;25574:82;-1:-1:-1;25670:13:0;25667:25;;25685:7;25531:472::o;25667:25::-;-1:-1:-1;25731:7:0;;;25713:15;:25;25772:13;;;25749:20;:36;25820:13;;;25796:21;:37;25870:15;;;25844:23;:41;-1:-1:-1;25898:11:0;;;;25920:17;;;;25948;;;25976:19;25531:472::o;33682:566::-;33785:15;33802:23;33827:12;33841:23;33866:12;33880:18;33902:19;33913:7;33902:10;:19::i;:::-;-1:-1:-1;;;;;33950:15:0;;;;;;:7;:15;;;;;;33784:137;;-1:-1:-1;33784:137:0;;-1:-1:-1;33784:137:0;;-1:-1:-1;33784:137:0;-1:-1:-1;33784:137:0;-1:-1:-1;33784:137:0;-1:-1:-1;33950:28:0;;33970:7;33950:19;:28::i;:::-;-1:-1:-1;;;;;33932:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34007:7;:15;;;;:28;;34027:7;34007:19;:28::i;:::-;-1:-1:-1;;;;;33989:15:0;;;;;;;:7;:15;;;;;;:46;;;;34067:18;;;;;;;:39;;34090:15;34067:22;:39::i;:::-;-1:-1:-1;;;;;34046:18:0;;;;;;:7;:18;;;;;:60;34120:26;34135:10;34120:14;:26::i;:::-;34157:23;34169:4;34175;34157:11;:23::i;:::-;34213:9;-1:-1:-1;;;;;34196:44:0;34205:6;-1:-1:-1;;;;;34196:44:0;;34224:15;34196:44;;;;1853:25:1;;1841:2;1826:18;;1707:177;34196:44:0;;;;;;;;33773:475;;;;;;33682:566;;;:::o;33088:586::-;33189:15;33206:23;33231:12;33245:23;33270:12;33284:18;33306:19;33317:7;33306:10;:19::i;:::-;-1:-1:-1;;;;;33354:15:0;;;;;;:7;:15;;;;;;33188:137;;-1:-1:-1;33188:137:0;;-1:-1:-1;33188:137:0;;-1:-1:-1;33188:137:0;-1:-1:-1;33188:137:0;-1:-1:-1;33188:137:0;-1:-1:-1;33354:28:0;;33188:137;33354:19;:28::i;:::-;-1:-1:-1;;;;;33336:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33414:18;;;;;:7;:18;;;;;:39;;33437:15;33414:22;:39::i;:::-;-1:-1:-1;;;;;33393:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33485:7;:18;;;;:39;;33508:15;33485:22;:39::i;32578:502::-;32677:15;32694:23;32719:12;32733:23;32758:12;32772:18;32794:19;32805:7;32794:10;:19::i;:::-;-1:-1:-1;;;;;32842:15:0;;;;;;:7;:15;;;;;;32676:137;;-1:-1:-1;32676:137:0;;-1:-1:-1;32676:137:0;;-1:-1:-1;32676:137:0;-1:-1:-1;32676:137:0;-1:-1:-1;32676:137:0;-1:-1:-1;32842:28:0;;32676:137;32842:19;:28::i;34256:642::-;34359:15;34376:23;34401:12;34415:23;34440:12;34454:18;34476:19;34487:7;34476:10;:19::i;:::-;-1:-1:-1;;;;;34524:15:0;;;;;;:7;:15;;;;;;34358:137;;-1:-1:-1;34358:137:0;;-1:-1:-1;34358:137:0;;-1:-1:-1;34358:137:0;-1:-1:-1;34358:137:0;-1:-1:-1;34358:137:0;-1:-1:-1;34524:28:0;;34544:7;34524:19;:28::i;:::-;-1:-1:-1;;;;;34506:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34581:7;:15;;;;:28;;34601:7;34581:19;:28::i;24946:154::-;25010:7;25037:55;25076:5;25037:20;25049:7;;25037;:11;;:20;;;;:::i;:::-;:24;;:55::i;25108:413::-;25173:7;25217:37;25248:5;25217:26;25229:13;;25217:7;:11;;:26;;;;:::i;:37::-;25195:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25299:13:0;;25287:37;;25318:5;;25287:26;;:7;;:11;:26::i;:37::-;25265:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;25371:15:0;;25359:39;;25392:5;;25359:28;;:7;;:11;:28::i;:39::-;25335:20;;:63;;;;;;;:::i;:::-;;;;;;;;25418:95;25497:5;25418:60;25462:15;;25446:13;;25430;;:29;;;;:::i;:::-;:47;;;;:::i;:::-;25418:7;;:11;:60::i;30294:589::-;30444:16;;;30458:1;30444:16;;;;;;;;30420:21;;30444:16;;;;;;;;;;-1:-1:-1;30444:16:0;30420:40;;30489:4;30471;30476:1;30471:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30471:23:0;;;:7;;;;;;;;;;:23;;;;30515:15;;:22;;;-1:-1:-1;;;30515:22:0;;;;:15;;;;;:20;;:22;;;;;30471:7;;30515:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30505:4;30510:1;30505:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30505:32:0;;;:7;;;;;;;;;:32;30582:15;;30550:62;;30567:4;;30582:15;30600:11;30550:8;:62::i;:::-;30651:15;;:224;;-1:-1:-1;;;30651:224:0;;-1:-1:-1;;;;;30651:15:0;;;;:66;;:224;;30732:11;;30651:15;;30802:4;;30829;;30849:15;;30651:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30895:523;31075:15;;31043:62;;31060:4;;-1:-1:-1;;;;;31075:15:0;31093:11;31043:8;:62::i;:::-;31148:15;;31352:17;;31148:262;;-1:-1:-1;;;31148:262:0;;31220:4;31148:262;;;17071:34:1;17121:18;;;17114:34;;;31148:15:0;17164:18:1;;;17157:34;;;17207:18;;;17200:34;-1:-1:-1;;;;;31352:17:0;;;17250:19:1;;;17243:44;31384:15:0;17303:19:1;;;17296:35;31148:15:0;;;:31;;31187:9;;17005:19:1;;31148:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30895:523;;:::o;24577:357::-;24640:19;24663:10;:8;:10::i;:::-;24640:33;-1:-1:-1;24684:18:0;24705:27;:10;24640:33;24705:14;:27::i;:::-;24784:4;24768:22;;;;:7;:22;;;;;;24684:48;;-1:-1:-1;24768:38:0;;24684:48;24768:26;:38::i;:::-;24759:4;24743:22;;;;:7;:22;;;;;;;;:63;;;;24820:11;:26;;;;;;24817:107;;;24902:4;24886:22;;;;:7;:22;;;;;;:38;;24913:10;24886:26;:38::i;:::-;24877:4;24861:22;;;;:7;:22;;;;;:63;24629:305;;24577:357;:::o;22486:147::-;22564:7;;:17;;22576:4;22564:11;:17::i;:::-;22554:7;:27;22605:10;;:20;;22620:4;22605:14;:20::i;:::-;22592:10;:33;-1:-1:-1;;22486:147:0:o;249:597:1:-;361:4;390:2;419;408:9;401:21;451:6;445:13;494:6;489:2;478:9;474:18;467:34;519:1;529:140;543:6;540:1;537:13;529:140;;;638:14;;;634:23;;628:30;604:17;;;623:2;600:26;593:66;558:10;;529:140;;;687:6;684:1;681:13;678:91;;;757:1;752:2;743:6;732:9;728:22;724:31;717:42;678:91;-1:-1:-1;830:2:1;809:15;-1:-1:-1;;805:29:1;790:45;;;;837:2;786:54;;249:597;-1:-1:-1;;;249:597:1:o;851:131::-;-1:-1:-1;;;;;926:31:1;;916:42;;906:70;;972:1;969;962:12;987:315;1055:6;1063;1116:2;1104:9;1095:7;1091:23;1087:32;1084:52;;;1132:1;1129;1122:12;1084:52;1171:9;1158:23;1190:31;1215:5;1190:31;:::i;:::-;1240:5;1292:2;1277:18;;;;1264:32;;-1:-1:-1;;;987:315:1:o;1889:118::-;1975:5;1968:13;1961:21;1954:5;1951:32;1941:60;;1997:1;1994;1987:12;2012:382;2077:6;2085;2138:2;2126:9;2117:7;2113:23;2109:32;2106:52;;;2154:1;2151;2144:12;2106:52;2193:9;2180:23;2212:31;2237:5;2212:31;:::i;:::-;2262:5;-1:-1:-1;2319:2:1;2304:18;;2291:32;2332:30;2291:32;2332:30;:::i;:::-;2381:7;2371:17;;;2012:382;;;;;:::o;2399:456::-;2476:6;2484;2492;2545:2;2533:9;2524:7;2520:23;2516:32;2513:52;;;2561:1;2558;2551:12;2513:52;2600:9;2587:23;2619:31;2644:5;2619:31;:::i;:::-;2669:5;-1:-1:-1;2726:2:1;2711:18;;2698:32;2739:33;2698:32;2739:33;:::i;:::-;2399:456;;2791:7;;-1:-1:-1;;;2845:2:1;2830:18;;;;2817:32;;2399:456::o;3256:180::-;3315:6;3368:2;3356:9;3347:7;3343:23;3339:32;3336:52;;;3384:1;3381;3374:12;3336:52;-1:-1:-1;3407:23:1;;3256:180;-1:-1:-1;3256:180:1:o;3630:247::-;3689:6;3742:2;3730:9;3721:7;3717:23;3713:32;3710:52;;;3758:1;3755;3748:12;3710:52;3797:9;3784:23;3816:31;3841:5;3816:31;:::i;3882:309::-;3947:6;3955;4008:2;3996:9;3987:7;3983:23;3979:32;3976:52;;;4024:1;4021;4014:12;3976:52;4060:9;4047:23;4037:33;;4120:2;4109:9;4105:18;4092:32;4133:28;4155:5;4133:28;:::i;4196:241::-;4252:6;4305:2;4293:9;4284:7;4280:23;4276:32;4273:52;;;4321:1;4318;4311:12;4273:52;4360:9;4347:23;4379:28;4401:5;4379:28;:::i;4702:385::-;4788:6;4796;4804;4812;4865:3;4853:9;4844:7;4840:23;4836:33;4833:53;;;4882:1;4879;4872:12;4833:53;-1:-1:-1;;4905:23:1;;;4975:2;4960:18;;4947:32;;-1:-1:-1;5026:2:1;5011:18;;4998:32;;5077:2;5062:18;5049:32;;-1:-1:-1;4702:385:1;-1:-1:-1;4702:385:1:o;5092:388::-;5160:6;5168;5221:2;5209:9;5200:7;5196:23;5192:32;5189:52;;;5237:1;5234;5227:12;5189:52;5276:9;5263:23;5295:31;5320:5;5295:31;:::i;:::-;5345:5;-1:-1:-1;5402:2:1;5387:18;;5374:32;5415:33;5374:32;5415:33;:::i;5485:356::-;5687:2;5669:21;;;5706:18;;;5699:30;5765:34;5760:2;5745:18;;5738:62;5832:2;5817:18;;5485:356::o;6892:127::-;6953:10;6948:3;6944:20;6941:1;6934:31;6984:4;6981:1;6974:15;7008:4;7005:1;6998:15;7024:127;7085:10;7080:3;7076:20;7073:1;7066:31;7116:4;7113:1;7106:15;7140:4;7137:1;7130:15;7156:125;7196:4;7224:1;7221;7218:8;7215:34;;;7229:18;;:::i;:::-;-1:-1:-1;7266:9:1;;7156:125::o;7286:127::-;7347:10;7342:3;7338:20;7335:1;7328:31;7378:4;7375:1;7368:15;7402:4;7399:1;7392:15;7418:135;7457:3;-1:-1:-1;;7478:17:1;;7475:43;;;7498:18;;:::i;:::-;-1:-1:-1;7545:1:1;7534:13;;7418:135::o;9140:251::-;9210:6;9263:2;9251:9;9242:7;9238:23;9234:32;9231:52;;;9279:1;9276;9269:12;9231:52;9311:9;9305:16;9330:31;9355:5;9330:31;:::i;9705:336::-;9907:2;9889:21;;;9946:2;9926:18;;;9919:30;-1:-1:-1;;;9980:2:1;9965:18;;9958:42;10032:2;10017:18;;9705:336::o;10325:245::-;10392:6;10445:2;10433:9;10424:7;10420:23;10416:32;10413:52;;;10461:1;10458;10451:12;10413:52;10493:9;10487:16;10512:28;10534:5;10512:28;:::i;11192:168::-;11232:7;11298:1;11294;11290:6;11286:14;11283:1;11280:21;11275:1;11268:9;11261:17;11257:45;11254:71;;;11305:18;;:::i;:::-;-1:-1:-1;11345:9:1;;11192:168::o;11365:217::-;11405:1;11431;11421:132;;11475:10;11470:3;11466:20;11463:1;11456:31;11510:4;11507:1;11500:15;11538:4;11535:1;11528:15;11421:132;-1:-1:-1;11567:9:1;;11365:217::o;15124:128::-;15164:3;15195:1;15191:6;15188:1;15185:13;15182:39;;;15201:18;;:::i;:::-;-1:-1:-1;15237:9:1;;15124:128::o;15745:980::-;16007:4;16055:3;16044:9;16040:19;16086:6;16075:9;16068:25;16112:2;16150:6;16145:2;16134:9;16130:18;16123:34;16193:3;16188:2;16177:9;16173:18;16166:31;16217:6;16252;16246:13;16283:6;16275;16268:22;16321:3;16310:9;16306:19;16299:26;;16360:2;16352:6;16348:15;16334:29;;16381:1;16391:195;16405:6;16402:1;16399:13;16391:195;;;16470:13;;-1:-1:-1;;;;;16466:39:1;16454:52;;16561:15;;;;16526:12;;;;16502:1;16420:9;16391:195;;;-1:-1:-1;;;;;;;16642:32:1;;;;16637:2;16622:18;;16615:60;-1:-1:-1;;;16706:3:1;16691:19;16684:35;16603:3;15745:980;-1:-1:-1;;;15745:980:1:o;17342:306::-;17430:6;17438;17446;17499:2;17487:9;17478:7;17474:23;17470:32;17467:52;;;17515:1;17512;17505:12;17467:52;17544:9;17538:16;17528:26;;17594:2;17583:9;17579:18;17573:25;17563:35;;17638:2;17627:9;17623:18;17617:25;17607:35;;17342:306;;;;;:::o

Swarm Source

ipfs://449998d044b3a6a7152f1478cda178137350d0c6e0480852b165dd5f5f7418f3
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.