ETH Price: $2,379.96 (+1.63%)

Token

Siege Protocol (SIEGE)
 

Overview

Max Total Supply

100,000,000,000 SIEGE

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 SIEGE

Value
$0.00
0xc011e2ca016e1307a576548a11ae48710195fa74
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SiegeProtocol

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-06
*/

/**
Website: https://siegeprotocol.xyz/

Telegram: https://t.me/siegeprotocol

X Twitter: https://twitter.com/siegeprotocol

Gitbook: https://siege-protocol.gitbook.io/siegeprotocol/
*/

// SPDX-License-Identifier: NOLICENSE

pragma solidity ^0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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


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

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

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

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

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


 contract SiegeProtocol is Context, IERC20, Ownable {
    using Address for address payable;
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public allowedTransfer;
    mapping (address => bool) private _isBlacklisted;

    address[] private _excluded;

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

    IRouter public router;
    address public pair;

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

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

    uint256 public swapTokensAtAmount = 500000000 * 10**9;
    uint256 public maxBuyLimit = 1500000000 * 10**9;
    uint256 public maxSellLimit = 1500000000 * 10**9;
    uint256 public maxWalletLimit = 1500000000 * 10**9;
    
    uint256 public genesis_block;
    
    address public marketingWallet = 0xb5f02C744713b44A771c4F8CAc2169851C2B55d3;
    address public RewardWallet = 0x2B694Ec86175a7dAEE189b359cea3E448051ef64;
    address public TeamWallet = 0xb5f02C744713b44A771c4F8CAc2169851C2B55d3;

    string private constant _name = "Siege Protocol";
    string private constant _symbol = "SIEGE";

    struct Taxes {
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity; 
        uint256 Reward;
        uint256 team;
    }

    Taxes public taxes = Taxes(0, 32, 0, 3, 0);
    Taxes public sellTaxes = Taxes(0, 32, 0, 3, 0);

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

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rReward;
      uint256 rTeam;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tReward;
      uint256 tTeam;
    }

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

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

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

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

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

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

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

        return true;
    }

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

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

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

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

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

    function setTradingStatus(bool state) external onlyOwner{
        tradingEnabled = state;
        swapEnabled = state;
        if(state == true && genesis_block == 0) genesis_block = block.number;
    }

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

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

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

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

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

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

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

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;
    }
    
    function _takeReward(uint256 rReward, uint256 tReward) private {
        totFeesPaid.Reward +=tReward;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tReward;
        }
        _rOwned[address(this)] +=rReward;
    }

    function _takeTeam(uint256 rTeam, uint256 tTeam) private {
        totFeesPaid.team +=tTeam;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTeam;
        }
        _rOwned[address(this)] +=rTeam;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
    to_return = _getTValues(tAmount, takeFee, isSell);
    (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rMarketing, to_return.rLiquidity, to_return.rTeam) = _getRValues1(to_return, tAmount, takeFee, _getRate());
    (to_return.rReward) = _getRValues2(to_return, takeFee, _getRate());
    return to_return;
}

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

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        Taxes memory temp;
        if(isSell) temp = sellTaxes;
        else temp = taxes;
        
        s.tRfi = tAmount*temp.rfi/100;
        s.tMarketing = tAmount*temp.marketing/100;
        s.tLiquidity = tAmount*temp.liquidity/100;
        s.tReward = tAmount*temp.Reward/100;
        s.tTeam = tAmount*temp.team/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tReward-s.tTeam;
        return s;
    }

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

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

        rRfi = s.tRfi * currentRate;
        rMarketing = s.tMarketing * currentRate;
        rLiquidity = s.tLiquidity * currentRate;
        uint256 rReward = s.tReward * currentRate;
        rTeam = s.tTeam * currentRate;
        rTransferAmount = rAmount - rRfi - rMarketing - rLiquidity - rReward - rTeam;
        return (rAmount, rTransferAmount, rRfi, rMarketing, rLiquidity, rTeam);
    }
    
    function _getRValues2(valuesFromGetValues memory s, bool takeFee, uint256 currentRate) private pure returns (uint256 rReward) {
        if (!takeFee) {
            return (0);
        }

        rReward = s.tReward * currentRate;
        return (rReward);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

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

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
        if (!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
        swapAndLiquify(swapTokensAtAmount, to == pair ? sellTaxes : taxes);
        }

        bool takeFee = true;
        bool isSell = false;
        if (swapping || _isExcludedFromFee[from] || _isExcludedFromFee[to]) {
        takeFee = false;
        }
        if (to == pair) {
            isSell = true;
        }

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


    // this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSell) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);

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

        _rOwned[sender] = _rOwned[sender] - s.rAmount;
        _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;

        if (s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if (s.rLiquidity > 0 || s.tLiquidity > 0) {
            _takeLiquidity(s.rLiquidity, s.tLiquidity);
           emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tReward + s.tTeam);
        }
        if (s.rMarketing > 0 || s.tMarketing > 0) _takeMarketing(s.rMarketing, s.tMarketing);
        if (s.rReward > 0 || s.tReward > 0) _takeReward(s.rReward, s.tReward);
        if (s.tTeam > 0) _transfer(sender, TeamWallet, s.tTeam); // Transfer tokens to the team wallet
        
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

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

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

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

        if (ethToAddLiquidityWith > 0) {
         addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        uint256 marketingAmt = unitBalance * 2 * temp.marketing;
        if (marketingAmt > 0) {
           payable(marketingWallet).sendValue(marketingAmt);
        }
        uint256 RewardAmt = unitBalance * 2 * temp.Reward;
        if (RewardAmt > 0) {
            payable(RewardWallet).sendValue(RewardAmt);
        }
        uint256 teamAmt = unitBalance * 2 * temp.team;
     if (teamAmt > 0) {
            payable(TeamWallet).sendValue(teamAmt);  // Transfer ETH to the team wallet
        }
    }

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

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

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function airdropTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner{
        require(accounts.length == amounts.length, "Arrays must have same size");
        for(uint256 i = 0; i < accounts.length; i++){
            _tokenTransfer(msg.sender, accounts[i], amounts[i], false, false);
        }
    }
    
    function bulkExcludeFee(address[] memory accounts, bool state) external onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFee[accounts[i]] = state;
        }
    }

    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updateRewardWallet(address newWallet) external onlyOwner{
        RewardWallet = newWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner{
        TeamWallet = newWallet;
    }

    
    function updateCooldown(bool state, uint256 time) external onlyOwner{
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
    }

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

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

    function manualSell(uint256 tokenAmount) external onlyOwner {
      require(tokenAmount <= balanceOf(address(this)), "Not enough tokens in contract to sell");
      swapTokensForETH(tokenAmount);
    }
    
    //Use this in case ETH are sent to the contract by mistake
    function rescueETH(uint256 weiAmount) external onlyOwner{
        require(address(this).balance >= weiAmount, "insufficient ETH balance");
        payable(msg.sender).transfer(weiAmount);
    }
    

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

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"RewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Reward","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_Reward","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_Reward","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Reward","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"Reward","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805461ffff1916610101178155600b805460ff191690556000600c556200002f90600a620009f8565b620000409064174876e80062000ab9565b600f819055620000539060001962000b13565b620000619060001962000adb565b6010556706f05b59d3b200006011556714d1120d7b16000060128190556013819055601455601680546001600160a01b031990811673b5f02c744713b44a771c4f8cac2169851c2b55d3908117909255601780548216732b694ec86175a7daee189b359cea3e448051ef641790556018805490911690911790556040805160a08082018352600080835260208084018190528385018290526003606080860182905260809586018490526019849055601a839055601b849055601c829055601d8490558651948501875283855284830183905295840183905294830185905291909201829052601e829055601f8190558190556021919091556022553480156200016a57600080fd5b50620001763362000543565b600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051600091839163c45a015591600480820192602092909190829003018186803b158015620001db57600080fd5b505afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021691906200096d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025f57600080fd5b505afa15801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a91906200096d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e357600080fd5b505af1158015620002f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031e91906200096d565b600d80546001600160a01b038086166001600160a01b031992831617909255600e805492841692909116821790559091506200035a9062000593565b60105460016000620003746000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120939093553083526004918290528220805460ff1916600190811790915591620003c36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560165482168152600484528281208054861660019081179091556017548316825283822080548716821790556018549092168152828120805486168317905530815260069384905291822080549094168117909355620004596000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526006909352818320805485166001908117909155601654821684528284208054861682179055601754821684528284208054861682179055601854909116835291208054909216179055620004eb6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f546040516200053391815260200190565b60405180910390a3505062000b6c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156200065e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401620005ea565b6001600160a01b03811660009081526001602052604090205415620006bb576001600160a01b038116600090815260016020526040902054620006a19062000721565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b60006010548211156200078a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005ea565b600062000796620007ab565b9050620007a4818462000998565b9392505050565b60008080620007b9620007d1565b9092509050620007ca818362000998565b9250505090565b601054600f546000918291825b600854811015620009395782600160006008848154811062000804576200080462000b56565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200087357508160026000600884815481106200084c576200084c62000b56565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200088a57601054600f54945094505050509091565b6001600060088381548110620008a457620008a462000b56565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620008d5908462000adb565b92506002600060088381548110620008f157620008f162000b56565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000922908362000adb565b915080620009308162000af5565b915050620007de565b50600f546010546200094c919062000998565b8210156200096457601054600f549350935050509091565b90939092509050565b6000602082840312156200098057600080fd5b81516001600160a01b0381168114620007a457600080fd5b600082620009aa57620009aa62000b40565b500490565b600181815b80851115620009f0578160001904821115620009d457620009d462000b2a565b80851615620009e257918102915b93841c9390800290620009b4565b509250929050565b6000620007a460ff84168360008262000a145750600162000ab3565b8162000a235750600062000ab3565b816001811462000a3c576002811462000a475762000a67565b600191505062000ab3565b60ff84111562000a5b5762000a5b62000b2a565b50506001821b62000ab3565b5060208310610133831016604e8410600b841016171562000a8c575081810a62000ab3565b62000a988383620009af565b806000190482111562000aaf5762000aaf62000b2a565b0290505b92915050565b600081600019048311821515161562000ad65762000ad662000b2a565b500290565b60008282101562000af05762000af062000b2a565b500390565b600060001982141562000b0c5762000b0c62000b2a565b5060010190565b60008262000b255762000b2562000b40565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613ace8062000b7c6000396000f3fe60806040526004361061037a5760003560e01c8063715018a6116101d1578063aacebbe311610102578063dd62ed3e116100a0578063ee36e3591161006f578063ee36e35914610ad0578063f2fde38b14610aea578063f66895a314610b0a578063f887ea4014610b3157600080fd5b8063dd62ed3e14610a34578063e2f4560514610a7a578063e517f2b914610a90578063ea2f0b3714610ab057600080fd5b8063cc600f91116100dc578063cc600f91146109be578063d257b34f146109de578063d2ce0db2146109fe578063d8672e5114610a1457600080fd5b8063aacebbe31461095e578063b5c571451461097e578063c791fc541461099e57600080fd5b8063924de9b71161016f5780639e252f00116101495780639e252f00146108de578063a457c2d7146108fe578063a8aa1b311461091e578063a9059cbb1461093e57600080fd5b8063924de9b71461086957806395d89b41146108895780639ba5e4d5146108b757600080fd5b80637cb332bb116101ab5780637cb332bb146107d257806388f82020146107f25780638da5cb5b1461082b5780638e2839ff1461084957600080fd5b8063715018a61461074e578063728f8eea1461076357806375f0a874146107b257600080fd5b80634549b039116102ab578063652e2f04116102495780636aa5b37f116102235780636aa5b37f146106d95780636ddd1713146106ef578063706f69371461070e57806370a082311461072e57600080fd5b8063652e2f041461068d57806366a88d96146106a3578063677a8870146106b957600080fd5b80635342acb4116102855780635342acb4146105e457806359759f611461061d5780635fcefa421461063d57806362695eae1461065d57600080fd5b80634549b0391461058a5780634ada218b146105aa57806352390c02146105c457600080fd5b80632d838119116103185780633685d419116102f25780633685d4191461050a578063379ba1d91461052a578063395093511461054a578063437823ec1461056a57600080fd5b80632d83811914610496578063313ce567146104b6578063361ca077146104d257600080fd5b806318160ddd1161035457806318160ddd1461042157806323b872dd14610440578063274a533c146104605780632d4efa471461047657600080fd5b806306fdde0314610386578063095ea7b3146103cf5780630d65df9b146103ff57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5060408051808201909152600e81526d14da5959d948141c9bdd1bd8dbdb60921b60208201525b6040516103c6919061371d565b60405180910390f35b3480156103db57600080fd5b506103ef6103ea3660046134c7565b610b51565b60405190151581526020016103c6565b34801561040b57600080fd5b5061041f61041a366004613458565b610bb9565b005b34801561042d57600080fd5b50600f545b6040519081526020016103c6565b34801561044c57600080fd5b506103ef61045b366004613458565b610c6b565b34801561046c57600080fd5b5061043260155481565b34801561048257600080fd5b5061041f610491366004613654565b610d65565b3480156104a257600080fd5b506104326104b1366004613654565b610e01565b3480156104c257600080fd5b50604051600981526020016103c6565b3480156104de57600080fd5b506017546104f2906001600160a01b031681565b6040516001600160a01b0390911681526020016103c6565b34801561051657600080fd5b5061041f6105253660046133e5565b610e85565b34801561053657600080fd5b5061041f6105453660046135fc565b61103c565b34801561055657600080fd5b506103ef6105653660046134c7565b6110a1565b34801561057657600080fd5b5061041f6105853660046133e5565b611121565b34801561059657600080fd5b506104326105a536600461366d565b61116f565b3480156105b657600080fd5b506009546103ef9060ff1681565b3480156105d057600080fd5b5061041f6105df3660046133e5565b611203565b3480156105f057600080fd5b506103ef6105ff3660046133e5565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062957600080fd5b5061041f610638366004613692565b611356565b34801561064957600080fd5b5061041f6106583660046136e2565b6113b6565b34801561066957600080fd5b506103ef6106783660046133e5565b60066020526000908152604090205460ff1681565b34801561069957600080fd5b5061043260135481565b3480156106af57600080fd5b5061043260145481565b3480156106c557600080fd5b506018546104f2906001600160a01b031681565b3480156106e557600080fd5b5061043260125481565b3480156106fb57600080fd5b506009546103ef90610100900460ff1681565b34801561071a57600080fd5b5061041f6107293660046134f3565b61144e565b34801561073a57600080fd5b506104326107493660046133e5565b61152c565b34801561075a57600080fd5b5061041f61158b565b34801561076f57600080fd5b50601954601a54601b54601c54601d5461078a949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c6565b3480156107be57600080fd5b506016546104f2906001600160a01b031681565b3480156107de57600080fd5b5061041f6107ed3660046133e5565b6115c1565b3480156107fe57600080fd5b506103ef61080d3660046133e5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083757600080fd5b506000546001600160a01b03166104f2565b34801561085557600080fd5b5061041f6108643660046135b5565b61160d565b34801561087557600080fd5b5061041f6108843660046135fc565b61169e565b34801561089557600080fd5b50604080518082019091526005815264534945474560d81b60208201526103b9565b3480156108c357600080fd5b5060235460245460255460265460275461078a949392919085565b3480156108ea57600080fd5b5061041f6108f9366004613654565b6116e2565b34801561090a57600080fd5b506103ef6109193660046134c7565b611789565b34801561092a57600080fd5b50600e546104f2906001600160a01b031681565b34801561094a57600080fd5b506103ef6109593660046134c7565b61186f565b34801561096a57600080fd5b5061041f6109793660046133e5565b6118c4565b34801561098a57600080fd5b5061041f610999366004613499565b611910565b3480156109aa57600080fd5b5061041f6109b93660046136e2565b611965565b3480156109ca57600080fd5b5061041f6109d93660046133e5565b6119fe565b3480156109ea57600080fd5b5061041f6109f9366004613654565b611a4a565b348015610a0a57600080fd5b50610432600c5481565b348015610a2057600080fd5b5061041f610a2f366004613654565b611a90565b348015610a4057600080fd5b50610432610a4f36600461341f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a8657600080fd5b5061043260115481565b348015610a9c57600080fd5b5061041f610aab366004613636565b611ad6565b348015610abc57600080fd5b5061041f610acb3660046133e5565b611b22565b348015610adc57600080fd5b50600b546103ef9060ff1681565b348015610af657600080fd5b5061041f610b053660046133e5565b611b6d565b348015610b1657600080fd5b50601e54601f5460205460215460225461078a949392919085565b348015610b3d57600080fd5b50600d546104f2906001600160a01b031681565b600954600090339060ff1680610b7f57506001600160a01b03811660009081526006602052604090205460ff165b610ba45760405162461bcd60e51b8152600401610b9b906137a7565b60405180910390fd5b610baf338585611c05565b5060019392505050565b6000546001600160a01b03163314610be35760405162461bcd60e51b8152600401610b9b90613772565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610c2d57600080fd5b505af1158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190613619565b50505050565b600954600090849060ff1680610c9957506001600160a01b03811660009081526006602052604090205460ff165b610cb55760405162461bcd60e51b8152600401610b9b906137a7565b610cc0858585611d29565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610d455760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b9b565b610d598633610d5487856139eb565b611c05565b50600195945050505050565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610b9b90613772565b610d983061152c565b811115610df55760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676820746f6b656e7320696e20636f6e747261637420746f604482015264081cd95b1b60da1b6064820152608401610b9b565b610dfe8161250f565b50565b6000601054821115610e685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b9b565b6000610e72612670565b9050610e7e81846138bc565b9392505050565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03811660009081526005602052604090205460ff16610f175760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b9b565b60005b60085481101561103857816001600160a01b031660088281548110610f4157610f41613a49565b6000918252602090912001546001600160a01b031614156110265760088054610f6c906001906139eb565b81548110610f7c57610f7c613a49565b600091825260209091200154600880546001600160a01b039092169183908110610fa857610fa8613a49565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061100057611000613a33565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061103081613a02565b915050610f1a565b5050565b6000546001600160a01b031633146110665760405162461bcd60e51b8152600401610b9b90613772565b6009805461ffff191661ff00198315159081169190911761010082021790915560011480156110955750601554155b15610dfe574360155550565b600954600090339060ff16806110cf57506001600160a01b03811660009081526006602052604090205460ff165b6110eb5760405162461bcd60e51b8152600401610b9b906137a7565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610baf91908690610d549087906138a4565b6000546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156111c35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b9b565b816111e15760006111d78460016000612693565b5191506111fd9050565b60006111f08460016000612693565b6020015191506111fd9050565b92915050565b6000546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03811660009081526005602052604090205460ff16156112965760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b9b565b6001600160a01b038116600090815260016020526040902054156112f0576001600160a01b0381166000908152600160205260409020546112d690610e01565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113805760405162461bcd60e51b8152600401610b9b90613772565b61138c6009600a613921565b61139690836139cc565b6012556113a56009600a613921565b6113af90826139cc565b6013555050565b6000546001600160a01b031633146113e05760405162461bcd60e51b8152600401610b9b90613772565b6040805160a08101825286815260208101869052808201859052606081018490526080018290526019869055601a859055601b849055601c839055601d829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146114785760405162461bcd60e51b8152600401610b9b90613772565b80518251146114c95760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610b9b565b60005b825181101561152757611515338483815181106114eb576114eb613a49565b602002602001015184848151811061150557611505613a49565b60200260200101516000806126f4565b8061151f81613a02565b9150506114cc565b505050565b6001600160a01b03811660009081526005602052604081205460ff161561156957506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111fd90610e01565b6000546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b9b90613772565b6115bf60006129fe565b565b6000546001600160a01b031633146115eb5760405162461bcd60e51b8152600401610b9b90613772565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116375760405162461bcd60e51b8152600401610b9b90613772565b60005b825181101561152757816004600085848151811061165a5761165a613a49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061169681613a02565b91505061163a565b6000546001600160a01b031633146116c85760405162461bcd60e51b8152600401610b9b90613772565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610b9b90613772565b8047101561175c5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b9b565b604051339082156108fc029083906000818181858888f19350505050158015611038573d6000803e3d6000fd5b600954600090339060ff16806117b757506001600160a01b03811660009081526006602052604090205460ff165b6117d35760405162461bcd60e51b8152600401610b9b906137a7565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156118555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b9b565b6118643386610d5487856139eb565b506001949350505050565b600954600090339060ff168061189d57506001600160a01b03811660009081526006602052604090205460ff165b6118b95760405162461bcd60e51b8152600401610b9b906137a7565b610baf338585611d29565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610b9b90613772565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461193a5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461198f5760405162461bcd60e51b8152600401610b9b90613772565b6040805160a0810182528681526020808201879052818301869052606082018590526080909101839052601e879055601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b03163314611a285760405162461bcd60e51b8152600401610b9b90613772565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a745760405162461bcd60e51b8152600401610b9b90613772565b611a806009600a613921565b611a8a90826139cc565b60115550565b6000546001600160a01b03163314611aba5760405162461bcd60e51b8152600401610b9b90613772565b611ac66009600a613921565b611ad090826139cc565b60145550565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610b9b90613772565b611b0b8160016139cc565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b038116611bfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b9b565b610dfe816129fe565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b9b565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b9b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b9b565b6001600160a01b038216611def5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b9b565b60008111611e515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b9b565b611e5a8361152c565b811115611ec35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b9b565b6001600160a01b03831660009081526007602052604090205460ff16158015611f0557506001600160a01b03821660009081526007602052604090205460ff16155b611f415760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b9b565b6001600160a01b03831660009081526004602052604090205460ff16158015611f8357506001600160a01b03821660009081526004602052604090205460ff16155b15611fcf5760095460ff16611fcf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b9b565b6001600160a01b03831660009081526004602052604090205460ff1615801561201157506001600160a01b03821660009081526004602052604090205460ff16155b801561202a57506015546120269060036138a4565b4311155b1561209957600e546001600160a01b03838116911614156120995760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610b9b565b600e546001600160a01b0384811691161480156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e4575060095462010000900460ff16155b156121a05760125481111561213b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b9b565b601454816121488461152c565b61215291906138a4565b11156121a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b9b565b600e546001600160a01b038481169116148015906121d757506001600160a01b03821660009081526004602052604090205460ff16155b80156121fc57506001600160a01b03831660009081526004602052604090205460ff16155b8015612211575060095462010000900460ff16155b15612374576013548111156122685760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b9b565b600e546001600160a01b038381169116146122e2576014548161228a8461152c565b61229491906138a4565b11156122e25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b9b565b600b5460ff1615612374576001600160a01b0383166000908152600a602052604081205461231090426139eb565b9050600c548110156123575760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b9b565b506001600160a01b0383166000908152600a602052604090204290555b60006011546123823061152c565b600954911115915062010000900460ff161580156123a75750600954610100900460ff165b80156123b05750805b80156123ca5750600e546001600160a01b03858116911614155b80156123ef57506001600160a01b03841660009081526004602052604090205460ff16155b801561241457506001600160a01b03831660009081526004602052604090205460ff16155b1561247e57601154600e5461247e91906001600160a01b0386811691161461243d576019612440565b601e5b6040805160a0810182528254815260018301546020820152600283015491810191909152600382015460608201526004909101546080820152612a4e565b60095460019060009062010000900460ff16806124b357506001600160a01b03861660009081526004602052604090205460ff165b806124d657506001600160a01b03851660009081526004602052604090205460ff165b156124e057600091505b600e546001600160a01b03868116911614156124fa575060015b61250786868685856126f4565b505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254457612544613a49565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259857600080fd5b505afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190613402565b816001815181106125e3576125e3613a49565b6001600160a01b039283166020918202929092010152600d546126099130911684611c05565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906126429085906000908690309042906004016137de565b600060405180830381600087803b15801561265c57600080fd5b505af1158015612507573d6000803e3d6000fd5b600080600061267d612bf4565b909250905061268c81836138bc565b9250505090565b61269b613302565b6126a6848484612d77565b90506126bb8185856126b6612670565b612f34565b60c0870152608086015260608501526040840152602083015281526126e881846126e3612670565b613008565b60a08201529392505050565b6000612701848484612693565b6001600160a01b03871660009081526005602052604090205490915060ff1615612763576001600160a01b0386166000908152600260205260409020546127499085906139eb565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156127c65760e08101516001600160a01b0386166000908152600260205260409020546127ac91906138a4565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546127eb91906139eb565b6001600160a01b038088166000908152600160209081526040808320949094558401519188168152919091205461282291906138a4565b6001600160a01b038616600090815260016020526040908190209190915581015115158061285557506000816101000151115b1561286d5761286d8160400151826101000151613030565b60008160800151118061288557506000816101400151115b1561291a5761289d8160800151826101400151613065565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361018001518461016001518561012001518661014001516128f491906138a4565b6128fe91906138a4565b61290891906138a4565b60405190815260200160405180910390a35b60008160600151118061293257506000816101200151115b1561294a5761294a81606001518261012001516130db565b60008160a00151118061296257506000816101600151115b1561297a5761297a8160a001518261016001516130f0565b610180810151156129a5576018546101808201516129a59188916001600160a01b0390911690611d29565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e001516040516129ee91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff000019166201000017905560808101516060820151602083015160408401516000939291612a81916138a4565b612a8b91906138a4565b612a9591906138a4565b612aa09060026139cc565b9050600081836040015185612ab591906139cc565b612abf91906138bc565b90506000612acd82866139eb565b905047612ad98261250f565b6000612ae582476139eb565b90506000866040015186612af991906139eb565b612b0390836138bc565b90506000876040015182612b1791906139cc565b90508015612b2957612b298682613105565b6020880151600090612b3c8460026139cc565b612b4691906139cc565b90508015612b6457601654612b64906001600160a01b0316826131e9565b6060890151600090612b778560026139cc565b612b8191906139cc565b90508015612b9f57601754612b9f906001600160a01b0316826131e9565b60808a0151600090612bb28660026139cc565b612bbc91906139cc565b90508015612bda57601854612bda906001600160a01b0316826131e9565b50506009805462ff00001916905550505050505050505050565b601054600f546000918291825b600854811015612d4657826001600060088481548110612c2357612c23613a49565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c8e5750816002600060088481548110612c6757612c67613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ca457601054600f54945094505050509091565b6001600060088381548110612cbb57612cbb613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cea90846139eb565b92506002600060088381548110612d0357612d03613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d3290836139eb565b915080612d3e81613a02565b915050612c01565b50600f54601054612d5791906138bc565b821015612d6e57601054600f549350935050509091565b90939092509050565b612d7f613302565b82612d905760e08101849052610e7e565b612dc26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b8215612e0157506040805160a081018252601e548152601f54602080830191909152549181019190915260215460608201526022546080820152612e34565b506040805160a0810182526019548152601a546020820152601b5491810191909152601c546060820152601d5460808201525b8051606490612e4390876139cc565b612e4d91906138bc565b6101008301526020810151606490612e6590876139cc565b612e6f91906138bc565b6101208301526040810151606490612e8790876139cc565b612e9191906138bc565b6101408301526060810151606490612ea990876139cc565b612eb391906138bc565b6101608301526080810151606490612ecb90876139cc565b612ed591906138bc565b6101808301819052610160830151610140840151610120850151610100860151612eff908a6139eb565b612f0991906139eb565b612f1391906139eb565b612f1d91906139eb565b612f2791906139eb565b60e0830152509392505050565b60008080808080612f45878a6139cc565b955087612f6057508493506000925082915081905080612ffb565b868a6101000151612f7191906139cc565b9350868a6101200151612f8491906139cc565b9250868a6101400151612f9791906139cc565b91506000878b6101600151612fac91906139cc565b9050878b6101800151612fbf91906139cc565b915081818486612fcf898c6139eb565b612fd991906139eb565b612fe391906139eb565b612fed91906139eb565b612ff791906139eb565b9550505b9499939850945094509450565b60008261301757506000610e7e565b8184610160015161302891906139cc565b949350505050565b816010600082825461304291906139eb565b90915550506023805482919060009061305c9084906138a4565b90915550505050565b806023600201600082825461307a91906138a4565b90915550503060009081526005602052604090205460ff16156130bc5730600090815260026020526040812080548392906130b69084906138a4565b90915550505b306000908152600160205260408120805484929061305c9084906138a4565b806023600101600082825461307a91906138a4565b806023600301600082825461307a91906138a4565b600d5461311d9030906001600160a01b031684611c05565b600d546001600160a01b031663f305d7198230856000806131466000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156131a957600080fd5b505af11580156131bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e291906136b4565b5050505050565b804710156132395760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613286576040519150601f19603f3d011682016040523d82523d6000602084013e61328b565b606091505b50509050806115275760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b9b565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f83011261337b57600080fd5b8135602061339061338b83613880565b61384f565b80838252828201915082860187848660051b89010111156133b057600080fd5b60005b858110156133d85781356133c681613a75565b845292840192908401906001016133b3565b5090979650505050505050565b6000602082840312156133f757600080fd5b8135610e7e81613a75565b60006020828403121561341457600080fd5b8151610e7e81613a75565b6000806040838503121561343257600080fd5b823561343d81613a75565b9150602083013561344d81613a75565b809150509250929050565b60008060006060848603121561346d57600080fd5b833561347881613a75565b9250602084013561348881613a75565b929592945050506040919091013590565b600080604083850312156134ac57600080fd5b82356134b781613a75565b9150602083013561344d81613a8a565b600080604083850312156134da57600080fd5b82356134e581613a75565b946020939093013593505050565b6000806040838503121561350657600080fd5b823567ffffffffffffffff8082111561351e57600080fd5b61352a8683870161336a565b935060209150818501358181111561354157600080fd5b85019050601f8101861361355457600080fd5b803561356261338b82613880565b80828252848201915084840189868560051b870101111561358257600080fd5b600094505b838510156135a5578035835260019490940193918501918501613587565b5080955050505050509250929050565b600080604083850312156135c857600080fd5b823567ffffffffffffffff8111156135df57600080fd5b6135eb8582860161336a565b925050602083013561344d81613a8a565b60006020828403121561360e57600080fd5b8135610e7e81613a8a565b60006020828403121561362b57600080fd5b8151610e7e81613a8a565b6000806040838503121561364957600080fd5b82356134e581613a8a565b60006020828403121561366657600080fd5b5035919050565b6000806040838503121561368057600080fd5b82359150602083013561344d81613a8a565b600080604083850312156136a557600080fd5b50508035926020909101359150565b6000806000606084860312156136c957600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156136fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561374a5785810183015185820160400152820161372e565b8181111561375c576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561382e5784516001600160a01b031683529383019391830191600101613809565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561387857613878613a5f565b604052919050565b600067ffffffffffffffff82111561389a5761389a613a5f565b5060051b60200190565b600082198211156138b7576138b7613a1d565b500190565b6000826138d957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156139195781600019048211156138ff576138ff613a1d565b8085161561390c57918102915b93841c93908002906138e3565b509250929050565b6000610e7e60ff84168360008261393a575060016111fd565b81613947575060006111fd565b816001811461395d576002811461396757613983565b60019150506111fd565b60ff84111561397857613978613a1d565b50506001821b6111fd565b5060208310610133831016604e8410600b84101617156139a6575081810a6111fd565b6139b083836138de565b80600019048211156139c4576139c4613a1d565b029392505050565b60008160001904831182151516156139e6576139e6613a1d565b500290565b6000828210156139fd576139fd613a1d565b500390565b6000600019821415613a1657613a16613a1d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dfe57600080fd5b8015158114610dfe57600080fdfea2646970667358221220037564027ac8e806da7a1f6109ba8173e907abbaec693998963175f6b2165be864736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063715018a6116101d1578063aacebbe311610102578063dd62ed3e116100a0578063ee36e3591161006f578063ee36e35914610ad0578063f2fde38b14610aea578063f66895a314610b0a578063f887ea4014610b3157600080fd5b8063dd62ed3e14610a34578063e2f4560514610a7a578063e517f2b914610a90578063ea2f0b3714610ab057600080fd5b8063cc600f91116100dc578063cc600f91146109be578063d257b34f146109de578063d2ce0db2146109fe578063d8672e5114610a1457600080fd5b8063aacebbe31461095e578063b5c571451461097e578063c791fc541461099e57600080fd5b8063924de9b71161016f5780639e252f00116101495780639e252f00146108de578063a457c2d7146108fe578063a8aa1b311461091e578063a9059cbb1461093e57600080fd5b8063924de9b71461086957806395d89b41146108895780639ba5e4d5146108b757600080fd5b80637cb332bb116101ab5780637cb332bb146107d257806388f82020146107f25780638da5cb5b1461082b5780638e2839ff1461084957600080fd5b8063715018a61461074e578063728f8eea1461076357806375f0a874146107b257600080fd5b80634549b039116102ab578063652e2f04116102495780636aa5b37f116102235780636aa5b37f146106d95780636ddd1713146106ef578063706f69371461070e57806370a082311461072e57600080fd5b8063652e2f041461068d57806366a88d96146106a3578063677a8870146106b957600080fd5b80635342acb4116102855780635342acb4146105e457806359759f611461061d5780635fcefa421461063d57806362695eae1461065d57600080fd5b80634549b0391461058a5780634ada218b146105aa57806352390c02146105c457600080fd5b80632d838119116103185780633685d419116102f25780633685d4191461050a578063379ba1d91461052a578063395093511461054a578063437823ec1461056a57600080fd5b80632d83811914610496578063313ce567146104b6578063361ca077146104d257600080fd5b806318160ddd1161035457806318160ddd1461042157806323b872dd14610440578063274a533c146104605780632d4efa471461047657600080fd5b806306fdde0314610386578063095ea7b3146103cf5780630d65df9b146103ff57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5060408051808201909152600e81526d14da5959d948141c9bdd1bd8dbdb60921b60208201525b6040516103c6919061371d565b60405180910390f35b3480156103db57600080fd5b506103ef6103ea3660046134c7565b610b51565b60405190151581526020016103c6565b34801561040b57600080fd5b5061041f61041a366004613458565b610bb9565b005b34801561042d57600080fd5b50600f545b6040519081526020016103c6565b34801561044c57600080fd5b506103ef61045b366004613458565b610c6b565b34801561046c57600080fd5b5061043260155481565b34801561048257600080fd5b5061041f610491366004613654565b610d65565b3480156104a257600080fd5b506104326104b1366004613654565b610e01565b3480156104c257600080fd5b50604051600981526020016103c6565b3480156104de57600080fd5b506017546104f2906001600160a01b031681565b6040516001600160a01b0390911681526020016103c6565b34801561051657600080fd5b5061041f6105253660046133e5565b610e85565b34801561053657600080fd5b5061041f6105453660046135fc565b61103c565b34801561055657600080fd5b506103ef6105653660046134c7565b6110a1565b34801561057657600080fd5b5061041f6105853660046133e5565b611121565b34801561059657600080fd5b506104326105a536600461366d565b61116f565b3480156105b657600080fd5b506009546103ef9060ff1681565b3480156105d057600080fd5b5061041f6105df3660046133e5565b611203565b3480156105f057600080fd5b506103ef6105ff3660046133e5565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062957600080fd5b5061041f610638366004613692565b611356565b34801561064957600080fd5b5061041f6106583660046136e2565b6113b6565b34801561066957600080fd5b506103ef6106783660046133e5565b60066020526000908152604090205460ff1681565b34801561069957600080fd5b5061043260135481565b3480156106af57600080fd5b5061043260145481565b3480156106c557600080fd5b506018546104f2906001600160a01b031681565b3480156106e557600080fd5b5061043260125481565b3480156106fb57600080fd5b506009546103ef90610100900460ff1681565b34801561071a57600080fd5b5061041f6107293660046134f3565b61144e565b34801561073a57600080fd5b506104326107493660046133e5565b61152c565b34801561075a57600080fd5b5061041f61158b565b34801561076f57600080fd5b50601954601a54601b54601c54601d5461078a949392919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103c6565b3480156107be57600080fd5b506016546104f2906001600160a01b031681565b3480156107de57600080fd5b5061041f6107ed3660046133e5565b6115c1565b3480156107fe57600080fd5b506103ef61080d3660046133e5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561083757600080fd5b506000546001600160a01b03166104f2565b34801561085557600080fd5b5061041f6108643660046135b5565b61160d565b34801561087557600080fd5b5061041f6108843660046135fc565b61169e565b34801561089557600080fd5b50604080518082019091526005815264534945474560d81b60208201526103b9565b3480156108c357600080fd5b5060235460245460255460265460275461078a949392919085565b3480156108ea57600080fd5b5061041f6108f9366004613654565b6116e2565b34801561090a57600080fd5b506103ef6109193660046134c7565b611789565b34801561092a57600080fd5b50600e546104f2906001600160a01b031681565b34801561094a57600080fd5b506103ef6109593660046134c7565b61186f565b34801561096a57600080fd5b5061041f6109793660046133e5565b6118c4565b34801561098a57600080fd5b5061041f610999366004613499565b611910565b3480156109aa57600080fd5b5061041f6109b93660046136e2565b611965565b3480156109ca57600080fd5b5061041f6109d93660046133e5565b6119fe565b3480156109ea57600080fd5b5061041f6109f9366004613654565b611a4a565b348015610a0a57600080fd5b50610432600c5481565b348015610a2057600080fd5b5061041f610a2f366004613654565b611a90565b348015610a4057600080fd5b50610432610a4f36600461341f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a8657600080fd5b5061043260115481565b348015610a9c57600080fd5b5061041f610aab366004613636565b611ad6565b348015610abc57600080fd5b5061041f610acb3660046133e5565b611b22565b348015610adc57600080fd5b50600b546103ef9060ff1681565b348015610af657600080fd5b5061041f610b053660046133e5565b611b6d565b348015610b1657600080fd5b50601e54601f5460205460215460225461078a949392919085565b348015610b3d57600080fd5b50600d546104f2906001600160a01b031681565b600954600090339060ff1680610b7f57506001600160a01b03811660009081526006602052604090205460ff165b610ba45760405162461bcd60e51b8152600401610b9b906137a7565b60405180910390fd5b610baf338585611c05565b5060019392505050565b6000546001600160a01b03163314610be35760405162461bcd60e51b8152600401610b9b90613772565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610c2d57600080fd5b505af1158015610c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c659190613619565b50505050565b600954600090849060ff1680610c9957506001600160a01b03811660009081526006602052604090205460ff165b610cb55760405162461bcd60e51b8152600401610b9b906137a7565b610cc0858585611d29565b6001600160a01b038516600090815260036020908152604080832033845290915290205483811015610d455760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b9b565b610d598633610d5487856139eb565b611c05565b50600195945050505050565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610b9b90613772565b610d983061152c565b811115610df55760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676820746f6b656e7320696e20636f6e747261637420746f604482015264081cd95b1b60da1b6064820152608401610b9b565b610dfe8161250f565b50565b6000601054821115610e685760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b9b565b6000610e72612670565b9050610e7e81846138bc565b9392505050565b6000546001600160a01b03163314610eaf5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03811660009081526005602052604090205460ff16610f175760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b9b565b60005b60085481101561103857816001600160a01b031660088281548110610f4157610f41613a49565b6000918252602090912001546001600160a01b031614156110265760088054610f6c906001906139eb565b81548110610f7c57610f7c613a49565b600091825260209091200154600880546001600160a01b039092169183908110610fa857610fa8613a49565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff19169055600880548061100057611000613a33565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061103081613a02565b915050610f1a565b5050565b6000546001600160a01b031633146110665760405162461bcd60e51b8152600401610b9b90613772565b6009805461ffff191661ff00198315159081169190911761010082021790915560011480156110955750601554155b15610dfe574360155550565b600954600090339060ff16806110cf57506001600160a01b03811660009081526006602052604090205460ff165b6110eb5760405162461bcd60e51b8152600401610b9b906137a7565b3360008181526003602090815260408083206001600160a01b0389168452909152902054610baf91908690610d549087906138a4565b6000546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600f548311156111c35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b9b565b816111e15760006111d78460016000612693565b5191506111fd9050565b60006111f08460016000612693565b6020015191506111fd9050565b92915050565b6000546001600160a01b0316331461122d5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03811660009081526005602052604090205460ff16156112965760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b9b565b6001600160a01b038116600090815260016020526040902054156112f0576001600160a01b0381166000908152600160205260409020546112d690610e01565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113805760405162461bcd60e51b8152600401610b9b90613772565b61138c6009600a613921565b61139690836139cc565b6012556113a56009600a613921565b6113af90826139cc565b6013555050565b6000546001600160a01b031633146113e05760405162461bcd60e51b8152600401610b9b90613772565b6040805160a08101825286815260208101869052808201859052606081018490526080018290526019869055601a859055601b849055601c839055601d829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b031633146114785760405162461bcd60e51b8152600401610b9b90613772565b80518251146114c95760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610b9b565b60005b825181101561152757611515338483815181106114eb576114eb613a49565b602002602001015184848151811061150557611505613a49565b60200260200101516000806126f4565b8061151f81613a02565b9150506114cc565b505050565b6001600160a01b03811660009081526005602052604081205460ff161561156957506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546111fd90610e01565b6000546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b9b90613772565b6115bf60006129fe565b565b6000546001600160a01b031633146115eb5760405162461bcd60e51b8152600401610b9b90613772565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116375760405162461bcd60e51b8152600401610b9b90613772565b60005b825181101561152757816004600085848151811061165a5761165a613a49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061169681613a02565b91505061163a565b6000546001600160a01b031633146116c85760405162461bcd60e51b8152600401610b9b90613772565b600980549115156101000261ff0019909216919091179055565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610b9b90613772565b8047101561175c5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610b9b565b604051339082156108fc029083906000818181858888f19350505050158015611038573d6000803e3d6000fd5b600954600090339060ff16806117b757506001600160a01b03811660009081526006602052604090205460ff165b6117d35760405162461bcd60e51b8152600401610b9b906137a7565b3360009081526003602090815260408083206001600160a01b0388168452909152902054838110156118555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b9b565b6118643386610d5487856139eb565b506001949350505050565b600954600090339060ff168061189d57506001600160a01b03811660009081526006602052604090205460ff165b6118b95760405162461bcd60e51b8152600401610b9b906137a7565b610baf338585611d29565b6000546001600160a01b031633146118ee5760405162461bcd60e51b8152600401610b9b90613772565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461193a5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461198f5760405162461bcd60e51b8152600401610b9b90613772565b6040805160a0810182528681526020808201879052818301869052606082018590526080909101839052601e879055601f86905584905560218390556022829055517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050505050565b6000546001600160a01b03163314611a285760405162461bcd60e51b8152600401610b9b90613772565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a745760405162461bcd60e51b8152600401610b9b90613772565b611a806009600a613921565b611a8a90826139cc565b60115550565b6000546001600160a01b03163314611aba5760405162461bcd60e51b8152600401610b9b90613772565b611ac66009600a613921565b611ad090826139cc565b60145550565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610b9b90613772565b611b0b8160016139cc565b600c5550600b805460ff1916911515919091179055565b6000546001600160a01b03163314611b4c5760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610b9b90613772565b6001600160a01b038116611bfc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b9b565b610dfe816129fe565b6001600160a01b038316611c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b9b565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b9b565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b9b565b6001600160a01b038216611def5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b9b565b60008111611e515760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b9b565b611e5a8361152c565b811115611ec35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b9b565b6001600160a01b03831660009081526007602052604090205460ff16158015611f0557506001600160a01b03821660009081526007602052604090205460ff16155b611f415760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610b9b565b6001600160a01b03831660009081526004602052604090205460ff16158015611f8357506001600160a01b03821660009081526004602052604090205460ff16155b15611fcf5760095460ff16611fcf5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610b9b565b6001600160a01b03831660009081526004602052604090205460ff1615801561201157506001600160a01b03821660009081526004602052604090205460ff16155b801561202a57506015546120269060036138a4565b4311155b1561209957600e546001600160a01b03838116911614156120995760405162461bcd60e51b8152602060048201526024808201527f53656c6c73206e6f7420616c6c6f77656420666f72206669727374203320626c6044820152636f636b7360e01b6064820152608401610b9b565b600e546001600160a01b0384811691161480156120cf57506001600160a01b03821660009081526004602052604090205460ff16155b80156120e4575060095462010000900460ff16155b156121a05760125481111561213b5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b9b565b601454816121488461152c565b61215291906138a4565b11156121a05760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b9b565b600e546001600160a01b038481169116148015906121d757506001600160a01b03821660009081526004602052604090205460ff16155b80156121fc57506001600160a01b03831660009081526004602052604090205460ff16155b8015612211575060095462010000900460ff16155b15612374576013548111156122685760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b9b565b600e546001600160a01b038381169116146122e2576014548161228a8461152c565b61229491906138a4565b11156122e25760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b9b565b600b5460ff1615612374576001600160a01b0383166000908152600a602052604081205461231090426139eb565b9050600c548110156123575760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b9b565b506001600160a01b0383166000908152600a602052604090204290555b60006011546123823061152c565b600954911115915062010000900460ff161580156123a75750600954610100900460ff165b80156123b05750805b80156123ca5750600e546001600160a01b03858116911614155b80156123ef57506001600160a01b03841660009081526004602052604090205460ff16155b801561241457506001600160a01b03831660009081526004602052604090205460ff16155b1561247e57601154600e5461247e91906001600160a01b0386811691161461243d576019612440565b601e5b6040805160a0810182528254815260018301546020820152600283015491810191909152600382015460608201526004909101546080820152612a4e565b60095460019060009062010000900460ff16806124b357506001600160a01b03861660009081526004602052604090205460ff165b806124d657506001600160a01b03851660009081526004602052604090205460ff165b156124e057600091505b600e546001600160a01b03868116911614156124fa575060015b61250786868685856126f4565b505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254457612544613a49565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561259857600080fd5b505afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190613402565b816001815181106125e3576125e3613a49565b6001600160a01b039283166020918202929092010152600d546126099130911684611c05565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906126429085906000908690309042906004016137de565b600060405180830381600087803b15801561265c57600080fd5b505af1158015612507573d6000803e3d6000fd5b600080600061267d612bf4565b909250905061268c81836138bc565b9250505090565b61269b613302565b6126a6848484612d77565b90506126bb8185856126b6612670565b612f34565b60c0870152608086015260608501526040840152602083015281526126e881846126e3612670565b613008565b60a08201529392505050565b6000612701848484612693565b6001600160a01b03871660009081526005602052604090205490915060ff1615612763576001600160a01b0386166000908152600260205260409020546127499085906139eb565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff16156127c65760e08101516001600160a01b0386166000908152600260205260409020546127ac91906138a4565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b0387166000908152600160205260409020546127eb91906139eb565b6001600160a01b038088166000908152600160209081526040808320949094558401519188168152919091205461282291906138a4565b6001600160a01b038616600090815260016020526040908190209190915581015115158061285557506000816101000151115b1561286d5761286d8160400151826101000151613030565b60008160800151118061288557506000816101400151115b1561291a5761289d8160800151826101400151613065565b306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361018001518461016001518561012001518661014001516128f491906138a4565b6128fe91906138a4565b61290891906138a4565b60405190815260200160405180910390a35b60008160600151118061293257506000816101200151115b1561294a5761294a81606001518261012001516130db565b60008160a00151118061296257506000816101600151115b1561297a5761297a8160a001518261016001516130f0565b610180810151156129a5576018546101808201516129a59188916001600160a01b0390911690611d29565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e001516040516129ee91815260200190565b60405180910390a3505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6009805462ff000019166201000017905560808101516060820151602083015160408401516000939291612a81916138a4565b612a8b91906138a4565b612a9591906138a4565b612aa09060026139cc565b9050600081836040015185612ab591906139cc565b612abf91906138bc565b90506000612acd82866139eb565b905047612ad98261250f565b6000612ae582476139eb565b90506000866040015186612af991906139eb565b612b0390836138bc565b90506000876040015182612b1791906139cc565b90508015612b2957612b298682613105565b6020880151600090612b3c8460026139cc565b612b4691906139cc565b90508015612b6457601654612b64906001600160a01b0316826131e9565b6060890151600090612b778560026139cc565b612b8191906139cc565b90508015612b9f57601754612b9f906001600160a01b0316826131e9565b60808a0151600090612bb28660026139cc565b612bbc91906139cc565b90508015612bda57601854612bda906001600160a01b0316826131e9565b50506009805462ff00001916905550505050505050505050565b601054600f546000918291825b600854811015612d4657826001600060088481548110612c2357612c23613a49565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612c8e5750816002600060088481548110612c6757612c67613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612ca457601054600f54945094505050509091565b6001600060088381548110612cbb57612cbb613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612cea90846139eb565b92506002600060088381548110612d0357612d03613a49565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d3290836139eb565b915080612d3e81613a02565b915050612c01565b50600f54601054612d5791906138bc565b821015612d6e57601054600f549350935050509091565b90939092509050565b612d7f613302565b82612d905760e08101849052610e7e565b612dc26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b8215612e0157506040805160a081018252601e548152601f54602080830191909152549181019190915260215460608201526022546080820152612e34565b506040805160a0810182526019548152601a546020820152601b5491810191909152601c546060820152601d5460808201525b8051606490612e4390876139cc565b612e4d91906138bc565b6101008301526020810151606490612e6590876139cc565b612e6f91906138bc565b6101208301526040810151606490612e8790876139cc565b612e9191906138bc565b6101408301526060810151606490612ea990876139cc565b612eb391906138bc565b6101608301526080810151606490612ecb90876139cc565b612ed591906138bc565b6101808301819052610160830151610140840151610120850151610100860151612eff908a6139eb565b612f0991906139eb565b612f1391906139eb565b612f1d91906139eb565b612f2791906139eb565b60e0830152509392505050565b60008080808080612f45878a6139cc565b955087612f6057508493506000925082915081905080612ffb565b868a6101000151612f7191906139cc565b9350868a6101200151612f8491906139cc565b9250868a6101400151612f9791906139cc565b91506000878b6101600151612fac91906139cc565b9050878b6101800151612fbf91906139cc565b915081818486612fcf898c6139eb565b612fd991906139eb565b612fe391906139eb565b612fed91906139eb565b612ff791906139eb565b9550505b9499939850945094509450565b60008261301757506000610e7e565b8184610160015161302891906139cc565b949350505050565b816010600082825461304291906139eb565b90915550506023805482919060009061305c9084906138a4565b90915550505050565b806023600201600082825461307a91906138a4565b90915550503060009081526005602052604090205460ff16156130bc5730600090815260026020526040812080548392906130b69084906138a4565b90915550505b306000908152600160205260408120805484929061305c9084906138a4565b806023600101600082825461307a91906138a4565b806023600301600082825461307a91906138a4565b600d5461311d9030906001600160a01b031684611c05565b600d546001600160a01b031663f305d7198230856000806131466000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b1580156131a957600080fd5b505af11580156131bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e291906136b4565b5050505050565b804710156132395760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613286576040519150601f19603f3d011682016040523d82523d6000602084013e61328b565b606091505b50509050806115275760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b9b565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f83011261337b57600080fd5b8135602061339061338b83613880565b61384f565b80838252828201915082860187848660051b89010111156133b057600080fd5b60005b858110156133d85781356133c681613a75565b845292840192908401906001016133b3565b5090979650505050505050565b6000602082840312156133f757600080fd5b8135610e7e81613a75565b60006020828403121561341457600080fd5b8151610e7e81613a75565b6000806040838503121561343257600080fd5b823561343d81613a75565b9150602083013561344d81613a75565b809150509250929050565b60008060006060848603121561346d57600080fd5b833561347881613a75565b9250602084013561348881613a75565b929592945050506040919091013590565b600080604083850312156134ac57600080fd5b82356134b781613a75565b9150602083013561344d81613a8a565b600080604083850312156134da57600080fd5b82356134e581613a75565b946020939093013593505050565b6000806040838503121561350657600080fd5b823567ffffffffffffffff8082111561351e57600080fd5b61352a8683870161336a565b935060209150818501358181111561354157600080fd5b85019050601f8101861361355457600080fd5b803561356261338b82613880565b80828252848201915084840189868560051b870101111561358257600080fd5b600094505b838510156135a5578035835260019490940193918501918501613587565b5080955050505050509250929050565b600080604083850312156135c857600080fd5b823567ffffffffffffffff8111156135df57600080fd5b6135eb8582860161336a565b925050602083013561344d81613a8a565b60006020828403121561360e57600080fd5b8135610e7e81613a8a565b60006020828403121561362b57600080fd5b8151610e7e81613a8a565b6000806040838503121561364957600080fd5b82356134e581613a8a565b60006020828403121561366657600080fd5b5035919050565b6000806040838503121561368057600080fd5b82359150602083013561344d81613a8a565b600080604083850312156136a557600080fd5b50508035926020909101359150565b6000806000606084860312156136c957600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a086880312156136fa57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561374a5785810183015185820160400152820161372e565b8181111561375c576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f54726164696e67206e6f7420656e61626c656420796574000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561382e5784516001600160a01b031683529383019391830191600101613809565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561387857613878613a5f565b604052919050565b600067ffffffffffffffff82111561389a5761389a613a5f565b5060051b60200190565b600082198211156138b7576138b7613a1d565b500190565b6000826138d957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156139195781600019048211156138ff576138ff613a1d565b8085161561390c57918102915b93841c93908002906138e3565b509250929050565b6000610e7e60ff84168360008261393a575060016111fd565b81613947575060006111fd565b816001811461395d576002811461396757613983565b60019150506111fd565b60ff84111561397857613978613a1d565b50506001821b6111fd565b5060208310610133831016604e8410600b84101617156139a6575081810a6111fd565b6139b083836138de565b80600019048211156139c4576139c4613a1d565b029392505050565b60008160001904831182151516156139e6576139e6613a1d565b500290565b6000828210156139fd576139fd613a1d565b500390565b6000600019821415613a1657613a16613a1d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610dfe57600080fd5b8015158114610dfe57600080fdfea2646970667358221220037564027ac8e806da7a1f6109ba8173e907abbaec693998963175f6b2165be864736f6c63430008070033

Deployed Bytecode Sourcemap

3399:21864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7277:83;;;;;;;;;;-1:-1:-1;7347:5:0;;;;;;;;;;;;-1:-1:-1;;;7347:5:0;;;;7277:83;;;;;;;:::i;:::-;;;;;;;;8037:181;;;;;;;;;;-1:-1:-1;8037:181:0;;;;;:::i;:::-;;:::i;:::-;;;8278:14:1;;8271:22;8253:41;;8241:2;8226:18;8037:181:0;8113:187:1;25064:154:0;;;;;;;;;;-1:-1:-1;25064:154:0;;;;;:::i;:::-;;:::i;:::-;;7573:95;;;;;;;;;;-1:-1:-1;7653:7:0;;7573:95;;;19552:25:1;;;19540:2;19525:18;7573:95:0;19406:177:1;8226:430:0;;;;;;;;;;-1:-1:-1;8226:430:0;;;;;:::i;:::-;;:::i;4865:28::-;;;;;;;;;;;;;;;;24574:204;;;;;;;;;;-1:-1:-1;24574:204:0;;;;;:::i;:::-;;:::i;10317:248::-;;;;;;;;;;-1:-1:-1;10317:248:0;;;;;:::i;:::-;;:::i;7459:83::-;;;;;;;;;;-1:-1:-1;7459:83:0;;4455:1;21183:36:1;;21171:2;21156:18;7459:83:0;21041:184:1;4988:72:0;;;;;;;;;;-1:-1:-1;4988:72:0;;;;-1:-1:-1;;;;;4988:72:0;;;;;;-1:-1:-1;;;;;7178:32:1;;;7160:51;;7148:2;7133:18;4988:72:0;7014:203:1;10914:475:0;;;;;;;;;;-1:-1:-1;10914:475:0;;;;;:::i;:::-;;:::i;10103:206::-;;;;;;;;;;-1:-1:-1;10103:206:0;;;;;:::i;:::-;;:::i;8664:228::-;;;;;;;;;;-1:-1:-1;8664:228:0;;;;;:::i;:::-;;:::i;11397:111::-;;;;;;;;;;-1:-1:-1;11397:111:0;;;;;:::i;:::-;;:::i;9625:470::-;;;;;;;;;;-1:-1:-1;9625:470:0;;;;;:::i;:::-;;:::i;3940:33::-;;;;;;;;;;-1:-1:-1;3940:33:0;;;;;;;;10573:333;;;;;;;;;;-1:-1:-1;10573:333:0;;;;;:::i;:::-;;:::i;11634:123::-;;;;;;;;;;-1:-1:-1;11634:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11722:27:0;11698:4;11722:27;;;:18;:27;;;;;;;;;11634:123;24248:183;;;;;;;;;;-1:-1:-1;24248:183:0;;;;;:::i;:::-;;:::i;11765:223::-;;;;;;;;;;-1:-1:-1;11765:223:0;;;;;:::i;:::-;;:::i;3792:48::-;;;;;;;;;;-1:-1:-1;3792:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4747;;;;;;;;;;;;;;;;4802:50;;;;;;;;;;;;;;;;5067:70;;;;;;;;;;-1:-1:-1;5067:70:0;;;;-1:-1:-1;;;;;5067:70:0;;;4693:47;;;;;;;;;;;;;;;;3980:30;;;;;;;;;;-1:-1:-1;3980:30:0;;;;;;;;;;;22770:331;;;;;;;;;;-1:-1:-1;22770:331:0;;;;;:::i;:::-;;:::i;7676:198::-;;;;;;;;;;-1:-1:-1;7676:198:0;;;;;:::i;:::-;;:::i;1825:94::-;;;;;;;;;;;;;:::i;5407:42::-;;;;;;;;;;-1:-1:-1;5407:42:0;;;;;;;;;;;;;;;;;;;;;;20832:25:1;;;20888:2;20873:18;;20866:34;;;;20916:18;;;20909:34;;;;20974:2;20959:18;;20952:34;21017:3;21002:19;;20995:35;20819:3;20804:19;5407:42:0;20573:463:1;4906:75:0;;;;;;;;;;-1:-1:-1;4906:75:0;;;;-1:-1:-1;;;;;4906:75:0;;;23572:104;;;;;;;;;;-1:-1:-1;23572:104:0;;;;;:::i;:::-;;:::i;9497:120::-;;;;;;;;;;-1:-1:-1;9497:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;9589:20:0;9565:4;9589:20;;;:11;:20;;;;;;;;;9497:120;1602:87;;;;;;;;;;-1:-1:-1;1648:7:0;1675:6;-1:-1:-1;;;;;1675:6:0;1602:87;;23113:209;;;;;;;;;;-1:-1:-1;23113:209:0;;;;;:::i;:::-;;:::i;23988:101::-;;;;;;;;;;-1:-1:-1;23988:101:0;;;;;:::i;:::-;;:::i;7366:87::-;;;;;;;;;;-1:-1:-1;7438:7:0;;;;;;;;;;;;-1:-1:-1;;;7438:7:0;;;;7366:87;;5682:36;;;;;;;;;;-1:-1:-1;5682:36:0;;;;;;;;;;;;;;;;;;24854:196;;;;;;;;;;-1:-1:-1;24854:196:0;;;;;:::i;:::-;;:::i;8900:390::-;;;;;;;;;;-1:-1:-1;8900:390:0;;;;;:::i;:::-;;:::i;4392:19::-;;;;;;;;;;-1:-1:-1;4392:19:0;;;;-1:-1:-1;;;;;4392:19:0;;;9302:187;;;;;;;;;;-1:-1:-1;9302:187:0;;;;;:::i;:::-;;:::i;23330:114::-;;;;;;;;;;-1:-1:-1;23330:114:0;;;;;:::i;:::-;;:::i;24107:129::-;;;;;;;;;;-1:-1:-1;24107:129:0;;;;;:::i;:::-;;:::i;12000:231::-;;;;;;;;;;-1:-1:-1;12000:231:0;;;;;:::i;:::-;;:::i;23456:108::-;;;;;;;;;;-1:-1:-1;23456:108:0;;;;;:::i;:::-;;:::i;23850:130::-;;;;;;;;;;-1:-1:-1;23850:130:0;;;;;:::i;:::-;;:::i;4162:39::-;;;;;;;;;;;;;;;;24443:123;;;;;;;;;;-1:-1:-1;24443:123:0;;;;;:::i;:::-;;:::i;7886:143::-;;;;;;;;;;-1:-1:-1;7886:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;7994:18:0;;;7967:7;7994:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7886:143;4633:53;;;;;;;;;;;;;;;;23690:152;;;;;;;;;;-1:-1:-1;23690:152:0;;;;;:::i;:::-;;:::i;11516:110::-;;;;;;;;;;-1:-1:-1;11516:110:0;;;;;:::i;:::-;;:::i;4120:35::-;;;;;;;;;;-1:-1:-1;4120:35:0;;;;;;;;1927:192;;;;;;;;;;-1:-1:-1;1927:192:0;;;;;:::i;:::-;;:::i;5456:46::-;;;;;;;;;;-1:-1:-1;5456:46:0;;;;;;;;;;;;;;;;;;4364:21;;;;;;;;;;-1:-1:-1;4364:21:0;;;;-1:-1:-1;;;;;4364:21:0;;;8037:181;4266:14;;8132:4;;8112:10;;4266:14;;;:42;;-1:-1:-1;;;;;;4284:24:0;;;;;;:15;:24;;;;;;;;4266:42;4258:78;;;;-1:-1:-1;;;4258:78:0;;;;;;;:::i;:::-;;;;;;;;;8149:39:::1;1103:10:::0;8172:7:::1;8181:6;8149:8;:39::i;:::-;-1:-1:-1::0;8206:4:0::1;::::0;8037:181;-1:-1:-1;;;8037:181:0:o;25064:154::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;25169:41:::1;::::0;-1:-1:-1;;;25169:41:0;;-1:-1:-1;;;;;7414:32:1;;;25169:41:0::1;::::0;::::1;7396:51:1::0;7463:18;;;7456:34;;;25169:27:0;::::1;::::0;::::1;::::0;7369:18:1;;25169:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25064:154:::0;;;:::o;8226:430::-;4266:14;;8340:4;;8323:6;;4266:14;;;:42;;-1:-1:-1;;;;;;4284:24:0;;;;;;:15;:24;;;;;;;;4266:42;4258:78;;;;-1:-1:-1;;;4258:78:0;;;;;;;:::i;:::-;8357:36:::1;8367:6;8375:9;8386:6;8357:9;:36::i;:::-;-1:-1:-1::0;;;;;8433:19:0;::::1;8406:24;8433:19:::0;;;:11:::1;:19;::::0;;;;;;;1103:10;8433:33;;;;;;;;8485:26;;::::1;;8477:79;;;::::0;-1:-1:-1;;;8477:79:0;;15105:2:1;8477:79:0::1;::::0;::::1;15087:21:1::0;15144:2;15124:18;;;15117:30;15183:34;15163:18;;;15156:62;-1:-1:-1;;;15234:18:1;;;15227:38;15282:19;;8477:79:0::1;14903:404:1::0;8477:79:0::1;8567:57;8576:6:::0;1103:10;8598:25:::1;8617:6:::0;8598:16;:25:::1;:::i;:::-;8567:8;:57::i;:::-;-1:-1:-1::0;8644:4:0::1;::::0;8226:430;-1:-1:-1;;;;;8226:430:0:o;24574:204::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;24666:24:::1;24684:4;24666:9;:24::i;:::-;24651:11;:39;;24643:89;;;::::0;-1:-1:-1;;;24643:89:0;;10094:2:1;24643:89:0::1;::::0;::::1;10076:21:1::0;10133:2;10113:18;;;10106:30;10172:34;10152:18;;;10145:62;-1:-1:-1;;;10223:18:1;;;10216:35;10268:19;;24643:89:0::1;9892:401:1::0;24643:89:0::1;24741:29;24758:11;24741:16;:29::i;:::-;24574:204:::0;:::o;10317:248::-;10383:7;10422;;10411;:18;;10403:73;;;;-1:-1:-1;;;10403:73:0;;11265:2:1;10403:73:0;;;11247:21:1;11304:2;11284:18;;;11277:30;11343:34;11323:18;;;11316:62;-1:-1:-1;;;11394:18:1;;;11387:40;11444:19;;10403:73:0;11063:406:1;10403:73:0;10487:19;10510:10;:8;:10::i;:::-;10487:33;-1:-1:-1;10538:19:0;10487:33;10538:7;:19;:::i;:::-;10531:26;10317:248;-1:-1:-1;;;10317:248:0:o;10914:475::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10996:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;10988:56;;;::::0;-1:-1:-1;;;10988:56:0;;14035:2:1;10988:56:0::1;::::0;::::1;14017:21:1::0;14074:2;14054:18;;;14047:30;14113:25;14093:18;;;14086:53;14156:18;;10988:56:0::1;13833:347:1::0;10988:56:0::1;11060:9;11055:327;11079:9;:16:::0;11075:20;::::1;11055:327;;;11137:7;-1:-1:-1::0;;;;;11121:23:0::1;:9;11131:1;11121:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11121:12:0::1;:23;11117:254;;;11180:9;11190:16:::0;;:20:::1;::::0;11209:1:::1;::::0;11190:20:::1;:::i;:::-;11180:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;11165:9:::1;:12:::0;;-1:-1:-1;;;;;11180:31:0;;::::1;::::0;11175:1;;11165:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;11165:46:0::1;-1:-1:-1::0;;;;;11165:46:0;;::::1;;::::0;;11230:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;11269:11:::1;:20:::0;;;;:28;;-1:-1:-1;;11269:28:0::1;::::0;;11316:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;11316:15:0;;;;;-1:-1:-1;;;;;;11316:15:0::1;::::0;;;;;11055:327:::1;10914:475:::0;:::o;11117:254::-:1;11097:3:::0;::::1;::::0;::::1;:::i;:::-;;;;11055:327;;;;10914:475:::0;:::o;10103:206::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;10170:14:::1;:22:::0;;-1:-1:-1;;10203:19:0;-1:-1:-1;;10170:22:0;::::1;;10203:19:::0;;;;;;;10170:22:::1;10203:19:::0;::::1;;::::0;;;-1:-1:-1;10236:13:0::1;:35:::0;::::1;;;-1:-1:-1::0;10253:13:0::1;::::0;:18;10236:35:::1;10233:68;;;10289:12;10273:13;:28:::0;10103:206;:::o;8664:228::-;4266:14;;8765:4;;8744:10;;4266:14;;;:42;;-1:-1:-1;;;;;;4284:24:0;;;;;;:15;:24;;;;;;;;4266:42;4258:78;;;;-1:-1:-1;;;4258:78:0;;;;;;;:::i;:::-;1103:10;8814:25:::1;::::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;8814:34:0;::::1;::::0;;;;;;;;8782:80:::1;::::0;1103:10;8805:7;;8814:47:::1;::::0;8851:10;;8814:47:::1;:::i;11397:111::-:0;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11466:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;11466:34:0::1;11496:4;11466:34;::::0;;11397:111::o;9625:470::-;9715:7;9754;;9743;:18;;9735:62;;;;-1:-1:-1;;;9735:62:0;;14745:2:1;9735:62:0;;;14727:21:1;14784:2;14764:18;;;14757:30;14823:33;14803:18;;;14796:61;14874:18;;9735:62:0;14543:355:1;9735:62:0;9813:17;9808:280;;9847:28;9878:32;9889:7;9898:4;9904:5;9878:10;:32::i;:::-;9932:9;;-1:-1:-1;9925:16:0;;-1:-1:-1;9925:16:0;9808:280;9974:28;10005:32;10016:7;10025:4;10031:5;10005:10;:32::i;:::-;10059:17;;;;-1:-1:-1;10052:24:0;;-1:-1:-1;10052:24:0;9808:280;9625:470;;;;:::o;10573:333::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10656:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;10655:21;10647:61;;;::::0;-1:-1:-1;;;10647:61:0;;12486:2:1;10647:61:0::1;::::0;::::1;12468:21:1::0;12525:2;12505:18;;;12498:30;12564:29;12544:18;;;12537:57;12611:18;;10647:61:0::1;12284:351:1::0;10647:61:0::1;-1:-1:-1::0;;;;;10722:16:0;::::1;10741:1;10722:16:::0;;;:7:::1;:16;::::0;;;;;:20;10719:108:::1;;-1:-1:-1::0;;;;;10798:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;10778:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;10759:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;10719:108:::1;-1:-1:-1::0;;;;;10837:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;10837:27:0::1;10860:4;10837:27:::0;;::::1;::::0;;;10875:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;10875:23:0::1;::::0;;::::1;::::0;;10573:333::o;24248:183::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;24359:14:::1;4455:1:::0;24359:2:::1;:14;:::i;:::-;24350:23;::::0;:6;:23:::1;:::i;:::-;24336:11;:37:::0;24409:14:::1;4455:1:::0;24409:2:::1;:14;:::i;:::-;24399:24;::::0;:7;:24:::1;:::i;:::-;24384:12;:39:::0;-1:-1:-1;;24248:183:0:o;11765:223::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;11904:47:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;11896:5:::1;:55:::0;;;;;;;;;;;;;;;;;;;11967:13;::::1;::::0;-1:-1:-1;;11967:13:0::1;11765:223:::0;;;;;:::o;22770:331::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;22902:7:::1;:14;22883:8;:15;:33;22875:72;;;::::0;-1:-1:-1;;;22875:72:0;;17794:2:1;22875:72:0::1;::::0;::::1;17776:21:1::0;17833:2;17813:18;;;17806:30;17872:28;17852:18;;;17845:56;17918:18;;22875:72:0::1;17592:350:1::0;22875:72:0::1;22962:9;22958:136;22981:8;:15;22977:1;:19;22958:136;;;23017:65;23032:10;23044:8;23053:1;23044:11;;;;;;;;:::i;:::-;;;;;;;23057:7;23065:1;23057:10;;;;;;;;:::i;:::-;;;;;;;23069:5;23076::::0;23017:14:::1;:65::i;:::-;22998:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22958:136;;;;22770:331:::0;;:::o;7676:198::-;-1:-1:-1;;;;;7766:20:0;;7742:7;7766:20;;;:11;:20;;;;;;;;7762:49;;;-1:-1:-1;;;;;;7795:16:0;;;;;:7;:16;;;;;;;7676:198::o;7762:49::-;-1:-1:-1;;;;;7849:16:0;;;;;;:7;:16;;;;;;7829:37;;:19;:37::i;1825:94::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;1890:21:::1;1908:1;1890:9;:21::i;:::-;1825:94::o:0;23572:104::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23646:10:::1;:22:::0;;-1:-1:-1;;;;;;23646:22:0::1;-1:-1:-1::0;;;;;23646:22:0;;;::::1;::::0;;;::::1;::::0;;23572:104::o;23113:209::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23209:9:::1;23205:110;23228:8;:15;23224:1;:19;23205:110;;;23298:5;23264:18;:31;23283:8;23292:1;23283:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;23264:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;23264:31:0;:39;;-1:-1:-1;;23264:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23245:3;::::1;::::0;::::1;:::i;:::-;;;;23205:110;;23988:101:::0;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;24059:11:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;24059:22:0;;::::1;::::0;;;::::1;::::0;;23988:101::o;24854:196::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;24954:9:::1;24929:21;:34;;24921:71;;;::::0;-1:-1:-1;;;24921:71:0;;15875:2:1;24921:71:0::1;::::0;::::1;15857:21:1::0;15914:2;15894:18;;;15887:30;15953:26;15933:18;;;15926:54;15997:18;;24921:71:0::1;15673:348:1::0;24921:71:0::1;25003:39;::::0;25011:10:::1;::::0;25003:39;::::1;;;::::0;25032:9;;25003:39:::1;::::0;;;25032:9;25011:10;25003:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;8900:390:::0;4266:14;;9006:4;;8985:10;;4266:14;;;:42;;-1:-1:-1;;;;;;4284:24:0;;;;;;:15;:24;;;;;;;;4266:42;4258:78;;;;-1:-1:-1;;;4258:78:0;;;;;;;:::i;:::-;1103:10;9023:24:::1;9050:25:::0;;;:11:::1;:25;::::0;;;;;;;-1:-1:-1;;;;;9050:34:0;::::1;::::0;;;;;;;;9103:35;;::::1;;9095:85;;;::::0;-1:-1:-1;;;9095:85:0;;19202:2:1;9095:85:0::1;::::0;::::1;19184:21:1::0;19241:2;19221:18;;;19214:30;19280:34;19260:18;;;19253:62;-1:-1:-1;;;19331:18:1;;;19324:35;19376:19;;9095:85:0::1;19000:401:1::0;9095:85:0::1;9191:67;1103:10:::0;9214:7;9223:34:::1;9242:15:::0;9223:16;:34:::1;:::i;9191:67::-;-1:-1:-1::0;9278:4:0::1;::::0;8900:390;-1:-1:-1;;;;8900:390:0:o;9302:187::-;4266:14;;9400:4;;9379:10;;4266:14;;;:42;;-1:-1:-1;;;;;;4284:24:0;;;;;;:15;:24;;;;;;;;4266:42;4258:78;;;;-1:-1:-1;;;4258:78:0;;;;;;;:::i;:::-;9421:40:::1;9431:10;9443:9;9454:6;9421:9;:40::i;23330:114::-:0;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23409:15:::1;:27:::0;;-1:-1:-1;;;;;;23409:27:0::1;-1:-1:-1::0;;;;;23409:27:0;;;::::1;::::0;;;::::1;::::0;;23330:114::o;24107:129::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24196:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;24196:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24107:129::o;12000:231::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;12147:47:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;12135:9:::1;:59:::0;;;;;;;;;;;;;;;;;;12210:13;::::1;::::0;-1:-1:-1;;12210:13:0::1;12000:231:::0;;;;;:::o;23456:108::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23532:12:::1;:24:::0;;-1:-1:-1;;;;;;23532:24:0::1;-1:-1:-1::0;;;;;23532:24:0;;;::::1;::::0;;;::::1;::::0;;23456:108::o;23850:130::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23959:13:::1;4455:1;23959:2;:13;:::i;:::-;23950:22;::::0;:6;:22:::1;:::i;:::-;23929:18;:43:::0;-1:-1:-1;23850:130:0:o;24443:123::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;24544:14:::1;4455:1:::0;24544:2:::1;:14;:::i;:::-;24535:23;::::0;:6;:23:::1;:::i;:::-;24518:14;:40:::0;-1:-1:-1;24443:123:0:o;23690:152::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;23784:16:::1;:4:::0;23791:9:::1;23784:16;:::i;:::-;23769:12;:31:::0;-1:-1:-1;23811:15:0::1;:23:::0;;-1:-1:-1;;23811:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23690:152::o;11516:110::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11583:27:0::1;11613:5;11583:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;11583:35:0::1;::::0;;11516:110::o;1927:192::-;1648:7;1675:6;-1:-1:-1;;;;;1675:6:0;1103:10;1737:23;1729:68;;;;-1:-1:-1;;;1729:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2016:22:0;::::1;2008:73;;;::::0;-1:-1:-1;;;2008:73:0;;11676:2:1;2008:73:0::1;::::0;::::1;11658:21:1::0;11715:2;11695:18;;;11688:30;11754:34;11734:18;;;11727:62;-1:-1:-1;;;11805:18:1;;;11798:36;11851:19;;2008:73:0::1;11474:402:1::0;2008:73:0::1;2092:19;2102:8;2092:9;:19::i;16414:335::-:0;-1:-1:-1;;;;;16507:19:0;;16499:68;;;;-1:-1:-1;;;16499:68:0;;17389:2:1;16499:68:0;;;17371:21:1;17428:2;17408:18;;;17401:30;17467:34;17447:18;;;17440:62;-1:-1:-1;;;17518:18:1;;;17511:34;17562:19;;16499:68:0;17187:400:1;16499:68:0;-1:-1:-1;;;;;16586:21:0;;16578:68;;;;-1:-1:-1;;;16578:68:0;;12083:2:1;16578:68:0;;;12065:21:1;12122:2;12102:18;;;12095:30;12161:34;12141:18;;;12134:62;-1:-1:-1;;;12212:18:1;;;12205:32;12254:19;;16578:68:0;11881:398:1;16578:68:0;-1:-1:-1;;;;;16657:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16709:32;;19552:25:1;;;16709:32:0;;19525:18:1;16709:32:0;;;;;;;16414:335;;;:::o;16757:2291::-;-1:-1:-1;;;;;16845:18:0;;16837:68;;;;-1:-1:-1;;;16837:68:0;;16983:2:1;16837:68:0;;;16965:21:1;17022:2;17002:18;;;16995:30;17061:34;17041:18;;;17034:62;-1:-1:-1;;;17112:18:1;;;17105:35;17157:19;;16837:68:0;16781:401:1;16837:68:0;-1:-1:-1;;;;;16924:16:0;;16916:64;;;;-1:-1:-1;;;16916:64:0;;9332:2:1;16916:64:0;;;9314:21:1;9371:2;9351:18;;;9344:30;9410:34;9390:18;;;9383:62;-1:-1:-1;;;9461:18:1;;;9454:33;9504:19;;16916:64:0;9130:399:1;16916:64:0;17008:1;16999:6;:10;16991:64;;;;-1:-1:-1;;;16991:64:0;;16228:2:1;16991:64:0;;;16210:21:1;16267:2;16247:18;;;16240:30;16306:34;16286:18;;;16279:62;-1:-1:-1;;;16357:18:1;;;16350:39;16406:19;;16991:64:0;16026:405:1;16991:64:0;17084:15;17094:4;17084:9;:15::i;:::-;17074:6;:25;;17066:86;;;;-1:-1:-1;;;17066:86:0;;10847:2:1;17066:86:0;;;10829:21:1;10886:2;10866:18;;;10859:30;10925:34;10905:18;;;10898:62;-1:-1:-1;;;10976:18:1;;;10969:47;11033:19;;17066:86:0;10645:413:1;17066:86:0;-1:-1:-1;;;;;17172:20:0;;;;;;:14;:20;;;;;;;;17171:21;:44;;;;-1:-1:-1;;;;;;17197:18:0;;;;;;:14;:18;;;;;;;;17196:19;17171:44;17163:70;;;;-1:-1:-1;;;17163:70:0;;18501:2:1;17163:70:0;;;18483:21:1;18540:2;18520:18;;;18513:30;-1:-1:-1;;;18559:18:1;;;18552:43;18612:18;;17163:70:0;18299:337:1;17163:70:0;-1:-1:-1;;;;;17258:24:0;;;;;;:18;:24;;;;;;;;17257:25;:52;;;;-1:-1:-1;;;;;;17287:22:0;;;;;;:18;:22;;;;;;;;17286:23;17257:52;17254:128;;;17333:14;;;;17325:45;;;;-1:-1:-1;;;17325:45:0;;10500:2:1;17325:45:0;;;10482:21:1;10539:2;10519:18;;;10512:30;-1:-1:-1;;;10558:18:1;;;10551:48;10616:18;;17325:45:0;10298:342:1;17325:45:0;-1:-1:-1;;;;;17406:24:0;;;;;;:18;:24;;;;;;;;17405:25;:52;;;;-1:-1:-1;;;;;;17435:22:0;;;;;;:18;:22;;;;;;;;17434:23;17405:52;:89;;;;-1:-1:-1;17477:13:0;;:17;;17493:1;17477:17;:::i;:::-;17461:12;:33;;17405:89;17402:180;;;17525:4;;-1:-1:-1;;;;;17519:10:0;;;17525:4;;17519:10;;17511:59;;;;-1:-1:-1;;;17511:59:0;;13203:2:1;17511:59:0;;;13185:21:1;13242:2;13222:18;;;13215:30;13281:34;13261:18;;;13254:62;-1:-1:-1;;;13332:18:1;;;13325:34;13376:19;;17511:59:0;13001:400:1;17511:59:0;17613:4;;-1:-1:-1;;;;;17605:12:0;;;17613:4;;17605:12;:39;;;;-1:-1:-1;;;;;;17622:22:0;;;;;;:18;:22;;;;;;;;17621:23;17605:39;:52;;;;-1:-1:-1;17649:8:0;;;;;;;17648:9;17605:52;17602:246;;;17691:11;;17681:6;:21;;17673:63;;;;-1:-1:-1;;;17673:63:0;;9736:2:1;17673:63:0;;;9718:21:1;9775:2;9755:18;;;9748:30;9814:31;9794:18;;;9787:59;9863:18;;17673:63:0;9534:353:1;17673:63:0;17785:14;;17775:6;17759:13;17769:2;17759:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;17751:85;;;;-1:-1:-1;;;17751:85:0;;12842:2:1;17751:85:0;;;12824:21:1;;;12861:18;;;12854:30;12920:34;12900:18;;;12893:62;12972:18;;17751:85:0;12640:356:1;17751:85:0;17879:4;;-1:-1:-1;;;;;17871:12:0;;;17879:4;;17871:12;;;;:39;;-1:-1:-1;;;;;;17888:22:0;;;;;;:18;:22;;;;;;;;17887:23;17871:39;:68;;;;-1:-1:-1;;;;;;17915:24:0;;;;;;:18;:24;;;;;;;;17914:25;17871:68;:81;;;;-1:-1:-1;17944:8:0;;;;;;;17943:9;17871:81;17868:573;;;17986:12;;17976:6;:22;;17968:65;;;;-1:-1:-1;;;17968:65:0;;18843:2:1;17968:65:0;;;18825:21:1;18882:2;18862:18;;;18855:30;18921:32;18901:18;;;18894:60;18971:18;;17968:65:0;18641:354:1;17968:65:0;18057:4;;-1:-1:-1;;;;;18051:10:0;;;18057:4;;18051:10;18048:134;;18115:14;;18105:6;18089:13;18099:2;18089:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;18081:85;;;;-1:-1:-1;;;18081:85:0;;12842:2:1;18081:85:0;;;12824:21:1;;;12861:18;;;12854:30;12920:34;12900:18;;;12893:62;12972:18;;18081:85:0;12640:356:1;18081:85:0;18199:15;;;;18196:234;;;-1:-1:-1;;;;;18273:15:0;;18234:18;18273:15;;;:9;:15;;;;;;18255:33;;:15;:33;:::i;:::-;18234:54;;18329:12;;18315:10;:26;;18307:55;;;;-1:-1:-1;;;18307:55:0;;16638:2:1;18307:55:0;;;16620:21:1;16677:2;16657:18;;;16650:30;-1:-1:-1;;;16696:18:1;;;16689:46;16752:18;;18307:55:0;16436:340:1;18307:55:0;-1:-1:-1;;;;;;18381:15:0;;;;;;:9;:15;;;;;18399;18381:33;;18196:234;18461:12;18504:18;;18476:24;18494:4;18476:9;:24::i;:::-;18538:8;;-1:-1:-1;;18476:46:0;;-1:-1:-1;18538:8:0;;;;;18537:9;:24;;;;-1:-1:-1;18550:11:0;;;;;;;18537:24;:35;;;;;18565:7;18537:35;:51;;;;-1:-1:-1;18584:4:0;;-1:-1:-1;;;;;18576:12:0;;;18584:4;;18576:12;;18537:51;:80;;;;-1:-1:-1;;;;;;18593:24:0;;;;;;:18;:24;;;;;;;;18592:25;18537:80;:107;;;;-1:-1:-1;;;;;;18622:22:0;;;;;;:18;:22;;;;;;;;18621:23;18537:107;18533:202;;;18672:18;;18698:4;;18657:66;;18672:18;-1:-1:-1;;;;;18692:10:0;;;18698:4;;18692:10;:30;;18717:5;18692:30;;;18705:9;18692:30;18657:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:14;:66::i;:::-;18811:8;;18762:4;;18747:12;;18811:8;;;;;;:36;;-1:-1:-1;;;;;;18823:24:0;;;;;;:18;:24;;;;;;;;18811:36;:62;;;-1:-1:-1;;;;;;18851:22:0;;;;;;:18;:22;;;;;;;;18811:62;18807:106;;;18896:5;18886:15;;18807:106;18933:4;;-1:-1:-1;;;;;18927:10:0;;;18933:4;;18927:10;18923:56;;;-1:-1:-1;18963:4:0;18923:56;18991:49;19006:4;19012:2;19016:6;19024:7;19033:6;18991:14;:49::i;:::-;16826:2222;;;16757:2291;;;:::o;22196:562::-;22346:16;;;22360:1;22346:16;;;;;;;;22322:21;;22346:16;;;;;;;;;;-1:-1:-1;22346:16:0;22322:40;;22391:4;22373;22378:1;22373:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22373:23:0;;;:7;;;;;;;;;;:23;;;;22417:6;;:13;;;-1:-1:-1;;;22417:13:0;;;;:6;;;;;:11;;:13;;;;;22373:7;;22417:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22407:4;22412:1;22407:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22407:23:0;;;:7;;;;;;;;;:23;22475:6;;22443:53;;22460:4;;22475:6;22484:11;22443:8;:53::i;:::-;22535:6;;:215;;-1:-1:-1;;;22535:215:0;;-1:-1:-1;;;;;22535:6:0;;;;:57;;:215;;22607:11;;22535:6;;22677:4;;22704;;22724:15;;22535:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15700:158;15741:7;15762:15;15779;15798:19;:17;:19::i;:::-;15761:56;;-1:-1:-1;15761:56:0;-1:-1:-1;15835:15:0;15761:56;;15835:15;:::i;:::-;15828:22;;;;15700:158;:::o;13486:466::-;13572:36;;:::i;:::-;13629:37;13641:7;13650;13659:6;13629:11;:37::i;:::-;13617:49;;13799:53;13812:9;13823:7;13832;13841:10;:8;:10::i;:::-;13799:12;:53::i;:::-;13780:15;;;13673:179;13758:20;;;13673:179;13736:20;;;13673:179;13720:14;;;13673:179;13693:25;;;13673:179;;;13881:44;13674:9;13905:7;13914:10;:8;:10::i;:::-;13881:12;:44::i;:::-;13860:17;;;13859:66;13486:466;;;;;:::o;19132:1231::-;19254:28;19285:36;19296:7;19305;19314:6;19285:10;:36::i;:::-;-1:-1:-1;;;;;19338:19:0;;;;;;:11;:19;;;;;;19254:67;;-1:-1:-1;19338:19:0;;19334:112;;;-1:-1:-1;;;;;19409:15:0;;;;;;:7;:15;;;;;;:25;;19427:7;;19409:25;:::i;:::-;-1:-1:-1;;;;;19391:15:0;;;;;;:7;:15;;;;;:43;19334:112;-1:-1:-1;;;;;19460:22:0;;;;;;:11;:22;;;;;;;;19456:129;;;19556:17;;;;-1:-1:-1;;;;;19535:18:0;;;;;;:7;:18;;;;;;:38;;19556:17;19535:38;:::i;:::-;-1:-1:-1;;;;;19514:18:0;;;;;;:7;:18;;;;;:59;19456:129;19633:9;;-1:-1:-1;;;;;19615:15:0;;19633:9;19615:15;;;:7;:15;;;;;;:27;;19633:9;19615:27;:::i;:::-;-1:-1:-1;;;;;19597:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;19695:17;;;19674:18;;;;;;;;;;:38;;19695:17;19674:38;:::i;:::-;-1:-1:-1;;;;;19653:18:0;;;;;;:7;:18;;;;;;;:59;;;;19729:6;;;:10;;;:24;;;19752:1;19743;:6;;;:10;19729:24;19725:57;;;19755:27;19767:1;:6;;;19775:1;:6;;;19755:11;:27::i;:::-;19812:1;19797;:12;;;:16;:36;;;;19832:1;19817;:12;;;:16;19797:36;19793:212;;;19850:42;19865:1;:12;;;19879:1;:12;;;19850:14;:42::i;:::-;19936:4;-1:-1:-1;;;;;19911:82:0;19920:6;-1:-1:-1;;;;;19911:82:0;;19985:1;:7;;;19973:1;:9;;;19958:1;:12;;;19943:1;:12;;;:27;;;;:::i;:::-;:39;;;;:::i;:::-;:49;;;;:::i;:::-;19911:82;;19552:25:1;;;19540:2;19525:18;19911:82:0;;;;;;;19793:212;20034:1;20019;:12;;;:16;:36;;;;20054:1;20039;:12;;;:16;20019:36;20015:84;;;20057:42;20072:1;:12;;;20086:1;:12;;;20057:14;:42::i;:::-;20126:1;20114;:9;;;:13;:30;;;;20143:1;20131;:9;;;:13;20114:30;20110:69;;;20146:33;20158:1;:9;;;20169:1;:9;;;20146:11;:33::i;:::-;20194:7;;;;:11;20190:55;;20225:10;;20237:7;;;;20207:38;;20217:6;;-1:-1:-1;;;;;20225:10:0;;;;20207:9;:38::i;:::-;20326:9;-1:-1:-1;;;;;20309:46:0;20318:6;-1:-1:-1;;;;;20309:46:0;;20337:1;:17;;;20309:46;;;;19552:25:1;;19540:2;19525:18;;19406:177;20309:46:0;;;;;;;;19243:1120;19132:1231;;;;;:::o;2127:173::-;2183:16;2202:6;;-1:-1:-1;;;;;2219:17:0;;;-1:-1:-1;;;;;;2219:17:0;;;;;;2252:40;;2202:6;;;;;;;2252:40;;2183:16;2252:40;2172:128;2127:173;:::o;20371:1314::-;6223:8;:15;;-1:-1:-1;;6223:15:0;;;;;20541:9:::1;::::0;::::1;::::0;20527:11:::1;::::0;::::1;::::0;20510:14:::1;::::0;::::1;::::0;20493::::1;::::0;::::1;::::0;6223:15;;20541:9;20527:11;20493:31:::1;::::0;::::1;:::i;:::-;:45;;;;:::i;:::-;:57;;;;:::i;:::-;20492:63;::::0;20554:1:::1;20492:63;:::i;:::-;20470:85;;20566:32;20636:11;20619:4;:14;;;20601:15;:32;;;;:::i;:::-;:46;;;;:::i;:::-;20566:81:::0;-1:-1:-1;20658:14:0::1;20675:42;20566:81:::0;20675:15;:42:::1;:::i;:::-;20658:59:::0;-1:-1:-1;20755:21:0::1;20789:24;20658:59:::0;20789:16:::1;:24::i;:::-;20826:20;20849:38;20873:14:::0;20849:21:::1;:38;:::i;:::-;20826:61;;20898:19;20950:4;:14;;;20936:11;:28;;;;:::i;:::-;20920:45;::::0;:12;:45:::1;:::i;:::-;20898:67;;20976:29;21022:4;:14;;;21008:11;:28;;;;:::i;:::-;20976:60:::0;-1:-1:-1;21053:25:0;;21049:116:::1;;21092:61;21105:24;21131:21;21092:12;:61::i;:::-;21218:14;::::0;::::1;::::0;21177:20:::1;::::0;21200:15:::1;:11:::0;21214:1:::1;21200:15;:::i;:::-;:32;;;;:::i;:::-;21177:55:::0;-1:-1:-1;21247:16:0;;21243:96:::1;;21287:15;::::0;21279:48:::1;::::0;-1:-1:-1;;;;;21287:15:0::1;21314:12:::0;21279:34:::1;:48::i;:::-;21387:11;::::0;::::1;::::0;21349:17:::1;::::0;21369:15:::1;:11:::0;21383:1:::1;21369:15;:::i;:::-;:29;;;;:::i;:::-;21349:49:::0;-1:-1:-1;21413:13:0;;21409:88:::1;;21451:12;::::0;21443:42:::1;::::0;-1:-1:-1;;;;;21451:12:0::1;21475:9:::0;21443:31:::1;:42::i;:::-;21543:9;::::0;::::1;::::0;21507:15:::1;::::0;21525::::1;:11:::0;21539:1:::1;21525:15;:::i;:::-;:27;;;;:::i;:::-;21507:45:::0;-1:-1:-1;21564:11:0;;21560:118:::1;;21600:10;::::0;21592:38:::1;::::0;-1:-1:-1;;;;;21600:10:0::1;21622:7:::0;21592:29:::1;:38::i;:::-;-1:-1:-1::0;;6261:8:0;:16;;-1:-1:-1;;6261:16:0;;;-1:-1:-1;;;;;;;;;;20371:1314:0:o;15866:540::-;15963:7;;15999;;15916;;;;;16017:279;16041:9;:16;16037:20;;16017:279;;;16107:7;16083;:21;16091:9;16101:1;16091:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16091:12:0;16083:21;;;;;;;;;;;;;:31;;:66;;;16142:7;16118;:21;16126:9;16136:1;16126:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16126:12:0;16118:21;;;;;;;;;;;;;:31;16083:66;16079:97;;;16159:7;;16168;;16151:25;;;;;;;15866:540;;:::o;16079:97::-;16209:7;:21;16217:9;16227:1;16217:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16217:12:0;16209:21;;;;;;;;;;;;;16201:29;;:7;:29;:::i;:::-;16191:39;;16263:7;:21;16271:9;16281:1;16271:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16271:12:0;16263:21;;;;;;;;;;;;;16255:29;;:7;:29;:::i;:::-;16245:39;-1:-1:-1;16059:3:0;;;;:::i;:::-;;;;16017:279;;;;16328:7;;16320;;:15;;;;:::i;:::-;16310:7;:25;16306:56;;;16345:7;;16354;;16337:25;;;;;;15866:540;;:::o;16306:56::-;16381:7;;16390;;-1:-1:-1;15866:540:0;-1:-1:-1;15866:540:0:o;13960:667::-;14047:28;;:::i;:::-;14094:7;14090:86;;14116:17;;;:27;;;14156:8;;14090:86;14186:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14186:17:0;14217:6;14214:55;;;-1:-1:-1;14225:16:0;;;;;;;;14232:9;14225:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14214:55;;;-1:-1:-1;14257:12:0;;;;;;;;14264:5;14257:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14214:55;14307:8;;14316:3;;14299:16;;:7;:16;:::i;:::-;:20;;;;:::i;:::-;14290:6;;;:29;14353:14;;;;14368:3;;14345:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14330:12;;;:41;14405:14;;;;14420:3;;14397:22;;:7;:22;:::i;:::-;:26;;;;:::i;:::-;14382:12;;;:41;14454:11;;;;14466:3;;14446:19;;:7;:19;:::i;:::-;:23;;;;:::i;:::-;14434:9;;;:35;14498:9;;;;14508:3;;14490:17;;:7;:17;:::i;:::-;:21;;;;:::i;:::-;14480:7;;;:31;;;14583:9;;;;14570:12;;;;14557;;;;14550:6;;;;14542:14;;:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;:58;;;;:::i;:::-;14522:17;;;:78;-1:-1:-1;13960:667:0;;;;;:::o;14635:777::-;14761:15;;;;;;14893:21;14903:11;14893:7;:21;:::i;:::-;14883:31;;14932:7;14927:78;;-1:-1:-1;14964:7:0;;-1:-1:-1;14982:1:0;;-1:-1:-1;14982:1:0;;-1:-1:-1;14982:1:0;;-1:-1:-1;14982:1:0;14956:37;;14927:78;15033:11;15024:1;:6;;;:20;;;;:::i;:::-;15017:27;;15083:11;15068:1;:12;;;:26;;;;:::i;:::-;15055:39;;15133:11;15118:1;:12;;;:26;;;;:::i;:::-;15105:39;;15155:15;15185:11;15173:1;:9;;;:23;;;;:::i;:::-;15155:41;;15225:11;15215:1;:7;;;:21;;;;:::i;:::-;15207:29;-1:-1:-1;15207:29:0;15308:7;15295:10;15282;15265:14;15275:4;15265:7;:14;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;:58;;;;:::i;:::-;15247:76;;15334:70;14635:777;;;;;;;;;;;;:::o;15424:268::-;15533:15;15566:7;15561:51;;-1:-1:-1;15598:1:0;15590:10;;15561:51;15646:11;15634:1;:9;;;:23;;;;:::i;:::-;15624:33;15424:268;-1:-1:-1;;;;15424:268:0:o;12239:123::-;12317:4;12307:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;12332:11:0;:22;;12350:4;;12332:11;:15;;:22;;12350:4;;12332:22;:::i;:::-;;;;-1:-1:-1;;;;12239:123:0:o;12370:284::-;12477:10;12453:11;:21;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;12523:4:0;12503:26;;;;:11;:26;;;;;;;;12500:101;;;12571:4;12555:22;;;;:7;:22;;;;;:34;;12579:10;;12555:22;:34;;12579:10;;12555:34;:::i;:::-;;;;-1:-1:-1;;12500:101:0;12627:4;12611:22;;;;:7;:22;;;;;:35;;12636:10;;12611:22;:35;;12636:10;;12611:35;:::i;12662:284::-;12769:10;12745:11;:21;;;:34;;;;;;;:::i;12958:263::-;13053:7;13032:11;:18;;;:28;;;;;;;:::i;21693:495::-;21873:6;;21841:53;;21858:4;;-1:-1:-1;;;;;21873:6:0;21882:11;21841:8;:53::i;:::-;21937:6;;-1:-1:-1;;;;;21937:6:0;:22;21967:9;22000:4;22020:11;21937:6;;22132:7;1648;1675:6;-1:-1:-1;;;;;1675:6:0;;1602:87;22132:7;21937:243;;;;;;-1:-1:-1;;;;;;21937:243:0;;;-1:-1:-1;;;;;7860:15:1;;;21937:243:0;;;7842:34:1;7892:18;;;7885:34;;;;7935:18;;;7928:34;;;;7978:18;;;7971:34;8042:15;;;8021:19;;;8014:44;22154:15:0;8074:19:1;;;8067:35;7776:19;;21937:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21693:495;;:::o;3072:317::-;3187:6;3162:21;:31;;3154:73;;;;-1:-1:-1;;;3154:73:0;;14387:2:1;3154:73:0;;;14369:21:1;14426:2;14406:18;;;14399:30;14465:31;14445:18;;;14438:59;14514:18;;3154:73:0;14185:353:1;3154:73:0;3241:12;3259:9;-1:-1:-1;;;;;3259:14:0;3281:6;3259:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3240:52;;;3311:7;3303:78;;;;-1:-1:-1;;;3303:78:0;;13608:2:1;3303:78:0;;;13590:21:1;13647:2;13627:18;;;13620:30;13686:34;13666:18;;;13659:62;13757:28;13737:18;;;13730:56;13803:19;;3303:78:0;13406:422:1;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:247::-;826:6;879:2;867:9;858:7;854:23;850:32;847:52;;;895:1;892;885:12;847:52;934:9;921:23;953:31;978:5;953:31;:::i;1019:251::-;1089:6;1142:2;1130:9;1121:7;1117:23;1113:32;1110:52;;;1158:1;1155;1148:12;1110:52;1190:9;1184:16;1209:31;1234:5;1209:31;:::i;1275:388::-;1343:6;1351;1404:2;1392:9;1383:7;1379:23;1375:32;1372:52;;;1420:1;1417;1410:12;1372:52;1459:9;1446:23;1478:31;1503:5;1478:31;:::i;:::-;1528:5;-1:-1:-1;1585:2:1;1570:18;;1557:32;1598:33;1557:32;1598:33;:::i;:::-;1650:7;1640:17;;;1275:388;;;;;:::o;1668:456::-;1745:6;1753;1761;1814:2;1802:9;1793:7;1789:23;1785:32;1782:52;;;1830:1;1827;1820:12;1782:52;1869:9;1856:23;1888:31;1913:5;1888:31;:::i;:::-;1938:5;-1:-1:-1;1995:2:1;1980:18;;1967:32;2008:33;1967:32;2008:33;:::i;:::-;1668:456;;2060:7;;-1:-1:-1;;;2114:2:1;2099:18;;;;2086:32;;1668:456::o;2129:382::-;2194:6;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;2310:9;2297:23;2329:31;2354:5;2329:31;:::i;:::-;2379:5;-1:-1:-1;2436:2:1;2421:18;;2408:32;2449:30;2408:32;2449:30;:::i;2516:315::-;2584:6;2592;2645:2;2633:9;2624:7;2620:23;2616:32;2613:52;;;2661:1;2658;2651:12;2613:52;2700:9;2687:23;2719:31;2744:5;2719:31;:::i;:::-;2769:5;2821:2;2806:18;;;;2793:32;;-1:-1:-1;;;2516:315:1:o;2836:1149::-;2954:6;2962;3015:2;3003:9;2994:7;2990:23;2986:32;2983:52;;;3031:1;3028;3021:12;2983:52;3071:9;3058:23;3100:18;3141:2;3133:6;3130:14;3127:34;;;3157:1;3154;3147:12;3127:34;3180:61;3233:7;3224:6;3213:9;3209:22;3180:61;:::i;:::-;3170:71;;3260:2;3250:12;;3315:2;3304:9;3300:18;3287:32;3344:2;3334:8;3331:16;3328:36;;;3360:1;3357;3350:12;3328:36;3383:24;;;-1:-1:-1;3438:4:1;3430:13;;3426:27;-1:-1:-1;3416:55:1;;3467:1;3464;3457:12;3416:55;3503:2;3490:16;3526:60;3542:43;3582:2;3542:43;:::i;3526:60::-;3608:3;3632:2;3627:3;3620:15;3660:2;3655:3;3651:12;3644:19;;3691:2;3687;3683:11;3739:7;3734:2;3728;3725:1;3721:10;3717:2;3713:19;3709:28;3706:41;3703:61;;;3760:1;3757;3750:12;3703:61;3782:1;3773:10;;3792:163;3806:2;3803:1;3800:9;3792:163;;;3863:17;;3851:30;;3824:1;3817:9;;;;;3901:12;;;;3933;;3792:163;;;3796:3;3974:5;3964:15;;;;;;;2836:1149;;;;;:::o;3990:477::-;4080:6;4088;4141:2;4129:9;4120:7;4116:23;4112:32;4109:52;;;4157:1;4154;4147:12;4109:52;4197:9;4184:23;4230:18;4222:6;4219:30;4216:50;;;4262:1;4259;4252:12;4216:50;4285:61;4338:7;4329:6;4318:9;4314:22;4285:61;:::i;:::-;4275:71;;;4396:2;4385:9;4381:18;4368:32;4409:28;4431:5;4409:28;:::i;4472:241::-;4528:6;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:28;4677:5;4655:28;:::i;4718:245::-;4785:6;4838:2;4826:9;4817:7;4813:23;4809:32;4806:52;;;4854:1;4851;4844:12;4806:52;4886:9;4880:16;4905:28;4927:5;4905:28;:::i;4968:309::-;5033:6;5041;5094:2;5082:9;5073:7;5069:23;5065:32;5062:52;;;5110:1;5107;5100:12;5062:52;5149:9;5136:23;5168:28;5190:5;5168:28;:::i;5282:180::-;5341:6;5394:2;5382:9;5373:7;5369:23;5365:32;5362:52;;;5410:1;5407;5400:12;5362:52;-1:-1:-1;5433:23:1;;5282:180;-1:-1:-1;5282:180:1:o;5467:309::-;5532:6;5540;5593:2;5581:9;5572:7;5568:23;5564:32;5561:52;;;5609:1;5606;5599:12;5561:52;5645:9;5632:23;5622:33;;5705:2;5694:9;5690:18;5677:32;5718:28;5740:5;5718:28;:::i;5781:248::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:52;;;5926:1;5923;5916:12;5878:52;-1:-1:-1;;5949:23:1;;;6019:2;6004:18;;;5991:32;;-1:-1:-1;5781:248:1:o;6034:306::-;6122:6;6130;6138;6191:2;6179:9;6170:7;6166:23;6162:32;6159:52;;;6207:1;6204;6197:12;6159:52;6236:9;6230:16;6220:26;;6286:2;6275:9;6271:18;6265:25;6255:35;;6330:2;6319:9;6315:18;6309:25;6299:35;;6034:306;;;;;:::o;6345:454::-;6440:6;6448;6456;6464;6472;6525:3;6513:9;6504:7;6500:23;6496:33;6493:53;;;6542:1;6539;6532:12;6493:53;-1:-1:-1;;6565:23:1;;;6635:2;6620:18;;6607:32;;-1:-1:-1;6686:2:1;6671:18;;6658:32;;6737:2;6722:18;;6709:32;;-1:-1:-1;6788:3:1;6773:19;6760:33;;-1:-1:-1;6345:454:1;-1:-1:-1;6345:454:1:o;8528:597::-;8640:4;8669:2;8698;8687:9;8680:21;8730:6;8724:13;8773:6;8768:2;8757:9;8753:18;8746:34;8798:1;8808:140;8822:6;8819:1;8816:13;8808:140;;;8917:14;;;8913:23;;8907:30;8883:17;;;8902:2;8879:26;8872:66;8837:10;;8808:140;;;8966:6;8963:1;8960:13;8957:91;;;9036:1;9031:2;9022:6;9011:9;9007:22;9003:31;8996:42;8957:91;-1:-1:-1;9109:2:1;9088:15;-1:-1:-1;;9084:29:1;9069:45;;;;9116:2;9065:54;;8528:597;-1:-1:-1;;;8528:597:1:o;15312:356::-;15514:2;15496:21;;;15533:18;;;15526:30;15592:34;15587:2;15572:18;;15565:62;15659:2;15644:18;;15312:356::o;17947:347::-;18149:2;18131:21;;;18188:2;18168:18;;;18161:30;18227:25;18222:2;18207:18;;18200:53;18285:2;18270:18;;17947:347::o;19588:980::-;19850:4;19898:3;19887:9;19883:19;19929:6;19918:9;19911:25;19955:2;19993:6;19988:2;19977:9;19973:18;19966:34;20036:3;20031:2;20020:9;20016:18;20009:31;20060:6;20095;20089:13;20126:6;20118;20111:22;20164:3;20153:9;20149:19;20142:26;;20203:2;20195:6;20191:15;20177:29;;20224:1;20234:195;20248:6;20245:1;20242:13;20234:195;;;20313:13;;-1:-1:-1;;;;;20309:39:1;20297:52;;20404:15;;;;20369:12;;;;20345:1;20263:9;20234:195;;;-1:-1:-1;;;;;;;20485:32:1;;;;20480:2;20465:18;;20458:60;-1:-1:-1;;;20549:3:1;20534:19;20527:35;20446:3;19588:980;-1:-1:-1;;;19588:980:1:o;21230:275::-;21301:2;21295:9;21366:2;21347:13;;-1:-1:-1;;21343:27:1;21331:40;;21401:18;21386:34;;21422:22;;;21383:62;21380:88;;;21448:18;;:::i;:::-;21484:2;21477:22;21230:275;;-1:-1:-1;21230:275:1:o;21510:183::-;21570:4;21603:18;21595:6;21592:30;21589:56;;;21625:18;;:::i;:::-;-1:-1:-1;21670:1:1;21666:14;21682:4;21662:25;;21510:183::o;21698:128::-;21738:3;21769:1;21765:6;21762:1;21759:13;21756:39;;;21775:18;;:::i;:::-;-1:-1:-1;21811:9:1;;21698:128::o;21831:217::-;21871:1;21897;21887:132;;21941:10;21936:3;21932:20;21929:1;21922:31;21976:4;21973:1;21966:15;22004:4;22001:1;21994:15;21887:132;-1:-1:-1;22033:9:1;;21831:217::o;22053:422::-;22142:1;22185:5;22142:1;22199:270;22220:7;22210:8;22207:21;22199:270;;;22279:4;22275:1;22271:6;22267:17;22261:4;22258:27;22255:53;;;22288:18;;:::i;:::-;22338:7;22328:8;22324:22;22321:55;;;22358:16;;;;22321:55;22437:22;;;;22397:15;;;;22199:270;;;22203:3;22053:422;;;;;:::o;22480:140::-;22538:5;22567:47;22608:4;22598:8;22594:19;22588:4;22674:5;22704:8;22694:80;;-1:-1:-1;22745:1:1;22759:5;;22694:80;22793:4;22783:76;;-1:-1:-1;22830:1:1;22844:5;;22783:76;22875:4;22893:1;22888:59;;;;22961:1;22956:130;;;;22868:218;;22888:59;22918:1;22909:10;;22932:5;;;22956:130;22993:3;22983:8;22980:17;22977:43;;;23000:18;;:::i;:::-;-1:-1:-1;;23056:1:1;23042:16;;23071:5;;22868:218;;23170:2;23160:8;23157:16;23151:3;23145:4;23142:13;23138:36;23132:2;23122:8;23119:16;23114:2;23108:4;23105:12;23101:35;23098:77;23095:159;;;-1:-1:-1;23207:19:1;;;23239:5;;23095:159;23286:34;23311:8;23305:4;23286:34;:::i;:::-;23356:6;23352:1;23348:6;23344:19;23335:7;23332:32;23329:58;;;23367:18;;:::i;:::-;23405:20;;22625:806;-1:-1:-1;;;22625:806:1:o;23436:168::-;23476:7;23542:1;23538;23534:6;23530:14;23527:1;23524:21;23519:1;23512:9;23505:17;23501:45;23498:71;;;23549:18;;:::i;:::-;-1:-1:-1;23589:9:1;;23436:168::o;23609:125::-;23649:4;23677:1;23674;23671:8;23668:34;;;23682:18;;:::i;:::-;-1:-1:-1;23719:9:1;;23609:125::o;23739:135::-;23778:3;-1:-1:-1;;23799:17:1;;23796:43;;;23819:18;;:::i;:::-;-1:-1:-1;23866:1:1;23855:13;;23739:135::o;23879:127::-;23940:10;23935:3;23931:20;23928:1;23921:31;23971:4;23968:1;23961:15;23995:4;23992:1;23985:15;24011:127;24072:10;24067:3;24063:20;24060:1;24053:31;24103:4;24100:1;24093:15;24127:4;24124:1;24117:15;24143:127;24204:10;24199:3;24195:20;24192:1;24185:31;24235:4;24232:1;24225:15;24259:4;24256:1;24249:15;24275:127;24336:10;24331:3;24327:20;24324:1;24317:31;24367:4;24364:1;24357:15;24391:4;24388:1;24381:15;24407:131;-1:-1:-1;;;;;24482:31:1;;24472:42;;24462:70;;24528:1;24525;24518:12;24543:118;24629:5;24622:13;24615:21;24608:5;24605:32;24595:60;;24651:1;24648;24641:12

Swarm Source

ipfs://037564027ac8e806da7a1f6109ba8173e907abbaec693998963175f6b2165be8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.