Token CRONAN

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
1,000,000,000 CRONAN

Holders:
310 addresses
Contract:
0x0b71d96963140f3f578251976f2f592468438dbd0x0b71d96963140f3f578251976f2f592468438dbD

Decimals:
9

Social Profiles:
Not Available, Update ?

Balance
10 CRONAN

Value
$0.00
0x7dae8fbcc37f67cb1ca02b959fa97c1473bd3a63
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CRONAN

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-03
*/

/**
CRONAN THE BARBARIAN
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}


contract CRONAN is Context, IERC20, Ownable {
    using Address for address payable;
    
    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;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private swapping;
    
    
    
    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 5 seconds;
    
    modifier antiBot(address account){
        require(tradingEnabled || allowedTransfer[account], "Trading not enabled yet");
        _;
    }

    IRouter public router;
    address public pair;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public swapTokensAtAmount = 1_000_000 * 10**9;
    uint256 public maxBuyLimit = 10_000_000 * 10**9;
    uint256 public maxSellLimit = 10_000_000 * 10**9;
    uint256 public maxWalletLimit = 10_000_000 * 10**9;
    
    uint256 public genesis_block;
    uint256 private deadline;
    
    address public marketingWallet = 0x0e90790B0D6D605BddFf1A634eA54ff04D3B801D;
    address public devWallet = 0x78C45166845E43407043005dCF7E44C96e7873C6;
    address public teamWallet = 0x63aA1c1790D7D7ad1174bae5be6b39F982D26fc0;

    string private constant _name = "CRONAN";
    string private constant _symbol = "CRONAN";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
        uint256 team;
    }
    Taxes private launchtax;
    Taxes public taxes = Taxes(0, 7, 2, 0, 1);
    Taxes public sellTaxes = Taxes(0, 16, 2, 0, 2);

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
        uint256 team;
    }
    
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rDev;
      uint256 rteam;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tDev;
      uint256 tteam;
    }

    event FeesChanged();
    event UpdatedRouter(address oldRouter, address newRouter);

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

    constructor (address routerAddress) {
        IRouter _router = IRouter(routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        
        excludeFromReward(pair);

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _isExcludedFromFee[teamWallet] = true;
        
        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[devWallet] = true;
        allowedTransfer[teamWallet] = true;

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

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override antiBot(sender) returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public  antiBot(msg.sender) returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public  antiBot(msg.sender) returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }
    
    function transfer(address recipient, uint256 amount) public override antiBot(msg.sender) returns (bool)
    { 
      _transfer(msg.sender, recipient, amount);
      return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    function setTradingStatus(
        bool state,
        uint256 _deadline,
        uint256 rfi,
        uint256 marketing,
        uint256 liquidity,
        uint256 dev,
        uint256 team
    ) external onlyOwner {
        tradingEnabled = state;
        swapEnabled = state;
        deadline = _deadline;
        launchtax = Taxes(rfi, marketing, liquidity, dev, team);
        if (state == true) genesis_block = block.number;
    }

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

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not 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 isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev, uint256 _team) public onlyOwner {
       taxes = Taxes(_rfi,_marketing,_liquidity,_dev,_team);
        emit FeesChanged();
    }
    
    function setSellTaxes(uint256 _rfi, uint256 _marketing, uint256 _liquidity, uint256 _dev, uint256 _team) public onlyOwner {
       sellTaxes = Taxes(_rfi,_marketing,_liquidity,_dev,_team);
        emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totFeesPaid.rfi +=tRfi;
    }

    function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
        totFeesPaid.liquidity +=tLiquidity;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tLiquidity;
        }
        _rOwned[address(this)] +=rLiquidity;
    }

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing +=tMarketing;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;
    }
    
    function _takeDev(uint256 rDev, uint256 tDev) private {
        totFeesPaid.dev +=tDev;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tDev;
        }
        _rOwned[address(this)] +=rDev;
    }
    
    
    function _taketeam(uint256 rteam, uint256 tteam) private {
        totFeesPaid.team +=tteam;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tteam;
        }
        _rOwned[address(this)] +=rteam;
    }
    
    
    function _getValues(uint256 tAmount, bool takeFee, bool isSell, bool useLaunchTax) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell, useLaunchTax);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity) = _getRValues1(to_return, tAmount, takeFee, _getRate());
        (to_return.rDev, to_return.rteam) = _getRValues2(to_return, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSell, bool useLaunchTax) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if (isSell && !useLaunchTax) temp = sellTaxes;
        else if (!useLaunchTax) temp = taxes;
        else temp = launchtax;
        
        s.tRfi = tAmount*temp.rfi/100;
        s.tMarketing = tAmount*temp.marketing/100;
        s.tLiquidity = tAmount*temp.liquidity/100;
        s.tDev = tAmount*temp.dev/100;
        s.tteam = tAmount*temp.team/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tDev-s.tteam;
        return s;
    }

    function _getRValues1(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rMarketing, uint256 rLiquidity){
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount, 0,0,0);
        }

        rRfi = s.tRfi*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        uint256 rDev = s.tDev*currentRate;
        uint256 rteam = s.tteam*currentRate;
        rTransferAmount =  rAmount-rRfi-rMarketing-rLiquidity-rDev-rteam;
        return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity);
    }
    
    function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rDev,uint256 rteam) {

        if(!takeFee) {
          return(0,0);
        }

        rDev = s.tDev*currentRate;
        rteam = s.tteam*currentRate;
        return (rDev,rteam);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/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-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "You are a bot");
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled, "Trading not active");
        }
        
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && block.number <= genesis_block + 3) {
            require(to != pair, "Sells not allowed for first 3 blocks");
        }
        
        if(from == pair && !_isExcludedFromFee[to] && !swapping){
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
        }
        
        if(from != pair && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && !swapping){
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if(to != pair){
                require(balanceOf(to) + amount <= maxWalletLimit, "You are exceeding maxWalletLimit");
            }
            if(coolDownEnabled){
                uint256 timePassed = block.timestamp - _lastSell[from];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[from] = block.timestamp;
            }
        }
        
        
        if(balanceOf(from) - amount <= 10 *  10**decimals()) amount -= (10 * 10**decimals() + amount - balanceOf(from));
        
       
        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            if(to == pair)  swapAndLiquify(swapTokensAtAmount, sellTaxes);
            else  swapAndLiquify(swapTokensAtAmount, taxes);
        }
        bool takeFee = true;
        bool isSell = false;
        if(swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) takeFee = false;
        if(to == pair) isSell = true;

        _tokenTransfer(from, to, amount, takeFee, isSell);
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {
            bool useLaunchTax = !_isExcludedFromFee[sender] &&
            !_isExcludedFromFee[recipient] &&
            block.number <= genesis_block + deadline;

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell, useLaunchTax);


        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity,s.tLiquidity);
            emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tDev+ s.tteam);
        }
        if(s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if(s.rteam > 0 || s.tteam > 0) _taketeam(s.rteam, s.tteam);
        if(s.rDev > 0 || s.tDev > 0) _takeDev(s.rDev, s.tDev);
        emit Transfer(sender, recipient, s.tTransferAmount);
        
    }

    function swapAndLiquify(uint256 contractBalance, Taxes memory temp) private lockTheSwap{
        uint256 denominator = (temp.liquidity + temp.marketing + temp.dev + temp.team) * 2;
        uint256 tokensToAddLiquidityWith = contractBalance * temp.liquidity / denominator;
        uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForBNB(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (denominator - temp.liquidity);
        uint256 bnbToAddLiquidityWith = unitBalance * temp.liquidity;

        if(bnbToAddLiquidityWith > 0){
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, bnbToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if(marketingAmt > 0){
            payable(marketingWallet).sendValue(marketingAmt);
        }
        uint256 devAmt = unitBalance * 2 * temp.dev;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }
        
        uint256 buybackAmt = unitBalance * 2 * temp.team;
        if(buybackAmt > 0){
            payable(teamWallet).sendValue(buybackAmt);
        }
            
    }

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

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

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    
    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
    }
    
    function updateteamWallet(address newWallet) external onlyOwner{
        teamWallet = newWallet;
    }
    
    function updateCooldown(bool state, uint256 time) external onlyOwner{
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

    function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount * 10**_decimals;
    }

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
    
    function updateIsBlacklisted(address account, bool state) external onlyOwner{
        _isBlacklisted[account] = state;
    }
    
    function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i =0; i < accounts.length; i++){
            _isBlacklisted[accounts[i]] = state;

        }
    }
    
    function updateAllowedTransfer(address account, bool state) external onlyOwner{
        allowedTransfer[account] = state;
    }
    
    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell) external onlyOwner{
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
    }
    
    function updateMaxWalletlimit(uint256 amount) external onlyOwner{
        maxWalletLimit = amount * 10**decimals();
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        router = IRouter(newRouter);
        pair = newPair;
    }
    
    //Use this in case BNB are sent to the contract by mistake
    function rescueBNB(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient BNB balance");
        payable(msg.sender).transfer(weiAmount);
    }
    

    function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"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":[],"name":"FeesChanged","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"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":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateteamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805460ff191660011790556005600c55620000246009600a620009ff565b6200003490633b9aca0062000ac0565b600f819055620000479060001962000b1a565b620000559060001962000ae2565b601090815566038d7ea4c68000601155662386f26fc1000060128190556013819055601455601780546001600160a01b0319908116730e90790b0d6d605bddff1a634ea54ff04d3b801d179091556018805482167378c45166845e43407043005dcf7e44c96e7873c6179055601980549091167363aa1c1790d7d7ad1174bae5be6b39f982d26fc01790556040805160a080820183526000808352600760208085018290526002858701819052606080870185905260016080978801819052601f869055938355602182905560228590556023939093558651948501875283855290840187905294830185905282018190529101829052602481905560259290925560268190556027919091556028553480156200017257600080fd5b506040516200474438038062004744833981016040819052620001959162000974565b620001a0336200054a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e157600080fd5b505afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c919062000974565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026557600080fd5b505afa1580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000974565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e957600080fd5b505af1158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000324919062000974565b600d80546001600160a01b038086166001600160a01b031992831617909255600e8054928416929091168217905590915062000360906200059a565b601054600160006200037a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003c96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601754821681526004845282812080548616600190811790915560185483168252838220805487168217905560195490921681528281208054861683179055308152600693849052918220805490941681179093556200045f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526006909352818320805485166001908117909155601754821684528284208054861682179055601854821684528284208054861682179055601954909116835291208054909216179055620004f16000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f546040516200053991815260200190565b60405180910390a350505062000b73565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620006655760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005f1565b6001600160a01b03811660009081526001602052604090205415620006c2576001600160a01b038116600090815260016020526040902054620006a89062000728565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000601054821115620007915760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005f1565b60006200079d620007b2565b9050620007ab81846200099f565b9392505050565b60008080620007c0620007d8565b9092509050620007d181836200099f565b9250505090565b601054600f546000918291825b60085481101562000940578260016000600884815481106200080b576200080b62000b5d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200087a575081600260006008848154811062000853576200085362000b5d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200089157601054600f54945094505050509091565b6001600060088381548110620008ab57620008ab62000b5d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008dc908462000ae2565b92506002600060088381548110620008f857620008f862000b5d565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000929908362000ae2565b915080620009378162000afc565b915050620007e5565b50600f546010546200095391906200099f565b8210156200096b57601054600f549350935050509091565b90939092509050565b6000602082840312156200098757600080fd5b81516001600160a01b0381168114620007ab57600080fd5b600082620009b157620009b162000b47565b500490565b600181815b80851115620009f7578160001904821115620009db57620009db62000b31565b80851615620009e957918102915b93841c9390800290620009bb565b509250929050565b6000620007ab60ff84168360008262000a1b5750600162000aba565b8162000a2a5750600062000aba565b816001811462000a43576002811462000a4e5762000a6e565b600191505062000aba565b60ff84111562000a625762000a6262000b31565b50506001821b62000aba565b5060208310610133831016604e8410600b841016171562000a93575081810a62000aba565b62000a9f8383620009b6565b806000190482111562000ab65762000ab662000b31565b0290505b92915050565b600081600019048311821515161562000add5762000add62000b31565b500290565b60008282101562000af75762000af762000b31565b500390565b600060001982141562000b135762000b1362000b31565b5060010190565b60008262000b2c5762000b2c62000b47565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613bc18062000b836000396000f3fe6080604052600436106103855760003560e01c80636ddd1713116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063ee36e3591161006f578063ee36e35914610ac2578063f2fde38b14610adc578063f66895a314610afc578063f887ea4014610b2357600080fd5b8063dd62ed3e14610a26578063e2f4560514610a6c578063e517f2b914610a82578063ea2f0b3714610aa257600080fd5b8063c791fc54116100dc578063c791fc54146109b0578063d257b34f146109d0578063d2ce0db2146109f0578063d8672e5114610a0657600080fd5b8063a9059cbb14610950578063aacebbe314610970578063b5c571451461099057600080fd5b80638e2839ff1161016f57806395d89b411161014957806395d89b41146103915780639ba5e4d5146108e9578063a457c2d714610910578063a8aa1b311461093057600080fd5b80638e2839ff146108895780638ea5220f146108a9578063924de9b7146108c957600080fd5b8063728f8eea116101ab578063728f8eea146107c357806375f0a8741461081257806388f82020146108325780638da5cb5b1461086b57600080fd5b80636ddd17131461076f57806370a082311461078e578063715018a6146107ae57600080fd5b80634549b039116102b65780635b24ea5e11610254578063652e2f0411610223578063652e2f041461070d57806366a88d96146107235780636aa5b37f146107395780636baf8df21461074f57600080fd5b80635b24ea5e1461067d5780635e19678d1461069d5780635fcefa42146106bd57806362695eae146106dd57600080fd5b806352390c021161029057806352390c02146105cc5780635342acb4146105ec57806359759f6114610625578063599270441461064557600080fd5b80634549b0391461057257806347c23092146105925780634ada218b146105b257600080fd5b80632d8381191161032357806339509351116102fd57806339509351146104f257806340b28c2f14610512578063437823ec14610532578063441b1d301461055257600080fd5b80632d83811914610496578063313ce567146104b65780633685d419146104d257600080fd5b806318160ddd1161035f57806318160ddd146104215780631816467f1461044057806323b872dd14610460578063274a533c1461048057600080fd5b806306fdde0314610391578063095ea7b3146103cf57806313f97a8e146103ff57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b50604080518082018252600681526521a927a720a760d11b602082015290516103c69190613865565b60405180910390f35b3480156103db57600080fd5b506103ef6103ea3660046135e5565b610b43565b60405190151581526020016103c6565b34801561040b57600080fd5b5061041f61041a366004613611565b610bab565b005b34801561042d57600080fd5b50600f545b6040519081526020016103c6565b34801561044c57600080fd5b5061041f61045b366004613503565b610c41565b34801561046c57600080fd5b506103ef61047b366004613576565b610c8d565b34801561048c57600080fd5b5061043260155481565b3480156104a257600080fd5b506104326104b136600461379c565b610d87565b3480156104c257600080fd5b50604051600981526020016103c6565b3480156104de57600080fd5b5061041f6104ed366004613503565b610e0b565b3480156104fe57600080fd5b506103ef61050d3660046135e5565b610fc2565b34801561051e57600080fd5b5061041f61052d36600461353d565b611042565b34801561053e57600080fd5b5061041f61054d366004613503565b61109a565b34801561055e57600080fd5b5061041f61056d36600461379c565b6110e8565b34801561057e57600080fd5b5061043261058d3660046137b5565b61118f565b34801561059e57600080fd5b5061041f6105ad366004613576565b611225565b3480156105be57600080fd5b506009546103ef9060ff1681565b3480156105d857600080fd5b5061041f6105e7366004613503565b6112d7565b3480156105f857600080fd5b506103ef610607366004613503565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063157600080fd5b5061041f6106403660046137da565b61142a565b34801561065157600080fd5b50601954610665906001600160a01b031681565b6040516001600160a01b0390911681526020016103c6565b34801561068957600080fd5b5061041f6106983660046135b7565b61148a565b3480156106a957600080fd5b5061041f6106b8366004613747565b6114df565b3480156106c957600080fd5b5061041f6106d836600461382a565b611584565b3480156106e957600080fd5b506103ef6106f8366004613503565b60066020526000908152604090205460ff1681565b34801561071957600080fd5b5061043260135481565b34801561072f57600080fd5b5061043260145481565b34801561074557600080fd5b5061043260125481565b34801561075b57600080fd5b5061041f61076a366004613503565b61161d565b34801561077b57600080fd5b506009546103ef90610100900460ff1681565b34801561079a57600080fd5b506104326107a9366004613503565b611669565b3480156107ba57600080fd5b5061041f6116c8565b3480156107cf57600080fd5b50601f546020546021546022546023546107ea949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c6565b34801561081e57600080fd5b50601754610665906001600160a01b031681565b34801561083e57600080fd5b506103ef61084d366004613503565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561087757600080fd5b506000546001600160a01b0316610665565b34801561089557600080fd5b5061041f6108a4366004613611565b6116fe565b3480156108b557600080fd5b50601854610665906001600160a01b031681565b3480156108d557600080fd5b5061041f6108e43660046136ef565b61178f565b3480156108f557600080fd5b50602954602a54602b54602c54602d546107ea949392919085565b34801561091c57600080fd5b506103ef61092b3660046135e5565b6117d3565b34801561093c57600080fd5b50600e54610665906001600160a01b031681565b34801561095c57600080fd5b506103ef61096b3660046135e5565b6118b9565b34801561097c57600080fd5b5061041f61098b366004613503565b61190e565b34801561099c57600080fd5b5061041f6109ab3660046135b7565b61195a565b3480156109bc57600080fd5b5061041f6109cb36600461382a565b6119af565b3480156109dc57600080fd5b5061041f6109eb36600461379c565b611a47565b3480156109fc57600080fd5b50610432600c5481565b348015610a1257600080fd5b5061041f610a2136600461379c565b611a8d565b348015610a3257600080fd5b50610432610a4136600461353d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a7857600080fd5b5061043260115481565b348015610a8e57600080fd5b5061041f610a9d366004613729565b611ad3565b348015610aae57600080fd5b5061041f610abd366004613503565b611b1f565b348015610ace57600080fd5b50600b546103ef9060ff1681565b348015610ae857600080fd5b5061041f610af7366004613503565b611b6a565b348015610b0857600080fd5b506024546025546026546027546028546107ea949392919085565b348015610b2f57600080fd5b50600d54610665906001600160a01b031681565b600954600090339060ff1680610b7157506001600160a01b03811660009081526006602052604090205460ff165b610b965760405162461bcd60e51b8152600401610b8d906138ef565b60405180910390fd5b610ba1338585611c05565b5060019392505050565b6000546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610b8d906138ba565b60005b8251811015610c3c578160076000858481518110610bf857610bf8613b3c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c3481613af5565b915050610bd8565b505050565b6000546001600160a01b03163314610c6b5760405162461bcd60e51b8152600401610b8d906138ba565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610cbb57506001600160a01b03811660009081526006602052604090205460ff165b610cd75760405162461bcd60e51b8152600401610b8d906138ef565b610ce2858585611d29565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610d675760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b8d565b610d7b8633610d768785613ade565b611c05565b50600195945050505050565b6000601054821115610dee5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b8d565b6000610df86125b3565b9050610e0481846139af565b9392505050565b6000546001600160a01b03163314610e355760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03811660009081526005602052604090205460ff16610e9d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b8d565b60005b600854811015610fbe57816001600160a01b031660088281548110610ec757610ec7613b3c565b6000918252602090912001546001600160a01b03161415610fac5760088054610ef290600190613ade565b81548110610f0257610f02613b3c565b600091825260209091200154600880546001600160a01b039092169183908110610f2e57610f2e613b3c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f8657610f86613b26565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fb681613af5565b915050610ea0565b5050565b600954600090339060ff1680610ff057506001600160a01b03811660009081526006602052604090205460ff165b61100c5760405162461bcd60e51b8152600401610b8d906138ef565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610ba191908690610d76908790613997565b6000546001600160a01b0316331461106c5760405162461bcd60e51b8152600401610b8d906138ba565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146110c45760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146111125760405162461bcd60e51b8152600401610b8d906138ba565b804710156111625760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610b8d565b604051339082156108fc029083906000818181858888f19350505050158015610fbe573d6000803e3d6000fd5b6000600f548311156111e35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b8d565b816112025760006111f88460016000806125d6565b51915061121f9050565b60006112128460016000806125d6565b60200151915061121f9050565b92915050565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b8d906138ba565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d1919061370c565b50505050565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03811660009081526005602052604090205460ff161561136a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b8d565b6001600160a01b038116600090815260016020526040902054156113c4576001600160a01b0381166000908152600160205260409020546113aa90610d87565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114545760405162461bcd60e51b8152600401610b8d906138ba565b6114606009600a613a14565b61146a9083613abf565b6012556114796009600a613a14565b6114839082613abf565b6013555050565b6000546001600160a01b031633146114b45760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610b8d906138ba565b6009805461ffff191661ff00198915159081169190911761010082021790915560168790556040805160a0810182528781526020810187905290810185905260608101849052608001829052601a869055601b859055601c849055601d839055601e8290556001141561157b57436015555b50505050505050565b6000546001600160a01b031633146115ae5760405162461bcd60e51b8152600401610b8d906138ba565b6040805160a0810182528681526020808201879052818301869052606082018590526080909101839052601f879055859055602184905560228390556023829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146116475760405162461bcd60e51b8152600401610b8d906138ba565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156116a657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461121f90610d87565b6000546001600160a01b031633146116f25760405162461bcd60e51b8152600401610b8d906138ba565b6116fc600061263a565b565b6000546001600160a01b031633146117285760405162461bcd60e51b8152600401610b8d906138ba565b60005b8251811015610c3c57816004600085848151811061174b5761174b613b3c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061178781613af5565b91505061172b565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b8d906138ba565b600980549115156101000261ff0019909216919091179055565b600954600090339060ff168061180157506001600160a01b03811660009081526006602052604090205460ff165b61181d5760405162461bcd60e51b8152600401610b8d906138ef565b3360009081526003602090815260408083206001600160a01b03881684529091529020548381101561189f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b8d565b6118ae3386610d768785613ade565b506001949350505050565b600954600090339060ff16806118e757506001600160a01b03811660009081526006602052604090205460ff165b6119035760405162461bcd60e51b8152600401610b8d906138ef565b610ba1338585611d29565b6000546001600160a01b031633146119385760405162461bcd60e51b8152600401610b8d906138ba565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119845760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8d906138ba565b6040805160a081018252868152602081018690528082018590526060810184905260800182905260248690556025859055602684905560278390556028829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b03163314611a715760405162461bcd60e51b8152600401610b8d906138ba565b611a7d6009600a613a14565b611a879082613abf565b60115550565b6000546001600160a01b03163314611ab75760405162461bcd60e51b8152600401610b8d906138ba565b611ac36009600a613a14565b611acd9082613abf565b60145550565b6000546001600160a01b03163314611afd5760405162461bcd60e51b8152600401610b8d906138ba565b611b08816001613abf565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b495760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b945760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b038116611bf95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8d565b611c028161263a565b50565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8d565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b8d565b6001600160a01b038216611def5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b8d565b60008111611e515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b8d565b611e5a83611669565b811115611ec35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b8d565b6001600160a01b03831660009081526007602052604090205460ff16158015611f0557506001600160a01b03821660009081526007602052604090205460ff16155b611f415760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b8d565b6001600160a01b03831660009081526004602052604090205460ff16158015611f8357506001600160a01b03821660009081526004602052604090205460ff16155b15611fcf5760095460ff16611fcf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b8d565b6001600160a01b03831660009081526004602052604090205460ff1615801561201157506001600160a01b03821660009081526004602052604090205460ff16155b801561202a5750601554612026906003613997565b4311155b1561209957600e546001600160a01b03838116911614156120995760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610b8d565b600e546001600160a01b0384811691161480156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e4575060095462010000900460ff16155b156121a05760125481111561213b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b8d565b6014548161214884611669565b6121529190613997565b11156121a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b8d565b600e546001600160a01b038481169116148015906121d757506001600160a01b03821660009081526004602052604090205460ff16155b80156121fc57506001600160a01b03831660009081526004602052604090205460ff16155b8015612211575060095462010000900460ff16155b15612374576013548111156122685760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b8d565b600e546001600160a01b038381169116146122e2576014548161228a84611669565b6122949190613997565b11156122e25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b8d565b600b5460ff1615612374576001600160a01b0383166000908152600a60205260408120546123109042613ade565b9050600c548110156123575760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b8d565b506001600160a01b0383166000908152600a602052604090204290555b6123806009600a613a14565b61238b90600a613abf565b8161239585611669565b61239f9190613ade565b116123e6576123ad83611669565b816123ba6009600a613a14565b6123c590600a613abf565b6123cf9190613997565b6123d99190613ade565b6123e39082613ade565b90505b60006011546123f430611669565b600954911115915062010000900460ff161580156124195750600954610100900460ff165b80156124225750805b801561243c5750600e546001600160a01b03858116911614155b801561246157506001600160a01b03841660009081526004602052604090205460ff16155b801561248657506001600160a01b03831660009081526004602052604090205460ff16155b1561252257600e546001600160a01b03848116911614156124e4576011546040805160a0810182526024548152602554602082015260265491810191909152602754606082015260285460808201526124df919061268a565b612522565b6011546040805160a081018252601f54815260208054908201526021549181019190915260225460608201526023546080820152612522919061268a565b60095460019060009062010000900460ff168061255757506001600160a01b03861660009081526004602052604090205460ff165b8061257a57506001600160a01b03851660009081526004602052604090205460ff165b1561258457600091505b600e546001600160a01b038681169116141561259e575060015b6125ab8686868585612830565b505050505050565b60008060006125c0612ba0565b90925090506125cf81836139af565b9250505090565b6125de613480565b6125ea85858585612d23565b90506125ff8186866125fa6125b3565b612f25565b6080860152606085015260408401526020830152815261262781856126226125b3565b612ff6565b60c083015260a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff0000191662010000179055608081015160608201516020830151604084015160009392916126bd91613997565b6126c79190613997565b6126d19190613997565b6126dc906002613abf565b90506000818360400151856126f19190613abf565b6126fb91906139af565b905060006127098286613ade565b90504761271582613038565b60006127218247613ade565b905060008660400151866127359190613ade565b61273f90836139af565b905060008760400151826127539190613abf565b90508015612765576127658682613199565b6020880151600090612778846002613abf565b6127829190613abf565b905080156127a0576017546127a0906001600160a01b03168261327d565b60608901516000906127b3856002613abf565b6127bd9190613abf565b905080156127db576018546127db906001600160a01b03168261327d565b60808a01516000906127ee866002613abf565b6127f89190613abf565b9050801561281657601954612816906001600160a01b03168261327d565b50506009805462ff00001916905550505050505050505050565b6001600160a01b03851660009081526004602052604081205460ff1615801561287257506001600160a01b03851660009081526004602052604090205460ff16155b801561288d57506016546015546128899190613997565b4311155b9050600061289d858585856125d6565b6001600160a01b03881660009081526005602052604090205490915060ff16156128ff576001600160a01b0387166000908152600260205260409020546128e5908690613ade565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff16156129625760e08101516001600160a01b0387166000908152600260205260409020546129489190613997565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b0388166000908152600160205260409020546129879190613ade565b6001600160a01b03808916600090815260016020908152604080832094909455840151918916815291909120546129be9190613997565b6001600160a01b03871660009081526001602052604090819020919091558101511515806129f157506000816101000151115b15612a0957612a098160400151826101000151613396565b600081608001511180612a2157506000816101400151115b15612ab657612a3981608001518261014001516133cb565b306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101800151846101600151856101200151866101400151612a909190613997565b612a9a9190613997565b612aa49190613997565b60405190815260200160405180910390a35b600081606001511180612ace57506000816101200151115b15612ae657612ae68160600151826101200151613441565b60008160c001511180612afe57506000816101800151115b15612b1657612b168160c00151826101800151613456565b60008160a001511180612b2e57506000816101600151115b15612b4657612b468160a0015182610160015161346b565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051612b8f91815260200190565b60405180910390a350505050505050565b601054600f546000918291825b600854811015612cf257826001600060088481548110612bcf57612bcf613b3c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c3a5750816002600060088481548110612c1357612c13613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c5057601054600f54945094505050509091565b6001600060088381548110612c6757612c67613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612c969084613ade565b92506002600060088381548110612caf57612caf613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cde9083613ade565b915080612cea81613af5565b915050612bad565b50600f54601054612d0391906139af565b821015612d1a57601054600f549350935050509091565b90939092509050565b612d2b613480565b83612d3c5760e08101859052612632565b612d6e6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b838015612d79575082155b15612db557506040805160a081018252602454815260255460208201526026549181019190915260275460608201526028546080820152612e24565b82612df157506040805160a081018252601f54815260208054908201526021549181019190915260225460608201526023546080820152612e24565b506040805160a081018252601a548152601b546020820152601c5491810191909152601d546060820152601e5460808201525b8051606490612e339088613abf565b612e3d91906139af565b6101008301526020810151606490612e559088613abf565b612e5f91906139af565b6101208301526040810151606490612e779088613abf565b612e8191906139af565b6101408301526060810151606490612e999088613abf565b612ea391906139af565b6101608301526080810151606490612ebb9088613abf565b612ec591906139af565b6101808301819052610160830151610140840151610120850151610100860151612eef908b613ade565b612ef99190613ade565b612f039190613ade565b612f0d9190613ade565b612f179190613ade565b60e083015250949350505050565b600080808080612f358689613abf565b945086612f4d57508392506000915081905080612feb565b85896101000151612f5e9190613abf565b925085896101200151612f719190613abf565b915085896101400151612f849190613abf565b90506000868a6101600151612f999190613abf565b90506000878b6101800151612fae9190613abf565b905080828486612fbe898c613ade565b612fc89190613ade565b612fd29190613ade565b612fdc9190613ade565b612fe69190613ade565b955050505b945094509450945094565b6000808361300957506000905080613030565b8285610160015161301a9190613abf565b91508285610180015161302d9190613abf565b90505b935093915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061306d5761306d613b3c565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156130c157600080fd5b505afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f99190613520565b8160018151811061310c5761310c613b3c565b6001600160a01b039283166020918202929092010152600d546131329130911684611c05565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061316b908590600090869030904290600401613926565b600060405180830381600087803b15801561318557600080fd5b505af11580156125ab573d6000803e3d6000fd5b600d546131b19030906001600160a01b031684611c05565b600d546001600160a01b031663f305d7198230856000806131da6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561323d57600080fd5b505af1158015613251573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061327691906137fc565b5050505050565b804710156132cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b8d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461331a576040519150601f19603f3d011682016040523d82523d6000602084013e61331f565b606091505b5050905080610c3c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b8d565b81601060008282546133a89190613ade565b9091555050602980548291906000906133c2908490613997565b90915550505050565b80602960020160008282546133e09190613997565b90915550503060009081526005602052604090205460ff161561342257306000908152600260205260408120805483929061341c908490613997565b90915550505b30600090815260016020526040812080548492906133c2908490613997565b80602960010160008282546133e09190613997565b80602960040160008282546133e09190613997565b80602960030160008282546133e09190613997565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356134f381613b68565b919050565b80356134f381613b7d565b60006020828403121561351557600080fd5b8135610e0481613b68565b60006020828403121561353257600080fd5b8151610e0481613b68565b6000806040838503121561355057600080fd5b823561355b81613b68565b9150602083013561356b81613b68565b809150509250929050565b60008060006060848603121561358b57600080fd5b833561359681613b68565b925060208401356135a681613b68565b929592945050506040919091013590565b600080604083850312156135ca57600080fd5b82356135d581613b68565b9150602083013561356b81613b7d565b600080604083850312156135f857600080fd5b823561360381613b68565b946020939093013593505050565b6000806040838503121561362457600080fd5b823567ffffffffffffffff8082111561363c57600080fd5b818501915085601f83011261365057600080fd5b813560208282111561366457613664613b52565b8160051b604051601f19603f8301168101818110868211171561368957613689613b52565b604052838152828101945085830182870184018b10156136a857600080fd5b600096505b848710156136d2576136be816134e8565b8652600196909601959483019483016136ad565b5096506136e290508782016134f8565b9450505050509250929050565b60006020828403121561370157600080fd5b8135610e0481613b7d565b60006020828403121561371e57600080fd5b8151610e0481613b7d565b6000806040838503121561373c57600080fd5b823561360381613b7d565b600080600080600080600060e0888a03121561376257600080fd5b873561376d81613b7d565b9960208901359950604089013598606081013598506080810135975060a0810135965060c00135945092505050565b6000602082840312156137ae57600080fd5b5035919050565b600080604083850312156137c857600080fd5b82359150602083013561356b81613b7d565b600080604083850312156137ed57600080fd5b50508035926020909101359150565b60008060006060848603121561381157600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561384257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561389257858101830151858201604001528201613876565b818111156138a4576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139765784516001600160a01b031683529383019391830191600101613951565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139aa576139aa613b10565b500190565b6000826139cc57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613a0c5781600019048211156139f2576139f2613b10565b808516156139ff57918102915b93841c93908002906139d6565b509250929050565b6000610e0460ff841683600082613a2d5750600161121f565b81613a3a5750600061121f565b8160018114613a505760028114613a5a57613a76565b600191505061121f565b60ff841115613a6b57613a6b613b10565b50506001821b61121f565b5060208310610133831016604e8410600b8410161715613a99575081810a61121f565b613aa383836139d1565b8060001904821115613ab757613ab7613b10565b029392505050565b6000816000190483118215151615613ad957613ad9613b10565b500290565b600082821015613af057613af0613b10565b500390565b6000600019821415613b0957613b09613b10565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c0257600080fd5b8015158114611c0257600080fdfea26469706673582212203c0c724089a1a48fe54202de7df44924caf2da1212e837a5b0ae2925082aa3d964736f6c63430008070033000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

Deployed Bytecode

0x6080604052600436106103855760003560e01c80636ddd1713116101d1578063a9059cbb11610102578063dd62ed3e116100a0578063ee36e3591161006f578063ee36e35914610ac2578063f2fde38b14610adc578063f66895a314610afc578063f887ea4014610b2357600080fd5b8063dd62ed3e14610a26578063e2f4560514610a6c578063e517f2b914610a82578063ea2f0b3714610aa257600080fd5b8063c791fc54116100dc578063c791fc54146109b0578063d257b34f146109d0578063d2ce0db2146109f0578063d8672e5114610a0657600080fd5b8063a9059cbb14610950578063aacebbe314610970578063b5c571451461099057600080fd5b80638e2839ff1161016f57806395d89b411161014957806395d89b41146103915780639ba5e4d5146108e9578063a457c2d714610910578063a8aa1b311461093057600080fd5b80638e2839ff146108895780638ea5220f146108a9578063924de9b7146108c957600080fd5b8063728f8eea116101ab578063728f8eea146107c357806375f0a8741461081257806388f82020146108325780638da5cb5b1461086b57600080fd5b80636ddd17131461076f57806370a082311461078e578063715018a6146107ae57600080fd5b80634549b039116102b65780635b24ea5e11610254578063652e2f0411610223578063652e2f041461070d57806366a88d96146107235780636aa5b37f146107395780636baf8df21461074f57600080fd5b80635b24ea5e1461067d5780635e19678d1461069d5780635fcefa42146106bd57806362695eae146106dd57600080fd5b806352390c021161029057806352390c02146105cc5780635342acb4146105ec57806359759f6114610625578063599270441461064557600080fd5b80634549b0391461057257806347c23092146105925780634ada218b146105b257600080fd5b80632d8381191161032357806339509351116102fd57806339509351146104f257806340b28c2f14610512578063437823ec14610532578063441b1d301461055257600080fd5b80632d83811914610496578063313ce567146104b65780633685d419146104d257600080fd5b806318160ddd1161035f57806318160ddd146104215780631816467f1461044057806323b872dd14610460578063274a533c1461048057600080fd5b806306fdde0314610391578063095ea7b3146103cf57806313f97a8e146103ff57600080fd5b3661038c57005b600080fd5b34801561039d57600080fd5b50604080518082018252600681526521a927a720a760d11b602082015290516103c69190613865565b60405180910390f35b3480156103db57600080fd5b506103ef6103ea3660046135e5565b610b43565b60405190151581526020016103c6565b34801561040b57600080fd5b5061041f61041a366004613611565b610bab565b005b34801561042d57600080fd5b50600f545b6040519081526020016103c6565b34801561044c57600080fd5b5061041f61045b366004613503565b610c41565b34801561046c57600080fd5b506103ef61047b366004613576565b610c8d565b34801561048c57600080fd5b5061043260155481565b3480156104a257600080fd5b506104326104b136600461379c565b610d87565b3480156104c257600080fd5b50604051600981526020016103c6565b3480156104de57600080fd5b5061041f6104ed366004613503565b610e0b565b3480156104fe57600080fd5b506103ef61050d3660046135e5565b610fc2565b34801561051e57600080fd5b5061041f61052d36600461353d565b611042565b34801561053e57600080fd5b5061041f61054d366004613503565b61109a565b34801561055e57600080fd5b5061041f61056d36600461379c565b6110e8565b34801561057e57600080fd5b5061043261058d3660046137b5565b61118f565b34801561059e57600080fd5b5061041f6105ad366004613576565b611225565b3480156105be57600080fd5b506009546103ef9060ff1681565b3480156105d857600080fd5b5061041f6105e7366004613503565b6112d7565b3480156105f857600080fd5b506103ef610607366004613503565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561063157600080fd5b5061041f6106403660046137da565b61142a565b34801561065157600080fd5b50601954610665906001600160a01b031681565b6040516001600160a01b0390911681526020016103c6565b34801561068957600080fd5b5061041f6106983660046135b7565b61148a565b3480156106a957600080fd5b5061041f6106b8366004613747565b6114df565b3480156106c957600080fd5b5061041f6106d836600461382a565b611584565b3480156106e957600080fd5b506103ef6106f8366004613503565b60066020526000908152604090205460ff1681565b34801561071957600080fd5b5061043260135481565b34801561072f57600080fd5b5061043260145481565b34801561074557600080fd5b5061043260125481565b34801561075b57600080fd5b5061041f61076a366004613503565b61161d565b34801561077b57600080fd5b506009546103ef90610100900460ff1681565b34801561079a57600080fd5b506104326107a9366004613503565b611669565b3480156107ba57600080fd5b5061041f6116c8565b3480156107cf57600080fd5b50601f546020546021546022546023546107ea949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c6565b34801561081e57600080fd5b50601754610665906001600160a01b031681565b34801561083e57600080fd5b506103ef61084d366004613503565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561087757600080fd5b506000546001600160a01b0316610665565b34801561089557600080fd5b5061041f6108a4366004613611565b6116fe565b3480156108b557600080fd5b50601854610665906001600160a01b031681565b3480156108d557600080fd5b5061041f6108e43660046136ef565b61178f565b3480156108f557600080fd5b50602954602a54602b54602c54602d546107ea949392919085565b34801561091c57600080fd5b506103ef61092b3660046135e5565b6117d3565b34801561093c57600080fd5b50600e54610665906001600160a01b031681565b34801561095c57600080fd5b506103ef61096b3660046135e5565b6118b9565b34801561097c57600080fd5b5061041f61098b366004613503565b61190e565b34801561099c57600080fd5b5061041f6109ab3660046135b7565b61195a565b3480156109bc57600080fd5b5061041f6109cb36600461382a565b6119af565b3480156109dc57600080fd5b5061041f6109eb36600461379c565b611a47565b3480156109fc57600080fd5b50610432600c5481565b348015610a1257600080fd5b5061041f610a2136600461379c565b611a8d565b348015610a3257600080fd5b50610432610a4136600461353d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a7857600080fd5b5061043260115481565b348015610a8e57600080fd5b5061041f610a9d366004613729565b611ad3565b348015610aae57600080fd5b5061041f610abd366004613503565b611b1f565b348015610ace57600080fd5b50600b546103ef9060ff1681565b348015610ae857600080fd5b5061041f610af7366004613503565b611b6a565b348015610b0857600080fd5b506024546025546026546027546028546107ea949392919085565b348015610b2f57600080fd5b50600d54610665906001600160a01b031681565b600954600090339060ff1680610b7157506001600160a01b03811660009081526006602052604090205460ff165b610b965760405162461bcd60e51b8152600401610b8d906138ef565b60405180910390fd5b610ba1338585611c05565b5060019392505050565b6000546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610b8d906138ba565b60005b8251811015610c3c578160076000858481518110610bf857610bf8613b3c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610c3481613af5565b915050610bd8565b505050565b6000546001600160a01b03163314610c6b5760405162461bcd60e51b8152600401610b8d906138ba565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600090849060ff1680610cbb57506001600160a01b03811660009081526006602052604090205460ff165b610cd75760405162461bcd60e51b8152600401610b8d906138ef565b610ce2858585611d29565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610d675760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b8d565b610d7b8633610d768785613ade565b611c05565b50600195945050505050565b6000601054821115610dee5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b8d565b6000610df86125b3565b9050610e0481846139af565b9392505050565b6000546001600160a01b03163314610e355760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03811660009081526005602052604090205460ff16610e9d5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b8d565b60005b600854811015610fbe57816001600160a01b031660088281548110610ec757610ec7613b3c565b6000918252602090912001546001600160a01b03161415610fac5760088054610ef290600190613ade565b81548110610f0257610f02613b3c565b600091825260209091200154600880546001600160a01b039092169183908110610f2e57610f2e613b3c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f8657610f86613b26565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610fb681613af5565b915050610ea0565b5050565b600954600090339060ff1680610ff057506001600160a01b03811660009081526006602052604090205460ff165b61100c5760405162461bcd60e51b8152600401610b8d906138ef565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610ba191908690610d76908790613997565b6000546001600160a01b0316331461106c5760405162461bcd60e51b8152600401610b8d906138ba565b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b6000546001600160a01b031633146110c45760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146111125760405162461bcd60e51b8152600401610b8d906138ba565b804710156111625760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420424e422062616c616e636500000000000000006044820152606401610b8d565b604051339082156108fc029083906000818181858888f19350505050158015610fbe573d6000803e3d6000fd5b6000600f548311156111e35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b8d565b816112025760006111f88460016000806125d6565b51915061121f9050565b60006112128460016000806125d6565b60200151915061121f9050565b92915050565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b8d906138ba565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561129957600080fd5b505af11580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d1919061370c565b50505050565b6000546001600160a01b031633146113015760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03811660009081526005602052604090205460ff161561136a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b8d565b6001600160a01b038116600090815260016020526040902054156113c4576001600160a01b0381166000908152600160205260409020546113aa90610d87565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146114545760405162461bcd60e51b8152600401610b8d906138ba565b6114606009600a613a14565b61146a9083613abf565b6012556114796009600a613a14565b6114839082613abf565b6013555050565b6000546001600160a01b031633146114b45760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115095760405162461bcd60e51b8152600401610b8d906138ba565b6009805461ffff191661ff00198915159081169190911761010082021790915560168790556040805160a0810182528781526020810187905290810185905260608101849052608001829052601a869055601b859055601c849055601d839055601e8290556001141561157b57436015555b50505050505050565b6000546001600160a01b031633146115ae5760405162461bcd60e51b8152600401610b8d906138ba565b6040805160a0810182528681526020808201879052818301869052606082018590526080909101839052601f879055859055602184905560228390556023829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146116475760405162461bcd60e51b8152600401610b8d906138ba565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff16156116a657506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461121f90610d87565b6000546001600160a01b031633146116f25760405162461bcd60e51b8152600401610b8d906138ba565b6116fc600061263a565b565b6000546001600160a01b031633146117285760405162461bcd60e51b8152600401610b8d906138ba565b60005b8251811015610c3c57816004600085848151811061174b5761174b613b3c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061178781613af5565b91505061172b565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b8d906138ba565b600980549115156101000261ff0019909216919091179055565b600954600090339060ff168061180157506001600160a01b03811660009081526006602052604090205460ff165b61181d5760405162461bcd60e51b8152600401610b8d906138ef565b3360009081526003602090815260408083206001600160a01b03881684529091529020548381101561189f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b8d565b6118ae3386610d768785613ade565b506001949350505050565b600954600090339060ff16806118e757506001600160a01b03811660009081526006602052604090205460ff165b6119035760405162461bcd60e51b8152600401610b8d906138ef565b610ba1338585611d29565b6000546001600160a01b031633146119385760405162461bcd60e51b8152600401610b8d906138ba565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119845760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119d95760405162461bcd60e51b8152600401610b8d906138ba565b6040805160a081018252868152602081018690528082018590526060810184905260800182905260248690556025859055602684905560278390556028829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b03163314611a715760405162461bcd60e51b8152600401610b8d906138ba565b611a7d6009600a613a14565b611a879082613abf565b60115550565b6000546001600160a01b03163314611ab75760405162461bcd60e51b8152600401610b8d906138ba565b611ac36009600a613a14565b611acd9082613abf565b60145550565b6000546001600160a01b03163314611afd5760405162461bcd60e51b8152600401610b8d906138ba565b611b08816001613abf565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b495760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b945760405162461bcd60e51b8152600401610b8d906138ba565b6001600160a01b038116611bf95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8d565b611c028161263a565b50565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8d565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8d565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b8d565b6001600160a01b038216611def5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b8d565b60008111611e515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b8d565b611e5a83611669565b811115611ec35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b8d565b6001600160a01b03831660009081526007602052604090205460ff16158015611f0557506001600160a01b03821660009081526007602052604090205460ff16155b611f415760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b8d565b6001600160a01b03831660009081526004602052604090205460ff16158015611f8357506001600160a01b03821660009081526004602052604090205460ff16155b15611fcf5760095460ff16611fcf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b8d565b6001600160a01b03831660009081526004602052604090205460ff1615801561201157506001600160a01b03821660009081526004602052604090205460ff16155b801561202a5750601554612026906003613997565b4311155b1561209957600e546001600160a01b03838116911614156120995760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610b8d565b600e546001600160a01b0384811691161480156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e4575060095462010000900460ff16155b156121a05760125481111561213b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b8d565b6014548161214884611669565b6121529190613997565b11156121a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b8d565b600e546001600160a01b038481169116148015906121d757506001600160a01b03821660009081526004602052604090205460ff16155b80156121fc57506001600160a01b03831660009081526004602052604090205460ff16155b8015612211575060095462010000900460ff16155b15612374576013548111156122685760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b8d565b600e546001600160a01b038381169116146122e2576014548161228a84611669565b6122949190613997565b11156122e25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b8d565b600b5460ff1615612374576001600160a01b0383166000908152600a60205260408120546123109042613ade565b9050600c548110156123575760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b8d565b506001600160a01b0383166000908152600a602052604090204290555b6123806009600a613a14565b61238b90600a613abf565b8161239585611669565b61239f9190613ade565b116123e6576123ad83611669565b816123ba6009600a613a14565b6123c590600a613abf565b6123cf9190613997565b6123d99190613ade565b6123e39082613ade565b90505b60006011546123f430611669565b600954911115915062010000900460ff161580156124195750600954610100900460ff165b80156124225750805b801561243c5750600e546001600160a01b03858116911614155b801561246157506001600160a01b03841660009081526004602052604090205460ff16155b801561248657506001600160a01b03831660009081526004602052604090205460ff16155b1561252257600e546001600160a01b03848116911614156124e4576011546040805160a0810182526024548152602554602082015260265491810191909152602754606082015260285460808201526124df919061268a565b612522565b6011546040805160a081018252601f54815260208054908201526021549181019190915260225460608201526023546080820152612522919061268a565b60095460019060009062010000900460ff168061255757506001600160a01b03861660009081526004602052604090205460ff165b8061257a57506001600160a01b03851660009081526004602052604090205460ff165b1561258457600091505b600e546001600160a01b038681169116141561259e575060015b6125ab8686868585612830565b505050505050565b60008060006125c0612ba0565b90925090506125cf81836139af565b9250505090565b6125de613480565b6125ea85858585612d23565b90506125ff8186866125fa6125b3565b612f25565b6080860152606085015260408401526020830152815261262781856126226125b3565b612ff6565b60c083015260a08201525b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff0000191662010000179055608081015160608201516020830151604084015160009392916126bd91613997565b6126c79190613997565b6126d19190613997565b6126dc906002613abf565b90506000818360400151856126f19190613abf565b6126fb91906139af565b905060006127098286613ade565b90504761271582613038565b60006127218247613ade565b905060008660400151866127359190613ade565b61273f90836139af565b905060008760400151826127539190613abf565b90508015612765576127658682613199565b6020880151600090612778846002613abf565b6127829190613abf565b905080156127a0576017546127a0906001600160a01b03168261327d565b60608901516000906127b3856002613abf565b6127bd9190613abf565b905080156127db576018546127db906001600160a01b03168261327d565b60808a01516000906127ee866002613abf565b6127f89190613abf565b9050801561281657601954612816906001600160a01b03168261327d565b50506009805462ff00001916905550505050505050505050565b6001600160a01b03851660009081526004602052604081205460ff1615801561287257506001600160a01b03851660009081526004602052604090205460ff16155b801561288d57506016546015546128899190613997565b4311155b9050600061289d858585856125d6565b6001600160a01b03881660009081526005602052604090205490915060ff16156128ff576001600160a01b0387166000908152600260205260409020546128e5908690613ade565b6001600160a01b0388166000908152600260205260409020555b6001600160a01b03861660009081526005602052604090205460ff16156129625760e08101516001600160a01b0387166000908152600260205260409020546129489190613997565b6001600160a01b0387166000908152600260205260409020555b80516001600160a01b0388166000908152600160205260409020546129879190613ade565b6001600160a01b03808916600090815260016020908152604080832094909455840151918916815291909120546129be9190613997565b6001600160a01b03871660009081526001602052604090819020919091558101511515806129f157506000816101000151115b15612a0957612a098160400151826101000151613396565b600081608001511180612a2157506000816101400151115b15612ab657612a3981608001518261014001516133cb565b306001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101800151846101600151856101200151866101400151612a909190613997565b612a9a9190613997565b612aa49190613997565b60405190815260200160405180910390a35b600081606001511180612ace57506000816101200151115b15612ae657612ae68160600151826101200151613441565b60008160c001511180612afe57506000816101800151115b15612b1657612b168160c00151826101800151613456565b60008160a001511180612b2e57506000816101600151115b15612b4657612b468160a0015182610160015161346b565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e00151604051612b8f91815260200190565b60405180910390a350505050505050565b601054600f546000918291825b600854811015612cf257826001600060088481548110612bcf57612bcf613b3c565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c3a5750816002600060088481548110612c1357612c13613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612c5057601054600f54945094505050509091565b6001600060088381548110612c6757612c67613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612c969084613ade565b92506002600060088381548110612caf57612caf613b3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cde9083613ade565b915080612cea81613af5565b915050612bad565b50600f54601054612d0391906139af565b821015612d1a57601054600f549350935050509091565b90939092509050565b612d2b613480565b83612d3c5760e08101859052612632565b612d6e6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b838015612d79575082155b15612db557506040805160a081018252602454815260255460208201526026549181019190915260275460608201526028546080820152612e24565b82612df157506040805160a081018252601f54815260208054908201526021549181019190915260225460608201526023546080820152612e24565b506040805160a081018252601a548152601b546020820152601c5491810191909152601d546060820152601e5460808201525b8051606490612e339088613abf565b612e3d91906139af565b6101008301526020810151606490612e559088613abf565b612e5f91906139af565b6101208301526040810151606490612e779088613abf565b612e8191906139af565b6101408301526060810151606490612e999088613abf565b612ea391906139af565b6101608301526080810151606490612ebb9088613abf565b612ec591906139af565b6101808301819052610160830151610140840151610120850151610100860151612eef908b613ade565b612ef99190613ade565b612f039190613ade565b612f0d9190613ade565b612f179190613ade565b60e083015250949350505050565b600080808080612f358689613abf565b945086612f4d57508392506000915081905080612feb565b85896101000151612f5e9190613abf565b925085896101200151612f719190613abf565b915085896101400151612f849190613abf565b90506000868a6101600151612f999190613abf565b90506000878b6101800151612fae9190613abf565b905080828486612fbe898c613ade565b612fc89190613ade565b612fd29190613ade565b612fdc9190613ade565b612fe69190613ade565b955050505b945094509450945094565b6000808361300957506000905080613030565b8285610160015161301a9190613abf565b91508285610180015161302d9190613abf565b90505b935093915050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061306d5761306d613b3c565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156130c157600080fd5b505afa1580156130d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f99190613520565b8160018151811061310c5761310c613b3c565b6001600160a01b039283166020918202929092010152600d546131329130911684611c05565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061316b908590600090869030904290600401613926565b600060405180830381600087803b15801561318557600080fd5b505af11580156125ab573d6000803e3d6000fd5b600d546131b19030906001600160a01b031684611c05565b600d546001600160a01b031663f305d7198230856000806131da6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561323d57600080fd5b505af1158015613251573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061327691906137fc565b5050505050565b804710156132cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b8d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461331a576040519150601f19603f3d011682016040523d82523d6000602084013e61331f565b606091505b5050905080610c3c5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b8d565b81601060008282546133a89190613ade565b9091555050602980548291906000906133c2908490613997565b90915550505050565b80602960020160008282546133e09190613997565b90915550503060009081526005602052604090205460ff161561342257306000908152600260205260408120805483929061341c908490613997565b90915550505b30600090815260016020526040812080548492906133c2908490613997565b80602960010160008282546133e09190613997565b80602960040160008282546133e09190613997565b80602960030160008282546133e09190613997565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356134f381613b68565b919050565b80356134f381613b7d565b60006020828403121561351557600080fd5b8135610e0481613b68565b60006020828403121561353257600080fd5b8151610e0481613b68565b6000806040838503121561355057600080fd5b823561355b81613b68565b9150602083013561356b81613b68565b809150509250929050565b60008060006060848603121561358b57600080fd5b833561359681613b68565b925060208401356135a681613b68565b929592945050506040919091013590565b600080604083850312156135ca57600080fd5b82356135d581613b68565b9150602083013561356b81613b7d565b600080604083850312156135f857600080fd5b823561360381613b68565b946020939093013593505050565b6000806040838503121561362457600080fd5b823567ffffffffffffffff8082111561363c57600080fd5b818501915085601f83011261365057600080fd5b813560208282111561366457613664613b52565b8160051b604051601f19603f8301168101818110868211171561368957613689613b52565b604052838152828101945085830182870184018b10156136a857600080fd5b600096505b848710156136d2576136be816134e8565b8652600196909601959483019483016136ad565b5096506136e290508782016134f8565b9450505050509250929050565b60006020828403121561370157600080fd5b8135610e0481613b7d565b60006020828403121561371e57600080fd5b8151610e0481613b7d565b6000806040838503121561373c57600080fd5b823561360381613b7d565b600080600080600080600060e0888a03121561376257600080fd5b873561376d81613b7d565b9960208901359950604089013598606081013598506080810135975060a0810135965060c00135945092505050565b6000602082840312156137ae57600080fd5b5035919050565b600080604083850312156137c857600080fd5b82359150602083013561356b81613b7d565b600080604083850312156137ed57600080fd5b50508035926020909101359150565b60008060006060848603121561381157600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561384257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561389257858101830151858201604001528201613876565b818111156138a4576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139765784516001600160a01b031683529383019391830191600101613951565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139aa576139aa613b10565b500190565b6000826139cc57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613a0c5781600019048211156139f2576139f2613b10565b808516156139ff57918102915b93841c93908002906139d6565b509250929050565b6000610e0460ff841683600082613a2d5750600161121f565b81613a3a5750600061121f565b8160018114613a505760028114613a5a57613a76565b600191505061121f565b60ff841115613a6b57613a6b613b10565b50506001821b61121f565b5060208310610133831016604e8410600b8410161715613a99575081810a61121f565b613aa383836139d1565b8060001904821115613ab757613ab7613b10565b029392505050565b6000816000190483118215151615613ad957613ad9613b10565b500290565b600082821015613af057613af0613b10565b500390565b6000600019821415613b0957613b09613b10565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c0257600080fd5b8015158114611c0257600080fdfea26469706673582212203c0c724089a1a48fe54202de7df44924caf2da1212e837a5b0ae2925082aa3d964736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30


Deployed ByteCode Sourcemap

3226:22552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7091:83;;;;;;;;;;-1:-1:-1;7161:5:0;;;;;;;;;;;-1:-1:-1;;;7161:5:0;;;;7091:83;;;;7161:5;7091:83;:::i;:::-;;;;;;;;7851:181;;;;;;;;;;-1:-1:-1;7851:181:0;;;;;:::i;:::-;;:::i;:::-;;;8026:14:1;;8019:22;8001:41;;7989:2;7974:18;7851:181:0;7861:187:1;24451:209:0;;;;;;;;;;-1:-1:-1;24451:209:0;;;;;:::i;:::-;;:::i;:::-;;7387:95;;;;;;;;;;-1:-1:-1;7467:7:0;;7387:95;;;18539:25:1;;;18527:2;18512:18;7387:95:0;18393:177:1;23672:102:0;;;;;;;;;;-1:-1:-1;23672:102:0;;;;;:::i;:::-;;:::i;8040:430::-;;;;;;;;;;-1:-1:-1;8040:430:0;;;;;:::i;:::-;;:::i;4683:28::-;;;;;;;;;;;;;;;;10389:248;;;;;;;;;;-1:-1:-1;10389:248:0;;;;;:::i;:::-;;:::i;7273:83::-;;;;;;;;;;-1:-1:-1;7273:83:0;;4272:1;20170:36:1;;20158:2;20143:18;7273:83:0;20028:184:1;11052:475:0;;;;;;;;;;-1:-1:-1;11052:475:0;;;;;:::i;:::-;;:::i;8478:228::-;;;;;;;;;;-1:-1:-1;8478:228:0;;;;;:::i;:::-;;:::i;25139:154::-;;;;;;;;;;-1:-1:-1;25139:154:0;;;;;:::i;:::-;;:::i;11537:111::-;;;;;;;;;;-1:-1:-1;11537:111:0;;;;;:::i;:::-;;:::i;25369:196::-;;;;;;;;;;-1:-1:-1;25369:196:0;;;;;:::i;:::-;;:::i;9439:484::-;;;;;;;;;;-1:-1:-1;9439:484:0;;;;;:::i;:::-;;:::i;25579:154::-;;;;;;;;;;-1:-1:-1;25579:154:0;;;;;:::i;:::-;;:::i;3760:26::-;;;;;;;;;;-1:-1:-1;3760:26:0;;;;;;;;10711:333;;;;;;;;;;-1:-1:-1;10711:333:0;;;;;:::i;:::-;;:::i;11776:123::-;;;;;;;;;;-1:-1:-1;11776:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11864:27:0;11840:4;11864:27;;;:18;:27;;;;;;;;;11776:123;24813:183;;;;;;;;;;-1:-1:-1;24813:183:0;;;;;:::i;:::-;;:::i;4913:70::-;;;;;;;;;;-1:-1:-1;4913:70:0;;;;-1:-1:-1;;;;;4913:70:0;;;;;;-1:-1:-1;;;;;6926:32:1;;;6908:51;;6896:2;6881:18;4913:70:0;6762:203:1;24313:126:0;;;;;;;;;;-1:-1:-1;24313:126:0;;;;;:::i;:::-;;:::i;9931:450::-;;;;;;;;;;-1:-1:-1;9931:450:0;;;;;:::i;:::-;;:::i;11907:217::-;;;;;;;;;;-1:-1:-1;11907:217:0;;;;;:::i;:::-;;:::i;3612:48::-;;;;;;;;;;-1:-1:-1;3612:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4565;;;;;;;;;;;;;;;;4620:50;;;;;;;;;;;;;;;;4511:47;;;;;;;;;;;;;;;;23786:104;;;;;;;;;;-1:-1:-1;23786:104:0;;;;;:::i;:::-;;:::i;3793:23::-;;;;;;;;;;-1:-1:-1;3793:23:0;;;;;;;;;;;7490:198;;;;;;;;;;-1:-1:-1;7490:198:0;;;;;:::i;:::-;;:::i;1655:94::-;;;;;;;;;;;;;:::i;5271:41::-;;;;;;;;;;-1:-1:-1;5271:41:0;;;;;;;;;;;;;;;;;;;;;;19819:25:1;;;19875:2;19860:18;;19853:34;;;;19903:18;;;19896:34;;;;19961:2;19946:18;;19939:34;20004:3;19989:19;;19982:35;19806:3;19791:19;5271:41:0;19560:463:1;4755:75:0;;;;;;;;;;-1:-1:-1;4755:75:0;;;;-1:-1:-1;;;;;4755:75:0;;;9311:120;;;;;;;;;;-1:-1:-1;9311:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9403:20:0;9379:4;9403:20;;;:11;:20;;;;;;;;;9311:120;1432:87;;;;;;;;;;-1:-1:-1;1478:7:0;1505:6;-1:-1:-1;;;;;1505:6:0;1432:87;;23329:209;;;;;;;;;;-1:-1:-1;23329:209:0;;;;;:::i;:::-;;:::i;4837:69::-;;;;;;;;;;-1:-1:-1;4837:69:0;;;;-1:-1:-1;;;;;4837:69:0;;;24200:101;;;;;;;;;;-1:-1:-1;24200:101:0;;;;;:::i;:::-;;:::i;5542:36::-;;;;;;;;;;-1:-1:-1;5542:36:0;;;;;;;;;;;;;;;;;;8714:390;;;;;;;;;;-1:-1:-1;8714:390:0;;;;;:::i;:::-;;:::i;4209:19::-;;;;;;;;;;-1:-1:-1;4209:19:0;;;;-1:-1:-1;;;;;4209:19:0;;;9116:187;;;;;;;;;;-1:-1:-1;9116:187:0;;;;;:::i;:::-;;:::i;23546:114::-;;;;;;;;;;-1:-1:-1;23546:114:0;;;;;:::i;:::-;;:::i;24672:129::-;;;;;;;;;;-1:-1:-1;24672:129:0;;;;;:::i;:::-;;:::i;12136:225::-;;;;;;;;;;-1:-1:-1;12136:225:0;;;;;:::i;:::-;;:::i;24062:130::-;;;;;;;;;;-1:-1:-1;24062:130:0;;;;;:::i;:::-;;:::i;3979:39::-;;;;;;;;;;;;;;;;25008:123;;;;;;;;;;-1:-1:-1;25008:123:0;;;;;:::i;:::-;;:::i;7700:143::-;;;;;;;;;;-1:-1:-1;7700:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7808:18:0;;;7781:7;7808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7700:143;4451:53;;;;;;;;;;;;;;;;23902:152;;;;;;;;;;-1:-1:-1;23902:152:0;;;;;:::i;:::-;;:::i;11656:110::-;;;;;;;;;;-1:-1:-1;11656:110:0;;;;;:::i;:::-;;:::i;3938:34::-;;;;;;;;;;-1:-1:-1;3938:34:0;;;;;;;;1757:192;;;;;;;;;;-1:-1:-1;1757:192:0;;;;;:::i;:::-;;:::i;5319:46::-;;;;;;;;;;-1:-1:-1;5319:46:0;;;;;;;;;;;;;;;;;;4181:21;;;;;;;;;;-1:-1:-1;4181:21:0;;;;-1:-1:-1;;;;;4181:21:0;;;7851:181;4083:14;;7946:4;;7926:10;;4083:14;;;:42;;-1:-1:-1;;;;;;4101:24:0;;;;;;:15;:24;;;;;;;;4083:42;4075:78;;;;-1:-1:-1;;;4075:78:0;;;;;;;:::i;:::-;;;;;;;;;7963:39:::1;933:10:::0;7986:7:::1;7995:6;7963:8;:39::i;:::-;-1:-1:-1::0;8020:4:0::1;::::0;7851:181;-1:-1:-1;;;7851:181:0:o;24451:209::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;24550:9:::1;24546:107;24568:8;:15;24564:1;:19;24546:107;;;24634:5;24604:14;:27;24619:8;24628:1;24619:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24604:27:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24604:27:0;:35;;-1:-1:-1;;24604:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24585:3;::::1;::::0;::::1;:::i;:::-;;;;24546:107;;;;24451:209:::0;;:::o;23672:102::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;23745:9:::1;:21:::0;;-1:-1:-1;;;;;;23745:21:0::1;-1:-1:-1::0;;;;;23745:21:0;;;::::1;::::0;;;::::1;::::0;;23672:102::o;8040:430::-;4083:14;;8154:4;;8137:6;;4083:14;;;:42;;-1:-1:-1;;;;;;4101:24:0;;;;;;:15;:24;;;;;;;;4083:42;4075:78;;;;-1:-1:-1;;;4075:78:0;;;;;;;:::i;:::-;8171:36:::1;8181:6;8189:9;8200:6;8171:9;:36::i;:::-;-1:-1:-1::0;;;;;8247:19:0;::::1;8220:24;8247:19:::0;;;:11:::1;:19;::::0;;;;;;;933:10;8247:33;;;;;;;;8299:26;;::::1;;8291:79;;;::::0;-1:-1:-1;;;8291:79:0;;14800:2:1;8291:79:0::1;::::0;::::1;14782:21:1::0;14839:2;14819:18;;;14812:30;14878:34;14858:18;;;14851:62;-1:-1:-1;;;14929:18:1;;;14922:38;14977:19;;8291:79:0::1;14598:404:1::0;8291:79:0::1;8381:57;8390:6:::0;933:10;8412:25:::1;8431:6:::0;8412:16;:25:::1;:::i;:::-;8381:8;:57::i;:::-;-1:-1:-1::0;8458:4:0::1;::::0;8040:430;-1:-1:-1;;;;;8040:430:0:o;10389:248::-;10455:7;10494;;10483;:18;;10475:73;;;;-1:-1:-1;;;10475:73:0;;10607:2:1;10475:73:0;;;10589:21:1;10646:2;10626:18;;;10619:30;10685:34;10665:18;;;10658:62;-1:-1:-1;;;10736:18:1;;;10729:40;10786:19;;10475:73:0;10405:406:1;10475:73:0;10559:19;10582:10;:8;:10::i;:::-;10559:33;-1:-1:-1;10610:19:0;10559:33;10610:7;:19;:::i;:::-;10603:26;10389:248;-1:-1:-1;;;10389:248:0:o;11052:475::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11134:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;11126:56;;;::::0;-1:-1:-1;;;11126:56:0;;13377:2:1;11126:56:0::1;::::0;::::1;13359:21:1::0;13416:2;13396:18;;;13389:30;13455:25;13435:18;;;13428:53;13498:18;;11126:56:0::1;13175:347:1::0;11126:56:0::1;11198:9;11193:327;11217:9;:16:::0;11213:20;::::1;11193:327;;;11275:7;-1:-1:-1::0;;;;;11259:23:0::1;:9;11269:1;11259:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11259:12:0::1;:23;11255:254;;;11318:9;11328:16:::0;;:20:::1;::::0;11347:1:::1;::::0;11328:20:::1;:::i;:::-;11318:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11303:9:::1;:12:::0;;-1:-1:-1;;;;;11318:31:0;;::::1;::::0;11313:1;;11303:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11303:46:0::1;-1:-1:-1::0;;;;;11303:46:0;;::::1;;::::0;;11368:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11407:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11407:28:0::1;::::0;;11454:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11454:15:0;;;;;-1:-1:-1;;;;;;11454:15:0::1;::::0;;;;;11193:327:::1;11052:475:::0;:::o;11255:254::-:1;11235:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11193:327;;;;11052:475:::0;:::o;8478:228::-;4083:14;;8579:4;;8558:10;;4083:14;;;:42;;-1:-1:-1;;;;;;4101:24:0;;;;;;:15;:24;;;;;;;;4083:42;4075:78;;;;-1:-1:-1;;;4075:78:0;;;;;;;:::i;:::-;933:10;8628:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;8628:34:0;::::1;::::0;;;;;;;;8596:80:::1;::::0;933:10;8619:7;;8628:47:::1;::::0;8665:10;;8628:47:::1;:::i;25139:154::-:0;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;25233:6:::1;:27:::0;;-1:-1:-1;;;;;25233:27:0;;::::1;-1:-1:-1::0;;;;;;25233:27:0;;::::1;;::::0;;;25271:4:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;25139:154::o;11537:111::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11606:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;11606:34:0::1;11636:4;11606:34;::::0;;11537:111::o;25369:196::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;25469:9:::1;25444:21;:34;;25436:71;;;::::0;-1:-1:-1;;;25436:71:0;;14447:2:1;25436:71:0::1;::::0;::::1;14429:21:1::0;14486:2;14466:18;;;14459:30;14525:26;14505:18;;;14498:54;14569:18;;25436:71:0::1;14245:348:1::0;25436:71:0::1;25518:39;::::0;25526:10:::1;::::0;25518:39;::::1;;;::::0;25547:9;;25518:39:::1;::::0;;;25547:9;25526:10;25518:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;9439:484:::0;9529:7;9568;;9557;:18;;9549:62;;;;-1:-1:-1;;;9549:62:0;;14087:2:1;9549:62:0;;;14069:21:1;14126:2;14106:18;;;14099:30;14165:33;14145:18;;;14138:61;14216:18;;9549:62:0;13885:355:1;9549:62:0;9627:17;9622:294;;9661:28;9692:39;9703:7;9712:4;9718:5;9725;9692:10;:39::i;:::-;9753:9;;-1:-1:-1;9746:16:0;;-1:-1:-1;9746:16:0;9622:294;9795:28;9826:39;9837:7;9846:4;9852:5;9859;9826:10;:39::i;:::-;9887:17;;;;-1:-1:-1;9880:24:0;;-1:-1:-1;9880:24:0;9622:294;9439:484;;;;:::o;25579:154::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;25684:41:::1;::::0;-1:-1:-1;;;25684:41:0;;-1:-1:-1;;;;;7162:32:1;;;25684:41:0::1;::::0;::::1;7144:51:1::0;7211:18;;;7204:34;;;25684:27:0;::::1;::::0;::::1;::::0;7117:18:1;;25684:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25579:154:::0;;;:::o;10711:333::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10794:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;10793:21;10785:61;;;::::0;-1:-1:-1;;;10785:61:0;;11828:2:1;10785:61:0::1;::::0;::::1;11810:21:1::0;11867:2;11847:18;;;11840:30;11906:29;11886:18;;;11879:57;11953:18;;10785:61:0::1;11626:351:1::0;10785:61:0::1;-1:-1:-1::0;;;;;10860:16:0;::::1;10879:1;10860:16:::0;;;:7:::1;:16;::::0;;;;;:20;10857:108:::1;;-1:-1:-1::0;;;;;10936:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;10916:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;10897:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;10857:108:::1;-1:-1:-1::0;;;;;10975:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;10975:27:0::1;10998:4;10975:27:::0;;::::1;::::0;;;11013:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;11013:23:0::1;::::0;;::::1;::::0;;10711:333::o;24813:183::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;24924:14:::1;4272:1:::0;24924:2:::1;:14;:::i;:::-;24915:23;::::0;:6;:23:::1;:::i;:::-;24901:11;:37:::0;24974:14:::1;4272:1:::0;24974:2:::1;:14;:::i;:::-;24964:24;::::0;:7;:24:::1;:::i;:::-;24949:12;:39:::0;-1:-1:-1;;24813:183:0:o;24313:126::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24400:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;24400:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24313:126::o;9931:450::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;10166:14:::1;:22:::0;;-1:-1:-1;;10199:19:0;-1:-1:-1;;10166:22:0;::::1;;10199:19:::0;;;;;;;10166:22:::1;10199:19:::0;::::1;;::::0;;;10229:8:::1;:20:::0;;;10272:43:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;10260:9:::1;:55:::0;;;;;;;;;;;;;;;;;;;-1:-1:-1;10330:13:0::1;10326:47;;;10361:12;10345:13;:28:::0;10326:47:::1;9931:450:::0;;;;;;;:::o;11907:217::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;12043:44:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;12035:5:::1;:52:::0;;;;;;;;;;;;;;;;;;12103:13;::::1;::::0;-1:-1:-1;;12103:13:0::1;11907:217:::0;;;;;:::o;23786:104::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;23860:10:::1;:22:::0;;-1:-1:-1;;;;;;23860:22:0::1;-1:-1:-1::0;;;;;23860:22:0;;;::::1;::::0;;;::::1;::::0;;23786:104::o;7490:198::-;-1:-1:-1;;;;;7580:20:0;;7556:7;7580:20;;;:11;:20;;;;;;;;7576:49;;;-1:-1:-1;;;;;;7609:16:0;;;;;:7;:16;;;;;;;7490:198::o;7576:49::-;-1:-1:-1;;;;;7663:16:0;;;;;;:7;:16;;;;;;7643:37;;:19;:37::i;1655:94::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;1720:21:::1;1738:1;1720:9;:21::i;:::-;1655:94::o:0;23329:209::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;23425:9:::1;23421:110;23444:8;:15;23440:1;:19;23421:110;;;23514:5;23480:18;:31;23499:8;23508:1;23499:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;23480:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;23480:31:0;:39;;-1:-1:-1;;23480:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23461:3;::::1;::::0;::::1;:::i;:::-;;;;23421:110;;24200:101:::0;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;24271:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;24271:22:0;;::::1;::::0;;;::::1;::::0;;24200:101::o;8714:390::-;4083:14;;8820:4;;8799:10;;4083:14;;;:42;;-1:-1:-1;;;;;;4101:24:0;;;;;;:15;:24;;;;;;;;4083:42;4075:78;;;;-1:-1:-1;;;4075:78:0;;;;;;;:::i;:::-;933:10;8837:24:::1;8864:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;8864:34:0;::::1;::::0;;;;;;;;8917:35;;::::1;;8909:85;;;::::0;-1:-1:-1;;;8909:85:0;;18189:2:1;8909:85:0::1;::::0;::::1;18171:21:1::0;18228:2;18208:18;;;18201:30;18267:34;18247:18;;;18240:62;-1:-1:-1;;;18318:18:1;;;18311:35;18363:19;;8909:85:0::1;17987:401:1::0;8909:85:0::1;9005:67;933:10:::0;9028:7;9037:34:::1;9056:15:::0;9037:16;:34:::1;:::i;9005:67::-;-1:-1:-1::0;9092:4:0::1;::::0;8714:390;-1:-1:-1;;;;8714:390:0:o;9116:187::-;4083:14;;9214:4;;9193:10;;4083:14;;;:42;;-1:-1:-1;;;;;;4101:24:0;;;;;;:15;:24;;;;;;;;4083:42;4075:78;;;;-1:-1:-1;;;4075:78:0;;;;;;;:::i;:::-;9235:40:::1;9245:10;9257:9;9268:6;9235:9;:40::i;23546:114::-:0;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;23625:15:::1;:27:::0;;-1:-1:-1;;;;;;23625:27:0::1;-1:-1:-1::0;;;;;23625:27:0;;;::::1;::::0;;;::::1;::::0;;23546:114::o;24672:129::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24761:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;24761:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24672:129::o;12136:225::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;12280:44:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;12268:9:::1;:56:::0;;;;;;;;;;;;;;;;;;;12340:13;::::1;::::0;-1:-1:-1;;12340:13:0::1;12136:225:::0;;;;;:::o;24062:130::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;24171:13:::1;4272:1;24171:2;:13;:::i;:::-;24162:22;::::0;:6;:22:::1;:::i;:::-;24141:18;:43:::0;-1:-1:-1;24062:130:0:o;25008:123::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;25109:14:::1;4272:1:::0;25109:2:::1;:14;:::i;:::-;25100:23;::::0;:6;:23:::1;:::i;:::-;25083:14;:40:::0;-1:-1:-1;25008:123:0:o;23902:152::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;23996:16:::1;:4:::0;24003:9:::1;23996:16;:::i;:::-;23981:12;:31:::0;-1:-1:-1;24023:15:0::1;:23:::0;;-1:-1:-1;;24023:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23902:152::o;11656:110::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11723:27:0::1;11753:5;11723:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;11723:35:0::1;::::0;;11656:110::o;1757:192::-;1478:7;1505:6;-1:-1:-1;;;;;1505:6:0;933:10;1567:23;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1846:22:0;::::1;1838:73;;;::::0;-1:-1:-1;;;1838:73:0;;11018:2:1;1838:73:0::1;::::0;::::1;11000:21:1::0;11057:2;11037:18;;;11030:30;11096:34;11076:18;;;11069:62;-1:-1:-1;;;11147:18:1;;;11140:36;11193:19;;1838:73:0::1;10816:402:1::0;1838:73:0::1;1922:19;1932:8;1922:9;:19::i;:::-;1757:192:::0;:::o;16659:335::-;-1:-1:-1;;;;;16752:19:0;;16744:68;;;;-1:-1:-1;;;16744:68:0;;16731:2:1;16744:68:0;;;16713:21:1;16770:2;16750:18;;;16743:30;16809:34;16789:18;;;16782:62;-1:-1:-1;;;16860:18:1;;;16853:34;16904:19;;16744:68:0;16529:400:1;16744:68:0;-1:-1:-1;;;;;16831:21:0;;16823:68;;;;-1:-1:-1;;;16823:68:0;;11425:2:1;16823:68:0;;;11407:21:1;11464:2;11444:18;;;11437:30;11503:34;11483:18;;;11476:62;-1:-1:-1;;;11554:18:1;;;11547:32;11596:19;;16823:68:0;11223:398:1;16823:68:0;-1:-1:-1;;;;;16902:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16954:32;;18539:25:1;;;16954:32:0;;18512:18:1;16954:32:0;;;;;;;16659:335;;;:::o;17002:2449::-;-1:-1:-1;;;;;17090:18:0;;17082:68;;;;-1:-1:-1;;;17082:68:0;;16325:2:1;17082:68:0;;;16307:21:1;16364:2;16344:18;;;16337:30;16403:34;16383:18;;;16376:62;-1:-1:-1;;;16454:18:1;;;16447:35;16499:19;;17082:68:0;16123:401:1;17082:68:0;-1:-1:-1;;;;;17169:16:0;;17161:64;;;;-1:-1:-1;;;17161:64:0;;9080:2:1;17161:64:0;;;9062:21:1;9119:2;9099:18;;;9092:30;9158:34;9138:18;;;9131:62;-1:-1:-1;;;9209:18:1;;;9202:33;9252:19;;17161:64:0;8878:399:1;17161:64:0;17253:1;17244:6;:10;17236:64;;;;-1:-1:-1;;;17236:64:0;;15570:2:1;17236:64:0;;;15552:21:1;15609:2;15589:18;;;15582:30;15648:34;15628:18;;;15621:62;-1:-1:-1;;;15699:18:1;;;15692:39;15748:19;;17236:64:0;15368:405:1;17236:64:0;17329:15;17339:4;17329:9;:15::i;:::-;17319:6;:25;;17311:86;;;;-1:-1:-1;;;17311:86:0;;10189:2:1;17311:86:0;;;10171:21:1;10228:2;10208:18;;;10201:30;10267:34;10247:18;;;10240:62;-1:-1:-1;;;10318:18:1;;;10311:47;10375:19;;17311:86:0;9987:413:1;17311:86:0;-1:-1:-1;;;;;17417:20:0;;;;;;:14;:20;;;;;;;;17416:21;:44;;;;-1:-1:-1;;;;;;17442:18:0;;;;;;:14;:18;;;;;;;;17441:19;17416:44;17408:70;;;;-1:-1:-1;;;17408:70:0;;17488:2:1;17408:70:0;;;17470:21:1;17527:2;17507:18;;;17500:30;-1:-1:-1;;;17546:18:1;;;17539:43;17599:18;;17408:70:0;17286:337:1;17408:70:0;-1:-1:-1;;;;;17503:24:0;;;;;;:18;:24;;;;;;;;17502:25;:52;;;;-1:-1:-1;;;;;;17532:22:0;;;;;;:18;:22;;;;;;;;17531:23;17502:52;17499:128;;;17578:14;;;;17570:45;;;;-1:-1:-1;;;17570:45:0;;9842:2:1;17570:45:0;;;9824:21:1;9881:2;9861:18;;;9854:30;-1:-1:-1;;;9900:18:1;;;9893:48;9958:18;;17570:45:0;9640:342:1;17570:45:0;-1:-1:-1;;;;;17651:24:0;;;;;;:18;:24;;;;;;;;17650:25;:52;;;;-1:-1:-1;;;;;;17680:22:0;;;;;;:18;:22;;;;;;;;17679:23;17650:52;:89;;;;-1:-1:-1;17722:13:0;;:17;;17738:1;17722:17;:::i;:::-;17706:12;:33;;17650:89;17647:180;;;17770:4;;-1:-1:-1;;;;;17764:10:0;;;17770:4;;17764:10;;17756:59;;;;-1:-1:-1;;;17756:59:0;;12545:2:1;17756:59:0;;;12527:21:1;12584:2;12564:18;;;12557:30;12623:34;12603:18;;;12596:62;-1:-1:-1;;;12674:18:1;;;12667:34;12718:19;;17756:59:0;12343:400:1;17756:59:0;17858:4;;-1:-1:-1;;;;;17850:12:0;;;17858:4;;17850:12;:39;;;;-1:-1:-1;;;;;;17867:22:0;;;;;;:18;:22;;;;;;;;17866:23;17850:39;:52;;;;-1:-1:-1;17894:8:0;;;;;;;17893:9;17850:52;17847:246;;;17936:11;;17926:6;:21;;17918:63;;;;-1:-1:-1;;;17918:63:0;;9484:2:1;17918:63:0;;;9466:21:1;9523:2;9503:18;;;9496:30;9562:31;9542:18;;;9535:59;9611:18;;17918:63:0;9282:353:1;17918:63:0;18030:14;;18020:6;18004:13;18014:2;18004:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17996:85;;;;-1:-1:-1;;;17996:85:0;;12184:2:1;17996:85:0;;;12166:21:1;;;12203:18;;;12196:30;12262:34;12242:18;;;12235:62;12314:18;;17996:85:0;11982:356:1;17996:85:0;18124:4;;-1:-1:-1;;;;;18116:12:0;;;18124:4;;18116:12;;;;:39;;-1:-1:-1;;;;;;18133:22:0;;;;;;:18;:22;;;;;;;;18132:23;18116:39;:68;;;;-1:-1:-1;;;;;;18160:24:0;;;;;;:18;:24;;;;;;;;18159:25;18116:68;:81;;;;-1:-1:-1;18189:8:0;;;;;;;18188:9;18116:81;18113:573;;;18231:12;;18221:6;:22;;18213:65;;;;-1:-1:-1;;;18213:65:0;;17830:2:1;18213:65:0;;;17812:21:1;17869:2;17849:18;;;17842:30;17908:32;17888:18;;;17881:60;17958:18;;18213:65:0;17628:354:1;18213:65:0;18302:4;;-1:-1:-1;;;;;18296:10:0;;;18302:4;;18296:10;18293:134;;18360:14;;18350:6;18334:13;18344:2;18334:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18326:85;;;;-1:-1:-1;;;18326:85:0;;12184:2:1;18326:85:0;;;12166:21:1;;;12203:18;;;12196:30;12262:34;12242:18;;;12235:62;12314:18;;18326:85:0;11982:356:1;18326:85:0;18444:15;;;;18441:234;;;-1:-1:-1;;;;;18518:15:0;;18479:18;18518:15;;;:9;:15;;;;;;18500:33;;:15;:33;:::i;:::-;18479:54;;18574:12;;18560:10;:26;;18552:55;;;;-1:-1:-1;;;18552:55:0;;15980:2:1;18552:55:0;;;15962:21:1;16019:2;15999:18;;;15992:30;-1:-1:-1;;;16038:18:1;;;16031:46;16094:18;;18552:55:0;15778:340:1;18552:55:0;-1:-1:-1;;;;;;18626:15:0;;;;;;:9;:15;;;;;18644;18626:33;;18441:234;18753:14;4272:1;18753:2;:14;:::i;:::-;18747:20;;:2;:20;:::i;:::-;18737:6;18719:15;18729:4;18719:9;:15::i;:::-;:24;;;;:::i;:::-;:48;18716:111;;18811:15;18821:4;18811:9;:15::i;:::-;18802:6;18785:14;4272:1;18785:2;:14;:::i;:::-;18780:19;;:2;:19;:::i;:::-;:28;;;;:::i;:::-;:46;;;;:::i;:::-;18769:58;;;;:::i;:::-;;;18716:111;18857:12;18900:18;;18872:24;18890:4;18872:9;:24::i;:::-;18933:8;;-1:-1:-1;;18872:46:0;;-1:-1:-1;18933:8:0;;;;;18932:9;:24;;;;-1:-1:-1;18945:11:0;;;;;;;18932:24;:35;;;;;18960:7;18932:35;:51;;;;-1:-1:-1;18979:4:0;;-1:-1:-1;;;;;18971:12:0;;;18979:4;;18971:12;;18932:51;:80;;;;-1:-1:-1;;;;;;18988:24:0;;;;;;:18;:24;;;;;;;;18987:25;18932:80;:107;;;;-1:-1:-1;;;;;;19017:22:0;;;;;;:18;:22;;;;;;;;19016:23;18932:107;18929:261;;;19064:4;;-1:-1:-1;;;;;19058:10:0;;;19064:4;;19058:10;19055:123;;;19086:18;;19071:45;;;;;;;;19106:9;19071:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19086:18;19071:14;:45::i;:::-;19055:123;;;19152:18;;19137:41;;;;;;;;19172:5;19137:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19152:18;19137:14;:41::i;:::-;19263:8;;19215:4;;19200:12;;19263:8;;;;;;:36;;-1:-1:-1;;;;;;19275:24:0;;;;;;:18;:24;;;;;;;;19263:36;:62;;;-1:-1:-1;;;;;;19303:22:0;;;;;;:18;:22;;;;;;;;19263:62;19260:82;;;19337:5;19327:15;;19260:82;19362:4;;-1:-1:-1;;;;;19356:10:0;;;19362:4;;19356:10;19353:28;;;-1:-1:-1;19377:4:0;19353:28;19394:49;19409:4;19415:2;19419:6;19427:7;19436:6;19394:14;:49::i;:::-;17071:2380;;;17002:2449;;;:::o;15945:158::-;15986:7;16007:15;16024;16043:19;:17;:19::i;:::-;16006:56;;-1:-1:-1;16006:56:0;-1:-1:-1;16080:15:0;16006:56;;16080:15;:::i;:::-;16073:22;;;;15945:158;:::o;13615:516::-;13720:36;;:::i;:::-;13781:51;13793:7;13802;13811:6;13819:12;13781:11;:51::i;:::-;13769:63;;13952:53;13965:9;13976:7;13985;13994:10;:8;:10::i;:::-;13952:12;:53::i;:::-;13928:20;;;13843:162;13906:20;;;13843:162;13890:14;;;13843:162;13863:25;;;13843:162;;;14052:44;13844:9;14076:7;14085:10;:8;:10::i;:::-;14052:12;:44::i;:::-;14033:15;;;14016:80;14017:14;;;14016:80;13615:516;;;;;;;:::o;1957:173::-;2013:16;2032:6;;-1:-1:-1;;;;;2049:17:0;;;-1:-1:-1;;;;;;2049:17:0;;;;;;2082:40;;2032:6;;;;;;;2082:40;;2013:16;2082:40;2002:128;1957:173;:::o;20907:1331::-;6077:8;:15;;-1:-1:-1;;6077:15:0;;;;;21073:9:::1;::::0;::::1;::::0;21062:8:::1;::::0;::::1;::::0;21045:14:::1;::::0;::::1;::::0;21028::::1;::::0;::::1;::::0;6077:15;;21073:9;21062:8;21028:31:::1;::::0;::::1;:::i;:::-;:42;;;;:::i;:::-;:54;;;;:::i;:::-;21027:60;::::0;21086:1:::1;21027:60;:::i;:::-;21005:82;;21098:32;21168:11;21151:4;:14;;;21133:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;21098:81:::0;-1:-1:-1;21190:14:0::1;21207:42;21098:81:::0;21207:15;:42:::1;:::i;:::-;21190:59:::0;-1:-1:-1;21287:21:0::1;21321:24;21190:59:::0;21321:16:::1;:24::i;:::-;21358:20;21381:38;21405:14:::0;21381:21:::1;:38;:::i;:::-;21358:61;;21430:19;21481:4;:14;;;21467:11;:28;;;;:::i;:::-;21451:45;::::0;:12;:45:::1;:::i;:::-;21430:66;;21507:29;21553:4;:14;;;21539:11;:28;;;;:::i;:::-;21507:60:::0;-1:-1:-1;21583:25:0;;21580:158:::1;;21665:61;21678:24;21704:21;21665:12;:61::i;:::-;21791:14;::::0;::::1;::::0;21750:20:::1;::::0;21773:15:::1;:11:::0;21787:1:::1;21773:15;:::i;:::-;:32;;;;:::i;:::-;21750:55:::0;-1:-1:-1;21819:16:0;;21816:95:::1;;21859:15;::::0;21851:48:::1;::::0;-1:-1:-1;;;;;21859:15:0::1;21886:12:::0;21851:34:::1;:48::i;:::-;21956:8;::::0;::::1;::::0;21921:14:::1;::::0;21938:15:::1;:11:::0;21952:1:::1;21938:15;:::i;:::-;:26;;;;:::i;:::-;21921:43:::0;-1:-1:-1;21978:10:0;;21975:77:::1;;22012:9;::::0;22004:36:::1;::::0;-1:-1:-1;;;;;22012:9:0::1;22033:6:::0;22004:28:::1;:36::i;:::-;22111:9;::::0;::::1;::::0;22072:18:::1;::::0;22093:15:::1;:11:::0;22107:1:::1;22093:15;:::i;:::-;:27;;;;:::i;:::-;22072:48:::0;-1:-1:-1;22134:14:0;;22131:86:::1;;22172:10;::::0;22164:41:::1;::::0;-1:-1:-1;;;;;22172:10:0::1;22194::::0;22164:29:::1;:41::i;:::-;-1:-1:-1::0;;6115:8:0;:16;;-1:-1:-1;;6115:16:0;;;-1:-1:-1;;;;;;;;;;20907:1331:0:o;19534:1365::-;-1:-1:-1;;;;;19681:26:0;;19660:17;19681:26;;;:18;:26;;;;;;;;19680:27;:74;;;;-1:-1:-1;;;;;;19725:29:0;;;;;;:18;:29;;;;;;;;19724:30;19680:74;:131;;;;;19803:8;;19787:13;;:24;;;;:::i;:::-;19771:12;:40;;19680:131;19660:151;;19824:28;19855:50;19866:7;19875;19884:6;19892:12;19855:10;:50::i;:::-;-1:-1:-1;;;;;19924:19:0;;;;;;:11;:19;;;;;;19824:81;;-1:-1:-1;19924:19:0;;19920:115;;;-1:-1:-1;;;;;20000:15:0;;;;;;:7;:15;;;;;;:23;;20016:7;;20000:23;:::i;:::-;-1:-1:-1;;;;;19982:15:0;;;;;;:7;:15;;;;;:41;19920:115;-1:-1:-1;;;;;20049:22:0;;;;;;:11;:22;;;;;;;;20045:130;;;20146:17;;;;-1:-1:-1;;;;;20127:18:0;;;;;;:7;:18;;;;;;:36;;20146:17;20127:36;:::i;:::-;-1:-1:-1;;;;;20106:18:0;;;;;;:7;:18;;;;;:57;20045:130;20221:9;;-1:-1:-1;;;;;20205:15:0;;20221:9;20205:15;;;:7;:15;;;;;;:25;;20221:9;20205:25;:::i;:::-;-1:-1:-1;;;;;20187:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;20281:17;;;20262:18;;;;;;;;;;:36;;20281:17;20262:36;:::i;:::-;-1:-1:-1;;;;;20241:18:0;;;;;;:7;:18;;;;;;;:57;;;;20322:6;;;:10;;;:24;;;20345:1;20336;:6;;;:10;20322:24;20319:56;;;20348:27;20360:1;:6;;;20368:1;:6;;;20348:11;:27::i;:::-;20404:1;20389;:12;;;:16;:36;;;;20424:1;20409;:12;;;:16;20389:36;20386:207;;;20442:41;20457:1;:12;;;20470:1;:12;;;20442:14;:41::i;:::-;20528:4;-1:-1:-1;;;;;20503:78:0;20512:6;-1:-1:-1;;;;;20503:78:0;;20573:1;:7;;;20565:1;:6;;;20550:1;:12;;;20535:1;:12;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;:45;;;;:::i;:::-;20503:78;;18539:25:1;;;18527:2;18512:18;20503:78:0;;;;;;;20386:207;20621:1;20606;:12;;;:16;:36;;;;20641:1;20626;:12;;;:16;20606:36;20603:83;;;20644:42;20659:1;:12;;;20673:1;:12;;;20644:14;:42::i;:::-;20710:1;20700;:7;;;:11;:26;;;;20725:1;20715;:7;;;:11;20700:26;20697:58;;;20728:27;20738:1;:7;;;20747:1;:7;;;20728:9;:27::i;:::-;20778:1;20769;:6;;;:10;:24;;;;20792:1;20783;:6;;;:10;20769:24;20766:53;;;20795:24;20804:1;:6;;;20812:1;:6;;;20795:8;:24::i;:::-;20852:9;-1:-1:-1;;;;;20835:46:0;20844:6;-1:-1:-1;;;;;20835:46:0;;20863:1;:17;;;20835:46;;;;18539:25:1;;18527:2;18512:18;;18393:177;20835:46:0;;;;;;;;19645:1254;;19534:1365;;;;;:::o;16111:540::-;16208:7;;16244;;16161;;;;;16262:279;16286:9;:16;16282:20;;16262:279;;;16352:7;16328;:21;16336:9;16346:1;16336:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16336:12:0;16328:21;;;;;;;;;;;;;:31;;:66;;;16387:7;16363;:21;16371:9;16381:1;16371:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16371:12:0;16363:21;;;;;;;;;;;;;:31;16328:66;16324:97;;;16404:7;;16413;;16396:25;;;;;;;16111:540;;:::o;16324:97::-;16454:7;:21;16462:9;16472:1;16462:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16462:12:0;16454:21;;;;;;;;;;;;;16446:29;;:7;:29;:::i;:::-;16436:39;;16508:7;:21;16516:9;16526:1;16516:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16516:12:0;16508:21;;;;;;;;;;;;;16500:29;;:7;:29;:::i;:::-;16490:39;-1:-1:-1;16304:3:0;;;;:::i;:::-;;;;16262:279;;;;16573:7;;16565;;:15;;;;:::i;:::-;16555:7;:25;16551:56;;;16590:7;;16599;;16582:25;;;;;;16111:540;;:::o;16551:56::-;16626:7;;16635;;-1:-1:-1;16111:540:0;-1:-1:-1;16111:540:0:o;14139:746::-;14245:28;;:::i;:::-;14292:7;14288:86;;14314:17;;;:27;;;14354:8;;14288:86;14384:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14384:17:0;14416:6;:23;;;;;14427:12;14426:13;14416:23;14412:124;;;-1:-1:-1;14441:16:0;;;;;;;;14448:9;14441:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:124;;;14478:12;14473:63;;-1:-1:-1;14492:12:0;;;;;;;;14499:5;14492:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14473:63;;;-1:-1:-1;14520:16:0;;;;;;;;14527:9;14520:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14473:63;14574:8;;14583:3;;14566:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;14557:6;;;:29;14620:14;;;;14635:3;;14612:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14597:12;;;:41;14672:14;;;;14687:3;;14664:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14649:12;;;:41;14718:8;;;;14727:3;;14710:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;14701:6;;;:29;14759:9;;;;14769:3;;14751:17;;:7;:17;:::i;:::-;:21;;;;:::i;:::-;14741:7;;;:31;;;14844:6;;;;14831:12;;;;14818;;;;14811:6;;;;14803:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:47;;;;:::i;:::-;:55;;;;:::i;:::-;14783:17;;;:75;-1:-1:-1;14139:746:0;;;;;;:::o;14893:720::-;15019:15;;;;;15134:19;15142:11;15134:7;:19;:::i;:::-;15124:29;;15170:7;15166:69;;-1:-1:-1;15199:7:0;;-1:-1:-1;15217:1:0;;-1:-1:-1;15217:1:0;;-1:-1:-1;15217:1:0;15192:31;;15166:69;15261:11;15254:1;:6;;;:18;;;;:::i;:::-;15247:25;;15309:11;15296:1;:12;;;:24;;;;:::i;:::-;15283:37;;15357:11;15344:1;:12;;;:24;;;;:::i;:::-;15331:37;;15379:12;15401:11;15394:1;:6;;;:18;;;;:::i;:::-;15379:33;;15423:13;15447:11;15439:1;:7;;;:19;;;;:::i;:::-;15423:35;-1:-1:-1;15423:35:0;15523:4;15512:10;15501;15488:12;15496:4;15488:7;:12;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:39;;;;:::i;:::-;:45;;;;:::i;:::-;15469:64;;15544:61;;14893:720;;;;;;;;;;:::o;15625:312::-;15734:12;15747:13;15779:7;15775:49;;-1:-1:-1;15808:1:0;;-1:-1:-1;15808:1:0;15801:11;;15775:49;15850:11;15843:1;:6;;;:18;;;;:::i;:::-;15836:25;;15888:11;15880:1;:7;;;:19;;;;:::i;:::-;15872:27;;15625:312;;;;;;;:::o;22749:562::-;22899:16;;;22913:1;22899:16;;;;;;;;22875:21;;22899:16;;;;;;;;;;-1:-1:-1;22899:16:0;22875:40;;22944:4;22926;22931:1;22926:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22926:23:0;;;:7;;;;;;;;;;:23;;;;22970:6;;:13;;;-1:-1:-1;;;22970:13:0;;;;:6;;;;;:11;;:13;;;;;22926:7;;22970:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22960:4;22965:1;22960:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22960:23:0;;;:7;;;;;;;;;:23;23028:6;;22996:53;;23013:4;;23028:6;23037:11;22996:8;:53::i;:::-;23088:6;;:215;;-1:-1:-1;;;23088:215:0;;-1:-1:-1;;;;;23088:6:0;;;;:57;;:215;;23160:11;;23088:6;;23230:4;;23257;;23277:15;;23088:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22246:495;22426:6;;22394:53;;22411:4;;-1:-1:-1;;;;;22426:6:0;22435:11;22394:8;:53::i;:::-;22490:6;;-1:-1:-1;;;;;22490:6:0;:22;22520:9;22553:4;22573:11;22490:6;;22685:7;1478;1505:6;-1:-1:-1;;;;;1505:6:0;;1432:87;22685:7;22490:243;;;;;;-1:-1:-1;;;;;;22490:243:0;;;-1:-1:-1;;;;;7608:15:1;;;22490:243:0;;;7590:34:1;7640:18;;;7633:34;;;;7683:18;;;7676:34;;;;7726:18;;;7719:34;7790:15;;;7769:19;;;7762:44;22707:15:0;7822:19:1;;;7815:35;7524:19;;22490:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22246:495;;:::o;2900:317::-;3015:6;2990:21;:31;;2982:73;;;;-1:-1:-1;;;2982:73:0;;13729:2:1;2982:73:0;;;13711:21:1;13768:2;13748:18;;;13741:30;13807:31;13787:18;;;13780:59;13856:18;;2982:73:0;13527:353:1;2982:73:0;3069:12;3087:9;-1:-1:-1;;;;;3087:14:0;3109:6;3087:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3068:52;;;3139:7;3131:78;;;;-1:-1:-1;;;3131:78:0;;12950:2:1;3131:78:0;;;12932:21:1;12989:2;12969:18;;;12962:30;13028:34;13008:18;;;13001:62;13099:28;13079:18;;;13072:56;13145:19;;3131:78:0;12748:422:1;12369:123:0;12447:4;12437:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;12462:11:0;:22;;12480:4;;12462:11;:15;;:22;;12480:4;;12462:22;:::i;:::-;;;;-1:-1:-1;;;;12369:123:0:o;12500:284::-;12607:10;12583:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;12653:4:0;12633:26;;;;:11;:26;;;;;;;;12630:101;;;12701:4;12685:22;;;;:7;:22;;;;;:34;;12709:10;;12685:22;:34;;12709:10;;12685:34;:::i;:::-;;;;-1:-1:-1;;12630:101:0;12757:4;12741:22;;;;:7;:22;;;;;:35;;12766:10;;12741:22;:35;;12766:10;;12741:35;:::i;12792:284::-;12899:10;12875:11;:21;;;:34;;;;;;;:::i;13348:249::-;13435:5;13416:11;:16;;;:24;;;;;;;:::i;13088:242::-;13171:4;13153:11;:15;;;:22;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:128::-;218:20;;247:28;218:20;247:28;:::i;286:247::-;345:6;398:2;386:9;377:7;373:23;369:32;366:52;;;414:1;411;404:12;366:52;453:9;440:23;472:31;497:5;472:31;:::i;538:251::-;608:6;661:2;649:9;640:7;636:23;632:32;629:52;;;677:1;674;667:12;629:52;709:9;703:16;728:31;753:5;728:31;:::i;794:388::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;978:9;965:23;997:31;1022:5;997:31;:::i;:::-;1047:5;-1:-1:-1;1104:2:1;1089:18;;1076:32;1117:33;1076:32;1117:33;:::i;:::-;1169:7;1159:17;;;794:388;;;;;:::o;1187:456::-;1264:6;1272;1280;1333:2;1321:9;1312:7;1308:23;1304:32;1301:52;;;1349:1;1346;1339:12;1301:52;1388:9;1375:23;1407:31;1432:5;1407:31;:::i;:::-;1457:5;-1:-1:-1;1514:2:1;1499:18;;1486:32;1527:33;1486:32;1527:33;:::i;:::-;1187:456;;1579:7;;-1:-1:-1;;;1633:2:1;1618:18;;;;1605:32;;1187:456::o;1648:382::-;1713:6;1721;1774:2;1762:9;1753:7;1749:23;1745:32;1742:52;;;1790:1;1787;1780:12;1742:52;1829:9;1816:23;1848:31;1873:5;1848:31;:::i;:::-;1898:5;-1:-1:-1;1955:2:1;1940:18;;1927:32;1968:30;1927:32;1968:30;:::i;2035:315::-;2103:6;2111;2164:2;2152:9;2143:7;2139:23;2135:32;2132:52;;;2180:1;2177;2170:12;2132:52;2219:9;2206:23;2238:31;2263:5;2238:31;:::i;:::-;2288:5;2340:2;2325:18;;;;2312:32;;-1:-1:-1;;;2035:315:1:o;2355:1202::-;2445:6;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2562:9;2549:23;2591:18;2632:2;2624:6;2621:14;2618:34;;;2648:1;2645;2638:12;2618:34;2686:6;2675:9;2671:22;2661:32;;2731:7;2724:4;2720:2;2716:13;2712:27;2702:55;;2753:1;2750;2743:12;2702:55;2789:2;2776:16;2811:4;2834:2;2830;2827:10;2824:36;;;2840:18;;:::i;:::-;2886:2;2883:1;2879:10;2918:2;2912:9;2981:2;2977:7;2972:2;2968;2964:11;2960:25;2952:6;2948:38;3036:6;3024:10;3021:22;3016:2;3004:10;3001:18;2998:46;2995:72;;;3047:18;;:::i;:::-;3083:2;3076:22;3133:18;;;3167:15;;;;-1:-1:-1;3202:11:1;;;3232;;;3228:20;;3225:33;-1:-1:-1;3222:53:1;;;3271:1;3268;3261:12;3222:53;3293:1;3284:10;;3303:169;3317:2;3314:1;3311:9;3303:169;;;3374:23;3393:3;3374:23;:::i;:::-;3362:36;;3335:1;3328:9;;;;;3418:12;;;;3450;;3303:169;;;-1:-1:-1;3491:6:1;-1:-1:-1;3516:35:1;;-1:-1:-1;3532:18:1;;;3516:35;:::i;:::-;3506:45;;;;;;2355:1202;;;;;:::o;3562:241::-;3618:6;3671:2;3659:9;3650:7;3646:23;3642:32;3639:52;;;3687:1;3684;3677:12;3639:52;3726:9;3713:23;3745:28;3767:5;3745:28;:::i;3808:245::-;3875:6;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;3976:9;3970:16;3995:28;4017:5;3995:28;:::i;4058:309::-;4123:6;4131;4184:2;4172:9;4163:7;4159:23;4155:32;4152:52;;;4200:1;4197;4190:12;4152:52;4239:9;4226:23;4258:28;4280:5;4258:28;:::i;4372:653::-;4482:6;4490;4498;4506;4514;4522;4530;4583:3;4571:9;4562:7;4558:23;4554:33;4551:53;;;4600:1;4597;4590:12;4551:53;4639:9;4626:23;4658:28;4680:5;4658:28;:::i;:::-;4705:5;4757:2;4742:18;;4729:32;;-1:-1:-1;4808:2:1;4793:18;;4780:32;;4859:2;4844:18;;4831:32;;-1:-1:-1;4910:3:1;4895:19;;4882:33;;-1:-1:-1;4962:3:1;4947:19;;4934:33;;-1:-1:-1;5014:3:1;4999:19;4986:33;;-1:-1:-1;4372:653:1;-1:-1:-1;;;4372:653:1:o;5030:180::-;5089:6;5142:2;5130:9;5121:7;5117:23;5113:32;5110:52;;;5158:1;5155;5148:12;5110:52;-1:-1:-1;5181:23:1;;5030:180;-1:-1:-1;5030:180:1:o;5215:309::-;5280:6;5288;5341:2;5329:9;5320:7;5316:23;5312:32;5309:52;;;5357:1;5354;5347:12;5309:52;5393:9;5380:23;5370:33;;5453:2;5442:9;5438:18;5425:32;5466:28;5488:5;5466:28;:::i;5529:248::-;5597:6;5605;5658:2;5646:9;5637:7;5633:23;5629:32;5626:52;;;5674:1;5671;5664:12;5626:52;-1:-1:-1;;5697:23:1;;;5767:2;5752:18;;;5739:32;;-1:-1:-1;5529:248:1:o;5782:306::-;5870:6;5878;5886;5939:2;5927:9;5918:7;5914:23;5910:32;5907:52;;;5955:1;5952;5945:12;5907:52;5984:9;5978:16;5968:26;;6034:2;6023:9;6019:18;6013:25;6003:35;;6078:2;6067:9;6063:18;6057:25;6047:35;;5782:306;;;;;:::o;6093:454::-;6188:6;6196;6204;6212;6220;6273:3;6261:9;6252:7;6248:23;6244:33;6241:53;;;6290:1;6287;6280:12;6241:53;-1:-1:-1;;6313:23:1;;;6383:2;6368:18;;6355:32;;-1:-1:-1;6434:2:1;6419:18;;6406:32;;6485:2;6470:18;;6457:32;;-1:-1:-1;6536:3:1;6521:19;6508:33;;-1:-1:-1;6093:454:1;-1:-1:-1;6093:454:1:o;8276:597::-;8388:4;8417:2;8446;8435:9;8428:21;8478:6;8472:13;8521:6;8516:2;8505:9;8501:18;8494:34;8546:1;8556:140;8570:6;8567:1;8564:13;8556:140;;;8665:14;;;8661:23;;8655:30;8631:17;;;8650:2;8627:26;8620:66;8585:10;;8556:140;;;8714:6;8711:1;8708:13;8705:91;;;8784:1;8779:2;8770:6;8759:9;8755:22;8751:31;8744:42;8705:91;-1:-1:-1;8857:2:1;8836:15;-1:-1:-1;;8832:29:1;8817:45;;;;8864:2;8813:54;;8276:597;-1:-1:-1;;;8276:597:1:o;15007:356::-;15209:2;15191:21;;;15228:18;;;15221:30;15287:34;15282:2;15267:18;;15260:62;15354:2;15339:18;;15007:356::o;16934:347::-;17136:2;17118:21;;;17175:2;17155:18;;;17148:30;17214:25;17209:2;17194:18;;17187:53;17272:2;17257:18;;16934:347::o;18575:980::-;18837:4;18885:3;18874:9;18870:19;18916:6;18905:9;18898:25;18942:2;18980:6;18975:2;18964:9;18960:18;18953:34;19023:3;19018:2;19007:9;19003:18;18996:31;19047:6;19082;19076:13;19113:6;19105;19098:22;19151:3;19140:9;19136:19;19129:26;;19190:2;19182:6;19178:15;19164:29;;19211:1;19221:195;19235:6;19232:1;19229:13;19221:195;;;19300:13;;-1:-1:-1;;;;;19296:39:1;19284:52;;19391:15;;;;19356:12;;;;19332:1;19250:9;19221:195;;;-1:-1:-1;;;;;;;19472:32:1;;;;19467:2;19452:18;;19445:60;-1:-1:-1;;;19536:3:1;19521:19;19514:35;19433:3;18575:980;-1:-1:-1;;;18575:980:1:o;20217:128::-;20257:3;20288:1;20284:6;20281:1;20278:13;20275:39;;;20294:18;;:::i;:::-;-1:-1:-1;20330:9:1;;20217:128::o;20350:217::-;20390:1;20416;20406:132;;20460:10;20455:3;20451:20;20448:1;20441:31;20495:4;20492:1;20485:15;20523:4;20520:1;20513:15;20406:132;-1:-1:-1;20552:9:1;;20350:217::o;20572:422::-;20661:1;20704:5;20661:1;20718:270;20739:7;20729:8;20726:21;20718:270;;;20798:4;20794:1;20790:6;20786:17;20780:4;20777:27;20774:53;;;20807:18;;:::i;:::-;20857:7;20847:8;20843:22;20840:55;;;20877:16;;;;20840:55;20956:22;;;;20916:15;;;;20718:270;;;20722:3;20572:422;;;;;:::o;20999:140::-;21057:5;21086:47;21127:4;21117:8;21113:19;21107:4;21193:5;21223:8;21213:80;;-1:-1:-1;21264:1:1;21278:5;;21213:80;21312:4;21302:76;;-1:-1:-1;21349:1:1;21363:5;;21302:76;21394:4;21412:1;21407:59;;;;21480:1;21475:130;;;;21387:218;;21407:59;21437:1;21428:10;;21451:5;;;21475:130;21512:3;21502:8;21499:17;21496:43;;;21519:18;;:::i;:::-;-1:-1:-1;;21575:1:1;21561:16;;21590:5;;21387:218;;21689:2;21679:8;21676:16;21670:3;21664:4;21661:13;21657:36;21651:2;21641:8;21638:16;21633:2;21627:4;21624:12;21620:35;21617:77;21614:159;;;-1:-1:-1;21726:19:1;;;21758:5;;21614:159;21805:34;21830:8;21824:4;21805:34;:::i;:::-;21875:6;21871:1;21867:6;21863:19;21854:7;21851:32;21848:58;;;21886:18;;:::i;:::-;21924:20;;21144:806;-1:-1:-1;;;21144:806:1:o;21955:168::-;21995:7;22061:1;22057;22053:6;22049:14;22046:1;22043:21;22038:1;22031:9;22024:17;22020:45;22017:71;;;22068:18;;:::i;:::-;-1:-1:-1;22108:9:1;;21955:168::o;22128:125::-;22168:4;22196:1;22193;22190:8;22187:34;;;22201:18;;:::i;:::-;-1:-1:-1;22238:9:1;;22128:125::o;22258:135::-;22297:3;-1:-1:-1;;22318:17:1;;22315:43;;;22338:18;;:::i;:::-;-1:-1:-1;22385:1:1;22374:13;;22258:135::o;22398:127::-;22459:10;22454:3;22450:20;22447:1;22440:31;22490:4;22487:1;22480:15;22514:4;22511:1;22504:15;22530:127;22591:10;22586:3;22582:20;22579:1;22572:31;22622:4;22619:1;22612:15;22646:4;22643:1;22636:15;22662:127;22723:10;22718:3;22714:20;22711:1;22704:31;22754:4;22751:1;22744:15;22778:4;22775:1;22768:15;22794:127;22855:10;22850:3;22846:20;22843:1;22836:31;22886:4;22883:1;22876:15;22910:4;22907:1;22900:15;22926:131;-1:-1:-1;;;;;23001:31:1;;22991:42;;22981:70;;23047:1;23044;23037:12;23062:118;23148:5;23141:13;23134:21;23127:5;23124:32;23114:60;;23170:1;23167;23160:12

Swarm Source

ipfs://3c0c724089a1a48fe54202de7df44924caf2da1212e837a5b0ae2925082aa3d9
Loading