ETH Price: $2,943.07 (-7.67%)
 

Overview

ETH Balance

39 wei

Eth Value

Less Than $0.01 (@ $2,943.07/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve219348222025-02-27 2:55:35327 days ago1740624935IN
0x238dE0A3...88d9E948c
0 ETH0.000041170.88222654
Approve219348172025-02-27 2:54:35327 days ago1740624875IN
0x238dE0A3...88d9E948c
0 ETH0.000033180.71481538
Approve219347992025-02-27 2:50:59327 days ago1740624659IN
0x238dE0A3...88d9E948c
0 ETH0.000035380.76206587
Transfer219347882025-02-27 2:48:47327 days ago1740624527IN
0x238dE0A3...88d9E948c
0 ETH0.000086380.76230936
Approve196908792024-04-19 17:10:11641 days ago1713546611IN
0x238dE0A3...88d9E948c
0 ETH0.0005743812.32304145
Approve164671502023-01-23 4:35:591093 days ago1674448559IN
0x238dE0A3...88d9E948c
0 ETH0.0007817516.77192516
Approve164199062023-01-16 14:19:591100 days ago1673878799IN
0x238dE0A3...88d9E948c
0 ETH0.0009677920.73652507
Approve164152312023-01-15 22:38:351101 days ago1673822315IN
0x238dE0A3...88d9E948c
0 ETH0.0009407420.15689343
Approve164152292023-01-15 22:38:111101 days ago1673822291IN
0x238dE0A3...88d9E948c
0 ETH0.0009673120.72627756
Approve164152252023-01-15 22:37:231101 days ago1673822243IN
0x238dE0A3...88d9E948c
0 ETH0.0008853918.97097471
Approve164116882023-01-15 10:44:471101 days ago1673779487IN
0x238dE0A3...88d9E948c
0 ETH0.0007270615.57845686
Approve164112352023-01-15 9:13:111101 days ago1673773991IN
0x238dE0A3...88d9E948c
0 ETH0.0008327117.84219217
Approve163994472023-01-13 17:44:591103 days ago1673631899IN
0x238dE0A3...88d9E948c
0 ETH0.0017734938
Approve163994472023-01-13 17:44:591103 days ago1673631899IN
0x238dE0A3...88d9E948c
0 ETH0.0017734938
Approve163994472023-01-13 17:44:591103 days ago1673631899IN
0x238dE0A3...88d9E948c
0 ETH0.0017734938
Approve163991772023-01-13 16:50:591103 days ago1673628659IN
0x238dE0A3...88d9E948c
0 ETH0.0035044575.08859742
Approve163991772023-01-13 16:50:591103 days ago1673628659IN
0x238dE0A3...88d9E948c
0 ETH0.0035044575.08859742
Approve163991772023-01-13 16:50:591103 days ago1673628659IN
0x238dE0A3...88d9E948c
0 ETH0.0035044575.08859742
Approve163989412023-01-13 16:03:471103 days ago1673625827IN
0x238dE0A3...88d9E948c
0 ETH0.0021876746.87431327
Approve163988442023-01-13 15:44:231103 days ago1673624663IN
0x238dE0A3...88d9E948c
0 ETH0.0021340145.72454263
Approve163981902023-01-13 13:32:471103 days ago1673616767IN
0x238dE0A3...88d9E948c
0 ETH0.0008233617.64191742
Approve163981422023-01-13 13:22:591103 days ago1673616179IN
0x238dE0A3...88d9E948c
0 ETH0.0008535818.28950147
Approve163981422023-01-13 13:22:591103 days ago1673616179IN
0x238dE0A3...88d9E948c
0 ETH0.0008535818.28950147
Approve163978192023-01-13 12:17:471103 days ago1673612267IN
0x238dE0A3...88d9E948c
0 ETH0.0007326915.6990861
Approve163978192023-01-13 12:17:471103 days ago1673612267IN
0x238dE0A3...88d9E948c
0 ETH0.0046671100
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer164199112023-01-16 14:20:591100 days ago1673878859
0x238dE0A3...88d9E948c
0.00142059 ETH
Transfer164199112023-01-16 14:20:591100 days ago1673878859
0x238dE0A3...88d9E948c
0.00005919 ETH
Transfer164199112023-01-16 14:20:591100 days ago1673878859
0x238dE0A3...88d9E948c
0.00147979 ETH
Transfer164152332023-01-15 22:38:591101 days ago1673822339
0x238dE0A3...88d9E948c
0.00138506 ETH
Transfer164152332023-01-15 22:38:591101 days ago1673822339
0x238dE0A3...88d9E948c
0.00005771 ETH
Transfer164152332023-01-15 22:38:591101 days ago1673822339
0x238dE0A3...88d9E948c
0.00144277 ETH
Transfer164152302023-01-15 22:38:231101 days ago1673822303
0x238dE0A3...88d9E948c
0.00155193 ETH
Transfer164152302023-01-15 22:38:231101 days ago1673822303
0x238dE0A3...88d9E948c
0.00006466 ETH
Transfer164152302023-01-15 22:38:231101 days ago1673822303
0x238dE0A3...88d9E948c
0.00161659 ETH
Transfer164152262023-01-15 22:37:351101 days ago1673822255
0x238dE0A3...88d9E948c
0.00088117 ETH
Transfer164152262023-01-15 22:37:351101 days ago1673822255
0x238dE0A3...88d9E948c
0.00003671 ETH
Transfer164152262023-01-15 22:37:351101 days ago1673822255
0x238dE0A3...88d9E948c
0.00091788 ETH
Transfer164116922023-01-15 10:45:351101 days ago1673779535
0x238dE0A3...88d9E948c
0.00157167 ETH
Transfer164116922023-01-15 10:45:351101 days ago1673779535
0x238dE0A3...88d9E948c
0.00006548 ETH
Transfer164116922023-01-15 10:45:351101 days ago1673779535
0x238dE0A3...88d9E948c
0.00163716 ETH
Transfer164112412023-01-15 9:14:231101 days ago1673774063
0x238dE0A3...88d9E948c
0.0025877 ETH
Transfer164112412023-01-15 9:14:231101 days ago1673774063
0x238dE0A3...88d9E948c
0.00010782 ETH
Transfer164112412023-01-15 9:14:231101 days ago1673774063
0x238dE0A3...88d9E948c
0.00269552 ETH
Transfer164055462023-01-14 14:09:111102 days ago1673705351
0x238dE0A3...88d9E948c
0.00131395 ETH
Transfer164055462023-01-14 14:09:111102 days ago1673705351
0x238dE0A3...88d9E948c
0.00005474 ETH
Transfer164055462023-01-14 14:09:111102 days ago1673705351
0x238dE0A3...88d9E948c
0.0013687 ETH
Transfer164021712023-01-14 2:51:471102 days ago1673664707
0x238dE0A3...88d9E948c
0.00171971 ETH
Transfer164021712023-01-14 2:51:471102 days ago1673664707
0x238dE0A3...88d9E948c
0.00007165 ETH
Transfer164021712023-01-14 2:51:471102 days ago1673664707
0x238dE0A3...88d9E948c
0.00179137 ETH
Transfer164008162023-01-13 22:19:471103 days ago1673648387
0x238dE0A3...88d9E948c
0.00180499 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BirdFlu

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-01-13
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.17 <0.9.0;
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }
    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data; 
    }
}

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

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

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

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

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

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

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


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

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

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

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

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

interface IERC20Upgradeable {

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

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

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

contract BirdFlu is Context, IERC20Upgradeable {
    address private _owner; // address of the contract owner.
    mapping (address => uint256) private _rOwned; 
    mapping (address => uint256) private _tOwned; 
    mapping (address => bool) lpPairs;
    uint256 private LiquidityPairCount = 0; 
    mapping (address => mapping (address => uint256)) private _allowed; 
    mapping (address => bool) private _ExcludedFromFee; 
    mapping (address => bool) private _iExcempt;
    mapping(address => bool) private InJail;
    address[] private _excluded;
    mapping (address => bool) private _liqProv;
    uint256 private startSupply; 
    string private _name; 
    string private _symbol; 
    uint256 public _redistro = 0; 
    uint256 public _liq = 0; 
    uint256 public _market = 1500; 
    uint256 public _buydistro = _redistro; 
    uint256 public _buyliq = _liq; 
    uint256 public _buyMarket = _market;
    uint256 public _sellLiq = 0; 
    uint256 public _selldistro = 0; 
    uint256 public _sellMarket = 1500; 
    uint256 public _transferRedistro = 0; 
    uint256 public _transferLiq = 0; 
    uint256 public _transferMarket = 0; 
    uint256 private maxRedistro = 1500; 
    uint256 private maxLiq = 1500; 
    uint256 private maxMarket = 4000; 
    uint256 public _liquidityRatio = 0;
    uint256 public _marketRatio = 1000;
    uint256 private masterTaxDivisor = 10000;
    uint256 private MarketStake = 48;
    uint256 private DevStake = 2;
    uint256 private ValueDivisor = 50;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter; 
    address public lpPair; 
    address public _routerAddress; 
    address public DEAD = 0x000000000000000000000000000000000000dEaD; 
    address public ZERO = 0x0000000000000000000000000000000000000000; 
    address payable private _AvianDev; 
    address payable private _marketWallet; 
    bool inSwapAndLiquify; 
    bool public swapAndLiquifyEnabled = false; 
    uint256 private _maxTxn; 
    uint256 public maxTxnUI; 
    uint256 private _maxWallet;
    uint256 public maxWalletUI; 
    uint256 private swapThreshold;
    uint256 private swapAmount;
    bool KickedOff = false;
    bool public _LiqHasBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

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

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

        _owner = msg.sender;

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3 || block.chainid == 5) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _ExcludedFromFee[owner()] = true;
        _ExcludedFromFee[address(this)] = true;
        _liqProv[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function _ReadyLiq(address payable setMarketWallet, address payable setDev, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!readyLiq);

        _marketWallet = payable(setMarketWallet);
        _AvianDev = payable(setDev);

        _ExcludedFromFee[_marketWallet] = true;
        _ExcludedFromFee[_AvianDev] = true;

        _name = _tokenname;
        _symbol = _tokensymbol;
        startSupply = 1_000_000_000;
        if (startSupply < 100000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowed[address(this)][address(dexRouter)] = type(uint256).max;
        
        _maxTxn = (_tTotal * 2000) / 100000;
        maxTxnUI = (startSupply * 1000) / 100000;
        _maxWallet = (_tTotal * 20) / 1000;
        maxWalletUI = (startSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        readyLiq = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowed[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowed[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNextRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address g_p = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (g_p == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = g_p;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (LiquidityPairCount != 0) {
                require(block.timestamp - LiquidityPairCount > 0, "Cannot set two pairs in one block!");
            }
            lpPairs[pair] = true;
            LiquidityPairCount = block.timestamp;
        }
    }

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

    function ExcludedFromFee(address account) public view returns(bool) {
        return _ExcludedFromFee[account];
    }

    function setTaxIn(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxRedistro
                && liquidity <= maxLiq
                && marketing <= maxMarket
                );
        require(reflect + liquidity + marketing <= 4900);
        _buydistro = reflect;
        _buyliq = liquidity;
        _buyMarket = marketing;
    }

    function setTaxOut(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxRedistro
                && liquidity <= maxLiq
                && marketing <= maxMarket
                );
        require(reflect + liquidity + marketing <= 4900);
        _selldistro = reflect;
        _sellLiq = liquidity;
        _sellMarket = marketing;
    }

    function setTaxTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxRedistro
                && liquidity <= maxLiq
                && marketing <= maxMarket
                );
        require(reflect + liquidity + marketing <= 4900);
        _transferRedistro = reflect;
        _transferLiq = liquidity;
        _transferMarket = marketing;
    }

    function setStakeValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner {
        MarketStake = ms;
        DevStake = ds;
        ValueDivisor = vd;
    }

    function setTaxDivisionRatio(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketRatio = marketing;
    }

    function setMaximumTransaction(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxTxn = check;
        maxTxnUI = (startSupply * percent) / divisor;
    }

