ETH Price: $2,520.50 (+2.10%)

Token

(0x082663725b947Eccc0968C2b8773dD85e24C5a31)
 

Overview

Max Total Supply

77,000,000,000 ERC-20 TOKEN*

Holders

33

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
168,516,981.785640862363606525 ERC-20 TOKEN*

Value
$0.00
0x271D8B45E092813793c62687522135AcE330beaC
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:
ETHREWARDS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//@robdbeme dev telegram
//Official telegram: t.me/Bonds_Investment Bonds has BSC & Erc version. 

/**
 *Submitted for verification at BscScan.com on 2022-03-09
*/

/**
 *Submitted for verification at BscScan.com on 2022-02-18
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

interface IERC20 
{
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }


    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }


    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }


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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }


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


    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }


    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface DividendPayingTokenInterface 
{
  function dividendOf(address _owner) external view returns(uint256);
  function withdrawDividend() external;
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}

interface DividendPayingTokenOptionalInterface {
  function withdrawableDividendOf(address _owner) external view returns(uint256);
  function withdrawnDividendOf(address _owner) external view returns(uint256);
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}

contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;
  //enter ERC20 token address below
  address public immutable token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); //<--Need to replace

  uint256 constant internal magnitude = 2**128;
  uint256 internal magnifiedDividendPerShare;
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

  constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {

  }


  function distributeETHDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

    if (amount > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (amount).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, amount);

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(payable(msg.sender));
  }


 function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = IERC20(token).transfer(user, _withdrawableDividend);

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }


  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }

  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}




library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) public view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
        return map.keys[index];
    }



    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}


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

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

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

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


interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function stopTrade() external onlyOwner {
        isOpen = false;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}

contract ETHREWARDS is ERC20, LockToken {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    bool private swapping;

    ETHREWARDSDividendTracker public dividendTracker;

    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    //insert your ERC20 Token address below to replace BUSD
    address public immutable token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); //BUSD <--Need to replace

    uint256 public _totalSupply = 77_000_000_000 * (10**18);
    uint256 public swapTokensAtAmount = 100_000_000 * (10**18); //50 millions. 
    uint256 public _maxTxAmount = _totalSupply.mul(2).div(100);//2%

    uint256 public ETHRewardsFee = 3;
    uint256 public liquidityFee = 1;
    uint256 public marketingFee = 3;
    uint256 public buybackFee = 3;

    uint256 public totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(buybackFee);

    address payable public _marketingWalletAddress = payable(0x8402ce27b4095802f0ef53F0F5ED3331b31ffdbC);
    address payable public _buybackWalletAddress = payable(0xF66eDB5bc556143263babbd232F5A124d24Ec15b);

    uint256 public gasForProcessing = 300000;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(uint256 iterations, uint256 claims,uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);

    constructor() ERC20("ETH Rewards", "ERT") 
    {
        dividendTracker = new ETHREWARDSDividendTracker();
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        // exclude from receiving dividends
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(deadWallet);
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        /*
            _mint is an internal function in BEP20.sol that is only called here,
            and CANNOT be called ever again
        */

        //  Exclude from whale. 
        excludeWalletsFromWhales();
        _mint(owner(), _totalSupply);
    }

    receive() external payable { }


    function updateDividendTracker(address newAddress) public onlyOwner 
    {
        require(newAddress != address(dividendTracker), "ETHREWARDS: The dividend tracker already has that address");
        ETHREWARDSDividendTracker newDividendTracker = ETHREWARDSDividendTracker(payable(newAddress));
        require(newDividendTracker.owner() == address(this), "ETHREWARDS: The new dividend tracker must be owned by the ETHREWARDS token contract");
        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(owner());
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));
        emit UpdateDividendTracker(newAddress, address(dividendTracker));
        dividendTracker = newDividendTracker;
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "ETHREWARDS: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "ETHREWARDS: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setMarketingWallet(address payable wallet) external onlyOwner{
        _marketingWalletAddress = wallet;
    }

    function setETHRewardsFee(uint256 value) external onlyOwner{
        ETHRewardsFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(buybackFee);
        require(totalFees<=30, "To High Fee");
    }

    function setLiquidityFee(uint256 value) external onlyOwner{
        liquidityFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(buybackFee);
        require(totalFees<=30, "To High Fee");
    }

    function setMarketingFee(uint256 value) external onlyOwner{
        marketingFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(buybackFee);
        require(totalFees<=30, "To High Fee");
    }


    function setBuybackFee(uint256 value) external onlyOwner {
        buybackFee = value;
        totalFees = ETHRewardsFee.add(liquidityFee).add(marketingFee).add(buybackFee);
        require(totalFees<=30, "To High Fee");
    } 

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "ETHREWARDS: The ETHSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "ETHREWARDS: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 500000, "ETHREWARDS: gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, "ETHREWARDS: Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }

    function setSwapTokensAtAmount(uint256 _value) external onlyOwner
    {
        swapTokensAtAmount = _value;
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function withdrawableDividendOf(address account) public view returns(uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function excludeFromDividends(address account) external onlyOwner{
        dividendTracker.excludeFromDividends(account);
    }

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return dividendTracker.getLastProcessedIndex();
    }

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }


    function recoverERC20Tokens(address _token, uint256 _amount) external onlyOwner
    {
        uint256 balance = address(this).balance;
        require(balance >= _amount, "Cannot recover more than available balance");
        IERC20(_token).transfer(owner(), _amount);
    }


    function recoverETH(uint256 _amount) external onlyOwner
    {
        payable(owner()).transfer(_amount);
    }    


    function _transfer(address from, address to, uint256 amount) internal open(from, to) override 
    {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( canSwap && !swapping && swapAndLiquifyEnabled &&
        !automatedMarketMakerPairs[from] && from != owner()) 
        {
            swapping = true;

            uint256 swapableFees = totalFees.sub(ETHRewardsFee); // marketingFee+buybackFee+liquidityFee.
            uint256 swapTokens = contractTokenBalance.mul(swapableFees).div(totalFees);
            swapAndLiquify(swapTokens);

            uint256 sellTokens = balanceOf(address(this));
            swapAndSendDividends(sellTokens);
            swapping = false;

        }


        bool takeFee = !swapping;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) 
        {
            takeFee = false;
        }

        if(takeFee) 
        {
            uint256 fees = amount.mul(totalFees).div(100);
            amount = amount.sub(fees);
            super._transfer(from, address(this), fees);
        }

        checkForWhale(from, to, amount);
        super._transfer(from, to, amount);
        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if(!swapping) 
        {
            uint256 gas = gasForProcessing;
            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            }
            catch {

            }
        }
    }


    function swapAndLiquify(uint256 tokens) private 
    {
       uint256 swapableFee = totalFees.sub(ETHRewardsFee);
        uint256 halfLiquidityTokens = tokens.mul(liquidityFee).div(swapableFee).div(2);
        uint256 swapableTokens = tokens.sub(halfLiquidityTokens);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(swapableTokens); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 ethForLiquidity = newBalance.mul(liquidityFee).div(swapableFee).div(2);
        // add liquidity to uniswap
        addLiquidity(halfLiquidityTokens, ethForLiquidity);
        emit SwapAndLiquify(halfLiquidityTokens, ethForLiquidity, halfLiquidityTokens);
        uint256 ethForMarketing = newBalance.mul(marketingFee).div(swapableFee);
        uint256 ethForBuyback = newBalance.sub(ethForLiquidity).sub(ethForMarketing);
        _marketingWalletAddress.transfer(ethForMarketing);
        _buybackWalletAddress.transfer(ethForBuyback);
    }


    function swapTokensForEth(uint256 tokenAmount) private 
    {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private 
    {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = token;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    }

    function swapAndSendDividends(uint256 tokens) private{
        swapTokensForETH(tokens);
        uint256 dividends = IERC20(token).balanceOf(address(this));
        bool success = IERC20(token).transfer(address(dividendTracker), dividends);

        if (success) {
            dividendTracker.distributeETHDividends(dividends);
            emit SendDividends(tokens, dividends);
        }
    }

    function setMaxTxAmount(uint256 _amount) external onlyOwner
    {
        _maxTxAmount = _amount;
    }

    //----SWAP AND LIQUIFY---///
    bool public swapAndLiquifyEnabled = false;
    event SwapAndLiquifyEnabledUpdated(bool enabled);

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

    mapping (address => bool) private _isExcludedFromWhale;
    uint256 public _walletHoldingMaxLimit = _totalSupply.div(100).mul(2); //2%
    uint256 public _amountDueForSaleLimit = _totalSupply.div(1000000); //0.0000001%

    uint256 maxAllowedSalePercentage = 50;



    function excludeWalletsFromWhales() private 
    {
        _isExcludedFromWhale[owner()]=true;
        _isExcludedFromWhale[address(this)]=true;
        _isExcludedFromWhale[address(0)]=true;
        _isExcludedFromWhale[uniswapV2Pair]=true;
    }


    function checkForWhale(address from, address to, uint256 amount) 
    private view
    {
        uint256 newBalance = balanceOf(to).add(amount);
        if(!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 
        if(automatedMarketMakerPairs[from] && !_isExcludedFromWhale[to]) 
        { 
            require(newBalance <= _walletHoldingMaxLimit, "Exceeding max tokens limit in the wallet"); 
        } 

        if(automatedMarketMakerPairs[to] && !_isExcludedFromWhale[from]) 
        { 
            uint256 _balance = balanceOf(from);
            if(_balance>_amountDueForSaleLimit)
            {
                uint256 allowedToSell = _balance.mul(maxAllowedSalePercentage).div(100);
                require(amount <= allowedToSell, "Exceeding Allowed Sale Limit"); 
            }

        }
    }
 
    function updateMaxAllowedSalePercentage(uint256 _percent) external onlyOwner 
    {
        maxAllowedSalePercentage = _percent;
    }


    function setExcludedFromWhale(address account, bool _enabled) external onlyOwner 
    {
        _isExcludedFromWhale[account] = _enabled;
    } 

    function  setWalletMaxHoldingLimit(uint256 _amount) external onlyOwner 
    {
            _walletHoldingMaxLimit = _amount;
    } 


    function  setAmountDueForSaleLimit(uint256 _amount) external onlyOwner 
    {
            _amountDueForSaleLimit = _amount;
    } 


}

contract ETHREWARDSDividendTracker is Ownable, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping (address => bool) public excludedFromDividends;

    mapping (address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() DividendPayingToken("ETHREWARDS_Dividend_Tracker", "ETHREWARDS_Dividend_Tracker") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 2000_000 * (10**18); //must hold 2 Millions+ tokens
    }

    function _transfer(address, address, uint256) internal pure override {
        require(false, "ETHREWARDS_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "ETHREWARDS_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main ETHREWARDS contract.");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ETHREWARDS_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "ETHREWARDS_Dividend_Tracker: Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns(uint256) {
        return tokenHoldersMap.keys.length;
    }



    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable) {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if(index >= 0) {
            if(uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ?
                                                        tokenHoldersMap.keys.length.sub(lastProcessedIndex) :
                                                        0;


                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }


        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ?
                                    lastClaimTime.add(claimWait) :
                                    0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
    }

    function getAccountAtIndex(uint256 index)
        public view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        if(index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if(lastClaimTime > block.timestamp)  {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if(numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while(gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if(canAutoClaim(lastClaimTimes[account])) {
                if(processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if(gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }



    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"ETHRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_amountDueForSaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract ETHREWARDSDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setAmountDueForSaleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBuybackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setETHRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"updateMaxAllowedSalePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526005805460ff60a01b19169055600a805461dead6001600160a01b03199091161790557fdac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006080526bf8cce83c11b69251c8000000600b8190556a52b7d2dcc80cd2e4000000600c55620000a1906064906200008d9060026200074c602090811b6200261017901c565b620007e060201b620026961790919060201c565b600d556003600e556001600f5560036010556003601155620000f8601154620000e4601054620000e4600f54600e546200082a60201b620026d81790919060201c565b6200082a60201b620026d81790919060201c565b60125560138054738402ce27b4095802f0ef53f0f5ed3331b31ffdbc6001600160a01b0319918216179091556014805473f66edb5bc556143263babbd232f5a124d24ec15b9216919091179055620493e06015556018805460ff19169055600b546200018e906002906200017a906064620007e0602090811b6200269617901c565b6200074c60201b620026101790919060201c565b601a55620001b0620f4240600b54620007e060201b620026961790919060201c565b601b556032601c55348015620001c557600080fd5b506040518060400160405280600b81526020016a455448205265776172647360a81b8152506040518060400160405280600381526020016211549560ea1b81525081600390805190602001906200021e92919062000d36565b5080516200023490600490602084019062000d36565b5050506000620002496200088d60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000908152600660205260408082208054600160ff1991821681179092553084529282902080549093161790915551620002d29062000dc5565b604051809103906000f080158015620002ef573d6000803e3d6000fd5b50600960006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036b57600080fd5b505afa15801562000380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a6919062000dea565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ef57600080fd5b505afa15801562000404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042a919062000dea565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200047357600080fd5b505af115801562000488573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ae919062000dea565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050620004ed81600162000891565b60095460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b1580156200053457600080fd5b505af115801562000549573d6000803e3d6000fd5b505060095460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200059357600080fd5b505af1158015620005a8573d6000803e3d6000fd5b50506009546001600160a01b031691506331e79db09050620005d26005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200061457600080fd5b505af115801562000629573d6000803e3d6000fd5b5050600954600a5460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200067757600080fd5b505af11580156200068c573d6000803e3d6000fd5b505060095460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620006d857600080fd5b505af1158015620006ed573d6000803e3d6000fd5b505050506200070d6200070562000a0260201b60201c565b600162000a11565b6200071a30600162000a11565b6200072462000b63565b620007446200073b6005546001600160a01b031690565b600b5462000bfe565b505062000f20565b6000826200075d57506000620007da565b60006200076b838562000eab565b9050826200077a858362000e88565b14620007d75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620007d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cfa60201b60201c565b60008062000839838562000e6d565b905083811015620007d75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620007ce565b3390565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415620009365760405162461bcd60e51b8152602060048201526044602482018190527f455448524557415244533a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a401620007ce565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155620009c65760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620009ac57600080fd5b505af1158015620009c1573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031690565b6005546001600160a01b0316331462000a6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620007ce565b6001600160a01b03821660009081526016602052604090205460ff161515811515141562000b045760405162461bcd60e51b815260206004820152603660248201527f455448524557415244533a204163636f756e7420697320616c7265616479207460448201527f68652076616c7565206f6620276578636c7564656427000000000000000000006064820152608401620007ce565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60016019600062000b7c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260199093528183208054851660019081179091557fd2ac945fcc0096878c763e37d6929b78378c1a2defabde8ba7ee5ed1d6e7a5b28054861682179055600854909116835291208054909216179055565b6001600160a01b03821662000c565760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620007ce565b62000c72816002546200082a60201b620026d81790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000ca5918390620026d86200082a821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000818362000d1e5760405162461bcd60e51b8152600401620007ce919062000e15565b50600062000d2d848662000e88565b95945050505050565b82805462000d449062000ecd565b90600052602060002090601f01602090048101928262000d68576000855562000db3565b82601f1062000d8357805160ff191683800117855562000db3565b8280016001018555821562000db3579182015b8281111562000db357825182559160200191906001019062000d96565b5062000dc192915062000dd3565b5090565b61222a806200502b83390190565b5b8082111562000dc1576000815560010162000dd4565b60006020828403121562000dfd57600080fd5b81516001600160a01b0381168114620007d757600080fd5b600060208083528351808285015260005b8181101562000e445785810183015185820160400152820162000e26565b8181111562000e57576000604083870101525b50601f01601f1916929092016040019392505050565b6000821982111562000e835762000e8362000f0a565b500190565b60008262000ea657634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000ec85762000ec862000f0a565b500290565b600181811c9082168062000ee257607f821691505b6020821081141562000f0457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c6140d762000f5460003960008181610ce201528181613221015281816132d201526138ba01526140d76000f3fe6080604052600436106104145760003560e01c8063712847301161021e578063a9059cbb11610123578063dd62ed3e116100ab578063ec28438a1161007a578063ec28438a14610c5b578063f27fd25414610c7b578063f2fde38b14610c9b578063fb201b1d14610cbb578063fc0c546a14610cd057600080fd5b8063dd62ed3e14610bca578063e2f4560514610c10578063e7841ec014610c26578063e98030c714610c3b57600080fd5b8063b6cba7eb116100f2578063b6cba7eb14610b2a578063c024666814610b4a578063c492f04614610b6a578063c49b9a8014610b8a578063d333555314610baa57600080fd5b8063a9059cbb14610a55578063ad56c13c14610a75578063afa4f3b214610ada578063b62496f514610afa57600080fd5b80638c0344db116101a65780639a7a23d6116101755780639a7a23d6146109ca5780639c1b8af5146109ea578063a26579ad14610a00578063a457c2d714610a15578063a8b9d24014610a3557600080fd5b80638c0344db1461096b5780638da5cb5b1461098157806395d89b411461099f57806398118cb4146109b457600080fd5b80637e298cf2116101ed5780637e298cf2146108d657806385141a77146108f6578063871c128d1461091657806388bdd9be146109365780638baeefce1461095657600080fd5b80637128473014610875578063715018a61461089557806372b28e45146108aa5780637d1db4a5146108c057600080fd5b80634144d9e4116103245780634fbee193116102ac57806365b8dbc01161027b57806365b8dbc0146107df5780636843cd84146107ff5780636b67c4df1461081f578063700bb1911461083557806370a082311461085557600080fd5b80634fbee193146107515780635d098b381461078a578063625e764c146107aa57806364b0f653146107ca57600080fd5b806347535d7b116102f357806347535d7b146106c157806349bd5a5e146106e25780634a74bb02146107025780634e3c06b11461071c5780634e71d92d1461073c57600080fd5b80634144d9e41461064157806344d4225f146106615780634567bfba1461068157806345f57977146106a157600080fd5b80632c1f5216116103a757806331e79db01161037657806331e79db0146105b5578063357bf15c146105d557806339509351146105f55780633b2d081c146106155780633eaaf86b1461062b57600080fd5b80632c1f52161461054e57806330bb4cff1461056e57806331201d2014610583578063313ce5671461059957600080fd5b80631694505e116103e35780631694505e146104c157806318160ddd146104f957806323b872dd1461050e57806329d95d5d1461052e57600080fd5b806306fdde0314610420578063095ea7b31461044b5780630b6bb6f51461047b57806313114a9d1461049d57600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610d04565b6040516104429190613d18565b60405180910390f35b34801561045757600080fd5b5061046b610466366004613aa7565b610d96565b6040519015158152602001610442565b34801561048757600080fd5b5061049b610496366004613b59565b610dad565b005b3480156104a957600080fd5b506104b360125481565b604051908152602001610442565b3480156104cd57600080fd5b506007546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561050557600080fd5b506002546104b3565b34801561051a57600080fd5b5061046b6105293660046139ce565b610e52565b34801561053a57600080fd5b506014546104e1906001600160a01b031681565b34801561055a57600080fd5b506009546104e1906001600160a01b031681565b34801561057a57600080fd5b506104b3610ebb565b34801561058f57600080fd5b506104b3601b5481565b3480156105a557600080fd5b5060405160128152602001610442565b3480156105c157600080fd5b5061049b6105d036600461395b565b610f3d565b3480156105e157600080fd5b5061049b6105f0366004613c5f565b610fca565b34801561060157600080fd5b5061046b610610366004613aa7565b61105f565b34801561062157600080fd5b506104b360115481565b34801561063757600080fd5b506104b3600b5481565b34801561064d57600080fd5b506013546104e1906001600160a01b031681565b34801561066d57600080fd5b5061049b61067c366004613c5f565b611095565b34801561068d57600080fd5b5061049b61069c366004613c5f565b6110c4565b3480156106ad57600080fd5b5061049b6106bc366004613c5f565b61110d565b3480156106cd57600080fd5b5060055461046b90600160a01b900460ff1681565b3480156106ee57600080fd5b506008546104e1906001600160a01b031681565b34801561070e57600080fd5b5060185461046b9060ff1681565b34801561072857600080fd5b5061049b610737366004613a0f565b611157565b34801561074857600080fd5b5061049b6111ac565b34801561075d57600080fd5b5061046b61076c36600461395b565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561079657600080fd5b5061049b6107a536600461395b565b611230565b3480156107b657600080fd5b5061049b6107c5366004613c5f565b61127c565b3480156107d657600080fd5b506104b36112d0565b3480156107eb57600080fd5b5061049b6107fa36600461395b565b611315565b34801561080b57600080fd5b506104b361081a36600461395b565b6115b8565b34801561082b57600080fd5b506104b360105481565b34801561084157600080fd5b5061049b610850366004613c5f565b611637565b34801561086157600080fd5b506104b361087036600461395b565b611718565b34801561088157600080fd5b5061049b610890366004613c5f565b611733565b3480156108a157600080fd5b5061049b611762565b3480156108b657600080fd5b506104b3601a5481565b3480156108cc57600080fd5b506104b3600d5481565b3480156108e257600080fd5b5061049b6108f1366004613c5f565b6117d6565b34801561090257600080fd5b50600a546104e1906001600160a01b031681565b34801561092257600080fd5b5061049b610931366004613c5f565b611805565b34801561094257600080fd5b5061049b61095136600461395b565b611964565b34801561096257600080fd5b5061049b611d15565b34801561097757600080fd5b506104b3600e5481565b34801561098d57600080fd5b506005546001600160a01b03166104e1565b3480156109ab57600080fd5b50610435611d4e565b3480156109c057600080fd5b506104b3600f5481565b3480156109d657600080fd5b5061049b6109e5366004613a0f565b611d5d565b3480156109f657600080fd5b506104b360155481565b348015610a0c57600080fd5b506104b3611e2b565b348015610a2157600080fd5b5061046b610a30366004613aa7565b611e70565b348015610a4157600080fd5b506104b3610a5036600461395b565b611ebf565b348015610a6157600080fd5b5061046b610a70366004613aa7565b611ef2565b348015610a8157600080fd5b50610a95610a9036600461395b565b611eff565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610442565b348015610ae657600080fd5b5061049b610af5366004613c5f565b611fa9565b348015610b0657600080fd5b5061046b610b1536600461395b565b60176020526000908152604090205460ff1681565b348015610b3657600080fd5b5061049b610b45366004613aa7565b611fd8565b348015610b5657600080fd5b5061049b610b65366004613a0f565b61210d565b348015610b7657600080fd5b5061049b610b85366004613ad3565b612224565b348015610b9657600080fd5b5061049b610ba5366004613c25565b612300565b348015610bb657600080fd5b5061049b610bc5366004613c5f565b612371565b348015610bd657600080fd5b506104b3610be5366004613995565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c1c57600080fd5b506104b3600c5481565b348015610c3257600080fd5b506104b36123d5565b348015610c4757600080fd5b5061049b610c56366004613c5f565b61241a565b348015610c6757600080fd5b5061049b610c76366004613c5f565b612475565b348015610c8757600080fd5b50610a95610c96366004613c5f565b6124a4565b348015610ca757600080fd5b5061049b610cb636600461395b565b6124e6565b348015610cc757600080fd5b5061049b6125d1565b348015610cdc57600080fd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b606060038054610d1390613f53565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3f90613f53565b8015610d8c5780601f10610d6157610100808354040283529160200191610d8c565b820191906000526020600020905b815481529060010190602001808311610d6f57829003601f168201915b5050505050905090565b6000610da3338484612737565b5060015b92915050565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610dd790613db0565b60405180910390fd5b60005b81518160ff161015610e4e57600160066000848460ff1681518110610e0a57610e0a613fdf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e4681613fa9565b915050610de3565b5050565b6000610e5f84848461285c565b610eb18433610eac85604051806060016040528060288152602001614055602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612d5c565b612737565b5060019392505050565b600954604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f389190613c78565b905090565b6005546001600160a01b03163314610f675760405162461bcd60e51b8152600401610dd790613db0565b60095460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610dd790613db0565b600f819055601154601054600e546110199291611013918290866126d8565b906126d8565b6012819055601e101561105c5760405162461bcd60e51b815260206004820152600b60248201526a546f20486967682046656560a81b6044820152606401610dd7565b50565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da3918590610eac90866126d8565b6005546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610dd790613db0565b601a55565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610dd790613db0565b6011819055601054600f54600e546110199284926110139283916126d8565b6005546001600160a01b031633146111375760405162461bcd60e51b8152600401610dd790613db0565b600e819055601154601054600f54611019929161101391829086906126d8565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60095460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b3790604401602060405180830381600087803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c9190613c42565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610dd790613db0565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610dd790613db0565b80601081905550611019601154611013601054611013600f54600e546126d890919063ffffffff16565b600954604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610f0057600080fd5b6005546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610dd790613db0565b6007546001600160a01b03828116911614156113b55760405162461bcd60e51b815260206004820152602f60248201527f455448524557415244533a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610dd7565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f9190613978565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115149190613978565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190613978565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6009546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b1580156115ff57600080fd5b505afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613c78565b6009546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c47990602401606060405180830381600087803b15801561168557600080fd5b505af1158015611699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bd9190613c91565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610dd790613db0565b601b55565b6005546001600160a01b0316331461178c5760405162461bcd60e51b8152600401610dd790613db0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118005760405162461bcd60e51b8152600401610dd790613db0565b601c55565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610dd790613db0565b62030d40811015801561184557506207a1208111155b6118b9576040805162461bcd60e51b81526020600482015260248101919091527f455448524557415244533a20676173466f7250726f63657373696e67206d757360448201527f74206265206265747765656e203230302c30303020616e64203530302c3030306064820152608401610dd7565b6015548114156119315760405162461bcd60e51b815260206004820152603860248201527f455448524557415244533a2043616e6e6f742075706461746520676173466f7260448201527f50726f63657373696e6720746f2073616d652076616c756500000000000000006064820152608401610dd7565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b0316331461198e5760405162461bcd60e51b8152600401610dd790613db0565b6009546001600160a01b0382811691161415611a125760405162461bcd60e51b815260206004820152603960248201527f455448524557415244533a20546865206469766964656e6420747261636b657260448201527f20616c72656164792068617320746861742061646472657373000000000000006064820152608401610dd7565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190613978565b6001600160a01b031614611b2a5760405162461bcd60e51b815260206004820152605360248201527f455448524557415244533a20546865206e6577206469766964656e642074726160448201527f636b6572206d757374206265206f776e6564206279207468652045544852455760648201527210549114c81d1bdad95b8818dbdb9d1c9858dd606a1b608482015260a401610dd7565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611b6c57600080fd5b505af1158015611b80573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611bfe6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611c3f57600080fd5b505af1158015611c53573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b50506009546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600980546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b03163314611d3f5760405162461bcd60e51b8152600401610dd790613db0565b6005805460ff60a01b19169055565b606060048054610d1390613f53565b6005546001600160a01b03163314611d875760405162461bcd60e51b8152600401610dd790613db0565b6008546001600160a01b0383811691161415611e215760405162461bcd60e51b815260206004820152604d60248201527f455448524557415244533a20546865204554485377617020706169722063616e60448201527f6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d617260648201526c6b65744d616b6572506169727360981b608482015260a401610dd7565b610e4e8282612d96565b60095460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015610f0057600080fd5b6000610da33384610eac8560405180606001604052806025815260200161407d602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612d5c565b6009546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016115e7565b6000610da333848461285c565b60095460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b6101006040518083038186803b158015611f5657600080fd5b505afa158015611f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8e9190613a3d565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611fd35760405162461bcd60e51b8152600401610dd790613db0565b600c55565b6005546001600160a01b031633146120025760405162461bcd60e51b8152600401610dd790613db0565b47818110156120665760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74207265636f766572206d6f7265207468616e20617661696c61626044820152696c652062616c616e636560b01b6064820152608401610dd7565b826001600160a01b031663a9059cbb6120876005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156120cf57600080fd5b505af11580156120e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121079190613c42565b50505050565b6005546001600160a01b031633146121375760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b03821660009081526016602052604090205460ff16151581151514156121c55760405162461bcd60e51b815260206004820152603660248201527f455448524557415244533a204163636f756e7420697320616c7265616479207460448201527568652076616c7565206f6620276578636c756465642760501b6064820152608401610dd7565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461224e5760405162461bcd60e51b8152600401610dd790613db0565b60005b828110156122bf57816016600086868581811061227057612270613fdf565b9050602002016020810190612285919061395b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806122b781613f8e565b915050612251565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516122f393929190613cbf565b60405180910390a1505050565b6005546001600160a01b0316331461232a5760405162461bcd60e51b8152600401610dd790613db0565b6018805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6005546001600160a01b0316331461239b5760405162461bcd60e51b8152600401610dd790613db0565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6009546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015610f0057600080fd5b6005546001600160a01b031633146124445760405162461bcd60e51b8152600401610dd790613db0565b60095460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610f95565b6005546001600160a01b0316331461249f5760405162461bcd60e51b8152600401610dd790613db0565b600d55565b600954604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611f3d565b6005546001600160a01b031633146125105760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b0381166125755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125fb5760405162461bcd60e51b8152600401610dd790613db0565b6005805460ff60a01b1916600160a01b179055565b60008261261f57506000610da7565b600061262b8385613f1d565b9050826126388583613efb565b1461268f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd7565b9392505050565b600061268f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f02565b6000806126e58385613ee3565b90508381101561268f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dd7565b6001600160a01b0383166127995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd7565b6001600160a01b0382166127fa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60055483908390600160a01b900460ff168061289057506001600160a01b03821660009081526006602052604090205460ff165b806128b357506001600160a01b03811660009081526006602052604090205460ff165b6128ea5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610dd7565b6001600160a01b0385166129105760405162461bcd60e51b8152600401610dd790613de5565b6001600160a01b0384166129365760405162461bcd60e51b8152600401610dd790613d6d565b6005546001600160a01b0386811691161480159061296257506005546001600160a01b03858116911614155b156129ca57600d548311156129ca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dd7565b826129e0576129db85856000612f30565b610fc3565b60006129eb30611718565b600c5490915081108015908190612a0c5750600854600160a01b900460ff16155b8015612a1a575060185460ff165b8015612a3f57506001600160a01b03871660009081526017602052604090205460ff16155b8015612a5957506005546001600160a01b03888116911614155b15612ad9576008805460ff60a01b1916600160a01b179055600e54601254600091612a849190613039565b90506000612aa7601254612aa1848761261090919063ffffffff16565b90612696565b9050612ab28161307b565b6000612abd30611718565b9050612ac881613200565b50506008805460ff60a01b19169055505b6008546001600160a01b03881660009081526016602052604090205460ff600160a01b909204821615911680612b2757506001600160a01b03871660009081526016602052604090205460ff165b15612b30575060005b8015612b6d576000612b526064612aa16012548a61261090919063ffffffff16565b9050612b5e8782613039565b9650612b6b893083612f30565b505b612b788888886133f2565b612b83888888612f30565b6009546001600160a01b031663e30443bc89612b9e81611718565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612be457600080fd5b505af1925050508015612bf5575060015b506009546001600160a01b031663e30443bc88612c1181611718565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612c5757600080fd5b505af1925050508015612c68575060015b50600854600160a01b900460ff16612d52576015546009546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401606060405180830381600087803b158015612cc657600080fd5b505af1925050508015612cf6575060408051601f3d908101601f19168201909252612cf391810190613c91565b60015b612cff57612d50565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b5050505050505050565b60008184841115612d805760405162461bcd60e51b8152600401610dd79190613d18565b506000612d8d8486613f3c565b95945050505050565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415612e395760405162461bcd60e51b8152602060048201526044602482018190527f455448524557415244533a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a401610dd7565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155612ec65760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015612ead57600080fd5b505af1158015612ec1573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183612f235760405162461bcd60e51b8152600401610dd79190613d18565b506000612d8d8486613efb565b6001600160a01b038316612f565760405162461bcd60e51b8152600401610dd790613de5565b6001600160a01b038216612f7c5760405162461bcd60e51b8152600401610dd790613d6d565b612fb98160405180606001604052806026815260200161402f602691396001600160a01b0386166000908152602081905260409020549190612d5c565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612fe890826126d8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161284f565b600061268f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5c565b6000613094600e5460125461303990919063ffffffff16565b905060006130b66002612aa184612aa1600f548861261090919063ffffffff16565b905060006130c48483613039565b9050476130d0826135a8565b60006130dc4783613039565b905060006130fe6002612aa188612aa1600f548761261090919063ffffffff16565b905061310a8582613709565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1600061316687612aa16010548661261090919063ffffffff16565b9050600061317e826131788686613039565b90613039565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156131b9573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156131f4573d6000803e3d6000fd5b50505050505050505050565b613209816137c2565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561326b57600080fd5b505afa15801561327f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a39190613c78565b60095460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133509190613c42565b905080156133ed576009546040516351c2a0e360e01b8152600481018490526001600160a01b03909116906351c2a0e390602401600060405180830381600087803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc393500190506122f3565b505050565b60006134018261101385611718565b6001600160a01b03851660009081526019602052604090205490915060ff1615801561344657506001600160a01b03831660009081526019602052604090205460ff16155b1561346d57601a5481111561346d5760405162461bcd60e51b8152600401610dd790613e2a565b6001600160a01b03841660009081526017602052604090205460ff1680156134ae57506001600160a01b03831660009081526019602052604090205460ff16155b156134d557601a548111156134d55760405162461bcd60e51b8152600401610dd790613e2a565b6001600160a01b03831660009081526017602052604090205460ff16801561351657506001600160a01b03841660009081526019602052604090205460ff16155b1561210757600061352685611718565b9050601b54811115610fc357600061354e6064612aa1601c548561261090919063ffffffff16565b9050808411156135a05760405162461bcd60e51b815260206004820152601c60248201527f457863656564696e6720416c6c6f7765642053616c65204c696d6974000000006044820152606401610dd7565b505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135dd576135dd613fdf565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561363157600080fd5b505afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136699190613978565b8160018151811061367c5761367c613fdf565b6001600160a01b0392831660209182029290920101526007546136a29130911684612737565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906136db908590600090869030904290600401613e72565b600060405180830381600087803b1580156136f557600080fd5b505af11580156135a0573d6000803e3d6000fd5b6007546137219030906001600160a01b031684612737565b60075460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561378957600080fd5b505af115801561379d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fc39190613c91565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106137f9576137f9613fdf565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561384d57600080fd5b505afa158015613861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138859190613978565b8160018151811061389857613898613fdf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106138ec576138ec613fdf565b6001600160a01b0392831660209182029290920101526007546139129130911684612737565b600754604051635c11d79560e01b81526001600160a01b0390911690635c11d795906136db908590600090869030904290600401613e72565b80356139568161400b565b919050565b60006020828403121561396d57600080fd5b813561268f8161400b565b60006020828403121561398a57600080fd5b815161268f8161400b565b600080604083850312156139a857600080fd5b82356139b38161400b565b915060208301356139c38161400b565b809150509250929050565b6000806000606084860312156139e357600080fd5b83356139ee8161400b565b925060208401356139fe8161400b565b929592945050506040919091013590565b60008060408385031215613a2257600080fd5b8235613a2d8161400b565b915060208301356139c381614020565b600080600080600080600080610100898b031215613a5a57600080fd5b8851613a658161400b565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060408385031215613aba57600080fd5b8235613ac58161400b565b946020939093013593505050565b600080600060408486031215613ae857600080fd5b833567ffffffffffffffff80821115613b0057600080fd5b818601915086601f830112613b1457600080fd5b813581811115613b2357600080fd5b8760208260051b8501011115613b3857600080fd5b60209283019550935050840135613b4e81614020565b809150509250925092565b60006020808385031215613b6c57600080fd5b823567ffffffffffffffff80821115613b8457600080fd5b818501915085601f830112613b9857600080fd5b813581811115613baa57613baa613ff5565b8060051b604051601f19603f83011681018181108582111715613bcf57613bcf613ff5565b604052828152858101935084860182860187018a1015613bee57600080fd5b600095505b83861015613c1857613c048161394b565b855260019590950194938601938601613bf3565b5098975050505050505050565b600060208284031215613c3757600080fd5b813561268f81614020565b600060208284031215613c5457600080fd5b815161268f81614020565b600060208284031215613c7157600080fd5b5035919050565b600060208284031215613c8a57600080fd5b5051919050565b600080600060608486031215613ca657600080fd5b8351925060208401519150604084015190509250925092565b6040808252810183905260008460608301825b86811015613d02578235613ce58161400b565b6001600160a01b0316825260209283019290910190600101613cd2565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613d4557858101830151858201604001528201613d29565b81811115613d57576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ec25784516001600160a01b031683529383019391830191600101613e9d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613ef657613ef6613fc9565b500190565b600082613f1857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613f3757613f37613fc9565b500290565b600082821015613f4e57613f4e613fc9565b500390565b600181811c90821680613f6757607f821691505b60208210811415613f8857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613fa257613fa2613fc9565b5060010190565b600060ff821660ff811415613fc057613fc0613fc9565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461105c57600080fd5b801515811461105c57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208dfbf4080f8b8cdf10710e067219c63ac0b8ce213878a6f98f1d60fc5f9891ee64736f6c6343000807003360c06040527fdac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006080523480156200003557600080fd5b50604080518082018252601b8082527f455448524557415244535f4469766964656e645f547261636b657200000000006020808401828152855180870190965292855284015281519192918391839162000092916003916200012c565b508051620000a89060049060208401906200012c565b5050506000620000bd6200012860201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10601155506a01a784379d99db4200000060a0526200020f565b3390565b8280546200013a90620001d2565b90600052602060002090601f0160209004810192826200015e5760008555620001a9565b82601f106200017957805160ff1916838001178555620001a9565b82800160010185558215620001a9579182015b82811115620001a95782518255916020019190600101906200018c565b50620001b7929150620001bb565b5090565b5b80821115620001b75760008155600101620001bc565b600181811c90821680620001e757607f821691505b602082108114156200020957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a051611fe462000246600039600081816104950152610d6001526000818161054901526117f70152611fe46000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806385a6b3ae11610125578063be10b614116100ad578063e98030c71161007c578063e98030c71461050b578063f2fde38b1461051e578063fbcbc0f114610531578063fc0c546a14610544578063ffb2c4791461056b57600080fd5b8063be10b61414610490578063dd62ed3e146104b7578063e30443bc146104f0578063e7841ec01461050357600080fd5b8063a457c2d7116100f4578063a457c2d71461041b578063a8b9d2401461042e578063a9059cbb14610441578063aafd847a14610454578063bc4c4b371461047d57600080fd5b806385a6b3ae146103d25780638da5cb5b146103db57806391b89fba1461040057806395d89b411461041357600080fd5b806331e79db0116101a857806351c2a0e31161017757806351c2a0e31461037d5780636a474002146103905780636f2789ec1461039857806370a08231146103a1578063715018a6146103ca57600080fd5b806331e79db0146102da57806339509351146102ef5780634e7b827f146103025780635183d6fd1461032557600080fd5b8063226cfa3d116101ef578063226cfa3d1461027c57806323b872dd1461029c57806327ce0147146102af5780633009a609146102c2578063313ce567146102cb57600080fd5b806306fdde0314610221578063095ea7b31461023f57806309bbedde1461026257806318160ddd14610274575b600080fd5b610229610599565b6040516102369190611d20565b60405180910390f35b61025261024d366004611c36565b61062b565b6040519015158152602001610236565b600a545b604051908152602001610236565b600254610266565b61026661028a366004611bc3565b60106020526000908152604090205481565b6102526102aa366004611c90565b610642565b6102666102bd366004611bc3565b6106ab565b610266600e5481565b60405160128152602001610236565b6102ed6102e8366004611bc3565b610707565b005b6102526102fd366004611c36565b610837565b610252610310366004611bc3565b600f6020526000908152604090205460ff1681565b610338610333366004611d07565b61086d565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610236565b6102ed61038b366004611d07565b6109df565b6102ed610a9d565b61026660115481565b6102666103af366004611bc3565b6001600160a01b031660009081526020819052604090205490565b6102ed610b4b565b61026660095481565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610236565b61026661040e366004611bc3565b610bbf565b610229610bca565b610252610429366004611c36565b610bd9565b61026661043c366004611bc3565b610c28565b61025261044f366004611c36565b610c54565b610266610462366004611bc3565b6001600160a01b031660009081526008602052604090205490565b61025261048b366004611bfd565b610c61565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6102666104c5366004611c62565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ed6104fe366004611c36565b610d0f565b600e54610266565b6102ed610519366004611d07565b610e9b565b6102ed61052c366004611bc3565b61101b565b61033861053f366004611bc3565b611106565b6103e87f000000000000000000000000000000000000000000000000000000000000000081565b61057e610579366004611d07565b61127e565b60408051938452602084019290925290820152606001610236565b6060600380546105a890611e9a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490611e9a565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b5050505050905090565b6000610638338484611399565b5060015b92915050565b600061064f8484846114bd565b6106a1843361069c85604051806060016040528060288152602001611f62602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061151f565b611399565b5060019392505050565b6001600160a01b03811660009081526007602090815260408083205491839052822054600654600160801b926106fd926106f8926106f2916106ed9190611559565b6115df565b906115ef565b61162d565b61063c9190611e03565b6005546001600160a01b0316331461073a5760405162461bcd60e51b815260040161073190611d75565b60405180910390fd5b6001600160a01b0381166000908152600f602052604090205460ff161561076057600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561078e908290611640565b60405163131836e760e21b8152600a60048201526001600160a01b038216602482015273eb32e1ab07d3c0c90225fd9b01c9e8035088770e90634c60db9c9060440160006040518083038186803b1580156107e857600080fd5b505af41580156107fc573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161063891859061069c908661169f565b600080600080600080600080600a73eb32e1ab07d3c0c90225fd9b01c9e8035088770e63deb3d89690916040518263ffffffff1660e01b81526004016108b591815260200190565b60206040518083038186803b1580156108cd57600080fd5b505af41580156108e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190611cee565b891061092a5750600096506000199550859450869350839250829150819050806109d4565b6040516368d54f3f60e11b8152600a6004820152602481018a905260009073eb32e1ab07d3c0c90225fd9b01c9e8035088770e9063d1aa9e7e9060440160206040518083038186803b15801561097f57600080fd5b505af4158015610993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b79190611be0565b90506109c281611106565b98509850985098509850985098509850505b919395975091939597565b6005546001600160a01b03163314610a095760405162461bcd60e51b815260040161073190611d75565b6000610a1460025490565b11610a1e57600080fd5b8015610a9a57610a51610a3060025490565b610a3e83600160801b611559565b610a489190611e03565b6006549061169f565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a96908261169f565b6009555b50565b60405162461bcd60e51b815260206004820152607160248201527f455448524557415244535f4469766964656e645f547261636b65723a2077697460448201527f68647261774469766964656e642064697361626c65642e20557365207468652060648201527f27636c61696d272066756e6374696f6e206f6e20746865206d61696e204554486084820152702922aba0a922299031b7b73a3930b1ba1760791b60a482015260c401610731565b6005546001600160a01b03163314610b755760405162461bcd60e51b815260040161073190611d75565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061063c82610c28565b6060600480546105a890611e9a565b6000610638338461069c85604051806060016040528060258152602001611f8a602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061151f565b6001600160a01b03811660009081526008602052604081205461063c90610c4e846106ab565b906116fe565b60006106383384846114bd565b6005546000906001600160a01b03163314610c8e5760405162461bcd60e51b815260040161073190611d75565b6000610c9984611740565b90508015610d05576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610cf39085815260200190565b60405180910390a3600191505061063c565b5060009392505050565b6005546001600160a01b03163314610d395760405162461bcd60e51b815260040161073190611d75565b6001600160a01b0382166000908152600f602052604090205460ff1615610d5e575050565b7f00000000000000000000000000000000000000000000000000000000000000008110610e0d57610d8f8282611640565b604051632f0ad01760e21b8152600a60048201526001600160a01b03831660248201526044810182905273eb32e1ab07d3c0c90225fd9b01c9e8035088770e9063bc2b405c9060640160006040518083038186803b158015610df057600080fd5b505af4158015610e04573d6000803e3d6000fd5b50505050610e8b565b610e18826000611640565b60405163131836e760e21b8152600a60048201526001600160a01b038316602482015273eb32e1ab07d3c0c90225fd9b01c9e8035088770e90634c60db9c9060440160006040518083038186803b158015610e7257600080fd5b505af4158015610e86573d6000803e3d6000fd5b505050505b610e96826001610c61565b505050565b6005546001600160a01b03163314610ec55760405162461bcd60e51b815260040161073190611d75565b610e108110158015610eda5750620151808111155b610f655760405162461bcd60e51b815260206004820152605060248201527f455448524557415244535f4469766964656e645f547261636b65723a20636c6160448201527f696d57616974206d757374206265207570646174656420746f2062657477656560648201526f6e203120616e6420323420686f75727360801b608482015260a401610731565b601154811415610fe85760405162461bcd60e51b815260206004820152604260248201527f455448524557415244535f4469766964656e645f547261636b65723a2043616e60448201527f6e6f742075706461746520636c61696d5761697420746f2073616d652076616c606482015261756560f01b608482015260a401610731565b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b6005546001600160a01b031633146110455760405162461bcd60e51b815260040161073190611d75565b6001600160a01b0381166110aa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610731565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b8152600a60048201526001600160a01b0382166024820152819060009081908190819081908190819073eb32e1ab07d3c0c90225fd9b01c9e8035088770e906317e142d19060440160206040518083038186803b15801561117157600080fd5b505af4158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a99190611cee565b965060001995506000871261120b57600e548711156111d757600e546111d09088906118d4565b955061120b565b600e54600a54600091106111ec5760006111fb565b600e54600a546111fb916116fe565b905061120788826115ef565b9650505b61121488610c28565b945061121f886106ab565b6001600160a01b038916600090815260106020526040902054909450925082611249576000611257565b60115461125790849061169f565b9150428211611267576000611271565b61127182426116fe565b9050919395975091939597565b600a54600090819081908061129e575050600e5460009250829150611392565b600e546000805a90506000805b89841080156112b957508582105b1561138157846112c881611ed5565b600a54909650861090506112db57600094505b6000600a60000186815481106112f3576112f3611f06565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915061132490611911565b1561134757611334816001610c61565b15611347578161134381611ed5565b9250505b8261135181611ed5565b93505060005a9050808511156113785761137561136e86836116fe565b879061169f565b95505b93506112ab9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b0383166113fb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610731565b6001600160a01b03821661145c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610731565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152603160248201527f455448524557415244535f4469766964656e645f547261636b65723a204e6f206044820152701d1c985b9cd9995c9cc8185b1b1bddd959607a1b6064820152608401610731565b600081848411156115435760405162461bcd60e51b81526004016107319190611d20565b5060006115508486611e83565b95945050505050565b6000826115685750600061063c565b60006115748385611e25565b9050826115818583611e03565b146115d85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610731565b9392505050565b6000818181121561063c57600080fd5b6000806115fc8385611daa565b90506000831215801561160f5750838112155b80611624575060008312801561162457508381125b6115d857600080fd5b60008082121561163c57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561167f57600061166d83836116fe565b90506116798482611938565b50505050565b80821015610e9657600061169382846116fe565b9050611679848261199c565b6000806116ac8385611deb565b9050838110156115d85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610731565b60006115d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061151f565b60008061174c83610c28565b905080156118cb576001600160a01b038316600090815260086020526040902054611777908261169f565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906117c69084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561183d57600080fd5b505af1158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190611cd1565b9050806118c4576001600160a01b03841660009081526008602052604090205461189f90836116fe565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6000806118e18385611e44565b9050600083121580156118f45750838113155b80611624575060008312801561162457508381136115d857600080fd5b60004282111561192357506000919050565b60115461193042846116fe565b101592915050565b61194282826119e0565b61197c61195d6106ed8360065461155990919063ffffffff16565b6001600160a01b038416600090815260076020526040902054906118d4565b6001600160a01b0390921660009081526007602052604090209190915550565b6119a68282611abf565b61197c6119c16106ed8360065461155990919063ffffffff16565b6001600160a01b038416600090815260076020526040902054906115ef565b6001600160a01b038216611a365760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610731565b600254611a43908261169f565b6002556001600160a01b038216600090815260208190526040902054611a69908261169f565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038216611b1f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610731565b611b5c81604051806060016040528060228152602001611f40602291396001600160a01b038516600090815260208190526040902054919061151f565b6001600160a01b038316600090815260208190526040902055600254611b8290826116fe565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ab3565b600060208284031215611bd557600080fd5b81356115d881611f1c565b600060208284031215611bf257600080fd5b81516115d881611f1c565b60008060408385031215611c1057600080fd5b8235611c1b81611f1c565b91506020830135611c2b81611f31565b809150509250929050565b60008060408385031215611c4957600080fd5b8235611c5481611f1c565b946020939093013593505050565b60008060408385031215611c7557600080fd5b8235611c8081611f1c565b91506020830135611c2b81611f1c565b600080600060608486031215611ca557600080fd5b8335611cb081611f1c565b92506020840135611cc081611f1c565b929592945050506040919091013590565b600060208284031215611ce357600080fd5b81516115d881611f31565b600060208284031215611d0057600080fd5b5051919050565b600060208284031215611d1957600080fd5b5035919050565b600060208083528351808285015260005b81811015611d4d57858101830151858201604001528201611d31565b81811115611d5f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600080821280156001600160ff1b0384900385131615611dcc57611dcc611ef0565b600160ff1b8390038412811615611de557611de5611ef0565b50500190565b60008219821115611dfe57611dfe611ef0565b500190565b600082611e2057634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611e3f57611e3f611ef0565b500290565b60008083128015600160ff1b850184121615611e6257611e62611ef0565b6001600160ff1b0384018313811615611e7d57611e7d611ef0565b50500390565b600082821015611e9557611e95611ef0565b500390565b600181811c90821680611eae57607f821691505b60208210811415611ecf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ee957611ee9611ef0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610a9a57600080fd5b8015158114610a9a57600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b4eb3fcfaabff8cc89239132f726789921710ad59bec5755208236b0030b122364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104145760003560e01c8063712847301161021e578063a9059cbb11610123578063dd62ed3e116100ab578063ec28438a1161007a578063ec28438a14610c5b578063f27fd25414610c7b578063f2fde38b14610c9b578063fb201b1d14610cbb578063fc0c546a14610cd057600080fd5b8063dd62ed3e14610bca578063e2f4560514610c10578063e7841ec014610c26578063e98030c714610c3b57600080fd5b8063b6cba7eb116100f2578063b6cba7eb14610b2a578063c024666814610b4a578063c492f04614610b6a578063c49b9a8014610b8a578063d333555314610baa57600080fd5b8063a9059cbb14610a55578063ad56c13c14610a75578063afa4f3b214610ada578063b62496f514610afa57600080fd5b80638c0344db116101a65780639a7a23d6116101755780639a7a23d6146109ca5780639c1b8af5146109ea578063a26579ad14610a00578063a457c2d714610a15578063a8b9d24014610a3557600080fd5b80638c0344db1461096b5780638da5cb5b1461098157806395d89b411461099f57806398118cb4146109b457600080fd5b80637e298cf2116101ed5780637e298cf2146108d657806385141a77146108f6578063871c128d1461091657806388bdd9be146109365780638baeefce1461095657600080fd5b80637128473014610875578063715018a61461089557806372b28e45146108aa5780637d1db4a5146108c057600080fd5b80634144d9e4116103245780634fbee193116102ac57806365b8dbc01161027b57806365b8dbc0146107df5780636843cd84146107ff5780636b67c4df1461081f578063700bb1911461083557806370a082311461085557600080fd5b80634fbee193146107515780635d098b381461078a578063625e764c146107aa57806364b0f653146107ca57600080fd5b806347535d7b116102f357806347535d7b146106c157806349bd5a5e146106e25780634a74bb02146107025780634e3c06b11461071c5780634e71d92d1461073c57600080fd5b80634144d9e41461064157806344d4225f146106615780634567bfba1461068157806345f57977146106a157600080fd5b80632c1f5216116103a757806331e79db01161037657806331e79db0146105b5578063357bf15c146105d557806339509351146105f55780633b2d081c146106155780633eaaf86b1461062b57600080fd5b80632c1f52161461054e57806330bb4cff1461056e57806331201d2014610583578063313ce5671461059957600080fd5b80631694505e116103e35780631694505e146104c157806318160ddd146104f957806323b872dd1461050e57806329d95d5d1461052e57600080fd5b806306fdde0314610420578063095ea7b31461044b5780630b6bb6f51461047b57806313114a9d1461049d57600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b50610435610d04565b6040516104429190613d18565b60405180910390f35b34801561045757600080fd5b5061046b610466366004613aa7565b610d96565b6040519015158152602001610442565b34801561048757600080fd5b5061049b610496366004613b59565b610dad565b005b3480156104a957600080fd5b506104b360125481565b604051908152602001610442565b3480156104cd57600080fd5b506007546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610442565b34801561050557600080fd5b506002546104b3565b34801561051a57600080fd5b5061046b6105293660046139ce565b610e52565b34801561053a57600080fd5b506014546104e1906001600160a01b031681565b34801561055a57600080fd5b506009546104e1906001600160a01b031681565b34801561057a57600080fd5b506104b3610ebb565b34801561058f57600080fd5b506104b3601b5481565b3480156105a557600080fd5b5060405160128152602001610442565b3480156105c157600080fd5b5061049b6105d036600461395b565b610f3d565b3480156105e157600080fd5b5061049b6105f0366004613c5f565b610fca565b34801561060157600080fd5b5061046b610610366004613aa7565b61105f565b34801561062157600080fd5b506104b360115481565b34801561063757600080fd5b506104b3600b5481565b34801561064d57600080fd5b506013546104e1906001600160a01b031681565b34801561066d57600080fd5b5061049b61067c366004613c5f565b611095565b34801561068d57600080fd5b5061049b61069c366004613c5f565b6110c4565b3480156106ad57600080fd5b5061049b6106bc366004613c5f565b61110d565b3480156106cd57600080fd5b5060055461046b90600160a01b900460ff1681565b3480156106ee57600080fd5b506008546104e1906001600160a01b031681565b34801561070e57600080fd5b5060185461046b9060ff1681565b34801561072857600080fd5b5061049b610737366004613a0f565b611157565b34801561074857600080fd5b5061049b6111ac565b34801561075d57600080fd5b5061046b61076c36600461395b565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561079657600080fd5b5061049b6107a536600461395b565b611230565b3480156107b657600080fd5b5061049b6107c5366004613c5f565b61127c565b3480156107d657600080fd5b506104b36112d0565b3480156107eb57600080fd5b5061049b6107fa36600461395b565b611315565b34801561080b57600080fd5b506104b361081a36600461395b565b6115b8565b34801561082b57600080fd5b506104b360105481565b34801561084157600080fd5b5061049b610850366004613c5f565b611637565b34801561086157600080fd5b506104b361087036600461395b565b611718565b34801561088157600080fd5b5061049b610890366004613c5f565b611733565b3480156108a157600080fd5b5061049b611762565b3480156108b657600080fd5b506104b3601a5481565b3480156108cc57600080fd5b506104b3600d5481565b3480156108e257600080fd5b5061049b6108f1366004613c5f565b6117d6565b34801561090257600080fd5b50600a546104e1906001600160a01b031681565b34801561092257600080fd5b5061049b610931366004613c5f565b611805565b34801561094257600080fd5b5061049b61095136600461395b565b611964565b34801561096257600080fd5b5061049b611d15565b34801561097757600080fd5b506104b3600e5481565b34801561098d57600080fd5b506005546001600160a01b03166104e1565b3480156109ab57600080fd5b50610435611d4e565b3480156109c057600080fd5b506104b3600f5481565b3480156109d657600080fd5b5061049b6109e5366004613a0f565b611d5d565b3480156109f657600080fd5b506104b360155481565b348015610a0c57600080fd5b506104b3611e2b565b348015610a2157600080fd5b5061046b610a30366004613aa7565b611e70565b348015610a4157600080fd5b506104b3610a5036600461395b565b611ebf565b348015610a6157600080fd5b5061046b610a70366004613aa7565b611ef2565b348015610a8157600080fd5b50610a95610a9036600461395b565b611eff565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610442565b348015610ae657600080fd5b5061049b610af5366004613c5f565b611fa9565b348015610b0657600080fd5b5061046b610b1536600461395b565b60176020526000908152604090205460ff1681565b348015610b3657600080fd5b5061049b610b45366004613aa7565b611fd8565b348015610b5657600080fd5b5061049b610b65366004613a0f565b61210d565b348015610b7657600080fd5b5061049b610b85366004613ad3565b612224565b348015610b9657600080fd5b5061049b610ba5366004613c25565b612300565b348015610bb657600080fd5b5061049b610bc5366004613c5f565b612371565b348015610bd657600080fd5b506104b3610be5366004613995565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610c1c57600080fd5b506104b3600c5481565b348015610c3257600080fd5b506104b36123d5565b348015610c4757600080fd5b5061049b610c56366004613c5f565b61241a565b348015610c6757600080fd5b5061049b610c76366004613c5f565b612475565b348015610c8757600080fd5b50610a95610c96366004613c5f565b6124a4565b348015610ca757600080fd5b5061049b610cb636600461395b565b6124e6565b348015610cc757600080fd5b5061049b6125d1565b348015610cdc57600080fd5b506104e17f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b606060038054610d1390613f53565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3f90613f53565b8015610d8c5780601f10610d6157610100808354040283529160200191610d8c565b820191906000526020600020905b815481529060010190602001808311610d6f57829003601f168201915b5050505050905090565b6000610da3338484612737565b5060015b92915050565b6005546001600160a01b03163314610de05760405162461bcd60e51b8152600401610dd790613db0565b60405180910390fd5b60005b81518160ff161015610e4e57600160066000848460ff1681518110610e0a57610e0a613fdf565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610e4681613fa9565b915050610de3565b5050565b6000610e5f84848461285c565b610eb18433610eac85604051806060016040528060288152602001614055602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612d5c565b612737565b5060019392505050565b600954604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f389190613c78565b905090565b6005546001600160a01b03163314610f675760405162461bcd60e51b8152600401610dd790613db0565b60095460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b5050505050565b6005546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610dd790613db0565b600f819055601154601054600e546110199291611013918290866126d8565b906126d8565b6012819055601e101561105c5760405162461bcd60e51b815260206004820152600b60248201526a546f20486967682046656560a81b6044820152606401610dd7565b50565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610da3918590610eac90866126d8565b6005546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610dd790613db0565b601a55565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610dd790613db0565b6011819055601054600f54600e546110199284926110139283916126d8565b6005546001600160a01b031633146111375760405162461bcd60e51b8152600401610dd790613db0565b600e819055601154601054600f54611019929161101391829086906126d8565b6005546001600160a01b031633146111815760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60095460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b3790604401602060405180830381600087803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c9190613c42565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610dd790613db0565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610dd790613db0565b80601081905550611019601154611013601054611013600f54600e546126d890919063ffffffff16565b600954604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610f0057600080fd5b6005546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610dd790613db0565b6007546001600160a01b03828116911614156113b55760405162461bcd60e51b815260206004820152602f60248201527f455448524557415244533a2054686520726f7574657220616c7265616479206860448201526e61732074686174206164647265737360881b6064820152608401610dd7565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f9190613978565b6001600160a01b031663c9c6539630600760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115149190613978565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561155c57600080fd5b505af1158015611570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115949190613978565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6009546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b60206040518083038186803b1580156115ff57600080fd5b505afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613c78565b6009546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c47990602401606060405180830381600087803b15801561168557600080fd5b505af1158015611699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bd9190613c91565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461175d5760405162461bcd60e51b8152600401610dd790613db0565b601b55565b6005546001600160a01b0316331461178c5760405162461bcd60e51b8152600401610dd790613db0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146118005760405162461bcd60e51b8152600401610dd790613db0565b601c55565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610dd790613db0565b62030d40811015801561184557506207a1208111155b6118b9576040805162461bcd60e51b81526020600482015260248101919091527f455448524557415244533a20676173466f7250726f63657373696e67206d757360448201527f74206265206265747765656e203230302c30303020616e64203530302c3030306064820152608401610dd7565b6015548114156119315760405162461bcd60e51b815260206004820152603860248201527f455448524557415244533a2043616e6e6f742075706461746520676173466f7260448201527f50726f63657373696e6720746f2073616d652076616c756500000000000000006064820152608401610dd7565b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b0316331461198e5760405162461bcd60e51b8152600401610dd790613db0565b6009546001600160a01b0382811691161415611a125760405162461bcd60e51b815260206004820152603960248201527f455448524557415244533a20546865206469766964656e6420747261636b657260448201527f20616c72656164792068617320746861742061646472657373000000000000006064820152608401610dd7565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a929190613978565b6001600160a01b031614611b2a5760405162461bcd60e51b815260206004820152605360248201527f455448524557415244533a20546865206e6577206469766964656e642074726160448201527f636b6572206d757374206265206f776e6564206279207468652045544852455760648201527210549114c81d1bdad95b8818dbdb9d1c9858dd606a1b608482015260a401610dd7565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611b6c57600080fd5b505af1158015611b80573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611bfe6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611c3f57600080fd5b505af1158015611c53573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b50506009546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600980546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b03163314611d3f5760405162461bcd60e51b8152600401610dd790613db0565b6005805460ff60a01b19169055565b606060048054610d1390613f53565b6005546001600160a01b03163314611d875760405162461bcd60e51b8152600401610dd790613db0565b6008546001600160a01b0383811691161415611e215760405162461bcd60e51b815260206004820152604d60248201527f455448524557415244533a20546865204554485377617020706169722063616e60448201527f6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d617260648201526c6b65744d616b6572506169727360981b608482015260a401610dd7565b610e4e8282612d96565b60095460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015610f0057600080fd5b6000610da33384610eac8560405180606001604052806025815260200161407d602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612d5c565b6009546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016115e7565b6000610da333848461285c565b60095460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b6101006040518083038186803b158015611f5657600080fd5b505afa158015611f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8e9190613a3d565b97509750975097509750975097509750919395975091939597565b6005546001600160a01b03163314611fd35760405162461bcd60e51b8152600401610dd790613db0565b600c55565b6005546001600160a01b031633146120025760405162461bcd60e51b8152600401610dd790613db0565b47818110156120665760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f74207265636f766572206d6f7265207468616e20617661696c61626044820152696c652062616c616e636560b01b6064820152608401610dd7565b826001600160a01b031663a9059cbb6120876005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381600087803b1580156120cf57600080fd5b505af11580156120e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121079190613c42565b50505050565b6005546001600160a01b031633146121375760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b03821660009081526016602052604090205460ff16151581151514156121c55760405162461bcd60e51b815260206004820152603660248201527f455448524557415244533a204163636f756e7420697320616c7265616479207460448201527568652076616c7565206f6620276578636c756465642760501b6064820152608401610dd7565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461224e5760405162461bcd60e51b8152600401610dd790613db0565b60005b828110156122bf57816016600086868581811061227057612270613fdf565b9050602002016020810190612285919061395b565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806122b781613f8e565b915050612251565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516122f393929190613cbf565b60405180910390a1505050565b6005546001600160a01b0316331461232a5760405162461bcd60e51b8152600401610dd790613db0565b6018805460ff19168215159081179091556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a150565b6005546001600160a01b0316331461239b5760405162461bcd60e51b8152600401610dd790613db0565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6009546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015610f0057600080fd5b6005546001600160a01b031633146124445760405162461bcd60e51b8152600401610dd790613db0565b60095460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610f95565b6005546001600160a01b0316331461249f5760405162461bcd60e51b8152600401610dd790613db0565b600d55565b600954604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401611f3d565b6005546001600160a01b031633146125105760405162461bcd60e51b8152600401610dd790613db0565b6001600160a01b0381166125755760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146125fb5760405162461bcd60e51b8152600401610dd790613db0565b6005805460ff60a01b1916600160a01b179055565b60008261261f57506000610da7565b600061262b8385613f1d565b9050826126388583613efb565b1461268f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dd7565b9392505050565b600061268f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f02565b6000806126e58385613ee3565b90508381101561268f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dd7565b6001600160a01b0383166127995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dd7565b6001600160a01b0382166127fa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dd7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60055483908390600160a01b900460ff168061289057506001600160a01b03821660009081526006602052604090205460ff165b806128b357506001600160a01b03811660009081526006602052604090205460ff165b6128ea5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610dd7565b6001600160a01b0385166129105760405162461bcd60e51b8152600401610dd790613de5565b6001600160a01b0384166129365760405162461bcd60e51b8152600401610dd790613d6d565b6005546001600160a01b0386811691161480159061296257506005546001600160a01b03858116911614155b156129ca57600d548311156129ca5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610dd7565b826129e0576129db85856000612f30565b610fc3565b60006129eb30611718565b600c5490915081108015908190612a0c5750600854600160a01b900460ff16155b8015612a1a575060185460ff165b8015612a3f57506001600160a01b03871660009081526017602052604090205460ff16155b8015612a5957506005546001600160a01b03888116911614155b15612ad9576008805460ff60a01b1916600160a01b179055600e54601254600091612a849190613039565b90506000612aa7601254612aa1848761261090919063ffffffff16565b90612696565b9050612ab28161307b565b6000612abd30611718565b9050612ac881613200565b50506008805460ff60a01b19169055505b6008546001600160a01b03881660009081526016602052604090205460ff600160a01b909204821615911680612b2757506001600160a01b03871660009081526016602052604090205460ff165b15612b30575060005b8015612b6d576000612b526064612aa16012548a61261090919063ffffffff16565b9050612b5e8782613039565b9650612b6b893083612f30565b505b612b788888886133f2565b612b83888888612f30565b6009546001600160a01b031663e30443bc89612b9e81611718565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612be457600080fd5b505af1925050508015612bf5575060015b506009546001600160a01b031663e30443bc88612c1181611718565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612c5757600080fd5b505af1925050508015612c68575060015b50600854600160a01b900460ff16612d52576015546009546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401606060405180830381600087803b158015612cc657600080fd5b505af1925050508015612cf6575060408051601f3d908101601f19168201909252612cf391810190613c91565b60015b612cff57612d50565b60408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b5050505050505050565b60008184841115612d805760405162461bcd60e51b8152600401610dd79190613d18565b506000612d8d8486613f3c565b95945050505050565b6001600160a01b03821660009081526017602052604090205460ff1615158115151415612e395760405162461bcd60e51b8152602060048201526044602482018190527f455448524557415244533a204175746f6d61746564206d61726b6574206d616b908201527f6572207061697220697320616c72656164792073657420746f20746861742076606482015263616c756560e01b608482015260a401610dd7565b6001600160a01b0382166000908152601760205260409020805460ff19168215801591909117909155612ec65760095460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015612ead57600080fd5b505af1158015612ec1573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60008183612f235760405162461bcd60e51b8152600401610dd79190613d18565b506000612d8d8486613efb565b6001600160a01b038316612f565760405162461bcd60e51b8152600401610dd790613de5565b6001600160a01b038216612f7c5760405162461bcd60e51b8152600401610dd790613d6d565b612fb98160405180606001604052806026815260200161402f602691396001600160a01b0386166000908152602081905260409020549190612d5c565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612fe890826126d8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161284f565b600061268f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d5c565b6000613094600e5460125461303990919063ffffffff16565b905060006130b66002612aa184612aa1600f548861261090919063ffffffff16565b905060006130c48483613039565b9050476130d0826135a8565b60006130dc4783613039565b905060006130fe6002612aa188612aa1600f548761261090919063ffffffff16565b905061310a8582613709565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1600061316687612aa16010548661261090919063ffffffff16565b9050600061317e826131788686613039565b90613039565b6013546040519192506001600160a01b03169083156108fc029084906000818181858888f193505050501580156131b9573d6000803e3d6000fd5b506014546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156131f4573d6000803e3d6000fd5b50505050505050505050565b613209816137c2565b6040516370a0823160e01b81523060048201526000907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316906370a082319060240160206040518083038186803b15801561326b57600080fd5b505afa15801561327f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a39190613c78565b60095460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192506000917f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec79091169063a9059cbb90604401602060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133509190613c42565b905080156133ed576009546040516351c2a0e360e01b8152600481018490526001600160a01b03909116906351c2a0e390602401600060405180830381600087803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b505060408051868152602081018690527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc393500190506122f3565b505050565b60006134018261101385611718565b6001600160a01b03851660009081526019602052604090205490915060ff1615801561344657506001600160a01b03831660009081526019602052604090205460ff16155b1561346d57601a5481111561346d5760405162461bcd60e51b8152600401610dd790613e2a565b6001600160a01b03841660009081526017602052604090205460ff1680156134ae57506001600160a01b03831660009081526019602052604090205460ff16155b156134d557601a548111156134d55760405162461bcd60e51b8152600401610dd790613e2a565b6001600160a01b03831660009081526017602052604090205460ff16801561351657506001600160a01b03841660009081526019602052604090205460ff16155b1561210757600061352685611718565b9050601b54811115610fc357600061354e6064612aa1601c548561261090919063ffffffff16565b9050808411156135a05760405162461bcd60e51b815260206004820152601c60248201527f457863656564696e6720416c6c6f7765642053616c65204c696d6974000000006044820152606401610dd7565b505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106135dd576135dd613fdf565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561363157600080fd5b505afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136699190613978565b8160018151811061367c5761367c613fdf565b6001600160a01b0392831660209182029290920101526007546136a29130911684612737565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906136db908590600090869030904290600401613e72565b600060405180830381600087803b1580156136f557600080fd5b505af11580156135a0573d6000803e3d6000fd5b6007546137219030906001600160a01b031684612737565b60075460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561378957600080fd5b505af115801561379d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fc39190613c91565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106137f9576137f9613fdf565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561384d57600080fd5b505afa158015613861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138859190613978565b8160018151811061389857613898613fdf565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7816002815181106138ec576138ec613fdf565b6001600160a01b0392831660209182029290920101526007546139129130911684612737565b600754604051635c11d79560e01b81526001600160a01b0390911690635c11d795906136db908590600090869030904290600401613e72565b80356139568161400b565b919050565b60006020828403121561396d57600080fd5b813561268f8161400b565b60006020828403121561398a57600080fd5b815161268f8161400b565b600080604083850312156139a857600080fd5b82356139b38161400b565b915060208301356139c38161400b565b809150509250929050565b6000806000606084860312156139e357600080fd5b83356139ee8161400b565b925060208401356139fe8161400b565b929592945050506040919091013590565b60008060408385031215613a2257600080fd5b8235613a2d8161400b565b915060208301356139c381614020565b600080600080600080600080610100898b031215613a5a57600080fd5b8851613a658161400b565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60008060408385031215613aba57600080fd5b8235613ac58161400b565b946020939093013593505050565b600080600060408486031215613ae857600080fd5b833567ffffffffffffffff80821115613b0057600080fd5b818601915086601f830112613b1457600080fd5b813581811115613b2357600080fd5b8760208260051b8501011115613b3857600080fd5b60209283019550935050840135613b4e81614020565b809150509250925092565b60006020808385031215613b6c57600080fd5b823567ffffffffffffffff80821115613b8457600080fd5b818501915085601f830112613b9857600080fd5b813581811115613baa57613baa613ff5565b8060051b604051601f19603f83011681018181108582111715613bcf57613bcf613ff5565b604052828152858101935084860182860187018a1015613bee57600080fd5b600095505b83861015613c1857613c048161394b565b855260019590950194938601938601613bf3565b5098975050505050505050565b600060208284031215613c3757600080fd5b813561268f81614020565b600060208284031215613c5457600080fd5b815161268f81614020565b600060208284031215613c7157600080fd5b5035919050565b600060208284031215613c8a57600080fd5b5051919050565b600080600060608486031215613ca657600080fd5b8351925060208401519150604084015190509250925092565b6040808252810183905260008460608301825b86811015613d02578235613ce58161400b565b6001600160a01b0316825260209283019290910190600101613cd2565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015613d4557858101830151858201604001528201613d29565b81811115613d57576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ec25784516001600160a01b031683529383019391830191600101613e9d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613ef657613ef6613fc9565b500190565b600082613f1857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613f3757613f37613fc9565b500290565b600082821015613f4e57613f4e613fc9565b500390565b600181811c90821680613f6757607f821691505b60208210811415613f8857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613fa257613fa2613fc9565b5060010190565b600060ff821660ff811415613fc057613fc0613fc9565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461105c57600080fd5b801515811461105c57600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208dfbf4080f8b8cdf10710e067219c63ac0b8ce213878a6f98f1d60fc5f9891ee64736f6c63430008070033

Libraries Used

IterableMapping : 0xeb32e1ab07d3c0c90225fd9b01c9e8035088770eUnverified

Deployed Bytecode Sourcemap

24783:18840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5926:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7065:169;;;;;;;;;;-1:-1:-1;7065:169:0;;;;;:::i;:::-;;:::i;:::-;;;10143:14:1;;10136:22;10118:41;;10106:2;10091:18;7065:169:0;9978:187:1;24590:186:0;;;;;;;;;;-1:-1:-1;24590:186:0;;;;;:::i;:::-;;:::i;:::-;;25664:92;;;;;;;;;;;;;;;;;;;20379:25:1;;;20367:2;20352:18;25664:92:0;20233:177:1;24865:41:0;;;;;;;;;;-1:-1:-1;24865:41:0;;;;-1:-1:-1;;;;;24865:41:0;;;;;;-1:-1:-1;;;;;6405:32:1;;;6387:51;;6375:2;6360:18;24865:41:0;6241:203:1;6415:108:0;;;;;;;;;;-1:-1:-1;6503:12:0;;6415:108;;7242:355;;;;;;;;;;-1:-1:-1;7242:355:0;;;;;:::i;:::-;;:::i;25872:98::-;;;;;;;;;;-1:-1:-1;25872:98:0;;;;-1:-1:-1;;;;;25872:98:0;;;24981:48;;;;;;;;;;-1:-1:-1;24981:48:0;;;;-1:-1:-1;;;;;24981:48:0;;;33084:141;;;;;;;;;;;;;:::i;41667:65::-;;;;;;;;;;;;;;;;6257:93;;;;;;;;;;-1:-1:-1;6257:93:0;;6340:2;22515:36:1;;22503:2;22488:18;6257:93:0;22373:184:1;33672:129:0;;;;;;;;;;-1:-1:-1;33672:129:0;;;;;:::i;:::-;;:::i;30869:233::-;;;;;;;;;;-1:-1:-1;30869:233:0;;;;;:::i;:::-;;:::i;7607:218::-;;;;;;;;;;-1:-1:-1;7607:218:0;;;;;:::i;:::-;;:::i;25626:29::-;;;;;;;;;;;;;;;;25297:55;;;;;;;;;;;;;;;;25765:100;;;;;;;;;;-1:-1:-1;25765:100:0;;;;-1:-1:-1;;;;;25765:100:0;;;43340:132;;;;;;;;;;-1:-1:-1;43340:132:0;;;;;:::i;:::-;;:::i;31353:230::-;;;;;;;;;;-1:-1:-1;31353:230:0;;;;;:::i;:::-;;:::i;30626:235::-;;;;;;;;;;-1:-1:-1;30626:235:0;;;;;:::i;:::-;;:::i;24089:26::-;;;;;;;;;;-1:-1:-1;24089:26:0;;;;-1:-1:-1;;;24089:26:0;;;;;;24913:29;;;;;;;;;;-1:-1:-1;24913:29:0;;;;-1:-1:-1;;;;;24913:29:0;;;41240:41;;;;;;;;;;-1:-1:-1;41240:41:0;;;;;;;;43185:146;;;;;;;;;;-1:-1:-1;43185:146:0;;;;;:::i;:::-;;:::i;34750:103::-;;;;;;;;;;;;;:::i;33233:125::-;;;;;;;;;;-1:-1:-1;33233:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;33322:28:0;33298:4;33322:28;;;:19;:28;;;;;;;;;33233:125;30497:121;;;;;;;;;;-1:-1:-1;30497:121:0;;;;;:::i;:::-;;:::i;31110:233::-;;;;;;;;;;-1:-1:-1;31110:233:0;;;;;:::i;:::-;;:::i;34998:141::-;;;;;;;;;;;;;:::i;29367:504::-;;;;;;;;;;-1:-1:-1;29367:504:0;;;;;:::i;:::-;;:::i;33525:139::-;;;;;;;;;;-1:-1:-1;33525:139:0;;;;;:::i;:::-;;:::i;25588:31::-;;;;;;;;;;;;;;;;34471:271;;;;;;;;;;-1:-1:-1;34471:271:0;;;;;:::i;:::-;;:::i;6586:127::-;;;;;;;;;;-1:-1:-1;6586:127:0;;;;;:::i;:::-;;:::i;43483:132::-;;;;;;;;;;-1:-1:-1;43483:132:0;;;;;:::i;:::-;;:::i;2112:148::-;;;;;;;;;;;;;:::i;41587:68::-;;;;;;;;;;;;;;;;25440:58;;;;;;;;;;;;;;;;43038:137;;;;;;;;;;-1:-1:-1;43038:137:0;;;;;:::i;:::-;;:::i;25038:70::-;;;;;;;;;;-1:-1:-1;25038:70:0;;;;-1:-1:-1;;;;;25038:70:0;;;32287:416;;;;;;;;;;-1:-1:-1;32287:416:0;;;;;:::i;:::-;;:::i;28503:856::-;;;;;;;;;;-1:-1:-1;28503:856:0;;;;;:::i;:::-;;:::i;24509:73::-;;;;;;;;;;;;;:::i;25511:32::-;;;;;;;;;;;;;;;;1898:79;;;;;;;;;;-1:-1:-1;1963:6:0;;-1:-1:-1;;;;;1963:6:0;1898:79;;6145:104;;;;;;;;;;;;;:::i;25550:31::-;;;;;;;;;;;;;;;;31592:262;;;;;;;;;;-1:-1:-1;31592:262:0;;;;;:::i;:::-;;:::i;25979:40::-;;;;;;;;;;;;;;;;32843:108;;;;;;;;;;;;;:::i;7835:269::-;;;;;;;;;;-1:-1:-1;7835:269:0;;;;;:::i;:::-;;:::i;33366:151::-;;;;;;;;;;-1:-1:-1;33366:151:0;;;;;:::i;:::-;;:::i;6723:175::-;;;;;;;;;;-1:-1:-1;6723:175:0;;;;;:::i;:::-;;:::i;33809:318::-;;;;;;;;;;-1:-1:-1;33809:318:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7939:32:1;;;7921:51;;8003:2;7988:18;;7981:34;;;;8031:18;;;8024:34;;;;8089:2;8074:18;;8067:34;;;;8132:3;8117:19;;8110:35;7959:3;8161:19;;8154:35;8220:3;8205:19;;8198:35;8264:3;8249:19;;8242:35;7908:3;7893:19;33809:318:0;7582:701:1;32959:117:0;;;;;;;;;;-1:-1:-1;32959:117:0;;;;;:::i;:::-;;:::i;26086:58::-;;;;;;;;;;-1:-1:-1;26086:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35149:279;;;;;;;;;;-1:-1:-1;35149:279:0;;;;;:::i;:::-;;:::i;29879:300::-;;;;;;;;;;-1:-1:-1;29879:300:0;;;;;:::i;:::-;;:::i;30187:302::-;;;;;;;;;;-1:-1:-1;30187:302:0;;;;;:::i;:::-;;:::i;41345:173::-;;;;;;;;;;-1:-1:-1;41345:173:0;;;;;:::i;:::-;;:::i;35438:114::-;;;;;;;;;;-1:-1:-1;35438:114:0;;;;;:::i;:::-;;:::i;6906:151::-;;;;;;;;;;-1:-1:-1;6906:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;7022:18:0;;;6995:7;7022:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6906:151;25359:58;;;;;;;;;;;;;;;;34861:129;;;;;;;;;;;;;:::i;32711:124::-;;;;;;;;;;-1:-1:-1;32711:124:0;;;;;:::i;:::-;;:::i;41092:106::-;;;;;;;;;;-1:-1:-1;41092:106:0;;;;;:::i;:::-;;:::i;34135:328::-;;;;;;;;;;-1:-1:-1;34135:328:0;;;;;:::i;:::-;;:::i;2268:244::-;;;;;;;;;;-1:-1:-1;2268:244:0;;;;;:::i;:::-;;:::i;24429:72::-;;;;;;;;;;;;;:::i;25178:84::-;;;;;;;;;;;;;;;5926:100;5980:13;6013:5;6006:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5926:100;:::o;7065:169::-;7148:4;7165:39;1314:10;7188:7;7197:6;7165:8;:39::i;:::-;-1:-1:-1;7222:4:0;7065:169;;;;;:::o;24590:186::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;;;;;;;;;24677:7:::1;24673:96;24694:6;:13;24690:1;:17;;;24673:96;;;24753:4;24729:10;:21;24740:6;24747:1;24740:9;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24729:21:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24729:21:0;:28;;-1:-1:-1;;24729:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24709:3;::::1;::::0;::::1;:::i;:::-;;;;24673:96;;;;24590:186:::0;:::o;7242:355::-;7382:4;7399:36;7409:6;7417:9;7428:6;7399:9;:36::i;:::-;7446:121;7455:6;1314:10;7477:89;7515:6;7477:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7477:19:0;;;;;;:11;:19;;;;;;;;1314:10;7477:33;;;;;;;;;;:37;:89::i;:::-;7446:8;:121::i;:::-;-1:-1:-1;7585:4:0;7242:355;;;;;:::o;33084:141::-;33174:15;;:43;;;-1:-1:-1;;;33174:43:0;;;;33147:7;;-1:-1:-1;;;;;33174:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33167:50;;33084:141;:::o;33672:129::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;33748:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;33748:45:0;;-1:-1:-1;;;;;6405:32:1;;;33748:45:0::1;::::0;::::1;6387:51:1::0;33748:15:0;;::::1;::::0;:36:::1;::::0;6360:18:1;;33748:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33672:129:::0;:::o;30869:233::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;30938:12:::1;:20:::0;;;31035:10:::1;::::0;31017:12:::1;::::0;30981:13:::1;::::0;:65:::1;::::0;31035:10;30981:49:::1;::::0;;;30953:5;30981:17:::1;:31::i;:::-;:35:::0;::::1;:49::i;:65::-;30969:9;:77:::0;;;31076:2:::1;-1:-1:-1::0;31065:13:0::1;31057:37;;;::::0;-1:-1:-1;;;31057:37:0;;15880:2:1;31057:37:0::1;::::0;::::1;15862:21:1::0;15919:2;15899:18;;;15892:30;-1:-1:-1;;;15938:18:1;;;15931:41;15989:18;;31057:37:0::1;15678:335:1::0;31057:37:0::1;30869:233:::0;:::o;7607:218::-;1314:10;7695:4;7744:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7744:34:0;;;;;;;;;;7695:4;;7712:83;;7735:7;;7744:50;;7783:10;7744:38;:50::i;43340:132::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;43432:22:::1;:32:::0;43340:132::o;31353:230::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;31421:10:::1;:18:::0;;;31498:12:::1;::::0;31480::::1;::::0;31462:13:::1;::::0;:65:::1;::::0;31434:5;;31462:49:::1;::::0;;;:17:::1;:31::i;30626:235::-:0;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;30696:13:::1;:21:::0;;;30794:10:::1;::::0;30776:12:::1;::::0;30758::::1;::::0;30740:65:::1;::::0;30794:10;30740:49:::1;::::0;;;30712:5;;30740:17:::1;:31::i;43185:146::-:0;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43283:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;43283:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43185:146::o;34750:103::-;34787:15;;:58;;-1:-1:-1;;;34787:58:0;;34826:10;34787:58;;;6857:51:1;34787:15:0;6924:18:1;;;6917:50;-1:-1:-1;;;;;34787:15:0;;;;:30;;6830:18:1;;34787:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30497:121::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;30578:23:::1;:32:::0;;-1:-1:-1;;;;;;30578:32:0::1;-1:-1:-1::0;;;;;30578:32:0;;;::::1;::::0;;;::::1;::::0;;30497:121::o;31110:233::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;31194:5:::1;31179:12;:20;;;;31222:65;31276:10;;31222:49;31258:12;;31222:31;31240:12;;31222:13;;:17;;:31;;;;:::i;34998:141::-:0;35090:15;;:41;;;-1:-1:-1;;;35090:41:0;;;;35063:7;;-1:-1:-1;;;;;35090:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;29367:504;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;29476:15:::1;::::0;-1:-1:-1;;;;;29454:38:0;;::::1;29476:15:::0;::::1;29454:38;;29446:98;;;::::0;-1:-1:-1;;;29446:98:0;;15055:2:1;29446:98:0::1;::::0;::::1;15037:21:1::0;15094:2;15074:18;;;15067:30;15133:34;15113:18;;;15106:62;-1:-1:-1;;;15184:18:1;;;15177:45;15239:19;;29446:98:0::1;14853:411:1::0;29446:98:0::1;29602:15;::::0;29560:59:::1;::::0;-1:-1:-1;;;;;29602:15:0;;::::1;::::0;29560:59;::::1;::::0;::::1;::::0;29602:15:::1;::::0;29560:59:::1;29630:15;:48:::0;;-1:-1:-1;;;;;;29630:48:0::1;-1:-1:-1::0;;;;;29630:48:0;::::1;::::0;;::::1;::::0;;;29732:25:::1;::::0;;-1:-1:-1;;;29732:25:0;;;;-1:-1:-1;;29630:48:0;29732:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;29630:48;29732:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29714:69:0::1;;29792:4;29799:15;;;;;;;;;-1:-1:-1::0;;;;;29799:15:0::1;-1:-1:-1::0;;;;;29799:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29714:108;::::0;-1:-1:-1;;;;;;29714:108:0::1;::::0;;;;;;-1:-1:-1;;;;;7503:15:1;;;29714:108:0::1;::::0;::::1;7485:34:1::0;7555:15;;7535:18;;;7528:43;7420:18;;29714:108:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29833:13;:30:::0;;-1:-1:-1;;;;;;29833:30:0::1;-1:-1:-1::0;;;;;29833:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;29367:504:0:o;33525:139::-;33622:15;;:34;;-1:-1:-1;;;33622:34:0;;-1:-1:-1;;;;;6405:32:1;;;33622:34:0;;;6387:51:1;33595:7:0;;33622:15;;:25;;6360:18:1;;33622:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34471:271::-;34603:15;;:28;;-1:-1:-1;;;;;;34603:28:0;;;;;20379:25:1;;;34537:18:0;;;;;;-1:-1:-1;;;;;34603:15:0;;:23;;20352:18:1;;34603:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34647:87;;;22208:25:1;;;22264:2;22249:18;;22242:34;;;22292:18;;;22285:34;;;22350:2;22335:18;;22328:34;;;34536:95:0;;-1:-1:-1;34536:95:0;;-1:-1:-1;34536:95:0;-1:-1:-1;34724:9:0;;34712:5;;34647:87;;22195:3:1;22180:19;34647:87:0;;;;;;;34525:217;;;34471:271;:::o;6586:127::-;-1:-1:-1;;;;;6687:18:0;6660:7;6687:18;;;;;;;;;;;;6586:127::o;43483:132::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;43575:22:::1;:32:::0;43483:132::o;2112:148::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;2203:6:::1;::::0;2182:40:::1;::::0;2219:1:::1;::::0;-1:-1:-1;;;;;2203:6:0::1;::::0;2182:40:::1;::::0;2219:1;;2182:40:::1;2233:6;:19:::0;;-1:-1:-1;;;;;;2233:19:0::1;::::0;;2112:148::o;43038:137::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;43132:24:::1;:35:::0;43038:137::o;32287:416::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;32385:6:::1;32373:8;:18;;:40;;;;;32407:6;32395:8;:18;;32373:40;32365:117;;;::::0;;-1:-1:-1;;;32365:117:0;;19166:2:1;32365:117:0::1;::::0;::::1;19148:21:1::0;19185:18;;;19178:30;;;;19244:34;19224:18;;;19217:62;19315:34;19295:18;;;19288:62;19367:19;;32365:117:0::1;18964:428:1::0;32365:117:0::1;32513:16;;32501:8;:28;;32493:97;;;::::0;-1:-1:-1;;;32493:97:0;;20010:2:1;32493:97:0::1;::::0;::::1;19992:21:1::0;20049:2;20029:18;;;20022:30;20088:34;20068:18;;;20061:62;20159:26;20139:18;;;20132:54;20203:19;;32493:97:0::1;19808:420:1::0;32493:97:0::1;32640:16;::::0;32606:51:::1;::::0;32630:8;;32606:51:::1;::::0;;;::::1;32668:16;:27:::0;32287:416::o;28503:856::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;28618:15:::1;::::0;-1:-1:-1;;;;;28596:38:0;;::::1;28618:15:::0;::::1;28596:38;;28588:108;;;::::0;-1:-1:-1;;;28588:108:0;;14272:2:1;28588:108:0::1;::::0;::::1;14254:21:1::0;14311:2;14291:18;;;14284:30;14350:34;14330:18;;;14323:62;14421:27;14401:18;;;14394:55;14466:19;;28588:108:0::1;14070:421:1::0;28588:108:0::1;28707:44;28788:10;28707:93;;28857:4;-1:-1:-1::0;;;;;28819:43:0::1;:18;-1:-1:-1::0;;;;;28819:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28819:43:0::1;;28811:139;;;::::0;-1:-1:-1;;;28811:139:0;;13357:2:1;28811:139:0::1;::::0;::::1;13339:21:1::0;13396:2;13376:18;;;13369:30;13435:34;13415:18;;;13408:62;13506:34;13486:18;;;13479:62;-1:-1:-1;;;13557:19:1;;;13550:50;13617:19;;28811:139:0::1;13155:487:1::0;28811:139:0::1;28961:68;::::0;-1:-1:-1;;;28961:68:0;;-1:-1:-1;;;;;28961:39:0;::::1;:68;::::0;::::1;6387:51:1::0;;;28961:39:0;::::1;::::0;6360:18:1;;28961:68:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29040:54:0::1;::::0;-1:-1:-1;;;29040:54:0;;29088:4:::1;29040:54;::::0;::::1;6387:51:1::0;-1:-1:-1;;;;;29040:39:0;::::1;::::0;-1:-1:-1;29040:39:0::1;::::0;-1:-1:-1;6360:18:1;;29040:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29105:18;-1:-1:-1::0;;;;;29105:39:0::1;;29145:7;1963:6:::0;;-1:-1:-1;;;;;1963:6:0;;1898:79;29145:7:::1;29105:48;::::0;-1:-1:-1;;;;;;29105:48:0::1;::::0;;;;;;-1:-1:-1;;;;;6405:32:1;;;29105:48:0::1;::::0;::::1;6387:51:1::0;6360:18;;29105:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29212:15:0::1;::::0;29164:65:::1;::::0;-1:-1:-1;;;29164:65:0;;-1:-1:-1;;;;;29212:15:0;;::::1;29164:65;::::0;::::1;6387:51:1::0;29164:39:0;;::::1;::::0;-1:-1:-1;29164:39:0::1;::::0;-1:-1:-1;6360:18:1;;29164:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29287:15:0::1;::::0;29245:59:::1;::::0;-1:-1:-1;;;;;29287:15:0;;::::1;::::0;-1:-1:-1;29245:59:0;;::::1;::::0;-1:-1:-1;29245:59:0::1;::::0;29287:15:::1;::::0;29245:59:::1;29315:15;:36:::0;;-1:-1:-1;;;;;;29315:36:0::1;-1:-1:-1::0;;;;;29315:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;28503:856:0:o;24509:73::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;24560:6:::1;:14:::0;;-1:-1:-1;;;;24560:14:0::1;::::0;;24509:73::o;6145:104::-;6201:13;6234:7;6227:14;;;;;:::i;31592:262::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;31699:13:::1;::::0;-1:-1:-1;;;;;31691:21:0;;::::1;31699:13:::0;::::1;31691:21;;31683:111;;;::::0;-1:-1:-1;;;31683:111:0;;16220:2:1;31683:111:0::1;::::0;::::1;16202:21:1::0;16259:2;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16369:34;16349:18;;;16342:62;-1:-1:-1;;;16420:19:1;;;16413:44;16474:19;;31683:111:0::1;16018:481:1::0;31683:111:0::1;31805:41;31834:4;31840:5;31805:28;:41::i;32843:108::-:0;32916:15;;:27;;;-1:-1:-1;;;32916:27:0;;;;32889:7;;-1:-1:-1;;;;;32916:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;7835:269;7928:4;7945:129;1314:10;7968:7;7977:96;8016:15;7977:96;;;;;;;;;;;;;;;;;1314:10;7977:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7977:34:0;;;;;;;;;;;;:38;:96::i;33366:151::-;33462:15;;:47;;-1:-1:-1;;;33462:47:0;;-1:-1:-1;;;;;6405:32:1;;;33462:47:0;;;6387:51:1;33435:7:0;;33462:15;;:38;;6360:18:1;;33462:47:0;6241:203:1;6723:175:0;6809:4;6826:42;1314:10;6850:9;6861:6;6826:9;:42::i;33809:318::-;34084:15;;:35;;-1:-1:-1;;;34084:35:0;;-1:-1:-1;;;;;6405:32:1;;;34084:35:0;;;6387:51:1;33905:7:0;;;;;;;;;;;;;;;;34084:15;;;:26;;6360:18:1;;34084:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34077:42;;;;;;;;;;;;;;;;33809:318;;;;;;;;;:::o;32959:117::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;33041:18:::1;:27:::0;32959:117::o;35149:279::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;35263:21:::1;35303:18:::0;;::::1;;35295:73;;;::::0;-1:-1:-1;;;35295:73:0;;19599:2:1;35295:73:0::1;::::0;::::1;19581:21:1::0;19638:2;19618:18;;;19611:30;19677:34;19657:18;;;19650:62;-1:-1:-1;;;19728:18:1;;;19721:40;19778:19;;35295:73:0::1;19397:406:1::0;35295:73:0::1;35386:6;-1:-1:-1::0;;;;;35379:23:0::1;;35403:7;1963:6:::0;;-1:-1:-1;;;;;1963:6:0;;1898:79;35403:7:::1;35379:41;::::0;-1:-1:-1;;;;;;35379:41:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;35379:41:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;;;7141:18;;35379:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35234:194;35149:279:::0;;:::o;29879:300::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29972:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;29964:107;;;::::0;-1:-1:-1;;;29964:107:0;;13849:2:1;29964:107:0::1;::::0;::::1;13831:21:1::0;13888:2;13868:18;;;13861:30;13927:34;13907:18;;;13900:62;-1:-1:-1;;;13978:18:1;;;13971:52;14040:19;;29964:107:0::1;13647:418:1::0;29964:107:0::1;-1:-1:-1::0;;;;;30082:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;30082:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30137:34;;10118:41:1;;;30137:34:0::1;::::0;10091:18:1;30137:34:0::1;;;;;;;29879:300:::0;;:::o;30187:302::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;30304:9:::1;30300:115;30319:19:::0;;::::1;30300:115;;;30395:8;30360:19;:32;30380:8;;30389:1;30380:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30360:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30360:32:0;:43;;-1:-1:-1;;30360:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30340:3;::::1;::::0;::::1;:::i;:::-;;;;30300:115;;;;30430:51;30462:8;;30472;30430:51;;;;;;;;:::i;:::-;;;;;;;;30187:302:::0;;;:::o;41345:173::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;41426:21:::1;:32:::0;;-1:-1:-1;;41426:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41472:38:::1;::::0;10118:41:1;;;41472:38:0::1;::::0;10106:2:1;10091:18;41472:38:0::1;;;;;;;41345:173:::0;:::o;35438:114::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;1963:6;;35510:34:::1;::::0;-1:-1:-1;;;;;1963:6:0;;;;35510:34;::::1;;;::::0;35536:7;;35510:34:::1;::::0;;;35536:7;1963:6;35510:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;34861:129:::0;34943:15;;:39;;;-1:-1:-1;;;34943:39:0;;;;34916:7;;-1:-1:-1;;;;;34943:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;32711:124;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;32785:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;32785:42:0;;::::1;::::0;::::1;20379:25:1::0;;;-1:-1:-1;;;;;32785:15:0;;::::1;::::0;:31:::1;::::0;20352:18:1;;32785:42:0::1;20233:177:1::0;41092:106:0;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;41168:12:::1;:22:::0;41092:106::o;34135:328::-;34415:15;;:40;;-1:-1:-1;;;34415:40:0;;;;;20379:25:1;;;34236:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34415:15:0;;;;:33;;20352:18:1;;34415:40:0;20233:177:1;2268:244:0;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2357:22:0;::::1;2349:73;;;::::0;-1:-1:-1;;;2349:73:0;;11855:2:1;2349:73:0::1;::::0;::::1;11837:21:1::0;11894:2;11874:18;;;11867:30;11933:34;11913:18;;;11906:62;-1:-1:-1;;;11984:18:1;;;11977:36;12030:19;;2349:73:0::1;11653:402:1::0;2349:73:0::1;2459:6;::::0;2438:38:::1;::::0;-1:-1:-1;;;;;2438:38:0;;::::1;::::0;2459:6:::1;::::0;2438:38:::1;::::0;2459:6:::1;::::0;2438:38:::1;2487:6;:17:::0;;-1:-1:-1;;;;;;2487:17:0::1;-1:-1:-1::0;;;;;2487:17:0;;;::::1;::::0;;;::::1;::::0;;2268:244::o;24429:72::-;2025:6;;-1:-1:-1;;;;;2025:6:0;1314:10;2025:22;2017:67;;;;-1:-1:-1;;;2017:67:0;;;;;;;:::i;:::-;24480:6:::1;:13:::0;;-1:-1:-1;;;;24480:13:0::1;-1:-1:-1::0;;;24480:13:0::1;::::0;;24429:72::o;3080:246::-;3138:7;3162:6;3158:47;;-1:-1:-1;3192:1:0;3185:8;;3158:47;3215:9;3227:5;3231:1;3227;:5;:::i;:::-;3215:17;-1:-1:-1;3260:1:0;3251:5;3255:1;3215:17;3251:5;:::i;:::-;:10;3243:56;;;;-1:-1:-1;;;3243:56:0;;16706:2:1;3243:56:0;;;16688:21:1;16745:2;16725:18;;;16718:30;16784:34;16764:18;;;16757:62;-1:-1:-1;;;16835:18:1;;;16828:31;16876:19;;3243:56:0;16504:397:1;3243:56:0;3317:1;3080:246;-1:-1:-1;;;3080:246:0:o;3336:132::-;3394:7;3421:39;3425:1;3428;3421:39;;;;;;;;;;;;;;;;;:3;:39::i;2545:179::-;2603:7;;2635:5;2639:1;2635;:5;:::i;:::-;2623:17;;2664:1;2659;:6;;2651:46;;;;-1:-1:-1;;;2651:46:0;;12665:2:1;2651:46:0;;;12647:21:1;12704:2;12684:18;;;12677:30;12743:29;12723:18;;;12716:57;12790:18;;2651:46:0;12463:351:1;9513:380:0;-1:-1:-1;;;;;9649:19:0;;9641:68;;;;-1:-1:-1;;;9641:68:0;;18352:2:1;9641:68:0;;;18334:21:1;18391:2;18371:18;;;18364:30;18430:34;18410:18;;;18403:62;-1:-1:-1;;;18481:18:1;;;18474:34;18525:19;;9641:68:0;18150:400:1;9641:68:0;-1:-1:-1;;;;;9728:21:0;;9720:68;;;;-1:-1:-1;;;9720:68:0;;12262:2:1;9720:68:0;;;12244:21:1;12301:2;12281:18;;;12274:30;12340:34;12320:18;;;12313:62;-1:-1:-1;;;12391:18:1;;;12384:32;12433:19;;9720:68:0;12060:398:1;9720:68:0;-1:-1:-1;;;;;9801:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9853:32;;20379:25:1;;;9853:32:0;;20352:18:1;9853:32:0;;;;;;;;9513:380;;;:::o;35566:2298::-;24231:6;;35641:4;;35647:2;;-1:-1:-1;;;24231:6:0;;;;;:26;;-1:-1:-1;;;;;;24241:16:0;;;;;;:10;:16;;;;;;;;24231:26;:44;;;-1:-1:-1;;;;;;24261:14:0;;;;;;:10;:14;;;;;;;;24231:44;24223:65;;;;-1:-1:-1;;;24223:65:0;;13021:2:1;24223:65:0;;;13003:21:1;13060:1;13040:18;;;13033:29;-1:-1:-1;;;13078:18:1;;;13071:38;13126:18;;24223:65:0;12819:331:1;24223:65:0;-1:-1:-1;;;;;35685:18:0;::::1;35677:68;;;;-1:-1:-1::0;;;35677:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35764:16:0;::::1;35756:64;;;;-1:-1:-1::0;;;35756:64:0::1;;;;;;;:::i;:::-;1963:6:::0;;-1:-1:-1;;;;;35844:15:0;;::::1;1963:6:::0;;35844:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;1963:6:0;;-1:-1:-1;;;;;35863:13:0;;::::1;1963:6:::0;;35863:13:::1;;35844:32;35841:139;;;35911:12;;35901:6;:22;;35893:75;;;::::0;-1:-1:-1;;;35893:75:0;;15471:2:1;35893:75:0::1;::::0;::::1;15453:21:1::0;15510:2;15490:18;;;15483:30;15549:34;15529:18;;;15522:62;-1:-1:-1;;;15600:18:1;;;15593:38;15648:19;;35893:75:0::1;15269:404:1::0;35893:75:0::1;35995:11:::0;35992:92:::1;;36023:28;36039:4;36045:2;36049:1;36023:15;:28::i;:::-;36066:7;;35992:92;36096:28;36127:24;36145:4;36127:9;:24::i;:::-;36203:18;::::0;36096:55;;-1:-1:-1;36179:42:0;::::1;::::0;::::1;::::0;;;36238:20:::1;;-1:-1:-1::0;36250:8:0::1;::::0;-1:-1:-1;;;36250:8:0;::::1;;;36249:9;36238:20;:45;;;;-1:-1:-1::0;36262:21:0::1;::::0;::::1;;36238:45;:90;;;;-1:-1:-1::0;;;;;;36297:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;36296:32;36238:90;:109;;;;-1:-1:-1::0;1963:6:0;;-1:-1:-1;;;;;36332:15:0;;::::1;1963:6:::0;;36332:15:::1;;36238:109;36234:548;;;36374:8;:15:::0;;-1:-1:-1;;;;36374:15:0::1;-1:-1:-1::0;;;36374:15:0::1;::::0;;36443:13:::1;::::0;36429:9:::1;::::0;36374:15;;36429:28:::1;::::0;:9;:13:::1;:28::i;:::-;36406:51;;36513:18;36534:53;36577:9;;36534:38;36559:12;36534:20;:24;;:38;;;;:::i;:::-;:42:::0;::::1;:53::i;:::-;36513:74;;36602:26;36617:10;36602:14;:26::i;:::-;36645:18;36666:24;36684:4;36666:9;:24::i;:::-;36645:45;;36705:32;36726:10;36705:20;:32::i;:::-;-1:-1:-1::0;;36752:8:0::1;:16:::0;;-1:-1:-1;;;;36752:16:0::1;::::0;;-1:-1:-1;36234:548:0::1;36812:8;::::0;-1:-1:-1;;;;;36919:25:0;::::1;36796:12;36919:25:::0;;;:19:::1;:25;::::0;;;;;36812:8:::1;-1:-1:-1::0;;;36812:8:0;;::::1;::::0;::::1;36811:9;::::0;36919:25:::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;36948:23:0;::::1;;::::0;;;:19:::1;:23;::::0;;;;;::::1;;36919:52;36916:109;;;-1:-1:-1::0;37008:5:0::1;36916:109;37040:7;37037:191;;;37074:12;37089:30;37115:3;37089:21;37100:9;;37089:6;:10;;:21;;;;:::i;:30::-;37074:45:::0;-1:-1:-1;37143:16:0::1;:6:::0;37074:45;37143:10:::1;:16::i;:::-;37134:25;;37174:42;37190:4;37204;37211;37174:15;:42::i;:::-;37059:169;37037:191;37240:31;37254:4;37260:2;37264:6;37240:13;:31::i;:::-;37282:33;37298:4;37304:2;37308:6;37282:15;:33::i;:::-;37330:15;::::0;-1:-1:-1;;;;;37330:15:0::1;:26;37365:4:::0;37372:15:::1;37365:4:::0;37372:9:::1;:15::i;:::-;37330:58;::::0;-1:-1:-1;;;;;;37330:58:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;37330:58:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;7141:18;;37330:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;37326:74:::0;37414:15:::1;::::0;-1:-1:-1;;;;;37414:15:0::1;:26;37449:2:::0;37454:13:::1;37449:2:::0;37454:9:::1;:13::i;:::-;37414:54;::::0;-1:-1:-1;;;;;;37414:54:0::1;::::0;;;;;;-1:-1:-1;;;;;7186:32:1;;;37414:54:0::1;::::0;::::1;7168:51:1::0;7235:18;;;7228:34;7141:18;;37414:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;37410:70:::0;37496:8:::1;::::0;-1:-1:-1;;;37496:8:0;::::1;;;37492:365;;37545:16;::::0;37580:15:::1;::::0;:28:::1;::::0;-1:-1:-1;;;;;;37580:28:0;;::::1;::::0;::::1;20379:25:1::0;;;-1:-1:-1;;;;;37580:15:0;;::::1;::::0;:23:::1;::::0;20352:18:1;;37580:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;37580:28:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;37580:28:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;37576:270;;;;;37706:86;::::0;;22208:25:1;;;22264:2;22249:18;;22242:34;;;22292:18;;;22285:34;;;22350:2;22335:18;;22328:34;;;37782:9:0::1;::::0;37771:4:::1;::::0;37706:86:::1;::::0;22195:3:1;22180:19;37706:86:0::1;;;;;;;37609:199;;;37576:270;37516:341;37492:365;35666:2198;;;35566:2298:::0;;;;;:::o;2878:192::-;2964:7;3000:12;2992:6;;;;2984:29;;;;-1:-1:-1;;;2984:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3024:9:0;3036:5;3040:1;3036;:5;:::i;:::-;3024:17;2878:192;-1:-1:-1;;;;;2878:192:0:o;31868:409::-;-1:-1:-1;;;;;31959:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;31951:121;;;;-1:-1:-1;;;31951:121:0;;17469:2:1;31951:121:0;;;17451:21:1;17508:2;17488:18;;;17481:30;;;17547:34;17527:18;;;17520:62;17618:34;17598:18;;;17591:62;-1:-1:-1;;;17669:19:1;;;17662:35;17714:19;;31951:121:0;17267:472:1;31951:121:0;-1:-1:-1;;;;;32083:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;32083:39:0;;;;;;;;;;;;32135:79;;32160:15;;:42;;-1:-1:-1;;;32160:42:0;;-1:-1:-1;;;;;6405:32:1;;;32160:42:0;;;6387:51:1;32160:15:0;;;;:36;;6360:18:1;;32160:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32135:79;32229:40;;;;;;-1:-1:-1;;;;;32229:40:0;;;;;;;;31868:409;;:::o;3478:278::-;3564:7;3599:12;3592:5;3584:28;;;;-1:-1:-1;;;3584:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3623:9:0;3635:5;3639:1;3635;:5;:::i;8114:573::-;-1:-1:-1;;;;;8254:20:0;;8246:70;;;;-1:-1:-1;;;8246:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8335:23:0;;8327:71;;;;-1:-1:-1;;;8327:71:0;;;;;;;:::i;:::-;8491;8513:6;8491:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8491:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;8471:17:0;;;:9;:17;;;;;;;;;;;:91;;;;8596:20;;;;;;;:32;;8621:6;8596:24;:32::i;:::-;-1:-1:-1;;;;;8573:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;8644:35;20379:25:1;;;8573:20:0;;8644:35;;;;;;20352:18:1;8644:35:0;20233:177:1;2732:136:0;2790:7;2817:43;2821:1;2824;2817:43;;;;;;;;;;;;;;;;;:3;:43::i;37874:1130::-;37938:19;37960:28;37974:13;;37960:9;;:13;;:28;;;;:::i;:::-;37938:50;;37999:27;38029:48;38075:1;38029:41;38058:11;38029:24;38040:12;;38029:6;:10;;:24;;;;:::i;:48::-;37999:78;-1:-1:-1;38088:22:0;38113:31;:6;37999:78;38113:10;:31::i;:::-;38088:56;-1:-1:-1;38180:21:0;38212:32;38088:56;38212:16;:32::i;:::-;38373:18;38394:41;:21;38420:14;38394:25;:41::i;:::-;38373:62;;38446:23;38472:52;38522:1;38472:45;38505:11;38472:28;38487:12;;38472:10;:14;;:28;;;;:::i;:52::-;38446:78;;38572:50;38585:19;38606:15;38572:12;:50::i;:::-;38638:73;;;21855:25:1;;;21911:2;21896:18;;21889:34;;;21939:18;;;21932:34;;;38638:73:0;;21843:2:1;21828:18;38638:73:0;;;;;;;38722:23;38748:45;38781:11;38748:28;38763:12;;38748:10;:14;;:28;;;;:::i;:45::-;38722:71;-1:-1:-1;38804:21:0;38828:52;38722:71;38828:31;:10;38843:15;38828:14;:31::i;:::-;:35;;:52::i;:::-;38891:23;;:49;;38804:76;;-1:-1:-1;;;;;;38891:23:0;;:49;;;;;38924:15;;38891:23;:49;:23;:49;38924:15;38891:23;:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38951:21:0;;:45;;-1:-1:-1;;;;;38951:21:0;;;;:45;;;;;38982:13;;38951:21;:45;:21;:45;38982:13;38951:21;:45;;;;;;;;;;;;;;;;;;;;;37928:1076;;;;;;;;37874:1130;:::o;40681:403::-;40745:24;40762:6;40745:16;:24::i;:::-;40800:38;;-1:-1:-1;;;40800:38:0;;40832:4;40800:38;;;6387:51:1;40780:17:0;;40807:5;-1:-1:-1;;;;;40800:23:0;;;;6360:18:1;;40800:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40895:15;;40864:59;;-1:-1:-1;;;40864:59:0;;-1:-1:-1;;;;;40895:15:0;;;40864:59;;;7168:51:1;7235:18;;;7228:34;;;40780:58:0;;-1:-1:-1;40849:12:0;;40871:5;40864:22;;;;;;7141:18:1;;40864:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40849:74;;40940:7;40936:141;;;40964:15;;:49;;-1:-1:-1;;;40964:49:0;;;;;20379:25:1;;;-1:-1:-1;;;;;40964:15:0;;;;:38;;20352:18:1;;40964:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41033:32:0;;;21574:25:1;;;21630:2;21615:18;;21608:34;;;41033:32:0;;-1:-1:-1;21547:18:1;;-1:-1:-1;41033:32:0;21400:248:1;40936:141:0;40734:350;;40681:403;:::o;42067:962::-;42167:18;42188:25;42206:6;42188:13;42198:2;42188:9;:13::i;:25::-;-1:-1:-1;;;;;42228:26:0;;;;;;:20;:26;;;;;;42167:46;;-1:-1:-1;42228:26:0;;42227:27;:56;;;;-1:-1:-1;;;;;;42259:24:0;;;;;;:20;:24;;;;;;;;42258:25;42227:56;42224:189;;;42333:22;;42319:10;:36;;42311:89;;;;-1:-1:-1;;;42311:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42427:31:0;;;;;;:25;:31;;;;;;;;:60;;;;-1:-1:-1;;;;;;42463:24:0;;;;;;:20;:24;;;;;;;;42462:25;42427:60;42424:193;;;42537:22;;42523:10;:36;;42515:89;;;;-1:-1:-1;;;42515:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42633:29:0;;;;;;:25;:29;;;;;;;;:60;;;;-1:-1:-1;;;;;;42667:26:0;;;;;;:20;:26;;;;;;;;42666:27;42633:60;42630:392;;;42721:16;42740:15;42750:4;42740:9;:15::i;:::-;42721:34;;42782:22;;42773:8;:31;42770:239;;;42838:21;42862:47;42905:3;42862:38;42875:24;;42862:8;:12;;:38;;;;:::i;:47::-;42838:71;;42946:13;42936:6;:23;;42928:64;;;;-1:-1:-1;;;42928:64:0;;14698:2:1;42928:64:0;;;14680:21:1;14737:2;14717:18;;;14710:30;14776;14756:18;;;14749:58;14824:18;;42928:64:0;14496:352:1;42928:64:0;42819:190;42705:317;42156:873;42067:962;;;:::o;39014:591::-;39170:16;;;39184:1;39170:16;;;;;;;;39146:21;;39170:16;;;;;;;;;;-1:-1:-1;39170:16:0;39146:40;;39215:4;39197;39202:1;39197:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39197:23:0;;;:7;;;;;;;;;;:23;;;;39241:15;;:22;;;-1:-1:-1;;;39241:22:0;;;;:15;;;;;:20;;:22;;;;;39197:7;;39241:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39231:4;39236:1;39231:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39231:32:0;;;:7;;;;;;;;;:32;39306:15;;39274:62;;39291:4;;39306:15;39324:11;39274:8;:62::i;:::-;39373:15;;:224;;-1:-1:-1;;;39373:224:0;;-1:-1:-1;;;;;39373:15:0;;;;:66;;:224;;39454:11;;39373:15;;39524:4;;39551;;39571:15;;39373:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40153:520;40335:15;;40303:62;;40320:4;;-1:-1:-1;;;;;40335:15:0;40353:11;40303:8;:62::i;:::-;40408:15;;:255;;-1:-1:-1;;;40408:255:0;;40480:4;40408:255;;;8908:34:1;8958:18;;;8951:34;;;40408:15:0;9001:18:1;;;8994:34;;;9044:18;;;9037:34;;;9087:19;;;9080:44;40637:15:0;9140:19:1;;;9133:35;-1:-1:-1;;;;;40408:15:0;;;;:31;;40447:9;;8842:19:1;;40408:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39613:532::-;39709:16;;;39723:1;39709:16;;;;;;;;;39685:21;;39709:16;;;;;;;;;;-1:-1:-1;39709:16:0;39685:40;;39754:4;39736;39741:1;39736:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39736:23:0;;;:7;;;;;;;;;;:23;;;;39780:15;;:22;;;-1:-1:-1;;;39780:22:0;;;;:15;;;;;:20;;:22;;;;;39736:7;;39780:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39770:4;39775:1;39770:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;39770:32:0;;;-1:-1:-1;;;;;39770:32:0;;;;;39823:5;39813:4;39818:1;39813:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39813:15:0;;;:7;;;;;;;;;:15;39871;;39839:62;;39856:4;;39871:15;39889:11;39839:8;:62::i;:::-;39938:15;;:199;;-1:-1:-1;;;39938:199:0;;-1:-1:-1;;;;;39938:15:0;;;;:69;;:199;;40022:11;;39938:15;;40064:4;;40091;;40111:15;;39938:199;;;:::i;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:247::-;212:6;265:2;253:9;244:7;240:23;236:32;233:52;;;281:1;278;271:12;233:52;320:9;307:23;339:31;364:5;339:31;:::i;405:251::-;475:6;528:2;516:9;507:7;503:23;499:32;496:52;;;544:1;541;534:12;496:52;576:9;570:16;595:31;620:5;595:31;:::i;921:388::-;989:6;997;1050:2;1038:9;1029:7;1025:23;1021:32;1018:52;;;1066:1;1063;1056:12;1018:52;1105:9;1092:23;1124:31;1149:5;1124:31;:::i;:::-;1174:5;-1:-1:-1;1231:2:1;1216:18;;1203:32;1244:33;1203:32;1244:33;:::i;:::-;1296:7;1286:17;;;921:388;;;;;:::o;1314:456::-;1391:6;1399;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;1515:9;1502:23;1534:31;1559:5;1534:31;:::i;:::-;1584:5;-1:-1:-1;1641:2:1;1626:18;;1613:32;1654:33;1613:32;1654:33;:::i;:::-;1314:456;;1706:7;;-1:-1:-1;;;1760:2:1;1745:18;;;;1732:32;;1314:456::o;1775:382::-;1840:6;1848;1901:2;1889:9;1880:7;1876:23;1872:32;1869:52;;;1917:1;1914;1907:12;1869:52;1956:9;1943:23;1975:31;2000:5;1975:31;:::i;:::-;2025:5;-1:-1:-1;2082:2:1;2067:18;;2054:32;2095:30;2054:32;2095:30;:::i;2162:681::-;2293:6;2301;2309;2317;2325;2333;2341;2349;2402:3;2390:9;2381:7;2377:23;2373:33;2370:53;;;2419:1;2416;2409:12;2370:53;2451:9;2445:16;2470:31;2495:5;2470:31;:::i;:::-;2520:5;2510:15;;;2565:2;2554:9;2550:18;2544:25;2534:35;;2609:2;2598:9;2594:18;2588:25;2578:35;;2653:2;2642:9;2638:18;2632:25;2622:35;;2697:3;2686:9;2682:19;2676:26;2666:36;;2742:3;2731:9;2727:19;2721:26;2711:36;;2787:3;2776:9;2772:19;2766:26;2756:36;;2832:3;2821:9;2817:19;2811:26;2801:36;;2162:681;;;;;;;;;;;:::o;2848:315::-;2916:6;2924;2977:2;2965:9;2956:7;2952:23;2948:32;2945:52;;;2993:1;2990;2983:12;2945:52;3032:9;3019:23;3051:31;3076:5;3051:31;:::i;:::-;3101:5;3153:2;3138:18;;;;3125:32;;-1:-1:-1;;;2848:315:1:o;3168:750::-;3260:6;3268;3276;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;3385:9;3372:23;3414:18;3455:2;3447:6;3444:14;3441:34;;;3471:1;3468;3461:12;3441:34;3509:6;3498:9;3494:22;3484:32;;3554:7;3547:4;3543:2;3539:13;3535:27;3525:55;;3576:1;3573;3566:12;3525:55;3616:2;3603:16;3642:2;3634:6;3631:14;3628:34;;;3658:1;3655;3648:12;3628:34;3713:7;3706:4;3696:6;3693:1;3689:14;3685:2;3681:23;3677:34;3674:47;3671:67;;;3734:1;3731;3724:12;3671:67;3765:4;3757:13;;;;-1:-1:-1;3789:6:1;-1:-1:-1;;3830:20:1;;3817:34;3860:28;3817:34;3860:28;:::i;:::-;3907:5;3897:15;;;3168:750;;;;;:::o;3923:1132::-;4007:6;4038:2;4081;4069:9;4060:7;4056:23;4052:32;4049:52;;;4097:1;4094;4087:12;4049:52;4137:9;4124:23;4166:18;4207:2;4199:6;4196:14;4193:34;;;4223:1;4220;4213:12;4193:34;4261:6;4250:9;4246:22;4236:32;;4306:7;4299:4;4295:2;4291:13;4287:27;4277:55;;4328:1;4325;4318:12;4277:55;4364:2;4351:16;4386:2;4382;4379:10;4376:36;;;4392:18;;:::i;:::-;4438:2;4435:1;4431:10;4470:2;4464:9;4533:2;4529:7;4524:2;4520;4516:11;4512:25;4504:6;4500:38;4588:6;4576:10;4573:22;4568:2;4556:10;4553:18;4550:46;4547:72;;;4599:18;;:::i;:::-;4635:2;4628:22;4685:18;;;4719:15;;;;-1:-1:-1;4754:11:1;;;4784;;;4780:20;;4777:33;-1:-1:-1;4774:53:1;;;4823:1;4820;4813:12;4774:53;4845:1;4836:10;;4855:169;4869:2;4866:1;4863:9;4855:169;;;4926:23;4945:3;4926:23;:::i;:::-;4914:36;;4887:1;4880:9;;;;;4970:12;;;;5002;;4855:169;;;-1:-1:-1;5043:6:1;3923:1132;-1:-1:-1;;;;;;;;3923:1132:1:o;5060:241::-;5116:6;5169:2;5157:9;5148:7;5144:23;5140:32;5137:52;;;5185:1;5182;5175:12;5137:52;5224:9;5211:23;5243:28;5265:5;5243:28;:::i;5306:245::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5474:9;5468:16;5493:28;5515:5;5493:28;:::i;5556:180::-;5615:6;5668:2;5656:9;5647:7;5643:23;5639:32;5636:52;;;5684:1;5681;5674:12;5636:52;-1:-1:-1;5707:23:1;;5556:180;-1:-1:-1;5556:180:1:o;5741:184::-;5811:6;5864:2;5852:9;5843:7;5839:23;5835:32;5832:52;;;5880:1;5877;5870:12;5832:52;-1:-1:-1;5903:16:1;;5741:184;-1:-1:-1;5741:184:1:o;5930:306::-;6018:6;6026;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:52;;;6103:1;6100;6093:12;6055:52;6132:9;6126:16;6116:26;;6182:2;6171:9;6167:18;6161:25;6151:35;;6226:2;6215:9;6211:18;6205:25;6195:35;;5930:306;;;;;:::o;9179:794::-;9401:2;9413:21;;;9386:18;;9469:22;;;9353:4;9548:6;9522:2;9507:18;;9353:4;9582:304;9596:6;9593:1;9590:13;9582:304;;;9671:6;9658:20;9691:31;9716:5;9691:31;:::i;:::-;-1:-1:-1;;;;;9747:31:1;9735:44;;9802:4;9861:15;;;;9826:12;;;;9775:1;9611:9;9582:304;;;9586:3;9903;9895:11;;;;9958:6;9951:14;9944:22;9937:4;9926:9;9922:20;9915:52;9179:794;;;;;;:::o;10647:597::-;10759:4;10788:2;10817;10806:9;10799:21;10849:6;10843:13;10892:6;10887:2;10876:9;10872:18;10865:34;10917:1;10927:140;10941:6;10938:1;10935:13;10927:140;;;11036:14;;;11032:23;;11026:30;11002:17;;;11021:2;10998:26;10991:66;10956:10;;10927:140;;;11085:6;11082:1;11079:13;11076:91;;;11155:1;11150:2;11141:6;11130:9;11126:22;11122:31;11115:42;11076:91;-1:-1:-1;11228:2:1;11207:15;-1:-1:-1;;11203:29:1;11188:45;;;;11235:2;11184:54;;10647:597;-1:-1:-1;;;10647:597:1:o;11249:399::-;11451:2;11433:21;;;11490:2;11470:18;;;11463:30;11529:34;11524:2;11509:18;;11502:62;-1:-1:-1;;;11595:2:1;11580:18;;11573:33;11638:3;11623:19;;11249:399::o;16906:356::-;17108:2;17090:21;;;17127:18;;;17120:30;17186:34;17181:2;17166:18;;17159:62;17253:2;17238:18;;16906:356::o;17744:401::-;17946:2;17928:21;;;17985:2;17965:18;;;17958:30;18024:34;18019:2;18004:18;;17997:62;-1:-1:-1;;;18090:2:1;18075:18;;18068:35;18135:3;18120:19;;17744:401::o;18555:404::-;18757:2;18739:21;;;18796:2;18776:18;;;18769:30;18835:34;18830:2;18815:18;;18808:62;-1:-1:-1;;;18901:2:1;18886:18;;18879:38;18949:3;18934:19;;18555:404::o;20415:980::-;20677:4;20725:3;20714:9;20710:19;20756:6;20745:9;20738:25;20782:2;20820:6;20815:2;20804:9;20800:18;20793:34;20863:3;20858:2;20847:9;20843:18;20836:31;20887:6;20922;20916:13;20953:6;20945;20938:22;20991:3;20980:9;20976:19;20969:26;;21030:2;21022:6;21018:15;21004:29;;21051:1;21061:195;21075:6;21072:1;21069:13;21061:195;;;21140:13;;-1:-1:-1;;;;;21136:39:1;21124:52;;21231:15;;;;21196:12;;;;21172:1;21090:9;21061:195;;;-1:-1:-1;;;;;;;21312:32:1;;;;21307:2;21292:18;;21285:60;-1:-1:-1;;;21376:3:1;21361:19;21354:35;21273:3;20415:980;-1:-1:-1;;;20415:980:1:o;22562:128::-;22602:3;22633:1;22629:6;22626:1;22623:13;22620:39;;;22639:18;;:::i;:::-;-1:-1:-1;22675:9:1;;22562:128::o;22695:217::-;22735:1;22761;22751:132;;22805:10;22800:3;22796:20;22793:1;22786:31;22840:4;22837:1;22830:15;22868:4;22865:1;22858:15;22751:132;-1:-1:-1;22897:9:1;;22695:217::o;22917:168::-;22957:7;23023:1;23019;23015:6;23011:14;23008:1;23005:21;23000:1;22993:9;22986:17;22982:45;22979:71;;;23030:18;;:::i;:::-;-1:-1:-1;23070:9:1;;22917:168::o;23090:125::-;23130:4;23158:1;23155;23152:8;23149:34;;;23163:18;;:::i;:::-;-1:-1:-1;23200:9:1;;23090:125::o;23220:380::-;23299:1;23295:12;;;;23342;;;23363:61;;23417:4;23409:6;23405:17;23395:27;;23363:61;23470:2;23462:6;23459:14;23439:18;23436:38;23433:161;;;23516:10;23511:3;23507:20;23504:1;23497:31;23551:4;23548:1;23541:15;23579:4;23576:1;23569:15;23433:161;;23220:380;;;:::o;23605:135::-;23644:3;-1:-1:-1;;23665:17:1;;23662:43;;;23685:18;;:::i;:::-;-1:-1:-1;23732:1:1;23721:13;;23605:135::o;23745:175::-;23782:3;23826:4;23819:5;23815:16;23855:4;23846:7;23843:17;23840:43;;;23863:18;;:::i;:::-;23912:1;23899:15;;23745:175;-1:-1:-1;;23745:175:1:o;23925:127::-;23986:10;23981:3;23977:20;23974:1;23967:31;24017:4;24014:1;24007:15;24041:4;24038:1;24031:15;24057:127;24118:10;24113:3;24109:20;24106:1;24099:31;24149:4;24146:1;24139:15;24173:4;24170:1;24163:15;24189:127;24250:10;24245:3;24241:20;24238:1;24231:31;24281:4;24278:1;24271:15;24305:4;24302:1;24295:15;24321:131;-1:-1:-1;;;;;24396:31:1;;24386:42;;24376:70;;24442:1;24439;24432:12;24457:118;24543:5;24536:13;24529:21;24522:5;24519:32;24509:60;;24565:1;24562;24555:12

Swarm Source

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