    function setMaximumWallet(uint256 percentage, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percentage) / divisor; 
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _maxWallet = check;
        maxWalletUI = (startSupply * percentage) / divisor;
    }

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

    function setNextMarketing(address payable newWallet) external onlyOwner {
        require(_marketWallet != newWallet, "Wallet already set!");
        _marketWallet = payable(newWallet);
    }

    function setNextDeveloper(address payable newWallet) external onlyOwner {
        require(_AvianDev != newWallet, "Wallet already set!");
        _AvianDev = payable(newWallet);
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function setExcludedFromRedistro(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_iExcempt[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _iExcempt[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_iExcempt[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _iExcempt[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

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

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections - AVIAN");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "Cannot approve from the zero address - AVIAN");
        require(spender != address(0), "Cannot approve to the zero address - AVIAN");

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "Cannot transfer from the zero address - AVIAN");
        require(to != address(0), "Cannot transfer to the zero address - AVIAN");
        require(amount > 0, "Transfer amount must be greater than zero - AVIAN");
        require(!InJail[from] && !InJail[to] && !InJail[msg.sender]);
        if(_hasLimits(from, to)) {
            if(!KickedOff) {
                revert("Trading not yet enabled! - AVIAN");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number + 1);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number + 1);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxn, "Transfer exceeds the maxTxAmount.- AVIAN");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWallet, "Transfer exceeds the maxWalletSize.- AVIAN");
            }
        }
        bool takeFee = true;
        if(_ExcludedFromFee[from] || _ExcludedFromFee[to]){
            takeFee = false;
        }

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

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            toSwapForEth,
            0,
            path,
            address(this),
            block.timestamp
        );


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                _AvianDev,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {

            uint256 OperationsFee = (address(this).balance);
            uint256 marketFund = OperationsFee/(ValueDivisor)*(MarketStake);
            uint256 devFund = OperationsFee/(ValueDivisor)*(DevStake); _AvianDev.transfer(devFund); 
            _marketWallet.transfer(marketFund);           

        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_LiqHasBeenAdded, "Liquidity is already added.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liqProv[from] = true;
            _LiqHasBeenAdded = true;
            _liqAddStamp = block.timestamp;

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

    function AvianStart() public onlyOwner {
        require(!KickedOff, "Trading is already enabled!");
        setExcludedFromRedistro(address(this), true);
        setExcludedFromRedistro(lpPair, true);

        KickedOff = true;
        swapAndLiquifyEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalize(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {


        if (!_LiqHasBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_LiqHasBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_iExcempt[from] && !_iExcempt[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_iExcempt[from] && _iExcempt[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_iExcempt[from] && _iExcempt[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _redistro = _selldistro;
                _liq = _sellLiq;
                _market = _sellMarket;
            } else if (lpPairs[from]) {
                _redistro = _buydistro;
                _liq = _buyliq;
                _market = _buyMarket;
            } else {
                _redistro = _transferRedistro;
                _liq = _transferLiq;
                _market = _transferMarket;
            }

            values.tFee = (tAmount * _redistro) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liq + _market)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal 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 _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function RemoveEthStuckInAvianContract() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_iExcempt[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }

    function UnderInvestigation(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            InJail[accounts[i]] = state;
        }
    }
 
    function Caught(address account, bool state) external onlyOwner{
        InJail[account] = state;
    }

    function SetLowerTaxes() external onlyOwner() {
        _buydistro = 0;
        _buyliq = 0;
        _buyMarket = 600;
        _selldistro = 0;
        _sellLiq = 0;
        _sellMarket = 600;
        _transferRedistro = 0;
        _transferLiq = 0;
        _transferMarket = 0;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AvianStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"Caught","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RemoveEthStuckInAvianContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SetLowerTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"UnderInvestigation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_LiqHasBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDev","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"_ReadyLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buydistro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyliq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_market","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_redistro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_selldistro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferRedistro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromRedistro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaximumTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaximumWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNextDeveloper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNextMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNextRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setRouterSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setStakeValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxDivisionRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600e819055600f8190556105dc6010819055601182905560128290556013819055601482905560158290556016819055601782905560188290556019829055601a819055601b55610fa0601c55601d8190556103e8601e55612710601f55603060205560026021556032602255602b80546001600160a01b031990811661dead17909155602c805482169055602e805460ff60a81b191690556035805461ffff19169055603682905560378290556038805460ff199081166001178255603a80549091169055825490911633179091554614156200010f57602a80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a4565b46606114156200014557602a80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a4565b4660011480620001555750466004145b80620001615750466003145b806200016d5750466005145b156200019f57602a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a4565b600080fd5b600160066000620001bd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600a90620002166000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200025f6200024a3390565b602a546001600160a01b031660001962000281565b602a546200027b9030906001600160a01b031660001962000281565b620003be565b6001600160a01b038316620002f25760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f2061646460448201526b3932b9b990169020ab24a0a760a11b60648201526084015b60405180910390fd5b6001600160a01b0382166200035d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560448201526939b990169020ab24a0a760b11b6064820152608401620002e9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61400680620003ce6000396000f3fe6080604052600436106103c75760003560e01c806371a74e0d116101f2578063afe4260e1161010d578063e5cc218e116100a0578063efebfe8f1161006f578063efebfe8f14610ac0578063f048209f14610ae0578063f1d6512e14610b00578063f7b8cba114610b3957600080fd5b8063e5cc218e14610a54578063e7f4527b14610a74578063ebf600a314610a94578063ef6e661c14610aaa57600080fd5b8063d3456ca3116100dc578063d3456ca3146109ae578063d9e66460146109ce578063dd62ed3e146109ee578063e5adc7f814610a3457600080fd5b8063afe4260e14610938578063c2ed286b1461094e578063c49b9a801461096e578063c95bab691461098e57600080fd5b806394e4443e116101855780639a09a61b116101545780639a09a61b146108c3578063a457c2d7146108e2578063a8b6c25814610902578063a9059cbb1461091857600080fd5b806394e4443e14610858578063958dd4631461087857806395d89b4114610898578063988cf801146108ad57600080fd5b806388f82020116101c157806388f82020146107eb578063893d20e8146108245780638a31167f146108425780638da5cb5b1461082457600080fd5b806371a74e0d14610775578063798d40161461078b57806380c581d1146107ab578063845bddd4146107cb57600080fd5b8063452ed4f1116102e2578063571ac8b0116102755780636a74f2ea116102445780636a74f2ea146107155780636cefc2a71461072b57806370a0823114610740578063715018a61461076057600080fd5b8063571ac8b01461069f57806358fa63ca146106bf5780635beacb46146106df5780635e395036146106ff57600080fd5b80634b338efd116102b15780634b338efd146106335780634bbe49ba146106495780634fb2e45d1461065f57806352a605041461067f57600080fd5b8063452ed4f1146105bc57806345494eab146105dc578063496e7e9e146105f25780634a74bb021461061257600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce5671461054e578063384f6b511461057057806339509351146105865780633d0fe69c146105a657600080fd5b806323b872dd146104e357806324b230b414610503578063270bcdfb146105185780632d8381191461052e57600080fd5b806313114a9d1161039657806313114a9d1461048257806314f0fc39146104a157806318160ddd146104b75780631bd3ba7b146104cc57600080fd5b806303fd2a45146103d357806306fdde03146104105780630758d92414610432578063095ea7b31461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602b546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b50610425610b59565b60405161040791906137fc565b34801561043e57600080fd5b506028546103f3906001600160a01b031681565b34801561045e57600080fd5b5061047261046d366004613866565b610beb565b6040519015158152602001610407565b34801561048e57600080fd5b506027545b604051908152602001610407565b3480156104ad57600080fd5b50610493600e5481565b3480156104c357600080fd5b50602554610493565b3480156104d857600080fd5b506104e1610c02565b005b3480156104ef57600080fd5b506104726104fe366004613892565b610ccc565b34801561050f57600080fd5b506104e1610d1f565b34801561052457600080fd5b50610493601e5481565b34801561053a57600080fd5b506104936105493660046138d3565b610d86565b34801561055a57600080fd5b5060235460405160ff9091168152602001610407565b34801561057c57600080fd5b50610493601d5481565b34801561059257600080fd5b506104726105a1366004613866565b610e12565b3480156105b257600080fd5b5061049360165481565b3480156105c857600080fd5b506029546103f3906001600160a01b031681565b3480156105e857600080fd5b5061049360175481565b3480156105fe57600080fd5b506104e161060d3660046138ec565b610e49565b34801561061e57600080fd5b50602e5461047290600160a81b900460ff1681565b34801561063f57600080fd5b5061049360185481565b34801561065557600080fd5b5061049360305481565b34801561066b57600080fd5b506104e161067a36600461390e565b610ee6565b34801561068b57600080fd5b506104e161069a3660046138ec565b611088565b3480156106ab57600080fd5b506104726106ba36600461390e565b6110bd565b3480156106cb57600080fd5b50602c546103f3906001600160a01b031681565b3480156106eb57600080fd5b506104e16106fa366004613940565b6110cb565b34801561070b57600080fd5b5061049360115481565b34801561072157600080fd5b5061049360155481565b34801561073757600080fd5b506104e16113bf565b34801561074c57600080fd5b5061049361075b36600461390e565b611419565b34801561076c57600080fd5b506104e1611478565b34801561078157600080fd5b5061049360135481565b34801561079757600080fd5b506104e16107a6366004613975565b6114f7565b3480156107b757600080fd5b506104e16107c6366004613940565b61157d565b3480156107d757600080fd5b506104e16107e6366004613975565b611669565b3480156107f757600080fd5b5061047261080636600461390e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083057600080fd5b506000546001600160a01b03166103f3565b34801561084e57600080fd5b50610493600f5481565b34801561086457600080fd5b506104e1610873366004613a58565b6116ef565b34801561088457600080fd5b506104e161089336600461390e565b611b67565b3480156108a457600080fd5b50610425611e97565b3480156108b957600080fd5b5061049360105481565b3480156108cf57600080fd5b5060355461047290610100900460ff1681565b3480156108ee57600080fd5b506104726108fd366004613866565b611ea6565b34801561090e57600080fd5b5061049360145481565b34801561092457600080fd5b50610472610933366004613866565b611edd565b34801561094457600080fd5b5061049360325481565b34801561095a57600080fd5b506104e1610969366004613940565b611eea565b34801561097a57600080fd5b506104e1610989366004613ae1565b611f3f565b34801561099a57600080fd5b506104e16109a93660046138ec565b611fc1565b3480156109ba57600080fd5b506104e16109c936600461390e565b61205e565b3480156109da57600080fd5b50602a546103f3906001600160a01b031681565b3480156109fa57600080fd5b50610493610a09366004613afc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4057600080fd5b506104e1610a4f366004613b35565b6120fe565b348015610a6057600080fd5b506104e1610a6f366004613975565b612167565b348015610a8057600080fd5b506104e1610a8f366004613b67565b6121ed565b348015610aa057600080fd5b5061049360125481565b348015610ab657600080fd5b5061049360195481565b348015610acc57600080fd5b506104e1610adb366004613975565b61227e565b348015610aec57600080fd5b506104e1610afb36600461390e565b6122b6565b348015610b0c57600080fd5b50610472610b1b36600461390e565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610b4557600080fd5b506104e1610b54366004613940565b612356565b6060600c8054610b6890613c2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9490613c2b565b8015610be15780601f10610bb657610100808354040283529160200191610be1565b820191906000526020600020905b815481529060010190602001808311610bc457829003601f168201915b5050505050905090565b6000610bf83384846123ab565b5060015b92915050565b6000546001600160a01b03163314610c355760405162461bcd60e51b8152600401610c2c90613c66565b60405180910390fd5b60355460ff1615610c885760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610c2c565b610c933060016110cb565b602954610caa906001600160a01b031660016110cb565b6035805460ff19166001179055602e805460ff60a81b1916600160a81b179055565b6000610cd98484846124e0565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610d15918691610d10908690613cb1565b6123ab565b5060019392505050565b6000546001600160a01b03163314610d495760405162461bcd60e51b8152600401610c2c90613c66565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d83573d6000803e3d6000fd5b50565b6000602654821115610df55760405162461bcd60e51b815260206004820152603260248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527132b33632b1ba34b7b73990169020ab24a0a760711b6064820152608401610c2c565b6000610dff61299f565b9050610e0b8184613cde565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bf8918590610d10908690613cf2565b6000546001600160a01b03163314610e735760405162461bcd60e51b8152600401610c2c90613c66565b60008183602554610e849190613d0a565b610e8e9190613cde565b90506103e8602554610ea09190613cde565b811015610ebf5760405162461bcd60e51b8152600401610c2c90613d29565b602f819055600b548290610ed4908590613d0a565b610ede9190613cde565b603055505050565b6000546001600160a01b03163314610f105760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b038116610f365760405162461bcd60e51b8152600401610c2c90613d6c565b602b546001600160a01b0382811691161415610f645760405162461bcd60e51b8152600401610c2c90613d6c565b60008054610f7d916001600160a01b0390911690611eea565b610f88816001611eea565b610f938160016110cb565b600054602d546001600160a01b0390811691161415610fc857602d80546001600160a01b0319166001600160a01b0383161790555b600054610fdd906001600160a01b0316611419565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916110169116611419565b111561103d5760005461103b906001600160a01b03168261103682611419565b6124e0565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146110b25760405162461bcd60e51b8152600401610c2c90613c66565b601d91909155601e55565b6000610bfc82600019610beb565b6000546001600160a01b031633146110f55760405162461bcd60e51b8152600401610c2c90613c66565b6001811515141561122a576001600160a01b03821660009081526007602052604090205460ff16156111695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c2c565b6001600160a01b038216600090815260016020526040902054156111c3576001600160a01b0382166000908152600160205260409020546111a990610d86565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b806113bb576001600160a01b03821660009081526007602052604090205460ff166112975760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c2c565b60005b6009548110156113b957826001600160a01b0316600982815481106112c1576112c1613dc9565b6000918252602090912001546001600160a01b031614156113a757600980546112ec90600190613cb1565b815481106112fc576112fc613dc9565b600091825260209091200154600980546001600160a01b03909216918390811061132857611328613dc9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600980548061138057611380613ddf565b600082815260209020810160001990810180546001600160a01b03191690550190556113b9565b806113b181613df5565b91505061129a565b505b5050565b6000546001600160a01b031633146113e95760405162461bcd60e51b8152600401610c2c90613c66565b60006011819055601281905561025860138190556015829055601482905560165560178190556018819055601955565b6001600160a01b03811660009081526007602052604081205460ff161561145657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bfc90610d86565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c2c90613c66565b600080546114bb916001600160a01b0390911690611eea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115215760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156115355750601b548211155b80156115435750601c548111155b61154c57600080fd5b6113248161155a8486613cf2565b6115649190613cf2565b111561156f57600080fd5b601792909255601855601955565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610c2c90613c66565b806115ce57506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561163e576000600454426115e69190613cb1565b1161163e5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f74207365742074776f20706169727320696e206f6e6520626c6f636044820152616b2160f01b6064820152608401610c2c565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156116a75750601b548211155b80156116b55750601c548111155b6116be57600080fd5b611324816116cc8486613cf2565b6116d69190613cf2565b11156116e157600080fd5b601192909255601255601355565b6000546001600160a01b031633146117195760405162461bcd60e51b8152600401610c2c90613c66565b603a5460ff161561172957600080fd5b602e80546001600160a01b038087166001600160a01b03199283168117909355602d805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161179d91600c9190850190613763565b5080516117b190600d906020840190613763565b50633b9aca00600b556023805460ff191660129081179091556024556024546117db90600a613ef4565b600b546117e89190613d0a565b60258190556117f990600019613f00565b61180590600019613cb1565b602655602a54602880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613f14565b6001600160a01b031663c9c65396602860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190d9190613f14565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613f14565b602980546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206028549094168352929052206000199055602554620186a0906119e7906107d0613d0a565b6119f19190613cde565b602f55600b54620186a090611a08906103e8613d0a565b611a129190613cde565b6030556025546103e890611a27906014613d0a565b611a319190613cde565b603155600b546103e890611a46906014613d0a565b611a509190613cde565b60325560255461271090611a65906005613d0a565b611a6f9190613cde565b6033556025546103e890611a84906005613d0a565b611a8e9190613cde565b603455602a54611aa9906001600160a01b0316600019610beb565b50603a805460ff19166001908117909155602654906000611ad26000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611afe6000546001600160a01b031690565b602c546025546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602854611b619030906001600160a01b03166000196123ab565b50505050565b6000546001600160a01b03163314611b915760405162461bcd60e51b8152600401610c2c90613c66565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190613f14565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b9190613f14565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190613f14565b90506001600160a01b038116611e5357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613f14565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190613f14565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190613f14565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e6f565b602980546001600160a01b0319166001600160a01b0383161790555b602880546001600160a01b0319166001600160a01b0384161790556113b930846000196123ab565b6060600d8054610b6890613c2b565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bf8918590610d10908690613cb1565b6000610d153384846124e0565b6000546001600160a01b03163314611f145760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f695760405162461bcd60e51b8152600401610c2c90613c66565b602e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611fb690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611feb5760405162461bcd60e51b8152600401610c2c90613c66565b60008183602554611ffc9190613d0a565b6120069190613cde565b90506103e86025546120189190613cde565b8110156120375760405162461bcd60e51b8152600401610c2c90613d29565b6031819055600b54829061204c908590613d0a565b6120569190613cde565b603255505050565b6000546001600160a01b031633146120885760405162461bcd60e51b8152600401610c2c90613c66565b602e546001600160a01b03828116911614156120dc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c2c565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121285760405162461bcd60e51b8152600401610c2c90613c66565b82846025546121379190613d0a565b6121419190613cde565b6033556025548190612154908490613d0a565b61215e9190613cde565b60345550505050565b6000546001600160a01b031633146121915760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156121a55750601b548211155b80156121b35750601c548111155b6121bc57600080fd5b611324816121ca8486613cf2565b6121d49190613cf2565b11156121df57600080fd5b601592909255601455601655565b6000546001600160a01b031633146122175760405162461bcd60e51b8152600401610c2c90613c66565b60005b82518110156113b957816008600085848151811061223a5761223a613dc9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061227681613df5565b91505061221a565b6000546001600160a01b031633146122a85760405162461bcd60e51b8152600401610c2c90613c66565b602092909255602155602255565b6000546001600160a01b031633146122e05760405162461bcd60e51b8152600401610c2c90613c66565b602d546001600160a01b03828116911614156123345760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c2c565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123805760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b0383166124165760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f2061646460448201526b3932b9b990169020ab24a0a760a11b6064820152608401610c2c565b6001600160a01b03821661247f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560448201526939b990169020ab24a0a760b11b6064820152608401610c2c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661254e5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f20616460448201526c323932b9b990169020ab24a0a760991b6064820152608401610c2c565b6001600160a01b0383166125b85760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526a32b9b990169020ab24a0a760a91b6064820152608401610c2c565b600082116126225760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152703a3430b7103d32b93790169020ab24a0a760791b6064820152608401610c2c565b6001600160a01b03841660009081526008602052604090205460ff1615801561266457506001600160a01b03831660009081526008602052604090205460ff16155b801561268057503360009081526008602052604090205460ff16155b61268957600080fd5b61269384846129c2565b156128c75760355460ff166126ea5760405162461bcd60e51b815260206004820181905260248201527f54726164696e67206e6f742079657420656e61626c656421202d20415649414e6044820152606401610c2c565b60385460ff16156127b0576001600160a01b03841660009081526003602052604090205460ff161561276557612721436001613cf2565b6001600160a01b038416600090815260396020526040902054141561274557600080fd5b6001600160a01b03831660009081526039602052604090204390556127b0565b612770436001613cf2565b6001600160a01b038516600090815260396020526040902054141561279457600080fd5b6001600160a01b03841660009081526039602052604090204390555b602f548211156128135760405162461bcd60e51b815260206004820152602860248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e7460448201526717169020ab24a0a760c11b6064820152608401610c2c565b602a546001600160a01b0384811691161480159061284a57506001600160a01b03831660009081526003602052604090205460ff16155b156128c7576031548261285c85611419565b6128669190613cf2565b11156128c75760405162461bcd60e51b815260206004820152602a60248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152693d3297169020ab24a0a760b11b6064820152608401610c2c565b6001600160a01b03841660009081526006602052604090205460019060ff168061290957506001600160a01b03841660009081526006602052604090205460ff165b15612912575060005b6001600160a01b03841660009081526003602052604090205460ff161561298a57602e54600160a01b900460ff161580156129565750602e54600160a81b900460ff165b1561298a57600061296630611419565b9050603354811061298857603454811061297f57506034545b61298881612ac9565b505b61299685858584612e71565b95945050505050565b60008060006129ac6131f2565b90925090506129bb8183613cde565b9250505090565b600080546001600160a01b038481169116148015906129ef57506000546001600160a01b03838116911614155b8015612a1457506001600160a01b0382166000908152600a602052604090205460ff16155b8015612a3957506001600160a01b0383166000908152600a602052604090205460ff16155b8015612a535750602b546001600160a01b03838116911614155b8015612a6757506001600160a01b03821615155b8015612a7c57506001600160a01b0383163014155b8015612aa157506001600160a01b03821660009081526006602052604090205460ff16155b8015610e0b575050506001600160a01b031660009081526006602052604090205460ff161590565b602e805460ff60a01b1916600160a01b179055601e54601d54612aec9190613cf2565b612af557612e61565b60006002601e54601d54612b099190613cf2565b601d54612b169085613d0a565b612b209190613cde565b612b2a9190613cde565b90506000612b388284613cb1565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b7257612b72613dc9565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bef9190613f14565b81600181518110612c0257612c02613dc9565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b815291169063791ac94790612c48908590600090869030904290600401613f31565b600060405180830381600087803b158015612c6257600080fd5b505af1158015612c76573d6000803e3d6000fd5b5050505060006002601e54601d54612c8e9190613cf2565b601d54612c9b9047613d0a565b612ca59190613cde565b612caf9190613cde565b90508315612d9157602854602d5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d27573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d4c9190613fa2565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612d9d8587613cb1565b1115612e5c576020546022544791600091612db89084613cde565b612dc29190613d0a565b9050600060215460225484612dd79190613cde565b612de19190613d0a565b602d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612e1c573d6000803e3d6000fd5b50602e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e57573d6000803e3d6000fd5b505050505b505050505b50602e805460ff60a01b19169055565b603554600090610100900460ff16612f0557612e8d8585613375565b603554610100900460ff16158015612eaa5750612eaa85856129c2565b15612f055760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610c2c565b6000612f1386868686613483565b60808101516001600160a01b038816600090815260016020526040902054919250612f3d91613cb1565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f749190613cf2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612fc857506001600160a01b03851660009081526007602052604090205460ff16155b1561300f576001600160a01b038616600090815260026020526040902054612ff1908590613cb1565b6001600160a01b03871660009081526002602052604090205561314f565b6001600160a01b03861660009081526007602052604090205460ff1615801561305057506001600160a01b03851660009081526007602052604090205460ff165b156130985780516001600160a01b03861660009081526002602052604090205461307a9190613cf2565b6001600160a01b03861660009081526002602052604090205561314f565b6001600160a01b03861660009081526007602052604090205460ff1680156130d857506001600160a01b03851660009081526007602052604090205460ff165b1561314f576001600160a01b038616600090815260026020526040902054613101908590613cb1565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546131359190613cf2565b6001600160a01b0386166000908152600260205260409020555b60408101511561316757613167868260400151613671565b60008160a00151118061317e575060008160200151115b15613195576131958160a00151826020015161373d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131de91815260200190565b60405180910390a350600195945050505050565b6026546025546000918291825b6009548110156133445782600160006009848154811061322157613221613dc9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061328c575081600260006009848154811061326557613265613dc9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132a257602654602554945094505050509091565b60016000600983815481106132b9576132b9613dc9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132e89084613cb1565b9250600260006009838154811061330157613301613dc9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133309083613cb1565b91508061333c81613df5565b9150506131ff565b506025546026546133559190613cde565b82101561336c576026546025549350935050509091565b90939092509050565b603554610100900460ff16156133cd5760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610c2c565b6133d782826129c2565b1580156133f157506029546001600160a01b038281169116145b156113bb576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556035805461ff00191661010017905542603755602e805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161347791901515815260200190565b60405180910390a15050565b6134bc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6134f56040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006134ff61299f565b905061350b8186613d0a565b6080830152831561361b576001600160a01b03861660009081526003602052604090205460ff161561354e57601554600e55601454600f55601654601055613599565b6001600160a01b03871660009081526003602052604090205460ff161561358657601154600e55601254600f55601354601055613599565b601754600e55601854600f556019546010555b601f54600e546135a99087613d0a565b6135b39190613cde565b6020830152601f54601054600f546135cb9190613cf2565b6135d59087613d0a565b6135df9190613cde565b6040830181905260208301516135f59190613cf2565b6135ff9086613cb1565b82526020820151613611908290613d0a565b60a0830152613634565b6000602083018190526040830181905285835260a08301525b8082604001516136449190613d0a565b8260a001516136539190613cf2565b82608001516136629190613cb1565b60608301525095945050505050565b600061367b61299f565b905060006136898284613d0a565b306000908152600160205260409020549091506136a7908290613cf2565b3060009081526001602090815260408083209390935560079052205460ff16156136f757306000908152600260205260409020546136e6908490613cf2565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160265461374b9190613cb1565b60265560275461375c908290613cf2565b6027555050565b82805461376f90613c2b565b90600052602060002090601f01602090048101928261379157600085556137d7565b82601f106137aa57805160ff19168380011785556137d7565b828001600101855582156137d7579182015b828111156137d75782518255916020019190600101906137bc565b506137e39291506137e7565b5090565b5b808211156137e357600081556001016137e8565b600060208083528351808285015260005b818110156138295785810183015185820160400152820161380d565b8181111561383b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d8357600080fd5b6000806040838503121561387957600080fd5b823561388481613851565b946020939093013593505050565b6000806000606084860312156138a757600080fd5b83356138b281613851565b925060208401356138c281613851565b929592945050506040919091013590565b6000602082840312156138e557600080fd5b5035919050565b600080604083850312156138ff57600080fd5b50508035926020909101359150565b60006020828403121561392057600080fd5b8135610e0b81613851565b8035801515811461393b57600080fd5b919050565b6000806040838503121561395357600080fd5b823561395e81613851565b915061396c6020840161392b565b90509250929050565b60008060006060848603121561398a57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139e0576139e06139a1565b604052919050565b600082601f8301126139f957600080fd5b813567ffffffffffffffff811115613a1357613a136139a1565b613a26601f8201601f19166020016139b7565b818152846020838601011115613a3b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215613a6e57600080fd5b8435613a7981613851565b93506020850135613a8981613851565b9250604085013567ffffffffffffffff80821115613aa657600080fd5b613ab2888389016139e8565b93506060870135915080821115613ac857600080fd5b50613ad5878288016139e8565b91505092959194509250565b600060208284031215613af357600080fd5b610e0b8261392b565b60008060408385031215613b0f57600080fd5b8235613b1a81613851565b91506020830135613b2a81613851565b809150509250929050565b60008060008060808587031215613b4b57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613b7a57600080fd5b823567ffffffffffffffff80821115613b9257600080fd5b818501915085601f830112613ba657600080fd5b8135602082821115613bba57613bba6139a1565b8160051b9250613bcb8184016139b7565b8281529284018101928181019089851115613be557600080fd5b948201945b84861015613c0f5785359350613bff84613851565b8382529482019490820190613bea565b9650613c1e905087820161392b565b9450505050509250929050565b600181811c90821680613c3f57607f821691505b60208210811415613c6057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613cc357613cc3613c9b565b500390565b634e487b7160e01b600052601260045260246000fd5b600082613ced57613ced613cc8565b500490565b60008219821115613d0557613d05613c9b565b500190565b6000816000190483118215151615613d2457613d24613c9b565b500290565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600019821415613e0957613e09613c9b565b5060010190565b600181815b80851115613e4b578160001904821115613e3157613e31613c9b565b80851615613e3e57918102915b93841c9390800290613e15565b509250929050565b600082613e6257506001610bfc565b81613e6f57506000610bfc565b8160018114613e855760028114613e8f57613eab565b6001915050610bfc565b60ff841115613ea057613ea0613c9b565b50506001821b610bfc565b5060208310610133831016604e8410600b8410161715613ece575081810a610bfc565b613ed88383613e10565b8060001904821115613eec57613eec613c9b565b029392505050565b6000610e0b8383613e53565b600082613f0f57613f0f613cc8565b500690565b600060208284031215613f2657600080fd5b8151610e0b81613851565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f815784516001600160a01b031683529383019391830191600101613f5c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613fb757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200f4ea0b725bafd5d8e01dceb16f169013845285df05a34d1974d86f17cb0550364736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806371a74e0d116101f2578063afe4260e1161010d578063e5cc218e116100a0578063efebfe8f1161006f578063efebfe8f14610ac0578063f048209f14610ae0578063f1d6512e14610b00578063f7b8cba114610b3957600080fd5b8063e5cc218e14610a54578063e7f4527b14610a74578063ebf600a314610a94578063ef6e661c14610aaa57600080fd5b8063d3456ca3116100dc578063d3456ca3146109ae578063d9e66460146109ce578063dd62ed3e146109ee578063e5adc7f814610a3457600080fd5b8063afe4260e14610938578063c2ed286b1461094e578063c49b9a801461096e578063c95bab691461098e57600080fd5b806394e4443e116101855780639a09a61b116101545780639a09a61b146108c3578063a457c2d7146108e2578063a8b6c25814610902578063a9059cbb1461091857600080fd5b806394e4443e14610858578063958dd4631461087857806395d89b4114610898578063988cf801146108ad57600080fd5b806388f82020116101c157806388f82020146107eb578063893d20e8146108245780638a31167f146108425780638da5cb5b1461082457600080fd5b806371a74e0d14610775578063798d40161461078b57806380c581d1146107ab578063845bddd4146107cb57600080fd5b8063452ed4f1116102e2578063571ac8b0116102755780636a74f2ea116102445780636a74f2ea146107155780636cefc2a71461072b57806370a0823114610740578063715018a61461076057600080fd5b8063571ac8b01461069f57806358fa63ca146106bf5780635beacb46146106df5780635e395036146106ff57600080fd5b80634b338efd116102b15780634b338efd146106335780634bbe49ba146106495780634fb2e45d1461065f57806352a605041461067f57600080fd5b8063452ed4f1146105bc57806345494eab146105dc578063496e7e9e146105f25780634a74bb021461061257600080fd5b806323b872dd1161035a578063313ce56711610329578063313ce5671461054e578063384f6b511461057057806339509351146105865780633d0fe69c146105a657600080fd5b806323b872dd146104e357806324b230b414610503578063270bcdfb146105185780632d8381191461052e57600080fd5b806313114a9d1161039657806313114a9d1461048257806314f0fc39146104a157806318160ddd146104b75780631bd3ba7b146104cc57600080fd5b806303fd2a45146103d357806306fdde03146104105780630758d92414610432578063095ea7b31461045257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b50602b546103f3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041c57600080fd5b50610425610b59565b60405161040791906137fc565b34801561043e57600080fd5b506028546103f3906001600160a01b031681565b34801561045e57600080fd5b5061047261046d366004613866565b610beb565b6040519015158152602001610407565b34801561048e57600080fd5b506027545b604051908152602001610407565b3480156104ad57600080fd5b50610493600e5481565b3480156104c357600080fd5b50602554610493565b3480156104d857600080fd5b506104e1610c02565b005b3480156104ef57600080fd5b506104726104fe366004613892565b610ccc565b34801561050f57600080fd5b506104e1610d1f565b34801561052457600080fd5b50610493601e5481565b34801561053a57600080fd5b506104936105493660046138d3565b610d86565b34801561055a57600080fd5b5060235460405160ff9091168152602001610407565b34801561057c57600080fd5b50610493601d5481565b34801561059257600080fd5b506104726105a1366004613866565b610e12565b3480156105b257600080fd5b5061049360165481565b3480156105c857600080fd5b506029546103f3906001600160a01b031681565b3480156105e857600080fd5b5061049360175481565b3480156105fe57600080fd5b506104e161060d3660046138ec565b610e49565b34801561061e57600080fd5b50602e5461047290600160a81b900460ff1681565b34801561063f57600080fd5b5061049360185481565b34801561065557600080fd5b5061049360305481565b34801561066b57600080fd5b506104e161067a36600461390e565b610ee6565b34801561068b57600080fd5b506104e161069a3660046138ec565b611088565b3480156106ab57600080fd5b506104726106ba36600461390e565b6110bd565b3480156106cb57600080fd5b50602c546103f3906001600160a01b031681565b3480156106eb57600080fd5b506104e16106fa366004613940565b6110cb565b34801561070b57600080fd5b5061049360115481565b34801561072157600080fd5b5061049360155481565b34801561073757600080fd5b506104e16113bf565b34801561074c57600080fd5b5061049361075b36600461390e565b611419565b34801561076c57600080fd5b506104e1611478565b34801561078157600080fd5b5061049360135481565b34801561079757600080fd5b506104e16107a6366004613975565b6114f7565b3480156107b757600080fd5b506104e16107c6366004613940565b61157d565b3480156107d757600080fd5b506104e16107e6366004613975565b611669565b3480156107f757600080fd5b5061047261080636600461390e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561083057600080fd5b506000546001600160a01b03166103f3565b34801561084e57600080fd5b50610493600f5481565b34801561086457600080fd5b506104e1610873366004613a58565b6116ef565b34801561088457600080fd5b506104e161089336600461390e565b611b67565b3480156108a457600080fd5b50610425611e97565b3480156108b957600080fd5b5061049360105481565b3480156108cf57600080fd5b5060355461047290610100900460ff1681565b3480156108ee57600080fd5b506104726108fd366004613866565b611ea6565b34801561090e57600080fd5b5061049360145481565b34801561092457600080fd5b50610472610933366004613866565b611edd565b34801561094457600080fd5b5061049360325481565b34801561095a57600080fd5b506104e1610969366004613940565b611eea565b34801561097a57600080fd5b506104e1610989366004613ae1565b611f3f565b34801561099a57600080fd5b506104e16109a93660046138ec565b611fc1565b3480156109ba57600080fd5b506104e16109c936600461390e565b61205e565b3480156109da57600080fd5b50602a546103f3906001600160a01b031681565b3480156109fa57600080fd5b50610493610a09366004613afc565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4057600080fd5b506104e1610a4f366004613b35565b6120fe565b348015610a6057600080fd5b506104e1610a6f366004613975565b612167565b348015610a8057600080fd5b506104e1610a8f366004613b67565b6121ed565b348015610aa057600080fd5b5061049360125481565b348015610ab657600080fd5b5061049360195481565b348015610acc57600080fd5b506104e1610adb366004613975565b61227e565b348015610aec57600080fd5b506104e1610afb36600461390e565b6122b6565b348015610b0c57600080fd5b50610472610b1b36600461390e565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610b4557600080fd5b506104e1610b54366004613940565b612356565b6060600c8054610b6890613c2b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9490613c2b565b8015610be15780601f10610bb657610100808354040283529160200191610be1565b820191906000526020600020905b815481529060010190602001808311610bc457829003601f168201915b5050505050905090565b6000610bf83384846123ab565b5060015b92915050565b6000546001600160a01b03163314610c355760405162461bcd60e51b8152600401610c2c90613c66565b60405180910390fd5b60355460ff1615610c885760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610c2c565b610c933060016110cb565b602954610caa906001600160a01b031660016110cb565b6035805460ff19166001179055602e805460ff60a81b1916600160a81b179055565b6000610cd98484846124e0565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610d15918691610d10908690613cb1565b6123ab565b5060019392505050565b6000546001600160a01b03163314610d495760405162461bcd60e51b8152600401610c2c90613c66565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d83573d6000803e3d6000fd5b50565b6000602654821115610df55760405162461bcd60e51b815260206004820152603260248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527132b33632b1ba34b7b73990169020ab24a0a760711b6064820152608401610c2c565b6000610dff61299f565b9050610e0b8184613cde565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bf8918590610d10908690613cf2565b6000546001600160a01b03163314610e735760405162461bcd60e51b8152600401610c2c90613c66565b60008183602554610e849190613d0a565b610e8e9190613cde565b90506103e8602554610ea09190613cde565b811015610ebf5760405162461bcd60e51b8152600401610c2c90613d29565b602f819055600b548290610ed4908590613d0a565b610ede9190613cde565b603055505050565b6000546001600160a01b03163314610f105760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b038116610f365760405162461bcd60e51b8152600401610c2c90613d6c565b602b546001600160a01b0382811691161415610f645760405162461bcd60e51b8152600401610c2c90613d6c565b60008054610f7d916001600160a01b0390911690611eea565b610f88816001611eea565b610f938160016110cb565b600054602d546001600160a01b0390811691161415610fc857602d80546001600160a01b0319166001600160a01b0383161790555b600054610fdd906001600160a01b0316611419565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916110169116611419565b111561103d5760005461103b906001600160a01b03168261103682611419565b6124e0565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146110b25760405162461bcd60e51b8152600401610c2c90613c66565b601d91909155601e55565b6000610bfc82600019610beb565b6000546001600160a01b031633146110f55760405162461bcd60e51b8152600401610c2c90613c66565b6001811515141561122a576001600160a01b03821660009081526007602052604090205460ff16156111695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610c2c565b6001600160a01b038216600090815260016020526040902054156111c3576001600160a01b0382166000908152600160205260409020546111a990610d86565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b806113bb576001600160a01b03821660009081526007602052604090205460ff166112975760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610c2c565b60005b6009548110156113b957826001600160a01b0316600982815481106112c1576112c1613dc9565b6000918252602090912001546001600160a01b031614156113a757600980546112ec90600190613cb1565b815481106112fc576112fc613dc9565b600091825260209091200154600980546001600160a01b03909216918390811061132857611328613dc9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600980548061138057611380613ddf565b600082815260209020810160001990810180546001600160a01b03191690550190556113b9565b806113b181613df5565b91505061129a565b505b5050565b6000546001600160a01b031633146113e95760405162461bcd60e51b8152600401610c2c90613c66565b60006011819055601281905561025860138190556015829055601482905560165560178190556018819055601955565b6001600160a01b03811660009081526007602052604081205460ff161561145657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bfc90610d86565b6000546001600160a01b031633146114a25760405162461bcd60e51b8152600401610c2c90613c66565b600080546114bb916001600160a01b0390911690611eea565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146115215760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156115355750601b548211155b80156115435750601c548111155b61154c57600080fd5b6113248161155a8486613cf2565b6115649190613cf2565b111561156f57600080fd5b601792909255601855601955565b6000546001600160a01b031633146115a75760405162461bcd60e51b8152600401610c2c90613c66565b806115ce57506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561163e576000600454426115e69190613cb1565b1161163e5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f74207365742074776f20706169727320696e206f6e6520626c6f636044820152616b2160f01b6064820152608401610c2c565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156116a75750601b548211155b80156116b55750601c548111155b6116be57600080fd5b611324816116cc8486613cf2565b6116d69190613cf2565b11156116e157600080fd5b601192909255601255601355565b6000546001600160a01b031633146117195760405162461bcd60e51b8152600401610c2c90613c66565b603a5460ff161561172957600080fd5b602e80546001600160a01b038087166001600160a01b03199283168117909355602d805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161179d91600c9190850190613763565b5080516117b190600d906020840190613763565b50633b9aca00600b556023805460ff191660129081179091556024556024546117db90600a613ef4565b600b546117e89190613d0a565b60258190556117f990600019613f00565b61180590600019613cb1565b602655602a54602880546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613f14565b6001600160a01b031663c9c65396602860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190d9190613f14565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190613f14565b602980546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206028549094168352929052206000199055602554620186a0906119e7906107d0613d0a565b6119f19190613cde565b602f55600b54620186a090611a08906103e8613d0a565b611a129190613cde565b6030556025546103e890611a27906014613d0a565b611a319190613cde565b603155600b546103e890611a46906014613d0a565b611a509190613cde565b60325560255461271090611a65906005613d0a565b611a6f9190613cde565b6033556025546103e890611a84906005613d0a565b611a8e9190613cde565b603455602a54611aa9906001600160a01b0316600019610beb565b50603a805460ff19166001908117909155602654906000611ad26000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611afe6000546001600160a01b031690565b602c546025546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602854611b619030906001600160a01b03166000196123ab565b50505050565b6000546001600160a01b03163314611b915760405162461bcd60e51b8152600401610c2c90613c66565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190613f14565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6b9190613f14565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190613f14565b90506001600160a01b038116611e5357816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613f14565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190613f14565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190613f14565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e6f565b602980546001600160a01b0319166001600160a01b0383161790555b602880546001600160a01b0319166001600160a01b0384161790556113b930846000196123ab565b6060600d8054610b6890613c2b565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bf8918590610d10908690613cb1565b6000610d153384846124e0565b6000546001600160a01b03163314611f145760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f695760405162461bcd60e51b8152600401610c2c90613c66565b602e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611fb690831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611feb5760405162461bcd60e51b8152600401610c2c90613c66565b60008183602554611ffc9190613d0a565b6120069190613cde565b90506103e86025546120189190613cde565b8110156120375760405162461bcd60e51b8152600401610c2c90613d29565b6031819055600b54829061204c908590613d0a565b6120569190613cde565b603255505050565b6000546001600160a01b031633146120885760405162461bcd60e51b8152600401610c2c90613c66565b602e546001600160a01b03828116911614156120dc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c2c565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121285760405162461bcd60e51b8152600401610c2c90613c66565b82846025546121379190613d0a565b6121419190613cde565b6033556025548190612154908490613d0a565b61215e9190613cde565b60345550505050565b6000546001600160a01b031633146121915760405162461bcd60e51b8152600401610c2c90613c66565b601a5483111580156121a55750601b548211155b80156121b35750601c548111155b6121bc57600080fd5b611324816121ca8486613cf2565b6121d49190613cf2565b11156121df57600080fd5b601592909255601455601655565b6000546001600160a01b031633146122175760405162461bcd60e51b8152600401610c2c90613c66565b60005b82518110156113b957816008600085848151811061223a5761223a613dc9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061227681613df5565b91505061221a565b6000546001600160a01b031633146122a85760405162461bcd60e51b8152600401610c2c90613c66565b602092909255602155602255565b6000546001600160a01b031633146122e05760405162461bcd60e51b8152600401610c2c90613c66565b602d546001600160a01b03828116911614156123345760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610c2c565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123805760405162461bcd60e51b8152600401610c2c90613c66565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b0383166124165760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f2061646460448201526b3932b9b990169020ab24a0a760a11b6064820152608401610c2c565b6001600160a01b03821661247f5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560448201526939b990169020ab24a0a760b11b6064820152608401610c2c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661254e5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f20616460448201526c323932b9b990169020ab24a0a760991b6064820152608401610c2c565b6001600160a01b0383166125b85760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526a32b9b990169020ab24a0a760a91b6064820152608401610c2c565b600082116126225760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152703a3430b7103d32b93790169020ab24a0a760791b6064820152608401610c2c565b6001600160a01b03841660009081526008602052604090205460ff1615801561266457506001600160a01b03831660009081526008602052604090205460ff16155b801561268057503360009081526008602052604090205460ff16155b61268957600080fd5b61269384846129c2565b156128c75760355460ff166126ea5760405162461bcd60e51b815260206004820181905260248201527f54726164696e67206e6f742079657420656e61626c656421202d20415649414e6044820152606401610c2c565b60385460ff16156127b0576001600160a01b03841660009081526003602052604090205460ff161561276557612721436001613cf2565b6001600160a01b038416600090815260396020526040902054141561274557600080fd5b6001600160a01b03831660009081526039602052604090204390556127b0565b612770436001613cf2565b6001600160a01b038516600090815260396020526040902054141561279457600080fd5b6001600160a01b03841660009081526039602052604090204390555b602f548211156128135760405162461bcd60e51b815260206004820152602860248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e7460448201526717169020ab24a0a760c11b6064820152608401610c2c565b602a546001600160a01b0384811691161480159061284a57506001600160a01b03831660009081526003602052604090205460ff16155b156128c7576031548261285c85611419565b6128669190613cf2565b11156128c75760405162461bcd60e51b815260206004820152602a60248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152693d3297169020ab24a0a760b11b6064820152608401610c2c565b6001600160a01b03841660009081526006602052604090205460019060ff168061290957506001600160a01b03841660009081526006602052604090205460ff165b15612912575060005b6001600160a01b03841660009081526003602052604090205460ff161561298a57602e54600160a01b900460ff161580156129565750602e54600160a81b900460ff165b1561298a57600061296630611419565b9050603354811061298857603454811061297f57506034545b61298881612ac9565b505b61299685858584612e71565b95945050505050565b60008060006129ac6131f2565b90925090506129bb8183613cde565b9250505090565b600080546001600160a01b038481169116148015906129ef57506000546001600160a01b03838116911614155b8015612a1457506001600160a01b0382166000908152600a602052604090205460ff16155b8015612a3957506001600160a01b0383166000908152600a602052604090205460ff16155b8015612a535750602b546001600160a01b03838116911614155b8015612a6757506001600160a01b03821615155b8015612a7c57506001600160a01b0383163014155b8015612aa157506001600160a01b03821660009081526006602052604090205460ff16155b8015610e0b575050506001600160a01b031660009081526006602052604090205460ff161590565b602e805460ff60a01b1916600160a01b179055601e54601d54612aec9190613cf2565b612af557612e61565b60006002601e54601d54612b099190613cf2565b601d54612b169085613d0a565b612b209190613cde565b612b2a9190613cde565b90506000612b388284613cb1565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612b7257612b72613dc9565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bef9190613f14565b81600181518110612c0257612c02613dc9565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b815291169063791ac94790612c48908590600090869030904290600401613f31565b600060405180830381600087803b158015612c6257600080fd5b505af1158015612c76573d6000803e3d6000fd5b5050505060006002601e54601d54612c8e9190613cf2565b601d54612c9b9047613d0a565b612ca59190613cde565b612caf9190613cde565b90508315612d9157602854602d5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612d27573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d4c9190613fa2565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612d9d8587613cb1565b1115612e5c576020546022544791600091612db89084613cde565b612dc29190613d0a565b9050600060215460225484612dd79190613cde565b612de19190613d0a565b602d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612e1c573d6000803e3d6000fd5b50602e546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612e57573d6000803e3d6000fd5b505050505b505050505b50602e805460ff60a01b19169055565b603554600090610100900460ff16612f0557612e8d8585613375565b603554610100900460ff16158015612eaa5750612eaa85856129c2565b15612f055760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610c2c565b6000612f1386868686613483565b60808101516001600160a01b038816600090815260016020526040902054919250612f3d91613cb1565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612f749190613cf2565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612fc857506001600160a01b03851660009081526007602052604090205460ff16155b1561300f576001600160a01b038616600090815260026020526040902054612ff1908590613cb1565b6001600160a01b03871660009081526002602052604090205561314f565b6001600160a01b03861660009081526007602052604090205460ff1615801561305057506001600160a01b03851660009081526007602052604090205460ff165b156130985780516001600160a01b03861660009081526002602052604090205461307a9190613cf2565b6001600160a01b03861660009081526002602052604090205561314f565b6001600160a01b03861660009081526007602052604090205460ff1680156130d857506001600160a01b03851660009081526007602052604090205460ff165b1561314f576001600160a01b038616600090815260026020526040902054613101908590613cb1565b6001600160a01b03808816600090815260026020526040808220939093558351918816815291909120546131359190613cf2565b6001600160a01b0386166000908152600260205260409020555b60408101511561316757613167868260400151613671565b60008160a00151118061317e575060008160200151115b15613195576131958160a00151826020015161373d565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516131de91815260200190565b60405180910390a350600195945050505050565b6026546025546000918291825b6009548110156133445782600160006009848154811061322157613221613dc9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061328c575081600260006009848154811061326557613265613dc9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156132a257602654602554945094505050509091565b60016000600983815481106132b9576132b9613dc9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546132e89084613cb1565b9250600260006009838154811061330157613301613dc9565b60009182526020808320909101546001600160a01b031683528201929092526040019020546133309083613cb1565b91508061333c81613df5565b9150506131ff565b506025546026546133559190613cde565b82101561336c576026546025549350935050509091565b90939092509050565b603554610100900460ff16156133cd5760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610c2c565b6133d782826129c2565b1580156133f157506029546001600160a01b038281169116145b156113bb576001600160a01b0382166000908152600a602052604090819020805460ff191660019081179091556035805461ff00191661010017905542603755602e805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161347791901515815260200190565b60405180910390a15050565b6134bc6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6134f56040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006134ff61299f565b905061350b8186613d0a565b6080830152831561361b576001600160a01b03861660009081526003602052604090205460ff161561354e57601554600e55601454600f55601654601055613599565b6001600160a01b03871660009081526003602052604090205460ff161561358657601154600e55601254600f55601354601055613599565b601754600e55601854600f556019546010555b601f54600e546135a99087613d0a565b6135b39190613cde565b6020830152601f54601054600f546135cb9190613cf2565b6135d59087613d0a565b6135df9190613cde565b6040830181905260208301516135f59190613cf2565b6135ff9086613cb1565b82526020820151613611908290613d0a565b60a0830152613634565b6000602083018190526040830181905285835260a08301525b8082604001516136449190613d0a565b8260a001516136539190613cf2565b82608001516136629190613cb1565b60608301525095945050505050565b600061367b61299f565b905060006136898284613d0a565b306000908152600160205260409020549091506136a7908290613cf2565b3060009081526001602090815260408083209390935560079052205460ff16156136f757306000908152600260205260409020546136e6908490613cf2565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160265461374b9190613cb1565b60265560275461375c908290613cf2565b6027555050565b82805461376f90613c2b565b90600052602060002090601f01602090048101928261379157600085556137d7565b82601f106137aa57805160ff19168380011785556137d7565b828001600101855582156137d7579182015b828111156137d75782518255916020019190600101906137bc565b506137e39291506137e7565b5090565b5b808211156137e357600081556001016137e8565b600060208083528351808285015260005b818110156138295785810183015185820160400152820161380d565b8181111561383b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d8357600080fd5b6000806040838503121561387957600080fd5b823561388481613851565b946020939093013593505050565b6000806000606084860312156138a757600080fd5b83356138b281613851565b925060208401356138c281613851565b929592945050506040919091013590565b6000602082840312156138e557600080fd5b5035919050565b600080604083850312156138ff57600080fd5b50508035926020909101359150565b60006020828403121561392057600080fd5b8135610e0b81613851565b8035801515811461393b57600080fd5b919050565b6000806040838503121561395357600080fd5b823561395e81613851565b915061396c6020840161392b565b90509250929050565b60008060006060848603121561398a57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139e0576139e06139a1565b604052919050565b600082601f8301126139f957600080fd5b813567ffffffffffffffff811115613a1357613a136139a1565b613a26601f8201601f19166020016139b7565b818152846020838601011115613a3b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215613a6e57600080fd5b8435613a7981613851565b93506020850135613a8981613851565b9250604085013567ffffffffffffffff80821115613aa657600080fd5b613ab2888389016139e8565b93506060870135915080821115613ac857600080fd5b50613ad5878288016139e8565b91505092959194509250565b600060208284031215613af357600080fd5b610e0b8261392b565b60008060408385031215613b0f57600080fd5b8235613b1a81613851565b91506020830135613b2a81613851565b809150509250929050565b60008060008060808587031215613b4b57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215613b7a57600080fd5b823567ffffffffffffffff80821115613b9257600080fd5b818501915085601f830112613ba657600080fd5b8135602082821115613bba57613bba6139a1565b8160051b9250613bcb8184016139b7565b8281529284018101928181019089851115613be557600080fd5b948201945b84861015613c0f5785359350613bff84613851565b8382529482019490820190613bea565b9650613c1e905087820161392b565b9450505050509250929050565b600181811c90821680613c3f57607f821691505b60208210811415613c6057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015613cc357613cc3613c9b565b500390565b634e487b7160e01b600052601260045260246000fd5b600082613ced57613ced613cc8565b500490565b60008219821115613d0557613d05613c9b565b500190565b6000816000190483118215151615613d2457613d24613c9b565b500290565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600019821415613e0957613e09613c9b565b5060010190565b600181815b80851115613e4b578160001904821115613e3157613e31613c9b565b80851615613e3e57918102915b93841c9390800290613e15565b509250929050565b600082613e6257506001610bfc565b81613e6f57506000610bfc565b8160018114613e855760028114613e8f57613eab565b6001915050610bfc565b60ff841115613ea057613ea0613c9b565b50506001821b610bfc565b5060208310610133831016604e8410600b8410161715613ece575081810a610bfc565b613ed88383613e10565b8060001904821115613eec57613eec613c9b565b029392505050565b6000610e0b8383613e53565b600082613f0f57613f0f613cc8565b500690565b600060208284031215613f2657600080fd5b8151610e0b81613851565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613f815784516001600160a01b031683529383019391830191600101613f5c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613fb757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200f4ea0b725bafd5d8e01dceb16f169013845285df05a34d1974d86f17cb0550364736f6c634300080a0033

Deployed Bytecode Sourcemap

6048:24094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:64;;;;;;;;;;-1:-1:-1;7906:64:0;;;;-1:-1:-1;;;;;7906:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7906:64:0;;;;;;;;13039:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7797:35::-;;;;;;;;;;-1:-1:-1;7797:35:0;;;;-1:-1:-1;;;;;7797:35:0;;;13710:161;;;;;;;;;;-1:-1:-1;13710:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;13710:161:0;1514:187:1;20118:87:0;;;;;;;;;;-1:-1:-1;20187:10:0;;20118:87;;;1852:25:1;;;1840:2;1825:18;20118:87:0;1706:177:1;6759:28:0;;;;;;;;;;;;;;;;12790:83;;;;;;;;;;-1:-1:-1;12863:7:0;;12790:83;;24967:279;;;;;;;;;;;;;:::i;:::-;;14007:263;;;;;;;;;;-1:-1:-1;14007:263:0;;;;;:::i;:::-;;:::i;28954:127::-;;;;;;;;;;;;;:::i;7386:34::-;;;;;;;;;;;;;;;;20502:258;;;;;;;;;;-1:-1:-1;20502:258:0;;;;;:::i;:::-;;:::i;12880:71::-;;;;;;;;;;-1:-1:-1;12939:9:0;;12880:71;;12939:9;;;;2676:36:1;;2664:2;2649:18;12880:71:0;2534:184:1;7345:34:0;;;;;;;;;;;;;;;;14278:212;;;;;;;;;;-1:-1:-1;14278:212:0;;;;;:::i;:::-;;:::i;7060:33::-;;;;;;;;;;;;;;;;7840:21;;;;;;;;;;-1:-1:-1;7840:21:0;;;;-1:-1:-1;;;;;7840:21:0;;;7101:36;;;;;;;;;;;;;;;;17547:313;;;;;;;;;;-1:-1:-1;17547:313:0;;;;;:::i;:::-;;:::i;8165:41::-;;;;;;;;;;-1:-1:-1;8165:41:0;;;;-1:-1:-1;;;8165:41:0;;;;;;7145:31;;;;;;;;;;;;;;;;8245:23;;;;;;;;;;;;;;;;11788:792;;;;;;;;;;-1:-1:-1;11788:792:0;;;;;:::i;:::-;;:::i;17372:167::-;;;;;;;;;;-1:-1:-1;17372:167:0;;;;;:::i;:::-;;:::i;13879:120::-;;;;;;;;;;-1:-1:-1;13879:120:0;;;;;:::i;:::-;;:::i;7978:64::-;;;;;;;;;;-1:-1:-1;7978:64:0;;;;-1:-1:-1;;;;;7978:64:0;;;19210:900;;;;;;;;;;-1:-1:-1;19210:900:0;;;;;:::i;:::-;;:::i;6863:37::-;;;;;;;;;;;;;;;;7022:30;;;;;;;;;;;;;;;;29845:294;;;;;;;;;;;;;:::i;13331:196::-;;;;;;;;;;-1:-1:-1;13331:196:0;;;;;:::i;:::-;;:::i;12588:194::-;;;;;;;;;;;;;:::i;6945:35::-;;;;;;;;;;;;;;;;16771:419;;;;;;;;;;-1:-1:-1;16771:419:0;;;;;:::i;:::-;;:::i;15275:423::-;;;;;;;;;;-1:-1:-1;15275:423:0;;;;;:::i;:::-;;:::i;15959:396::-;;;;;;;;;;-1:-1:-1;15959:396:0;;;;;:::i;:::-;;:::i;15706:118::-;;;;;;;;;;-1:-1:-1;15706:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;15798:18:0;15774:4;15798:18;;;:9;:18;;;;;;;;;15706:118;13116:71;;;;;;;;;;-1:-1:-1;13159:7:0;11766:6;-1:-1:-1;;;;;11766:6:0;13116:71;;6795:23;;;;;;;;;;;;;;;;10107:1586;;;;;;;;;;-1:-1:-1;10107:1586:0;;;;;:::i;:::-;;:::i;14728:539::-;;;;;;;;;;-1:-1:-1;14728:539:0;;;;;:::i;:::-;;:::i;12957:75::-;;;;;;;;;;;;;:::i;6826:29::-;;;;;;;;;;;;;;;;8441:36;;;;;;;;;;-1:-1:-1;8441:36:0;;;;;;;;;;;14498:222;;;;;;;;;;-1:-1:-1;14498:222:0;;;;;:::i;:::-;;:::i;6987:27::-;;;;;;;;;;;;;;;;13535:167;;;;;;;;;;-1:-1:-1;13535:167:0;;;;;:::i;:::-;;:::i;8309:26::-;;;;;;;;;;;;;;;;19072:130;;;;;;;;;;-1:-1:-1;19072:130:0;;;;;:::i;:::-;;:::i;18893:171::-;;;;;;;;;;-1:-1:-1;18893:171:0;;;;;:::i;:::-;;:::i;17868:324::-;;;;;;;;;;-1:-1:-1;17868:324:0;;;;;:::i;:::-;;:::i;18499:194::-;;;;;;;;;;-1:-1:-1;18499:194:0;;;;;:::i;:::-;;:::i;7869:29::-;;;;;;;;;;-1:-1:-1;7869:29:0;;;;-1:-1:-1;;;;;7869:29:0;;;13193:130;;;;;;;;;;-1:-1:-1;13193:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;13295:16:0;;;13277:7;13295:16;;;:8;:16;;;;;;;;:25;;;;;;;;;;;;;13193:130;18200:291;;;;;;;;;;-1:-1:-1;18200:291:0;;;;;:::i;:::-;;:::i;16363:400::-;;;;;;;;;;-1:-1:-1;16363:400:0;;;;;:::i;:::-;;:::i;29522:201::-;;;;;;;;;;-1:-1:-1;29522:201:0;;;;;:::i;:::-;;:::i;6908:29::-;;;;;;;;;;;;;;;;7184:34;;;;;;;;;;;;;;;;17198:166;;;;;;;;;;-1:-1:-1;17198:166:0;;;;;:::i;:::-;;:::i;18701:186::-;;;;;;;;;;-1:-1:-1;18701:186:0;;;;;:::i;:::-;;:::i;15832:119::-;;;;;;;;;;-1:-1:-1;15832:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;15918:25:0;15894:4;15918:25;;;:16;:25;;;;;;;;;15832:119;29732:105;;;;;;;;;;-1:-1:-1;29732:105:0;;;;;:::i;:::-;;:::i;13039:71::-;13078:13;13102:5;13095:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13039:71;:::o;13710:161::-;13785:4;13802:39;188:10;13825:7;13834:6;13802:8;:39::i;:::-;-1:-1:-1;13859:4:0;13710:161;;;;;:::o;24967:279::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;;;;;;;;;25026:9:::1;::::0;::::1;;25025:10;25017:50;;;::::0;-1:-1:-1;;;25017:50:0;;9095:2:1;25017:50:0::1;::::0;::::1;9077:21:1::0;9134:2;9114:18;;;9107:30;9173:29;9153:18;;;9146:57;9220:18;;25017:50:0::1;8893:351:1::0;25017:50:0::1;25078:44;25110:4;25117;25078:23;:44::i;:::-;25157:6;::::0;25133:37:::1;::::0;-1:-1:-1;;;;;25157:6:0::1;::::0;25133:23:::1;:37::i;:::-;25183:9;:16:::0;;-1:-1:-1;;25183:16:0::1;25195:4;25183:16;::::0;;25210:21:::1;:28:::0;;-1:-1:-1;;;;25210:28:0::1;-1:-1:-1::0;;;25210:28:0::1;::::0;;24967:279::o;14007:263::-;14105:4;14122:36;14132:6;14140:9;14151:6;14122:9;:36::i;:::-;-1:-1:-1;;;;;;14200:16:0;;;;;;:8;:16;;;;;;;;188:10;14200:30;;;;;;;;;14169:71;;14178:6;;14200:39;;14233:6;;14200:39;:::i;:::-;14169:8;:71::i;:::-;-1:-1:-1;14258:4:0;14007:263;;;;;:::o;28954:127::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;11739:7;11766:6;;29025:48:::1;::::0;-1:-1:-1;;;;;11766:6:0;;;;29051:21:::1;29025:48:::0;::::1;;;::::0;29051:21;;29025:48;11739:7;29025:48;29051:21;11766:6;29025:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28954:127::o:0;20502:258::-;20568:7;20607;;20596;:18;;20588:81;;;;-1:-1:-1;;;20588:81:0;;9713:2:1;20588:81:0;;;9695:21:1;9752:2;9732:18;;;9725:30;9791:34;9771:18;;;9764:62;-1:-1:-1;;;9842:18:1;;;9835:48;9900:19;;20588:81:0;9511:414:1;20588:81:0;20680:19;20703:10;:8;:10::i;:::-;20680:33;-1:-1:-1;20731:21:0;20680:33;20731:7;:21;:::i;:::-;20724:28;20502:258;-1:-1:-1;;;20502:258:0:o;14278:212::-;188:10;14366:4;14415:22;;;:8;:22;;;;;;;;-1:-1:-1;;;;;14415:31:0;;;;;;;;;;14366:4;;14383:77;;14406:7;;14415:44;;14449:10;;14415:44;:::i;17547:313::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;17642:13:::1;17680:7;17669;17659;;:17;;;;:::i;:::-;17658:29;;;;:::i;:::-;17642:45;;17726:4;17716:7;;:14;;;;:::i;:::-;17706:5;:25;;17698:73;;;;-1:-1:-1::0;;;17698:73:0::1;;;;;;;:::i;:::-;17782:7;:15:::0;;;17820:11:::1;::::0;17845:7;;17820:21:::1;::::0;17834:7;;17820:21:::1;:::i;:::-;17819:33;;;;:::i;:::-;17808:8;:44:::0;-1:-1:-1;;;17547:313:0:o;11788:792::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11869:22:0;::::1;11861:96;;;;-1:-1:-1::0;;;11861:96:0::1;;;;;;;:::i;:::-;11988:4;::::0;-1:-1:-1;;;;;11976:16:0;;::::1;11988:4:::0;::::1;11976:16;;11968:90;;;;-1:-1:-1::0;;;11968:90:0::1;;;;;;;:::i;:::-;12088:6;::::0;;12069:33:::1;::::0;-1:-1:-1;;;;;12088:6:0;;::::1;::::0;12069:18:::1;:33::i;:::-;12113:34;12132:8;12142:4;12113:18;:34::i;:::-;12158:39;12182:8;12192:4;12158:23;:39::i;:::-;12243:6;::::0;12222:9:::1;::::0;-1:-1:-1;;;;;12222:9:0;;::::1;12243:6:::0;::::1;12222:28;12218:76;;;12265:9;:29:::0;;-1:-1:-1;;;;;;12265:29:0::1;-1:-1:-1::0;;;;;12265:29:0;::::1;;::::0;;12218:76:::1;12354:6;::::0;12344:17:::1;::::0;-1:-1:-1;;;;;12354:6:0::1;12344:9;:17::i;:::-;12315:16;12324:6:::0;;-1:-1:-1;;;;;12324:6:0;;::::1;12315:16:::0;;:8:::1;:16;::::0;;;;;;;:26;;::::1;::::0;;;;;;;:46;;;;12385:6;;12315:16;;12375:17:::1;::::0;12385:6:::1;12375:9;:17::i;:::-;:21;12372:99;;;12423:6;::::0;12413:46:::1;::::0;-1:-1:-1;;;;;12423:6:0::1;12431:8:::0;12441:17:::1;12423:6:::0;12441:9:::1;:17::i;:::-;12413:9;:46::i;:::-;;12372:99;12491:6;:17:::0;;-1:-1:-1;;;;;;12491:17:0::1;-1:-1:-1::0;;;;;12491:17:0;::::1;::::0;;::::1;::::0;;12524:38:::1;::::0;12491:17;;;;12524:38:::1;::::0;12491:6;12524:38:::1;11788:792:::0;:::o;17372:167::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;17469:15:::1;:27:::0;;;;17507:12:::1;:24:::0;17372:167::o;13879:120::-;13932:4;13956:35;13964:7;-1:-1:-1;;13956:7:0;:35::i;19210:900::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;19317:4:::1;19306:15:::0;::::1;;;19302:801;;;-1:-1:-1::0;;;;;19347:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;19346:19;19338:60;;;::::0;-1:-1:-1;;;19338:60:0;;11529:2:1;19338:60:0::1;::::0;::::1;11511:21:1::0;11568:2;11548:18;;;11541:30;11607;11587:18;;;11580:58;11655:18;;19338:60:0::1;11327:352:1::0;19338:60:0::1;-1:-1:-1::0;;;;;19416:16:0;::::1;19435:1;19416:16:::0;;;:7:::1;:16;::::0;;;;;:20;19413:116:::1;;-1:-1:-1::0;;;;;19496:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19476:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19457:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19413:116:::1;-1:-1:-1::0;;;;;;19543:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;19543:25:0::1;19564:4;19543:25:::0;;::::1;::::0;;;19583:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19583:23:0::1;::::0;;::::1;::::0;;19210:900::o;19302:801::-:1;19628:16:::0;19624:479:::1;;-1:-1:-1::0;;;;;19669:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;19661:59;;;::::0;-1:-1:-1;;;19661:59:0;;11886:2:1;19661:59:0::1;::::0;::::1;11868:21:1::0;11925:2;11905:18;;;11898:30;11964;11944:18;;;11937:58;12012:18;;19661:59:0::1;11684:352:1::0;19661:59:0::1;19740:9;19735:357;19759:9;:16:::0;19755:20;::::1;19735:357;;;19821:7;-1:-1:-1::0;;;;;19805:23:0::1;:9;19815:1;19805:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19805:12:0::1;:23;19801:276;;;19868:9;19878:16:::0;;:20:::1;::::0;19897:1:::1;::::0;19878:20:::1;:::i;:::-;19868:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19853:9:::1;:12:::0;;-1:-1:-1;;;;;19868:31:0;;::::1;::::0;19863:1;;19853:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19853:46:0::1;-1:-1:-1::0;;;;;19853:46:0;;::::1;;::::0;;19922:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19965:9:::1;:18:::0;;;;:26;;-1:-1:-1;;19965:26:0::1;::::0;;20014:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20014:15:0;;;;;-1:-1:-1;;;;;;20014:15:0::1;::::0;;;;;20052:5:::1;;19801:276;19777:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19735:357;;;;19624:479;19210:900:::0;;:::o;29845:294::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;29915:1:::1;29902:10;:14:::0;;;29927:7:::1;:11:::0;;;29962:3:::1;29949:10;:16:::0;;;29976:11:::1;:15:::0;;;30002:8:::1;:12:::0;;;30025:11:::1;:17:::0;30053::::1;:21:::0;;;30085:12:::1;:16:::0;;;30112:15:::1;:19:::0;29845:294::o;13331:196::-;-1:-1:-1;;;;;13421:18:0;;13397:7;13421:18;;;:9;:18;;;;;;;;13417:47;;;-1:-1:-1;;;;;;13448:16:0;;;;;:7;:16;;;;;;;13331:196::o;13417:47::-;-1:-1:-1;;;;;13502:16:0;;;;;;:7;:16;;;;;;13482:37;;:19;:37::i;12588:194::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;12674:6:::1;::::0;;12655:33:::1;::::0;-1:-1:-1;;;;;12674:6:0;;::::1;::::0;12655:18:::1;:33::i;:::-;12716:1;12699:19:::0;;-1:-1:-1;;;;;;12699:19:0::1;::::0;;12734:40:::1;::::0;12716:1;;12734:40:::1;::::0;12716:1;;12734:40:::1;12588:194::o:0;16771:419::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;16899:11:::1;;16888:7;:22;;:62;;;;;16944:6;;16931:9;:19;;16888:62;:105;;;;;16984:9;;16971;:22;;16888:105;16880:132;;;::::0;::::1;;17066:4;17053:9:::0;17031:19:::1;17041:9:::0;17031:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;17023:48;;;::::0;::::1;;17082:17;:27:::0;;;;17120:12:::1;:24:::0;17155:15:::1;:27:::0;16771:419::o;15275:423::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;15356:16;15352:339:::1;;-1:-1:-1::0;;;;;;15389:13:0::1;15405:5;15389:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;15389:21:0::1;::::0;;19210:900::o;15352:339::-:1;15447:18;::::0;:23;15443:151:::1;;15538:1;15517:18;;15499:15;:36;;;;:::i;:::-;:40;15491:87;;;::::0;-1:-1:-1;;;15491:87:0;;12647:2:1;15491:87:0::1;::::0;::::1;12629:21:1::0;12686:2;12666:18;;;12659:30;12725:34;12705:18;;;12698:62;-1:-1:-1;;;12776:18:1;;;12769:32;12818:19;;15491:87:0::1;12445:398:1::0;15491:87:0::1;-1:-1:-1::0;;;;;15608:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;15608:20:0::1;15624:4;15608:20;::::0;;15664:15:::1;15643:18;:36:::0;15275:423;;:::o;15959:396::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;16081:11:::1;;16070:7;:22;;:62;;;;;16126:6;;16113:9;:19;;16070:62;:105;;;;;16166:9;;16153;:22;;16070:105;16062:132;;;::::0;::::1;;16248:4;16235:9:::0;16213:19:::1;16223:9:::0;16213:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16205:48;;;::::0;::::1;;16264:10;:20:::0;;;;16295:7:::1;:19:::0;16325:10:::1;:22:::0;15959:396::o;10107:1586::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;10276:8:::1;::::0;::::1;;10275:9;10267:18;;;::::0;::::1;;10298:13;:40:::0;;-1:-1:-1;;;;;10298:40:0;;::::1;-1:-1:-1::0;;;;;;10298:40:0;;::::1;::::0;::::1;::::0;;;10349:9:::1;:27:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;10298:13:::1;10389:31:::0;;;:16:::1;:31;::::0;;;;;;;:38;;-1:-1:-1;;10389:38:0;;::::1;10298:40:::0;10389:38;;::::1;::::0;;;10455:9;;;;::::1;10438:27:::0;;;;;:34;;;;::::1;;::::0;;10485:18;;::::1;::::0;:5:::1;::::0;:18;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10514:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10561:13:0::1;10547:11;:27:::0;10632:9:::1;:14:::0;;-1:-1:-1;;10632:14:0::1;10644:2;10632:14:::0;;::::1;::::0;;;10661:12:::1;:24:::0;10821:12:::1;::::0;10817:16:::1;::::0;:2:::1;:16;:::i;:::-;10802:11;;:32;;;;:::i;:::-;10792:7;:42:::0;;;10863:13:::1;::::0;-1:-1:-1;;10863:13:0::1;:::i;:::-;10856:21;::::0;-1:-1:-1;;10856:21:0::1;:::i;:::-;10845:7;:33:::0;10922:14:::1;::::0;10891:9:::1;:46:::0;;-1:-1:-1;;;;;;10891:46:0::1;-1:-1:-1::0;;;;;10922:14:0;;::::1;10891:46:::0;;::::1;::::0;;10975:19:::1;::::0;;-1:-1:-1;;;10975:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;10922:14;10975:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10957:49:0::1;;11007:9;;;;;;;;;-1:-1:-1::0;;;;;11007:9:0::1;-1:-1:-1::0;;;;;11007:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10957:82;::::0;-1:-1:-1;;;;;;10957:82:0::1;::::0;;;;;;-1:-1:-1;;;;;14825:15:1;;;10957:82:0::1;::::0;::::1;14807:34:1::0;11033:4:0::1;14857:18:1::0;;;14850:43;14742:18;;10957:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10948:6;:91:::0;;-1:-1:-1;;;;;;10948:91:0::1;-1:-1:-1::0;;;;;10948:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;11050:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;11050:22:0::1;-1:-1:-1::0;11050:22:0::1;::::0;;11100:4:::1;11083:23:::0;;:8:::1;:23:::0;;;;;11115:9:::1;::::0;;;::::1;11083:43:::0;;;;;;-1:-1:-1;;11083:63:0;;11178:7:::1;::::0;11196:6:::1;::::0;11178:14:::1;::::0;11188:4:::1;11178:14;:::i;:::-;11177:25;;;;:::i;:::-;11167:7;:35:::0;11225:11:::1;::::0;11247:6:::1;::::0;11225:18:::1;::::0;11239:4:::1;11225:18;:::i;:::-;11224:29;;;;:::i;:::-;11213:8;:40:::0;11278:7:::1;::::0;11294:4:::1;::::0;11278:12:::1;::::0;11288:2:::1;11278:12;:::i;:::-;11277:21;;;;:::i;:::-;11264:10;:34:::0;11324:11:::1;::::0;11344:4:::1;::::0;11324:16:::1;::::0;11338:2:::1;11324:16;:::i;:::-;11323:25;;;;:::i;:::-;11309:11;:39:::0;11376:7:::1;::::0;11391:5:::1;::::0;11376:11:::1;::::0;11386:1:::1;11376:11;:::i;:::-;11375:21;;;;:::i;:::-;11359:13;:37:::0;11421:7:::1;::::0;11436:4:::1;::::0;11421:11:::1;::::0;11431:1:::1;11421:11;:::i;:::-;11420:20;;;;:::i;:::-;11407:10;:33:::0;11461:14:::1;::::0;11453:42:::1;::::0;-1:-1:-1;;;;;11461:14:0::1;-1:-1:-1::0;;11453:7:0::1;:42::i;:::-;-1:-1:-1::0;11508:8:0::1;:15:::0;;-1:-1:-1;;11508:15:0::1;11519:4;11508:15:::0;;::::1;::::0;;;11553:7:::1;::::0;;11508:8:::1;11542:7;11739::::0;11766:6;-1:-1:-1;;;;;11766:6:0;;11701:79;11542:7:::1;-1:-1:-1::0;;;;;11534:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11534:16:0;:26;11591:7:::1;11739::::0;11766:6;-1:-1:-1;;;;;11766:6:0;;11701:79;11591:7:::1;11585:4;::::0;11600:7:::1;::::0;11576:32:::1;::::0;1852:25:1;;;-1:-1:-1;;;;;11576:32:0;;::::1;::::0;11585:4;;::::1;::::0;11576:32:::1;::::0;1840:2:1;1825:18;11576:32:0::1;;;;;;;11653:9;::::0;11621:62:::1;::::0;11638:4:::1;::::0;-1:-1:-1;;;;;11653:9:0::1;-1:-1:-1::0;;11621:8:0::1;:62::i;:::-;10107:1586:::0;;;;:::o;14728:539::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;14802:29:::1;14853:9;14802:61;;14874:11;14906:10;-1:-1:-1::0;;;;;14906:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14888:47:0::1;;14944:4;14951:10;-1:-1:-1::0;;;;;14951:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14888:81;::::0;-1:-1:-1;;;;;;14888:81:0::1;::::0;;;;;;-1:-1:-1;;;;;14825:15:1;;;14888:81:0::1;::::0;::::1;14807:34:1::0;14877:15;;14857:18;;;14850:43;14742:18;;14888:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14874:95:::0;-1:-1:-1;;;;;;14984:17:0;::::1;14980:197;;15045:10;-1:-1:-1::0;;;;;15045:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15027:50:0::1;;15086:4;15093:10;-1:-1:-1::0;;;;;15093:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15027:84;::::0;-1:-1:-1;;;;;;15027:84:0::1;::::0;;;;;;-1:-1:-1;;;;;14825:15:1;;;15027:84:0::1;::::0;::::1;14807:34:1::0;14877:15;;14857:18;;;14850:43;14742:18;;15027:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15018:6;:93:::0;;-1:-1:-1;;;;;;15018:93:0::1;-1:-1:-1::0;;;;;15018:93:0;;;::::1;::::0;;;::::1;::::0;;14980:197:::1;;;15153:6;:12:::0;;-1:-1:-1;;;;;;15153:12:0::1;-1:-1:-1::0;;;;;15153:12:0;::::1;;::::0;;14980:197:::1;15187:9;:22:::0;;-1:-1:-1;;;;;;15187:22:0::1;-1:-1:-1::0;;;;;15187:22:0;::::1;;::::0;;15220:39:::1;15237:4;15244:9:::0;-1:-1:-1;;15220:8:0::1;:39::i;12957:75::-:0;12998:13;13022:7;13015:14;;;;;:::i;14498:222::-;188:10;14591:4;14640:22;;;:8;:22;;;;;;;;-1:-1:-1;;;;;14640:31:0;;;;;;;;;;14591:4;;14608:82;;14631:7;;14640:49;;14674:15;;14640:49;:::i;13535:167::-;13613:4;13630:42;188:10;13654:9;13665:6;13630:9;:42::i;19072:130::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19159:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;19159:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19072:130::o;18893:171::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;18970:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18970:32:0::1;-1:-1:-1::0;;;;18970:32:0;;::::1;;::::0;;19018:38:::1;::::0;::::1;::::0;::::1;::::0;18994:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;19018:38:0::1;;;;;;;;18893:171:::0;:::o;17868:324::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;17961:13:::1;18002:7;17988:10;17978:7;;:20;;;;:::i;:::-;17977:32;;;;:::i;:::-;17961:48;;18049:4;18039:7;;:14;;;;:::i;:::-;18029:5;:25;;18021:73;;;;-1:-1:-1::0;;;18021:73:0::1;;;;;;;:::i;:::-;18105:10;:18:::0;;;18149:11:::1;::::0;18177:7;;18149:24:::1;::::0;18163:10;;18149:24:::1;:::i;:::-;18148:36;;;;:::i;:::-;18134:11;:50:::0;-1:-1:-1;;;17868:324:0:o;18499:194::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;18590:13:::1;::::0;-1:-1:-1;;;;;18590:26:0;;::::1;:13:::0;::::1;:26;;18582:58;;;::::0;-1:-1:-1;;;18582:58:0;;15106:2:1;18582:58:0::1;::::0;::::1;15088:21:1::0;15145:2;15125:18;;;15118:30;-1:-1:-1;;;15164:18:1;;;15157:49;15223:18;;18582:58:0::1;14904:343:1::0;18582:58:0::1;18651:13;:34:::0;;-1:-1:-1;;;;;;18651:34:0::1;-1:-1:-1::0;;;;;18651:34:0;;;::::1;::::0;;;::::1;::::0;;18499:194::o;18200:291::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;18402:16:::1;18382;18372:7;;:26;;;;:::i;:::-;18371:47;;;;:::i;:::-;18355:13;:63:::0;18443:7:::1;::::0;18470:13;;18443:23:::1;::::0;18453:13;;18443:23:::1;:::i;:::-;18442:41;;;;:::i;:::-;18429:10;:54:::0;-1:-1:-1;;;;18200:291:0:o;16363:400::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;16486:11:::1;;16475:7;:22;;:62;;;;;16531:6;;16518:9;:19;;16475:62;:105;;;;;16571:9;;16558;:22;;16475:105;16467:132;;;::::0;::::1;;16653:4;16640:9:::0;16618:19:::1;16628:9:::0;16618:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16610:48;;;::::0;::::1;;16669:11;:21:::0;;;;16701:8:::1;:20:::0;16732:11:::1;:23:::0;16363:400::o;29522:201::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;29622:9:::1;29618:98;29641:8;:15;29637:1;:19;29618:98;;;29699:5;29677:6;:19;29684:8;29693:1;29684:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29677:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29677:19:0;:27;;-1:-1:-1;;29677:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29658:3;::::1;::::0;::::1;:::i;:::-;;;;29618:98;;17198:166:::0;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;17288:11:::1;:16:::0;;;;17315:8:::1;:13:::0;17339:12:::1;:17:::0;17198:166::o;18701:186::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;18792:9:::1;::::0;-1:-1:-1;;;;;18792:22:0;;::::1;:9:::0;::::1;:22;;18784:54;;;::::0;-1:-1:-1;;;18784:54:0;;15106:2:1;18784:54:0::1;::::0;::::1;15088:21:1::0;15145:2;15125:18;;;15118:30;-1:-1:-1;;;15164:18:1;;;15157:49;15223:18;;18784:54:0::1;14904:343:1::0;18784:54:0::1;18849:9;:30:::0;;-1:-1:-1;;;;;;18849:30:0::1;-1:-1:-1::0;;;;;18849:30:0;;;::::1;::::0;;;::::1;::::0;;18701:186::o;29732:105::-;9203:6;;-1:-1:-1;;;;;9203:6:0;188:10;9203:22;9195:67;;;;-1:-1:-1;;;9195:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29806:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;29806:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29732:105::o;20772:355::-;-1:-1:-1;;;;;20867:20:0;;20859:77;;;;-1:-1:-1;;;20859:77:0;;15454:2:1;20859:77:0;;;15436:21:1;15493:2;15473:18;;;15466:30;15532:34;15512:18;;;15505:62;-1:-1:-1;;;15583:18:1;;;15576:42;15635:19;;20859:77:0;15252:408:1;20859:77:0;-1:-1:-1;;;;;20955:21:0;;20947:76;;;;-1:-1:-1;;;20947:76:0;;15867:2:1;20947:76:0;;;15849:21:1;15906:2;15886:18;;;15879:30;15945:34;15925:18;;;15918:62;-1:-1:-1;;;15996:18:1;;;15989:40;16046:19;;20947:76:0;15665:406:1;20947:76:0;-1:-1:-1;;;;;21036:16:0;;;;;;;:8;:16;;;;;;;;:25;;;;;;;;;;;;;:34;;;21086:33;;1852:25:1;;;21086:33:0;;1825:18:1;21086:33:0;;;;;;;20772:355;;;:::o;21135:1861::-;21214:4;-1:-1:-1;;;;;21239:18:0;;21231:76;;;;-1:-1:-1;;;21231:76:0;;16278:2:1;21231:76:0;;;16260:21:1;16317:2;16297:18;;;16290:30;16356:34;16336:18;;;16329:62;-1:-1:-1;;;16407:18:1;;;16400:43;16460:19;;21231:76:0;16076:409:1;21231:76:0;-1:-1:-1;;;;;21326:16:0;;21318:72;;;;-1:-1:-1;;;21318:72:0;;16692:2:1;21318:72:0;;;16674:21:1;16731:2;16711:18;;;16704:30;16770:34;16750:18;;;16743:62;-1:-1:-1;;;16821:18:1;;;16814:41;16872:19;;21318:72:0;16490:407:1;21318:72:0;21418:1;21409:6;:10;21401:72;;;;-1:-1:-1;;;21401:72:0;;17104:2:1;21401:72:0;;;17086:21:1;17143:2;17123:18;;;17116:30;17182:34;17162:18;;;17155:62;-1:-1:-1;;;17233:18:1;;;17226:47;17290:19;;21401:72:0;16902:413:1;21401:72:0;-1:-1:-1;;;;;21493:12:0;;;;;;:6;:12;;;;;;;;21492:13;:28;;;;-1:-1:-1;;;;;;21510:10:0;;;;;;:6;:10;;;;;;;;21509:11;21492:28;:51;;;;-1:-1:-1;21532:10:0;21525:18;;;;:6;:18;;;;;;;;21524:19;21492:51;21484:60;;;;;;21558:20;21569:4;21575:2;21558:10;:20::i;:::-;21555:778;;;21599:9;;;;21595:92;;21629:42;;-1:-1:-1;;;21629:42:0;;17522:2:1;21629:42:0;;;17504:21:1;;;17541:18;;;17534:30;17600:34;17580:18;;;17573:62;17652:18;;21629:42:0;17320:356:1;21595:92:0;21705:15;;;;21701:355;;;-1:-1:-1;;;;;21745:13:0;;;;;;:7;:13;;;;;;;;21741:300;;;21807:16;:12;21822:1;21807:16;:::i;:::-;-1:-1:-1;;;;;21790:13:0;;;;;;:9;:13;;;;;;:33;;21782:42;;;;;;-1:-1:-1;;;;;21847:13:0;;;;;;:9;:13;;;;;21863:12;21847:28;;21741:300;;;21951:16;:12;21966:1;21951:16;:::i;:::-;-1:-1:-1;;;;;21932:15:0;;;;;;:9;:15;;;;;;:35;;21924:44;;;;;;-1:-1:-1;;;;;21991:15:0;;;;;;:9;:15;;;;;22009:12;21991:30;;21741:300;22088:7;;22078:6;:17;;22070:70;;;;-1:-1:-1;;;22070:70:0;;17883:2:1;22070:70:0;;;17865:21:1;17922:2;17902:18;;;17895:30;17961:34;17941:18;;;17934:62;-1:-1:-1;;;18012:18:1;;;18005:38;18060:19;;22070:70:0;17681:404:1;22070:70:0;22164:14;;-1:-1:-1;;;;;22158:20:0;;;22164:14;;22158:20;;;;:36;;-1:-1:-1;;;;;;22183:11:0;;;;;;:7;:11;;;;;;;;22182:12;22158:36;22155:167;;;22249:10;;22239:6;22223:13;22233:2;22223:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;22215:91;;;;-1:-1:-1;;;22215:91:0;;18292:2:1;22215:91:0;;;18274:21:1;18331:2;18311:18;;;18304:30;18370:34;18350:18;;;18343:62;-1:-1:-1;;;18421:18:1;;;18414:40;18471:19;;22215:91:0;18090:406:1;22215:91:0;-1:-1:-1;;;;;22376:22:0;;22343:12;22376:22;;;:16;:22;;;;;;22358:4;;22376:22;;;:46;;-1:-1:-1;;;;;;22402:20:0;;;;;;:16;:20;;;;;;;;22376:46;22373:92;;;-1:-1:-1;22448:5:0;22373:92;-1:-1:-1;;;;;22481:11:0;;;;;;:7;:11;;;;;;;;22477:457;;;22514:16;;-1:-1:-1;;;22514:16:0;;;;22513:17;:59;;;;-1:-1:-1;22551:21:0;;-1:-1:-1;;;22551:21:0;;;;22513:59;22509:408;;;22607:28;22638:24;22656:4;22638:9;:24::i;:::-;22607:55;;22709:13;;22685:20;:37;22681:221;;22774:10;;22750:20;:34;22747:77;;-1:-1:-1;22811:10:0;;22747:77;22846:36;22861:20;22846:14;:36::i;:::-;22588:329;22509:408;22952:36;22962:4;22968:2;22972:6;22980:7;22952:9;:36::i;:::-;22945:43;21135:1861;-1:-1:-1;;;;;21135:1861:0:o;28075:161::-;28117:7;28138:15;28155;28174:19;:17;:19::i;:::-;28137:56;;-1:-1:-1;28137:56:0;-1:-1:-1;28211:17:0;28137:56;;28211:17;:::i;:::-;28204:24;;;;28075:161;:::o;20213:281::-;20282:4;11766:6;;-1:-1:-1;;;;;20306:15:0;;;11766:6;;20306:15;;;;:33;;-1:-1:-1;11739:7:0;11766:6;-1:-1:-1;;;;;20326:13:0;;;11766:6;;20326:13;;20306:33;:50;;;;-1:-1:-1;;;;;;20344:12:0;;;;;;:8;:12;;;;;;;;20343:13;20306:50;:69;;;;-1:-1:-1;;;;;;20361:14:0;;;;;;:8;:14;;;;;;;;20360:15;20306:69;:83;;;;-1:-1:-1;20385:4:0;;-1:-1:-1;;;;;20379:10:0;;;20385:4;;20379:10;;20306:83;:103;;;;-1:-1:-1;;;;;;20393:16:0;;;;20306:103;:128;;;;-1:-1:-1;;;;;;20413:21:0;;20429:4;20413:21;;20306:128;:153;;;;-1:-1:-1;;;;;;20439:20:0;;;;;;:16;:20;;;;;;;;20438:21;20306:153;:180;;;;-1:-1:-1;;;;;;;;20464:22:0;;;;;:16;:22;;;;;;;;20463:23;;20213:281::o;23004:1517::-;9077:16;:23;;-1:-1:-1;;;;9077:23:0;-1:-1:-1;;;9077:23:0;;;23112:12:::1;::::0;23094:15:::1;::::0;:30:::1;::::0;23112:12;23094:30:::1;:::i;:::-;23090:61;;23144:7;;23090:61;23161:17;23261:1;23244:12;;23226:15;;:30;;;;:::i;:::-;23206:15;::::0;23183:38:::1;::::0;:20;:38:::1;:::i;:::-;23182:75;;;;:::i;:::-;23181:81;;;;:::i;:::-;23161:101:::0;-1:-1:-1;23275:20:0::1;23298:32;23161:101:::0;23298:20;:32:::1;:::i;:::-;23367:16;::::0;;23381:1:::1;23367:16:::0;;;;;::::1;::::0;;23275:55;;-1:-1:-1;23343:21:0::1;::::0;23367:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23367:16:0::1;23343:40;;23412:4;23394;23399:1;23394:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23394:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23438:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;23438:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23394:7;;23438:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23428:4;23433:1;23428:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23428:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23467:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;23467:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;23542:12;;23467:9:::1;::::0;23585:4;;23612::::1;::::0;23632:15:::1;::::0;23467:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23673:24;23781:1;23764:12;;23746:15;;:30;;;;:::i;:::-;23726:15;::::0;23702:39:::1;::::0;:21:::1;:39;:::i;:::-;23701:76;;;;:::i;:::-;23700:82;;;;:::i;:::-;23673:109:::0;-1:-1:-1;23799:13:0;;23795:349:::1;;23829:9;::::0;24000::::1;::::0;23829:229:::1;::::0;-1:-1:-1;;;23829:229:0;;23906:4:::1;23829:229;::::0;::::1;19835:34:1::0;19885:18;;;19878:34;;;23829:9:0::1;19928:18:1::0;;;19921:34;;;19971:18;;;19964:34;-1:-1:-1;;;;;24000:9:0;;::::1;20014:19:1::0;;;20007:44;24028:15:0::1;20067:19:1::0;;;20060:35;23829:9:0;::::1;::::0;:25:::1;::::0;23862:16;;19769:19:1;;23829:229:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24078:54:0::1;::::0;;20619:25:1;;;20675:2;20660:18;;20653:34;;;20703:18;;;20696:34;;;24078:54:0::1;::::0;-1:-1:-1;20607:2:1;20592:18;24078:54:0::1;;;;;;;23795:349;24193:1;24158:32;24181:9:::0;24158:20;:32:::1;:::i;:::-;:36;24154:360;;;24326:11;::::0;24311:12:::1;::::0;24238:21:::1;::::0;24213::::1;::::0;24296:28:::1;::::0;24238:21;24296:28:::1;:::i;:::-;:42;;;;:::i;:::-;24275:63;;24353:15;24401:8;;24386:12;;24371:13;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24412:9;::::0;:27:::1;::::0;24353:57;;-1:-1:-1;;;;;;24412:9:0::1;::::0;:27;::::1;;;::::0;24353:57;;24412:9:::1;:27:::0;:9;:27;24353:57;24412:9;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24455:13:0::1;::::0;:34:::1;::::0;-1:-1:-1;;;;;24455:13:0;;::::1;::::0;:34;::::1;;;::::0;24478:10;;24455:13:::1;:34:::0;:13;:34;24478:10;24455:13;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24196:318;;;24154:360;23079:1442;;;;9111:1;-1:-1:-1::0;9123:16:0;:24;;-1:-1:-1;;;;9123:24:0;;;23004:1517::o;25460:1258::-;25580:16;;25554:4;;25580:16;;;;;25575:237;;25617:28;25636:4;25642:2;25617:18;:28::i;:::-;25669:16;;;;;;;25668:17;:41;;;;;25689:20;25700:4;25706:2;25689:10;:20::i;:::-;25664:137;;;25734:47;;-1:-1:-1;;;25734:47:0;;20943:2:1;25734:47:0;;;20925:21:1;20982:2;20962:18;;;20955:30;21021:34;21001:18;;;20994:62;-1:-1:-1;;;21072:18:1;;;21065:35;21117:19;;25734:47:0;20741:401:1;25664:137:0;25832:25;25860:38;25871:4;25877:2;25881:7;25890;25860:10;:38::i;:::-;25943:14;;;;-1:-1:-1;;;;;25927:13:0;;;;;;:7;:13;;;;;;25832:66;;-1:-1:-1;25927:30:0;;;:::i;:::-;-1:-1:-1;;;;;25911:13:0;;;;;;;:7;:13;;;;;;:46;;;;25996:22;;;;25982:11;;;;;;;;;;:36;;25996:22;25982:36;:::i;:::-;-1:-1:-1;;;;;25968:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;26035:15;;;;;:9;:15;;;;;;;:33;;;;-1:-1:-1;;;;;;26055:13:0;;;;;;:9;:13;;;;;;;;26054:14;26035:33;26031:404;;;-1:-1:-1;;;;;26101:13:0;;;;;;:7;:13;;;;;;:23;;26117:7;;26101:23;:::i;:::-;-1:-1:-1;;;;;26085:13:0;;;;;;:7;:13;;;;;:39;26031:404;;;-1:-1:-1;;;;;26147:15:0;;;;;;:9;:15;;;;;;;;26146:16;:33;;;;-1:-1:-1;;;;;;26166:13:0;;;;;;:9;:13;;;;;;;;26146:33;26142:293;;;26224:22;;-1:-1:-1;;;;;26210:11:0;;26224:22;26210:11;;;:7;:11;;;;;;:36;;26224:22;26210:36;:::i;:::-;-1:-1:-1;;;;;26196:11:0;;;;;;:7;:11;;;;;:50;26142:293;;;-1:-1:-1;;;;;26270:15:0;;;;;;:9;:15;;;;;;;;:32;;;;-1:-1:-1;;;;;;26289:13:0;;;;;;:9;:13;;;;;;;;26270:32;26266:169;;;-1:-1:-1;;;;;26335:13:0;;;;;;:7;:13;;;;;;:23;;26351:7;;26335:23;:::i;:::-;-1:-1:-1;;;;;26319:13:0;;;;;;;:7;:13;;;;;;:39;;;;26401:22;;26387:11;;;;;;;;;;:36;;26401:22;26387:36;:::i;:::-;-1:-1:-1;;;;;26373:11:0;;;;;;:7;:11;;;;;:50;26266:169;26451:17;;;;:21;26447:79;;26487:39;26502:4;26508:6;:17;;;26487:14;:39::i;:::-;26555:1;26541:6;:11;;;:15;:34;;;;26574:1;26560:6;:11;;;:15;26541:34;26537:91;;;26590:38;26603:6;:11;;;26616:6;:11;;;26590:12;:38::i;:::-;26661:2;-1:-1:-1;;;;;26646:42:0;26655:4;-1:-1:-1;;;;;26646:42:0;;26665:6;:22;;;26646:42;;;;1852:25:1;;1840:2;1825:18;;1706:177;26646:42:0;;;;;;;;-1:-1:-1;26706:4:0;;25460:1258;-1:-1:-1;;;;;25460:1258:0:o;28244:547::-;28342:7;;28378;;28295;;;;;28396:283;28420:9;:16;28416:20;;28396:283;;;28486:7;28462;:21;28470:9;28480:1;28470:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28470:12:0;28462:21;;;;;;;;;;;;;:31;;:66;;;28521:7;28497;:21;28505:9;28515:1;28505:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28505:12:0;28497:21;;;;;;;;;;;;;:31;28462:66;28458:97;;;28538:7;;28547;;28530:25;;;;;;;28244:547;;:::o;28458:97::-;28590:7;:21;28598:9;28608:1;28598:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28598:12:0;28590:21;;;;;;;;;;;;;28580:31;;:7;:31;:::i;:::-;28570:41;;28646:7;:21;28654:9;28664:1;28654:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28654:12:0;28646:21;;;;;;;;;;;;;28636:31;;:7;:31;:::i;:::-;28626:41;-1:-1:-1;28438:3:0;;;;:::i;:::-;;;;28396:283;;;;28713:7;;28703;;:17;;;;:::i;:::-;28693:7;:27;28689:58;;;28730:7;;28739;;28722:25;;;;;;28244:547;;:::o;28689:58::-;28766:7;;28775;;-1:-1:-1;28244:547:0;-1:-1:-1;28244:547:0:o;24537:422::-;24620:16;;;;;;;24619:17;24611:57;;;;-1:-1:-1;;;24611:57:0;;21349:2:1;24611:57:0;;;21331:21:1;21388:2;21368:18;;;21361:30;21427:29;21407:18;;;21400:57;21474:18;;24611:57:0;21147:351:1;24611:57:0;24684:20;24695:4;24701:2;24684:10;:20::i;:::-;24683:21;:37;;;;-1:-1:-1;24714:6:0;;-1:-1:-1;;;;;24708:12:0;;;24714:6;;24708:12;24683:37;24679:273;;;-1:-1:-1;;;;;24737:14:0;;;;;;:8;:14;;;;;;;:21;;-1:-1:-1;;24737:21:0;24754:4;24737:21;;;;;;24773:16;:23;;-1:-1:-1;;24773:23:0;24737:21;24773:23;;;24826:15;24811:12;:30;24858:21;:28;;-1:-1:-1;;;;24858:28:0;-1:-1:-1;;;24858:28:0;;;24906:34;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;;1514:187;24906:34:0;;;;;;;;24537:422;;:::o;26726:1341::-;26821:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26821:18:0;26852:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26852:25:0;26888:19;26910:10;:8;:10::i;:::-;26888:32;-1:-1:-1;26950:21:0;26888:32;26950:7;:21;:::i;:::-;26933:14;;;:38;26984:948;;;;-1:-1:-1;;;;;27015:11:0;;;;;;:7;:11;;;;;;;;27011:455;;;27059:11;;27047:9;:23;27096:8;;27089:4;:15;27133:11;;27123:7;:21;27011:455;;;-1:-1:-1;;;;;27170:13:0;;;;;;:7;:13;;;;;;;;27166:300;;;27216:10;;27204:9;:22;27252:7;;27245:4;:14;27288:10;;27278:7;:20;27166:300;;;27351:17;;27339:9;:29;27394:12;;27387:4;:19;27435:15;;27425:7;:25;27166:300;27520:16;;27507:9;;27497:19;;:7;:19;:::i;:::-;27496:40;;;;:::i;:::-;27482:11;;;:54;27602:16;;27590:7;;27583:4;;:14;;27590:7;27583:14;:::i;:::-;27572:26;;:7;:26;:::i;:::-;27571:47;;;;:::i;:::-;27551:17;;;:67;;;27669:11;;;;:31;;27551:67;27669:31;:::i;:::-;27658:43;;:7;:43;:::i;:::-;27633:68;;27732:11;;;;:25;;27746:11;;27732:25;:::i;:::-;27718:11;;;:39;26984:948;;;27804:1;27790:11;;;:15;;;27820:17;;;:21;;;27856:32;;;27905:11;;;:15;26984:948;28022:11;28002:6;:17;;;:31;;;;:::i;:::-;27987:6;:11;;;:47;;;;:::i;:::-;27969:6;:14;;;:66;;;;:::i;:::-;27944:22;;;:91;-1:-1:-1;27944:22:0;26726:1341;-1:-1:-1;;;;;26726:1341:0:o;29093:421::-;29173:19;29196:10;:8;:10::i;:::-;29173:33;-1:-1:-1;29217:18:0;29238:24;29173:33;29238:10;:24;:::i;:::-;29314:4;29298:22;;;;:7;:22;;;;;;29217:45;;-1:-1:-1;29298:35:0;;29217:45;;29298:35;:::i;:::-;29289:4;29273:22;;;;:7;:22;;;;;;;;:60;;;;29347:9;:24;;;;;;29344:102;;;29427:4;29411:22;;;;:7;:22;;;;;;:35;;29436:10;;29411:35;:::i;:::-;29402:4;29386:22;;;;:7;:22;;;;;:60;29344:102;29462:43;;1852:25:1;;;29487:4:0;;-1:-1:-1;;;;;29462:43:0;;;;;1840:2:1;1825:18;29462:43:0;;;;;;;29162:352;;29093:421;;:::o;28803:143::-;28893:4;28883:7;;:14;;;;:::i;:::-;28873:7;:24;28921:10;;:17;;28934:4;;28921:17;:::i;:::-;28908:10;:30;-1:-1:-1;;28803:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1194:315;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1888:456::-;1965:6;1973;1981;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;2089:9;2076:23;2108:31;2133:5;2108:31;:::i;:::-;2158:5;-1:-1:-1;2215:2:1;2200:18;;2187:32;2228:33;2187:32;2228:33;:::i;:::-;1888:456;;2280:7;;-1:-1:-1;;;2334:2:1;2319:18;;;;2306:32;;1888:456::o;2349:180::-;2408:6;2461:2;2449:9;2440:7;2436:23;2432:32;2429:52;;;2477:1;2474;2467:12;2429:52;-1:-1:-1;2500:23:1;;2349:180;-1:-1:-1;2349:180:1:o;2723:248::-;2791:6;2799;2852:2;2840:9;2831:7;2827:23;2823:32;2820:52;;;2868:1;2865;2858:12;2820:52;-1:-1:-1;;2891:23:1;;;2961:2;2946:18;;;2933:32;;-1:-1:-1;2723:248:1:o;2976:247::-;3035:6;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;3143:9;3130:23;3162:31;3187:5;3162:31;:::i;3228:160::-;3293:20;;3349:13;;3342:21;3332:32;;3322:60;;3378:1;3375;3368:12;3322:60;3228:160;;;:::o;3393:315::-;3458:6;3466;3519:2;3507:9;3498:7;3494:23;3490:32;3487:52;;;3535:1;3532;3525:12;3487:52;3574:9;3561:23;3593:31;3618:5;3593:31;:::i;:::-;3643:5;-1:-1:-1;3667:35:1;3698:2;3683:18;;3667:35;:::i;:::-;3657:45;;3393:315;;;;;:::o;3713:316::-;3790:6;3798;3806;3859:2;3847:9;3838:7;3834:23;3830:32;3827:52;;;3875:1;3872;3865:12;3827:52;-1:-1:-1;;3898:23:1;;;3968:2;3953:18;;3940:32;;-1:-1:-1;4019:2:1;4004:18;;;3991:32;;3713:316;-1:-1:-1;3713:316:1:o;4034:127::-;4095:10;4090:3;4086:20;4083:1;4076:31;4126:4;4123:1;4116:15;4150:4;4147:1;4140:15;4166:275;4237:2;4231:9;4302:2;4283:13;;-1:-1:-1;;4279:27:1;4267:40;;4337:18;4322:34;;4358:22;;;4319:62;4316:88;;;4384:18;;:::i;:::-;4420:2;4413:22;4166:275;;-1:-1:-1;4166:275:1:o;4446:531::-;4489:5;4542:3;4535:4;4527:6;4523:17;4519:27;4509:55;;4560:1;4557;4550:12;4509:55;4596:6;4583:20;4622:18;4618:2;4615:26;4612:52;;;4644:18;;:::i;:::-;4688:55;4731:2;4712:13;;-1:-1:-1;;4708:27:1;4737:4;4704:38;4688:55;:::i;:::-;4768:2;4759:7;4752:19;4814:3;4807:4;4802:2;4794:6;4790:15;4786:26;4783:35;4780:55;;;4831:1;4828;4821:12;4780:55;4896:2;4889:4;4881:6;4877:17;4870:4;4861:7;4857:18;4844:55;4944:1;4919:16;;;4937:4;4915:27;4908:38;;;;4923:7;4446:531;-1:-1:-1;;;4446:531:1:o;4982:836::-;5104:6;5112;5120;5128;5181:3;5169:9;5160:7;5156:23;5152:33;5149:53;;;5198:1;5195;5188:12;5149:53;5237:9;5224:23;5256:31;5281:5;5256:31;:::i;:::-;5306:5;-1:-1:-1;5363:2:1;5348:18;;5335:32;5376:33;5335:32;5376:33;:::i;:::-;5428:7;-1:-1:-1;5486:2:1;5471:18;;5458:32;5509:18;5539:14;;;5536:34;;;5566:1;5563;5556:12;5536:34;5589:50;5631:7;5622:6;5611:9;5607:22;5589:50;:::i;:::-;5579:60;;5692:2;5681:9;5677:18;5664:32;5648:48;;5721:2;5711:8;5708:16;5705:36;;;5737:1;5734;5727:12;5705:36;;5760:52;5804:7;5793:8;5782:9;5778:24;5760:52;:::i;:::-;5750:62;;;4982:836;;;;;;;:::o;5823:180::-;5879:6;5932:2;5920:9;5911:7;5907:23;5903:32;5900:52;;;5948:1;5945;5938:12;5900:52;5971:26;5987:9;5971:26;:::i;6268:388::-;6336:6;6344;6397:2;6385:9;6376:7;6372:23;6368:32;6365:52;;;6413:1;6410;6403:12;6365:52;6452:9;6439:23;6471:31;6496:5;6471:31;:::i;:::-;6521:5;-1:-1:-1;6578:2:1;6563:18;;6550:32;6591:33;6550:32;6591:33;:::i;:::-;6643:7;6633:17;;;6268:388;;;;;:::o;6661:385::-;6747:6;6755;6763;6771;6824:3;6812:9;6803:7;6799:23;6795:33;6792:53;;;6841:1;6838;6831:12;6792:53;-1:-1:-1;;6864:23:1;;;6934:2;6919:18;;6906:32;;-1:-1:-1;6985:2:1;6970:18;;6957:32;;7036:2;7021:18;7008:32;;-1:-1:-1;6661:385:1;-1:-1:-1;6661:385:1:o;7051:1091::-;7141:6;7149;7202:2;7190:9;7181:7;7177:23;7173:32;7170:52;;;7218:1;7215;7208:12;7170:52;7258:9;7245:23;7287:18;7328:2;7320:6;7317:14;7314:34;;;7344:1;7341;7334:12;7314:34;7382:6;7371:9;7367:22;7357:32;;7427:7;7420:4;7416:2;7412:13;7408:27;7398:55;;7449:1;7446;7439:12;7398:55;7485:2;7472:16;7507:4;7530:2;7526;7523:10;7520:36;;;7536:18;;:::i;:::-;7582:2;7579:1;7575:10;7565:20;;7605:28;7629:2;7625;7621:11;7605:28;:::i;:::-;7667:15;;;7737:11;;;7733:20;;;7698:12;;;;7765:19;;;7762:39;;;7797:1;7794;7787:12;7762:39;7821:11;;;;7841:217;7857:6;7852:3;7849:15;7841:217;;;7937:3;7924:17;7911:30;;7954:31;7979:5;7954:31;:::i;:::-;7998:18;;;7874:12;;;;8036;;;;7841:217;;;8077:5;-1:-1:-1;8101:35:1;;-1:-1:-1;8117:18:1;;;8101:35;:::i;:::-;8091:45;;;;;;7051:1091;;;;;:::o;8147:380::-;8226:1;8222:12;;;;8269;;;8290:61;;8344:4;8336:6;8332:17;8322:27;;8290:61;8397:2;8389:6;8386:14;8366:18;8363:38;8360:161;;;8443:10;8438:3;8434:20;8431:1;8424:31;8478:4;8475:1;8468:15;8506:4;8503:1;8496:15;8360:161;;8147:380;;;:::o;8532:356::-;8734:2;8716:21;;;8753:18;;;8746:30;8812:34;8807:2;8792:18;;8785:62;8879:2;8864:18;;8532:356::o;9249:127::-;9310:10;9305:3;9301:20;9298:1;9291:31;9341:4;9338:1;9331:15;9365:4;9362:1;9355:15;9381:125;9421:4;9449:1;9446;9443:8;9440:34;;;9454:18;;:::i;:::-;-1:-1:-1;9491:9:1;;9381:125::o;9930:127::-;9991:10;9986:3;9982:20;9979:1;9972:31;10022:4;10019:1;10012:15;10046:4;10043:1;10036:15;10062:120;10102:1;10128;10118:35;;10133:18;;:::i;:::-;-1:-1:-1;10167:9:1;;10062:120::o;10187:128::-;10227:3;10258:1;10254:6;10251:1;10248:13;10245:39;;;10264:18;;:::i;:::-;-1:-1:-1;10300:9:1;;10187:128::o;10320:168::-;10360:7;10426:1;10422;10418:6;10414:14;10411:1;10408:21;10403:1;10396:9;10389:17;10385:45;10382:71;;;10433:18;;:::i;:::-;-1:-1:-1;10473:9:1;;10320:168::o;10493:399::-;10695:2;10677:21;;;10734:2;10714:18;;;10707:30;10773:34;10768:2;10753:18;;10746:62;-1:-1:-1;;;10839:2:1;10824:18;;10817:33;10882:3;10867:19;;10493:399::o;10897:425::-;11099:2;11081:21;;;11138:2;11118:18;;;11111:30;11177:34;11172:2;11157:18;;11150:62;11248:31;11243:2;11228:18;;11221:59;11312:3;11297:19;;10897:425::o;12041:127::-;12102:10;12097:3;12093:20;12090:1;12083:31;12133:4;12130:1;12123:15;12157:4;12154:1;12147:15;12173:127;12234:10;12229:3;12225:20;12222:1;12215:31;12265:4;12262:1;12255:15;12289:4;12286:1;12279:15;12305:135;12344:3;-1:-1:-1;;12365:17:1;;12362:43;;;12385:18;;:::i;:::-;-1:-1:-1;12432:1:1;12421:13;;12305:135::o;12848:422::-;12937:1;12980:5;12937:1;12994:270;13015:7;13005:8;13002:21;12994:270;;;13074:4;13070:1;13066:6;13062:17;13056:4;13053:27;13050:53;;;13083:18;;:::i;:::-;13133:7;13123:8;13119:22;13116:55;;;13153:16;;;;13116:55;13232:22;;;;13192:15;;;;12994:270;;;12998:3;12848:422;;;;;:::o;13275:806::-;13324:5;13354:8;13344:80;;-1:-1:-1;13395:1:1;13409:5;;13344:80;13443:4;13433:76;;-1:-1:-1;13480:1:1;13494:5;;13433:76;13525:4;13543:1;13538:59;;;;13611:1;13606:130;;;;13518:218;;13538:59;13568:1;13559:10;;13582:5;;;13606:130;13643:3;13633:8;13630:17;13627:43;;;13650:18;;:::i;:::-;-1:-1:-1;;13706:1:1;13692:16;;13721:5;;13518:218;;13820:2;13810:8;13807:16;13801:3;13795:4;13792:13;13788:36;13782:2;13772:8;13769:16;13764:2;13758:4;13755:12;13751:35;13748:77;13745:159;;;-1:-1:-1;13857:19:1;;;13889:5;;13745:159;13936:34;13961:8;13955:4;13936:34;:::i;:::-;14006:6;14002:1;13998:6;13994:19;13985:7;13982:32;13979:58;;;14017:18;;:::i;:::-;14055:20;;13275:806;-1:-1:-1;;;13275:806:1:o;14086:131::-;14146:5;14175:36;14202:8;14196:4;14175:36;:::i;14222:112::-;14254:1;14280;14270:35;;14285:18;;:::i;:::-;-1:-1:-1;14319:9:1;;14222:112::o;14339:251::-;14409:6;14462:2;14450:9;14441:7;14437:23;14433:32;14430:52;;;14478:1;14475;14468:12;14430:52;14510:9;14504:16;14529:31;14554:5;14529:31;:::i;18501:980::-;18763:4;18811:3;18800:9;18796:19;18842:6;18831:9;18824:25;18868:2;18906:6;18901:2;18890:9;18886:18;18879:34;18949:3;18944:2;18933:9;18929:18;18922:31;18973:6;19008;19002:13;19039:6;19031;19024:22;19077:3;19066:9;19062:19;19055:26;;19116:2;19108:6;19104:15;19090:29;;19137:1;19147:195;19161:6;19158:1;19155:13;19147:195;;;19226:13;;-1:-1:-1;;;;;19222:39:1;19210:52;;19317:15;;;;19282:12;;;;19258:1;19176:9;19147:195;;;-1:-1:-1;;;;;;;19398:32:1;;;;19393:2;19378:18;;19371:60;-1:-1:-1;;;19462:3:1;19447:19;19440:35;19359:3;18501:980;-1:-1:-1;;;18501:980:1:o;20106:306::-;20194:6;20202;20210;20263:2;20251:9;20242:7;20238:23;20234:32;20231:52;;;20279:1;20276;20269:12;20231:52;20308:9;20302:16;20292:26;;20358:2;20347:9;20343:18;20337:25;20327:35;;20402:2;20391:9;20387:18;20381:25;20371:35;;20106:306;;;;;:::o

Swarm Source

ipfs://0f4ea0b725bafd5d8e01dceb16f169013845285df05a34d1974d86f17cb05503

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.