ETH Price: $2,940.15 (-0.60%)

Token

ArbPrinter (ARBPR)

Overview

Max Total Supply

1,000,000 ARBPR

Holders

123

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000040655836066881 ARBPR

Value
$0.00
0xded14e3bcd5c629a173da23ba648e0d56e7a3d96
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ArbPrinter

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : ArbPrinter.sol
// ArbPrinter Token (ARBPR)
// The first ARB printer in Arbitrum. Earn $ARB only for hold $ARBPR

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./DividendDistributor.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "./Auth.sol";

contract ArbPrinter is IERC20, Auth {
  using SafeMath for uint256;

  address private constant ROUTER = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
  address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
  address private constant ZERO = 0x0000000000000000000000000000000000000000;

  string private constant _name = "ArbPrinter";
  string private constant _symbol = "ARBPR";
  uint8 private constant _decimals = 18;

  uint256 private _totalSupply = 1_000_000 * (10 ** _decimals);
  uint256 public _maxTxAmount = _totalSupply.div(400); // 0.25% (2_500)
  uint256 public _maxWallet = _totalSupply.div(40); // 2.5% (25_000)

  mapping(address => uint256) private _balances;
  mapping(address => mapping(address => uint256)) private _allowances;

  mapping(address => bool) public isFeeExempt;
  mapping(address => bool) public isTxLimitExempt;
  mapping(address => bool) public isDividendExempt;
  mapping(address => bool) public canAddLiquidityBeforeLaunch;

  uint256 private liquidityFee;
  uint256 private buybackFee;
  uint256 private reflectionFee;
  uint256 private investmentFee;
  uint256 private totalFee;
  uint256 public feeDenominator = 10000;

  // Buy Fees
  uint256 public liquidityFeeBuy = 0;
  uint256 public buybackFeeBuy = 0;
  uint256 public reflectionFeeBuy = 200;
  uint256 public investmentFeeBuy = 100;
  uint256 public totalFeeBuy = 300;
  // Sell Fees
  uint256 public liquidityFeeSell = 0;
  uint256 public buybackFeeSell = 0;
  uint256 public reflectionFeeSell = 200;
  uint256 public investmentFeeSell = 100;
  uint256 public totalFeeSell = 300;
  // Transfer Fees
  uint256 public liquidityFeeTransfer = 0;
  uint256 public buybackFeeTransfer = 0;
  uint256 public reflectionFeeTransfer = 0;
  uint256 public investmentFeeTransfer = 0;
  uint256 public totalFeeTransfer = 0; // 0%

  uint256 public targetLiquidity = 10;
  uint256 public targetLiquidityDenominator = 100;

  IUniswapV2Router02 public router;
  address public pair;

  uint256 public launchedAt;
  uint256 public launchedAtTimestamp;

  // Fees receivers
  address public autoLiquidityReceiver = 0xaf00d26c66dcE627486997cDFC382d599Fa0DDe0;
  address public investmentFeeReceiver = 0x320943cAaE44500e8cf379290E11B1F644beE9eF;

  bool public autoBuybackEnabled = false;
  uint256 public autoBuybackCap;
  uint256 public autoBuybackAccumulator;
  uint256 public autoBuybackAmount;
  uint256 public autoBuybackBlockPeriod;
  uint256 public autoBuybackBlockLast;

  DividendDistributor public distributor;
  address public distributorAddress;
  uint256 private distributorGas = 300000;

  bool public swapEnabled = true;
  uint256 public swapThreshold = _totalSupply / 2000; // 0.05% (500)
  bool public inSwap;
  modifier swapping() {
    inSwap = true;
    _;
    inSwap = false;
  }

  constructor() Auth(msg.sender) {
    router = IUniswapV2Router02(ROUTER);
    pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
    _allowances[address(this)][address(router)] = _totalSupply;

    distributor = new DividendDistributor(address(router));
    distributorAddress = address(distributor);

    isFeeExempt[msg.sender] = true;
    isTxLimitExempt[msg.sender] = true;

    canAddLiquidityBeforeLaunch[msg.sender] = true;

    isDividendExempt[pair] = true;
    isDividendExempt[address(this)] = true;
    isDividendExempt[DEAD] = true;

    approve(address(router), _totalSupply);
    approve(address(pair), _totalSupply);
    _balances[msg.sender] = _totalSupply;
    emit Transfer(address(0), msg.sender, _totalSupply);
  }

  receive() external payable {}

  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

  function decimals() external pure override returns (uint8) {
    return _decimals;
  }

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

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

  function getOwner() external view override returns (address) {
    return owner;
  }

  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account];
  }

  function allowance(address holder, address spender) external view override returns (uint256) {
    return _allowances[holder][spender];
  }

  function approve(address spender, uint256 amount) public override returns (bool) {
    _allowances[msg.sender][spender] = amount;
    emit Approval(msg.sender, spender, amount);
    return true;
  }

  function approveMax(address spender) external returns (bool) {
    return approve(spender, _totalSupply);
  }

  function transfer(address recipient, uint256 amount) external override returns (bool) {
    return _transferFrom(msg.sender, recipient, amount);
  }

  function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
    if (_allowances[sender][msg.sender] != _totalSupply) {
      _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
    }

    return _transferFrom(sender, recipient, amount);
  }

  function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
    if (inSwap) {
      return _basicTransfer(sender, recipient, amount);
    }

    // Avoid lauchpad buyers from ADD LP before launch
    if (!launched() && recipient == pair) {
      require(canAddLiquidityBeforeLaunch[sender]);
    }

    if (!authorizations[sender] && !authorizations[recipient]) {
      require(launched(), "Trading not open yet");
    }

    // max wallet code
    if (
      !authorizations[sender] &&
      recipient != address(this) &&
      recipient != address(DEAD) &&
      recipient != pair &&
      recipient != investmentFeeReceiver &&
      recipient != autoLiquidityReceiver
    ) {
      uint256 heldTokens = balanceOf(recipient);
      require((heldTokens + amount) <= _maxWallet, "Total Holding is currently limited, you can not buy that much.");
    }

    checkTxLimit(sender, amount);

    // Set Fees
    if (sender == pair) {
      buyFees();
    } else if (recipient == pair) {
      sellFees();
    } else {
      transferFees();
    }

    //Exchange tokens
    if (shouldSwapBack() && totalFee > 0) {
      swapBack();
    }

    if (shouldAutoBuyback()) {
      triggerAutoBuyback();
    }

    _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

    uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;

    _balances[recipient] = _balances[recipient].add(amountReceived);

    // Dividend tracker
    if (!isDividendExempt[sender]) {
      try distributor.setShare(sender, balanceOf(sender)) {} catch {}
    }
    if (!isDividendExempt[recipient]) {
      try distributor.setShare(recipient, balanceOf(recipient)) {} catch {}
    }

    try distributor.process(distributorGas) {} catch {}

    emit Transfer(sender, recipient, amountReceived);
    return true;
  }

  function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
    _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
    _balances[recipient] = _balances[recipient].add(amount);
    emit Transfer(sender, recipient, amount);
    return true;
  }

  function checkTxLimit(address sender, uint256 amount) internal view {
    require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
  }

  // Internal Functions
  function buyFees() internal {
    liquidityFee = liquidityFeeBuy;
    buybackFee = buybackFeeBuy;
    reflectionFee = reflectionFeeBuy;
    investmentFee = investmentFeeBuy;
    totalFee = totalFeeBuy;
  }

  function sellFees() internal {
    liquidityFee = liquidityFeeSell;
    buybackFee = buybackFeeSell;
    reflectionFee = reflectionFeeSell;
    investmentFee = investmentFeeSell;
    totalFee = totalFeeSell;
  }

  function transferFees() internal {
    liquidityFee = liquidityFeeTransfer;
    buybackFee = buybackFeeTransfer;
    reflectionFee = reflectionFeeTransfer;
    investmentFee = investmentFeeTransfer;
    totalFee = totalFeeTransfer;
  }

  function shouldTakeFee(address sender) internal view returns (bool) {
    return !isFeeExempt[sender];
  }

  function takeFee(address sender, uint256 amount) internal returns (uint256) {
    uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

    _balances[address(this)] = _balances[address(this)].add(feeAmount);
    emit Transfer(sender, address(this), feeAmount);

    return amount.sub(feeAmount);
  }

  function shouldSwapBack() internal view returns (bool) {
    return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold;
  }

  function swapBack() internal swapping {
    uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
    uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
    uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

    uint256 balanceBefore = address(this).balance;

    router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap, 0, path, address(this), block.timestamp);

    uint256 amountETH = address(this).balance.sub(balanceBefore);

    uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));

    uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
    uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
    uint256 amountETHInvestment = amountETH.mul(investmentFee).div(totalETHFee);

    try distributor.deposit{value: amountETHReflection}() {} catch {}
    payable(investmentFeeReceiver).transfer(amountETHInvestment);

    if (amountToLiquify > 0) {
      router.addLiquidityETH{value: amountETHLiquidity}(
        address(this),
        amountToLiquify,
        0,
        0,
        autoLiquidityReceiver,
        block.timestamp
      );
      emit AutoLiquify(amountETHLiquidity, amountToLiquify);
    }
  }

  // BuyBack functions
  function shouldAutoBuyback() internal view returns (bool) {
    return
      msg.sender != pair &&
      !inSwap &&
      autoBuybackEnabled &&
      autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number && // After N blocks from last buyback
      address(this).balance >= autoBuybackAmount;
  }

  function triggerAutoBuyback() internal {
    buyTokens(autoBuybackAmount, DEAD);
    autoBuybackBlockLast = block.number;
    autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
    if (autoBuybackAccumulator > autoBuybackCap) {
      autoBuybackEnabled = false;
    }
  }

  function triggerZeusBuyback(uint256 amount) external onlyOwner {
    buyTokens(amount, DEAD);
    autoBuybackBlockLast = block.number;
    autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
    if (autoBuybackAccumulator > autoBuybackCap) {
      autoBuybackEnabled = false;
    }
  }

  function buyTokens(uint256 amount, address to) internal swapping {
    address[] memory path = new address[](2);
    path[0] = router.WETH();
    path[1] = address(this);

    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, to, block.timestamp);
  }

  function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external onlyOwner {
    autoBuybackEnabled = _enabled;
    autoBuybackCap = _cap;
    autoBuybackAccumulator = 0;
    autoBuybackAmount = _amount;
    autoBuybackBlockPeriod = _period;
    autoBuybackBlockLast = block.number;
  }

  // Add extra rewards to holders
  function deposit() external payable onlyOwner {
    try distributor.deposit{value: msg.value}() {} catch {}
  }

  // Process rewards distributions to holders
  function process() external onlyOwner {
    try distributor.process(distributorGas) {} catch {}
  }

  // Stuck Balances Functions
  function rescueToken(address tokenAddress, uint256 tokens) public onlyOwner returns (bool success) {
    return IERC20(tokenAddress).transfer(msg.sender, tokens);
  }

  function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
    uint256 amountETH = address(this).balance;
    payable(investmentFeeReceiver).transfer((amountETH * amountPercentage) / 100);
  }

  function setSellFees(
    uint256 _liquidityFee,
    uint256 _buybackFee,
    uint256 _reflectionFee,
    uint256 _investmentFee
  ) external onlyOwner {
    liquidityFeeSell = _liquidityFee;
    buybackFeeSell = _buybackFee;
    reflectionFeeSell = _reflectionFee;
    investmentFeeSell = _investmentFee;
    totalFeeSell = _liquidityFee + (_buybackFee) + (_reflectionFee) + (_investmentFee);
  }

  function setBuyFees(
    uint256 _liquidityFee,
    uint256 _buybackFee,
    uint256 _reflectionFee,
    uint256 _investmentFee
  ) external onlyOwner {
    liquidityFeeBuy = _liquidityFee;
    buybackFeeBuy = _buybackFee;
    reflectionFeeBuy = _reflectionFee;
    investmentFeeBuy = _investmentFee;
    totalFeeBuy = _liquidityFee + (_buybackFee) + (_reflectionFee) + (_investmentFee);
  }

  function setTransferFees(
    uint256 _liquidityFee,
    uint256 _buybackFee,
    uint256 _reflectionFee,
    uint256 _investmentFee
  ) external onlyOwner {
    liquidityFeeTransfer = _liquidityFee;
    buybackFeeTransfer = _buybackFee;
    reflectionFeeTransfer = _reflectionFee;
    investmentFeeTransfer = _investmentFee;
    totalFeeTransfer = _liquidityFee + (_buybackFee) + (_reflectionFee) + (_investmentFee);
    require(totalFeeTransfer <= 1000, "Total transfer fees exceeds 10%");
  }

  function setFeeReceivers(address _autoLiquidityReceiver, address _investmentFeeReceiver) external onlyOwner {
    autoLiquidityReceiver = _autoLiquidityReceiver;
    investmentFeeReceiver = _investmentFeeReceiver;
  }

  function launched() internal view returns (bool) {
    return launchedAt != 0;
  }

  function launch() public onlyOwner {
    require(launchedAt == 0, "Already launched boi");
    launchedAt = block.number;
    launchedAtTimestamp = block.timestamp;
  }

  function setMaxWallet(uint256 amount) external onlyOwner {
    require(amount >= _totalSupply / 1000);
    _maxWallet = amount;
  }

  function setTxLimit(uint256 amount) external onlyOwner {
    require(amount >= _totalSupply / 1000);
    _maxTxAmount = amount;
  }

  function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
    require(holder != address(this) && holder != pair);
    isDividendExempt[holder] = exempt;
    if (exempt) {
      distributor.setShare(holder, 0);
    } else {
      distributor.setShare(holder, _balances[holder]);
    }
  }

  function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
    isFeeExempt[holder] = exempt;
  }

  function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
    isTxLimitExempt[holder] = exempt;
  }

  function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
    swapEnabled = _enabled;
    swapThreshold = _amount;
  }

  function setCanTransferBeforeLaunch(address holder, bool exempt) external onlyOwner {
    canAddLiquidityBeforeLaunch[holder] = exempt; //Presale Address will be added as Exempt
    isTxLimitExempt[holder] = exempt;
    isFeeExempt[holder] = exempt;
  }

  function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
    targetLiquidity = _target;
    targetLiquidityDenominator = _denominator;
  }

  function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
    distributor.setDistributionCriteria(_minPeriod, _minDistribution);
  }

  function setArbToken(address _arbAddr) external onlyOwner {
    distributor.setArbToken(_arbAddr);
  }

  function setMinDistribution(uint256 _minDistribution) external onlyOwner {
    distributor.setMinDistribution(_minDistribution);
  }

  function setDistributorSettings(uint256 gas) external onlyOwner {
    require(gas < 900000);
    distributorGas = gas;
  }

  function getCirculatingSupply() public view returns (uint256) {
    return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
  }

  function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
    return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
  }

  function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
    return getLiquidityBacking(accuracy) > target;
  }

  event AutoLiquify(uint256 amountETH, uint256 amountMRLN);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity >=0.5.0;

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

pragma solidity >=0.6.2;

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

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
abstract contract Auth {
  address internal owner;
  mapping(address => bool) internal authorizations;

  constructor(address _owner) {
    owner = _owner;
    authorizations[_owner] = true;
  }

  /**
   * Function modifier to require caller to be contract owner
   */
  modifier onlyOwner() {
    require(isOwner(msg.sender), "!OWNER");
    _;
  }

  /**
   * Function modifier to require caller to be authorized
   */
  modifier authorized() {
    require(isAuthorized(msg.sender), "!AUTHORIZED");
    _;
  }

  /**
   * Authorize address. Owner only
   */
  function authorize(address adr) public onlyOwner {
    authorizations[adr] = true;
  }

  /**
   * Remove address' authorization. Owner only
   */
  function unauthorize(address adr) public onlyOwner {
    authorizations[adr] = false;
  }

  /**
   * Check if address is owner
   */
  function isOwner(address account) public view returns (bool) {
    return account == owner;
  }

  /**
   * Return address' authorization status
   */
  function isAuthorized(address adr) public view returns (bool) {
    return authorizations[adr];
  }

  /**
   * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
   */
  function transferOwnership(address payable adr) public onlyOwner {
    owner = adr;
    authorizations[adr] = true;
    emit OwnershipTransferred(adr);
  }

  event OwnershipTransferred(address owner);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import {SafeMath} from "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "./IERC20.sol";

interface IDividendDistributor {
  function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;

  function setShare(address shareholder, uint256 amount) external;

  function deposit() external payable;

  function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
  using SafeMath for uint256;

  address _token;

  struct Share {
    uint256 amount;
    uint256 totalExcluded; // excluded dividends
    uint256 totalRealised;
  }

  // IERC20 ARB = IERC20(0x326C977E6efc84E512bB9C30f76E30c160eD06FB);
  IERC20 ARB = IERC20(0xf97f4df75117a78c1A5a0DBb814Af92458539FB4);
  IUniswapV2Router02 router;

  address[] shareholders;
  mapping(address => uint256) shareholderIndexes;
  mapping(address => uint256) shareholderClaims;

  mapping(address => Share) public shares;

  uint256 public totalShares;
  uint256 public totalDividends;
  uint256 public totalDistributed; // to be shown in UI
  uint256 public dividendsPerShare;
  uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

  uint256 public minPeriod = 1 hours;
  uint256 public minDistribution = 10 * (10 ** 18);

  uint256 currentIndex;

  bool initialized;
  modifier initialization() {
    require(!initialized);
    _;
    initialized = true;
  }

  modifier onlyToken() {
    require(msg.sender == _token);
    _;
  }

  constructor(address _router) {
    router = _router != address(0)
      ? IUniswapV2Router02(_router)
      : IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
    _token = msg.sender;
  }

  function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
    minPeriod = _minPeriod;
    minDistribution = _minDistribution;
  }

  function setArbToken(address _arbAddr) external onlyToken {
    ARB = IERC20(_arbAddr);
  }

  function setMinDistribution(uint256 _minDistribution) external onlyToken {
    minDistribution = _minDistribution;
  }

  function setShare(address shareholder, uint256 amount) external override onlyToken {
    if (shares[shareholder].amount > 0) {
      distributeDividend(shareholder);
    }

    if (amount > 0 && shares[shareholder].amount == 0) {
      addShareholder(shareholder);
    } else if (amount == 0 && shares[shareholder].amount > 0) {
      removeShareholder(shareholder);
    }

    totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
    shares[shareholder].amount = amount;
    shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
  }

  function deposit() external payable override onlyToken {
    uint256 balanceBefore = ARB.balanceOf(address(this));

    address[] memory path = new address[](2);
    path[0] = router.WETH();
    path[1] = address(ARB);

    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
      0,
      path,
      address(this),
      block.timestamp
    );

    uint256 amount = ARB.balanceOf(address(this)).sub(balanceBefore);

    totalDividends = totalDividends.add(amount);
    dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
  }

  function process(uint256 gas) external override onlyToken {
    uint256 shareholderCount = shareholders.length;

    if (shareholderCount == 0) {
      return;
    }

    uint256 gasUsed = 0;
    uint256 gasLeft = gasleft();

    uint256 iterations = 0;

    while (gasUsed < gas && iterations < shareholderCount) {
      if (currentIndex >= shareholderCount) {
        currentIndex = 0;
      }

      if (shouldDistribute(shareholders[currentIndex])) {
        distributeDividend(shareholders[currentIndex]);
      }

      gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
      gasLeft = gasleft();
      currentIndex++;
      iterations++;
    }
  }

  function shouldDistribute(address shareholder) internal view returns (bool) {
    return
      shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution;
  }

  function distributeDividend(address shareholder) internal {
    if (shares[shareholder].amount == 0) {
      return;
    }

    uint256 amount = getUnpaidEarnings(shareholder);
    if (amount > 0) {
      totalDistributed = totalDistributed.add(amount);
      ARB.transfer(shareholder, amount);
      shareholderClaims[shareholder] = block.timestamp;
      shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
      shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }
  }

  function claimDividend() external {
    distributeDividend(msg.sender);
  }

  // returns the  unpaid earnings
  function getUnpaidEarnings(address shareholder) public view returns (uint256) {
    if (shares[shareholder].amount == 0) {
      return 0;
    }

    uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
    uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

    if (shareholderTotalDividends <= shareholderTotalExcluded) {
      return 0;
    }

    return shareholderTotalDividends.sub(shareholderTotalExcluded);
  }

  function getCumulativeDividends(uint256 share) internal view returns (uint256) {
    return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
  }

  function addShareholder(address shareholder) internal {
    shareholderIndexes[shareholder] = shareholders.length;
    shareholders.push(shareholder);
  }

  function removeShareholder(address shareholder) internal {
    shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
    shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
    shareholders.pop();
  }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

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

  function decimals() external view returns (uint8);

  function symbol() external view returns (string memory);

  function name() external view returns (string memory);

  function getOwner() external view returns (address);

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMRLN","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackAccumulator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackBlockLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackBlockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAddLiquidityBeforeLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"investmentFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"process","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_arbAddr","type":"address"}],"name":"setArbToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_investmentFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setCanTransferBeforeLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_investmentFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setMinDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_investmentFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_investmentFee","type":"uint256"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"targetLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetLiquidityDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeTransfer","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000c85565b620f424062000024919062000cd6565b60025562000045610190600254620009d160201b62002f841790919060201c565b600355620000656028600254620009d160201b62002f841790919060201c565b6004556127106010556000601155600060125560c8601355606460145561012c6015556000601655600060175560c8601855606460195561012c601a556000601b556000601c556000601d556000601e556000601f55600a602055606460215573af00d26c66dce627486997cdfc382d599fa0dde0602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073320943caae44500e8cf379290e11b1f644bee9ef602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602760146101000a81548160ff021916908315150217905550620493e0602f556001603060006101000a81548160ff0219169083151502179055506107d0600254620001be919062000d66565b603155348015620001ce57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050731b02da8cb0d097eb8d57a175b88c7d8b47997506602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032657600080fd5b505afa1580156200033b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000361919062000e08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003e557600080fd5b505afa158015620003fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000420919062000e08565b306040518363ffffffff1660e01b81526004016200044092919062000e4b565b602060405180830381600087803b1580156200045b57600080fd5b505af115801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062000e08565b602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005ac9062000add565b620005b8919062000e78565b604051809103906000f080158015620005d5573d6000803e3d6000fd5b50602d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008e3602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600254620009e960201b60201c565b506200091a602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600254620009e960201b60201c565b50600254600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600254604051620009c3919062000ea6565b60405180910390a362000ec3565b60008183620009e1919062000d66565b905092915050565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000acb919062000ea6565b60405180910390a36001905092915050565b611e9980620065a383390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b795780860481111562000b515762000b5062000aeb565b5b600185161562000b615780820291505b808102905062000b718562000b1a565b945062000b31565b94509492505050565b60008262000b94576001905062000c67565b8162000ba4576000905062000c67565b816001811462000bbd576002811462000bc85762000bfe565b600191505062000c67565b60ff84111562000bdd5762000bdc62000aeb565b5b8360020a91508482111562000bf75762000bf662000aeb565b5b5062000c67565b5060208310610133831016604e8410600b841016171562000c385782820a90508381111562000c325762000c3162000aeb565b5b62000c67565b62000c47848484600162000b27565b9250905081840481111562000c615762000c6062000aeb565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c928262000c6e565b915062000c9f8362000c78565b925062000cce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b82565b905092915050565b600062000ce38262000c6e565b915062000cf08362000c6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d2c5762000d2b62000aeb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d738262000c6e565b915062000d808362000c6e565b92508262000d935762000d9262000d37565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dd08262000da3565b9050919050565b62000de28162000dc3565b811462000dee57600080fd5b50565b60008151905062000e028162000dd7565b92915050565b60006020828403121562000e215762000e2062000d9e565b5b600062000e318482850162000df1565b91505092915050565b62000e458162000dc3565b82525050565b600060408201905062000e62600083018562000e3a565b62000e71602083018462000e3a565b9392505050565b600060208201905062000e8f600083018462000e3a565b92915050565b62000ea08162000c6e565b82525050565b600060208201905062000ebd600083018462000e95565b92915050565b6156d08062000ed36000396000f3fe6080604052600436106104975760003560e01c80636ddd171311610260578063ad7e185e11610144578063d8306786116100c1578063f6b700c211610085578063f6b700c21461121d578063f708a64f14611248578063f84ba65d14611271578063f887ea401461129a578063fb5f27fb146112c5578063fe9fbb80146112f05761049e565b8063d83067861461113a578063dd62ed3e14611165578063df20fd49146111a2578063f0b37c04146111cb578063f2fde38b146111f45761049e565b8063c33fb87711610108578063c33fb87714611086578063c6d2577d1461109d578063ca33e64c146110c8578063d0e30db0146110f3578063d51ed1c8146110fd5761049e565b8063ad7e185e14610fb1578063b6a5d7de14610fdc578063b91854f414611005578063bf56b37114611030578063bfe109281461105b5761049e565b80638b81f868116101dd578063a4b45c00116101a1578063a4b45c0014610ea1578063a51af4c514610eca578063a8aa1b3114610ef5578063a9059cbb14610f20578063aae0acf814610f5d578063ac45ed1c14610f865761049e565b80638b81f86814610dcc578063920eee6f14610df757806392258ec814610e2257806395d89b4114610e4d5780639d1944f514610e785761049e565b806382247ec01161022457806382247ec014610ce357806382d2011614610d0e578063893d20e814610d395780638ab6ffc714610d645780638b42507f14610d8f5761049e565b80636ddd171314610be85780636e78eb4914610c1357806370a0823114610c3e5780637d1db4a514610c7b5780638072250b14610ca65761049e565b80632f54bf6e1161038757806351171961116103045780635c85974f116102c85780635c85974f14610af05780635d0044ca14610b195780635ff82d9914610b4257806363a9549214610b6d578063658d4b7f14610b965780636c5b285514610bbf5761049e565b80635117196114610a095780635314841614610a32578063571ac8b014610a5d578063591cf08d14610a9a5780635a53c1fb14610ac55761049e565b80633bb8a8d41161034b5780633bb8a8d41461090e5780633f4218e014610939578063409d0566146109765780634355855a146109a15780634896a632146109de5761049e565b80632f54bf6e14610813578063313959ff14610850578063313ce5671461087b57806333f3d628146108a657806337bc957e146108e35761049e565b806318160ddd1161041557806323b872dd116103d957806323b872dd1461072e57806327b91d6f1461076b5780632b112e49146107945780632d48e896146107bf5780632e4a9bd7146107e85761049e565b806318160ddd1461065d5780631da1db5e146106885780631f619a64146106b1578063201e7991146106dc578063215a62d4146107055761049e565b8063095ea7b31161045c578063095ea7b3146105645780631107b3a5146105a15780631161ae39146105cc578063178d9b8e14610609578063180b0d7e146106325761049e565b80621bcc51146104a357806301339c21146104ce5780630445b667146104e5578063048c7baf1461051057806306fdde03146105395761049e565b3661049e57005b600080fd5b3480156104af57600080fd5b506104b861132d565b6040516104c59190614874565b60405180910390f35b3480156104da57600080fd5b506104e3611333565b005b3480156104f157600080fd5b506104fa6113d0565b6040516105079190614874565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906148f8565b6113d6565b005b34801561054557600080fd5b5061054e611462565b60405161055b91906149f8565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190614a78565b61149f565b6040516105989190614ac7565b60405180910390f35b3480156105ad57600080fd5b506105b6611591565b6040516105c39190614874565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614ae2565b611597565b6040516106009190614ac7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614b22565b6115ac565b005b34801561063e57600080fd5b5061064761163e565b6040516106549190614874565b60405180910390f35b34801561066957600080fd5b50610672611644565b60405161067f9190614874565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190614b89565b61164e565b005b3480156106bd57600080fd5b506106c661171f565b6040516106d39190614bc5565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190614ae2565b611745565b005b34801561071157600080fd5b5061072c60048036038101906107279190614be0565b61179f565b005b34801561073a57600080fd5b5061075560048036038101906107509190614c20565b6118f0565b6040516107629190614ac7565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614c73565b611ad2565b005b3480156107a057600080fd5b506107a9611baa565b6040516107b69190614874565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190614ae2565b611beb565b005b3480156107f457600080fd5b506107fd611cc6565b60405161080a9190614874565b60405180910390f35b34801561081f57600080fd5b5061083a60048036038101906108359190614c73565b611ccc565b6040516108479190614ac7565b60405180910390f35b34801561085c57600080fd5b50610865611d25565b6040516108729190614874565b60405180910390f35b34801561088757600080fd5b50610890611d2b565b60405161089d9190614cbc565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190614a78565b611d34565b6040516108da9190614ac7565b60405180910390f35b3480156108ef57600080fd5b506108f8611e13565b6040516109059190614874565b60405180910390f35b34801561091a57600080fd5b50610923611e19565b6040516109309190614ac7565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614c73565b611e2c565b60405161096d9190614ac7565b60405180910390f35b34801561098257600080fd5b5061098b611e4c565b6040516109989190614874565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190614c73565b611e52565b6040516109d59190614ac7565b60405180910390f35b3480156109ea57600080fd5b506109f3611e72565b604051610a009190614874565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190614b89565b611e78565b005b348015610a3e57600080fd5b50610a47611f50565b604051610a549190614874565b60405180910390f35b348015610a6957600080fd5b50610a846004803603810190610a7f9190614c73565b611f56565b604051610a919190614ac7565b60405180910390f35b348015610aa657600080fd5b50610aaf611f6b565b604051610abc9190614874565b60405180910390f35b348015610ad157600080fd5b50610ada611f71565b604051610ae79190614874565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190614b89565b611f77565b005b348015610b2557600080fd5b50610b406004803603810190610b3b9190614b89565b611fe5565b005b348015610b4e57600080fd5b50610b57612053565b604051610b649190614874565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190614b89565b612059565b005b348015610ba257600080fd5b50610bbd6004803603810190610bb89190614be0565b6120fc565b005b348015610bcb57600080fd5b50610be66004803603810190610be19190614b22565b61219f565b005b348015610bf457600080fd5b50610bfd612231565b604051610c0a9190614ac7565b60405180910390f35b348015610c1f57600080fd5b50610c28612244565b604051610c359190614874565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614c73565b61224a565b604051610c729190614874565b60405180910390f35b348015610c8757600080fd5b50610c90612293565b604051610c9d9190614874565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc89190614c73565b612299565b604051610cda9190614ac7565b60405180910390f35b348015610cef57600080fd5b50610cf86122b9565b604051610d059190614874565b60405180910390f35b348015610d1a57600080fd5b50610d236122bf565b604051610d309190614874565b60405180910390f35b348015610d4557600080fd5b50610d4e6122c5565b604051610d5b9190614bc5565b60405180910390f35b348015610d7057600080fd5b50610d796122ee565b604051610d869190614874565b60405180910390f35b348015610d9b57600080fd5b50610db66004803603810190610db19190614c73565b6122f4565b604051610dc39190614ac7565b60405180910390f35b348015610dd857600080fd5b50610de1612314565b604051610dee9190614874565b60405180910390f35b348015610e0357600080fd5b50610e0c61231a565b604051610e199190614874565b60405180910390f35b348015610e2e57600080fd5b50610e37612320565b604051610e449190614874565b60405180910390f35b348015610e5957600080fd5b50610e62612326565b604051610e6f91906149f8565b60405180910390f35b348015610e8457600080fd5b50610e9f6004803603810190610e9a9190614b89565b612363565b005b348015610ead57600080fd5b50610ec86004803603810190610ec39190614cd7565b6123c4565b005b348015610ed657600080fd5b50610edf612492565b604051610eec9190614bc5565b60405180910390f35b348015610f0157600080fd5b50610f0a6124b8565b604051610f179190614bc5565b60405180910390f35b348015610f2c57600080fd5b50610f476004803603810190610f429190614a78565b6124de565b604051610f549190614ac7565b60405180910390f35b348015610f6957600080fd5b50610f846004803603810190610f7f9190614b22565b6124f3565b005b348015610f9257600080fd5b50610f9b6125cc565b604051610fa89190614874565b60405180910390f35b348015610fbd57600080fd5b50610fc66125d2565b604051610fd39190614874565b60405180910390f35b348015610fe857600080fd5b506110036004803603810190610ffe9190614c73565b6125d8565b005b34801561101157600080fd5b5061101a61267a565b6040516110279190614874565b60405180910390f35b34801561103c57600080fd5b50611045612680565b6040516110529190614874565b60405180910390f35b34801561106757600080fd5b50611070612686565b60405161107d9190614d76565b60405180910390f35b34801561109257600080fd5b5061109b6126ac565b005b3480156110a957600080fd5b506110b2612788565b6040516110bf9190614874565b60405180910390f35b3480156110d457600080fd5b506110dd61278e565b6040516110ea9190614bc5565b60405180910390f35b6110fb6127b4565b005b34801561110957600080fd5b50611124600480360381019061111f9190614b89565b612884565b6040516111319190614874565b60405180910390f35b34801561114657600080fd5b5061114f6128f6565b60405161115c9190614ac7565b60405180910390f35b34801561117157600080fd5b5061118c60048036038101906111879190614cd7565b612909565b6040516111999190614874565b60405180910390f35b3480156111ae57600080fd5b506111c960048036038101906111c49190614d91565b612990565b005b3480156111d757600080fd5b506111f260048036038101906111ed9190614c73565b6129fd565b005b34801561120057600080fd5b5061121b60048036038101906112169190614e0f565b612aa0565b005b34801561122957600080fd5b50611232612bb9565b60405161123f9190614874565b60405180910390f35b34801561125457600080fd5b5061126f600480360381019061126a9190614be0565b612bbf565b005b34801561127d57600080fd5b5061129860048036038101906112939190614be0565b612e5f565b005b3480156112a657600080fd5b506112af612f02565b6040516112bc9190614e5d565b60405180910390f35b3480156112d157600080fd5b506112da612f28565b6040516112e79190614874565b60405180910390f35b3480156112fc57600080fd5b5061131760048036038101906113129190614c73565b612f2e565b6040516113249190614ac7565b60405180910390f35b601f5481565b61133c33611ccc565b61137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614ec4565b60405180910390fd5b6000602454146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614f30565b60405180910390fd5b4360248190555042602581905550565b60315481565b6113df33611ccc565b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614ec4565b60405180910390fd5b83602760146101000a81548160ff02191690831515021790555082602881905550600060298190555081602a8190555080602b8190555043602c8190555050505050565b60606040518060400160405280600a81526020017f4172625072696e74657200000000000000000000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161157f9190614874565b60405180910390a36001905092915050565b60165481565b6000826115a383612884565b11905092915050565b6115b533611ccc565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90614ec4565b60405180910390fd5b836011819055508260128190555081601381905550806014819055508082848661161e9190614f7f565b6116289190614f7f565b6116329190614f7f565b60158190555050505050565b60105481565b6000600254905090565b61165733611ccc565b611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614ec4565b60405180910390fd5b6000479050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846116e59190614fd5565b6116ef919061505e565b9081150290604051600060405180830381858888f1935050505015801561171a573d6000803e3d6000fd5b505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174e33611ccc565b61178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614ec4565b60405180910390fd5b81602081905550806021819055505050565b6117a833611ccc565b6117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614ec4565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611abe57611a3d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611ac9848484612fef565b90509392505050565b611adb33611ccc565b611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327b91d6f826040518263ffffffff1660e01b8152600401611b759190614bc5565b600060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b5050505050565b6000611be6611bb9600061224a565b611bd8611bc761dead61224a565b60025461396c90919063ffffffff16565b61396c90919063ffffffff16565b905090565b611bf433611ccc565b611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611c9092919061508f565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b505050505050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b601d5481565b60006012905090565b6000611d3f33611ccc565b611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590614ec4565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611db99291906150b8565b602060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0b91906150f6565b905092915050565b60175481565b602760149054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60096020528060005260406000206000915054906101000a900460ff1681565b602a5481565b611e8133611ccc565b611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351171961826040518263ffffffff1660e01b8152600401611f1b9190614874565b600060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b5050505050565b601a5481565b6000611f648260025461149f565b9050919050565b60285481565b602b5481565b611f8033611ccc565b611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614ec4565b60405180910390fd5b6103e8600254611fcf919061505e565b811015611fdb57600080fd5b8060038190555050565b611fee33611ccc565b61202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614ec4565b60405180910390fd5b6103e860025461203d919061505e565b81101561204957600080fd5b8060048190555050565b601c5481565b61206233611ccc565b6120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209890614ec4565b60405180910390fd5b6120ad8161dead613982565b43602c819055506120cb602a54602954613bdd90919063ffffffff16565b60298190555060285460295411156120f9576000602760146101000a81548160ff0219169083151502179055505b50565b61210533611ccc565b612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614ec4565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6121a833611ccc565b6121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614ec4565b60405180910390fd5b83601681905550826017819055508160188190555080601981905550808284866122119190614f7f565b61221b9190614f7f565b6122259190614f7f565b601a8190555050505050565b603060009054906101000a900460ff1681565b60295481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60045481565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60215481565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60195481565b60205481565b60606040518060400160405280600581526020017f4152425052000000000000000000000000000000000000000000000000000000815250905090565b61236c33611ccc565b6123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290614ec4565b60405180910390fd5b620dbba081106123ba57600080fd5b80602f8190555050565b6123cd33611ccc565b61240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614ec4565b60405180910390fd5b81602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006124eb338484612fef565b905092915050565b6124fc33611ccc565b61253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614ec4565b60405180910390fd5b83601b8190555082601c8190555081601d8190555080601e81905550808284866125659190614f7f565b61256f9190614f7f565b6125799190614f7f565b601f819055506103e8601f5411156125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd9061516f565b60405180910390fd5b50505050565b60185481565b601e5481565b6125e133611ccc565b612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261790614ec4565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602c5481565b60245481565b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126b533611ccc565b6126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602f546040518263ffffffff1660e01b81526004016127519190614874565b600060405180830381600087803b15801561276b57600080fd5b505af192505050801561277c575060015b61278557612786565b5b565b60255481565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127bd33611ccc565b6127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561286657600080fd5b505af193505050508015612878575060015b61288157612882565b5b565b60006128ef612891611baa565b6128e16128d260026128c4602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661224a565b613bf390919063ffffffff16565b85613bf390919063ffffffff16565b612f8490919063ffffffff16565b9050919050565b603260009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61299933611ccc565b6129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614ec4565b60405180910390fd5b81603060006101000a81548160ff021916908315150217905550806031819055505050565b612a0633611ccc565b612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614ec4565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612aa933611ccc565b612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf90614ec4565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612bae91906151b0565b60405180910390a150565b601b5481565b612bc833611ccc565b612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe90614ec4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c915750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612c9a57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612d8c57602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612d55929190615206565b600060405180830381600087803b158015612d6f57600080fd5b505af1158015612d83573d6000803e3d6000fd5b50505050612e5b565b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612e289291906150b8565b600060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050505b5050565b612e6833611ccc565b612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90614ec4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612f92919061505e565b905092915050565b6000838311158290612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd991906149f8565b60405180910390fd5b5082840390509392505050565b6000603260009054906101000a900460ff161561301857613011848484613c09565b9050613965565b613020613ddc565b15801561307a5750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156130d657600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130d557600080fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561317a5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c757613187613ddc565b6131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd9061527b565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561324d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015613287575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132e15750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561333b5750602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133955750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156133f95760006133a58461224a565b905060045483826133b69190614f7f565b11156133f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ee9061530d565b60405180910390fd5b505b6134038483613de9565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561346657613461613e86565b6134d3565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134c9576134c4613eb5565b6134d2565b6134d1613ee4565b5b5b6134db613f13565b80156134e957506000600f54115b156134f7576134f6613fea565b5b6134ff6145b1565b1561350d5761350c614664565b5b613596826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006135e4856146c0565b6135ee57826135f9565b6135f88484614717565b5b905061364d81600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661377c57602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866137298861224a565b6040518363ffffffff1660e01b81526004016137469291906150b8565b600060405180830381600087803b15801561376057600080fd5b505af1925050508015613771575060015b61377a5761377b565b5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386857602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856138158761224a565b6040518363ffffffff1660e01b81526004016138329291906150b8565b600060405180830381600087803b15801561384c57600080fd5b505af192505050801561385d575060015b61386657613867565b5b5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602f546040518263ffffffff1660e01b81526004016138c59190614874565b600060405180830381600087803b1580156138df57600080fd5b505af19250505080156138f0575060015b6138f9576138fa565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139579190614874565b60405180910390a360019150505b9392505050565b6000818361397a919061532d565b905092915050565b6001603260006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156139ba576139b9615361565b5b6040519080825280602002602001820160405280156139e85781602001602082028036833780820191505090505b509050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a5357600080fd5b505afa158015613a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8b91906153a5565b81600081518110613a9f57613a9e6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613aee57613aed6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401613b8b94939291906154bf565b6000604051808303818588803b158015613ba457600080fd5b505af1158015613bb8573d6000803e3d6000fd5b5050505050506000603260006101000a81548160ff0219169083151502179055505050565b60008183613beb9190614f7f565b905092915050565b60008183613c019190614fd5565b905092915050565b6000613c94826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2982600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dc99190614874565b60405180910390a3600190509392505050565b6000806024541415905090565b60035481111580613e435750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7990615557565b60405180910390fd5b5050565b601154600b81905550601254600c81905550601354600d81905550601454600e81905550601554600f81905550565b601654600b81905550601754600c81905550601854600d81905550601954600e81905550601a54600f81905550565b601b54600b81905550601c54600c81905550601d54600d81905550601e54600e81905550601f54600f81905550565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613f805750603260009054906101000a900460ff16155b8015613f985750603060009054906101000a900460ff165b8015613fe55750603154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001603260006101000a81548160ff0219169083151502179055506000614015602054602154611597565b61402157600b54614024565b60005b905060006140646002614056600f5461404886603154613bf390919063ffffffff16565b612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050600061407d8260315461396c90919063ffffffff16565b90506000600267ffffffffffffffff81111561409c5761409b615361565b5b6040519080825280602002602001820160405280156140ca5781602001602082028036833780820191505090505b50905030816000815181106140e2576140e16153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561418457600080fd5b505afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc91906153a5565b816001815181106141d0576141cf6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614273959493929190615577565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b5050505060006142ba824761396c90919063ffffffff16565b905060006142e66142d5600289612f8490919063ffffffff16565b600f5461396c90919063ffffffff16565b905060006143226002614314846143068c88613bf390919063ffffffff16565b612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050600061434d8361433f600d5487613bf390919063ffffffff16565b612f8490919063ffffffff16565b905060006143788461436a600e5488613bf390919063ffffffff16565b612f8490919063ffffffff16565b9050602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156143e457600080fd5b505af1935050505080156143f6575060015b6143ff57614400565b5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614468573d6000803e3d6000fd5b50600089111561458a57602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016144fb969594939291906155d1565b6060604051808303818588803b15801561451457600080fd5b505af1158015614528573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061454d9190615647565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a60405161458192919061508f565b60405180910390a15b505050505050505050506000603260006101000a81548160ff021916908315150217905550565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561461e5750603260009054906101000a900460ff16155b80156146365750602760149054906101000a900460ff165b8015614651575043602b54602c5461464e9190614f7f565b11155b801561465f5750602a544710155b905090565b614672602a5461dead613982565b43602c81905550614690602a54602954613bdd90919063ffffffff16565b60298190555060285460295411156146be576000602760146101000a81548160ff0219169083151502179055505b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080614743601054614735600f5486613bf390919063ffffffff16565b612f8490919063ffffffff16565b905061479781600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516148379190614874565b60405180910390a3614852818461396c90919063ffffffff16565b91505092915050565b6000819050919050565b61486e8161485b565b82525050565b60006020820190506148896000830184614865565b92915050565b600080fd5b60008115159050919050565b6148a981614894565b81146148b457600080fd5b50565b6000813590506148c6816148a0565b92915050565b6148d58161485b565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b600080600080608085870312156149125761491161488f565b5b6000614920878288016148b7565b9450506020614931878288016148e3565b9350506040614942878288016148e3565b9250506060614953878288016148e3565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499957808201518184015260208101905061497e565b838111156149a8576000848401525b50505050565b6000601f19601f8301169050919050565b60006149ca8261495f565b6149d4818561496a565b93506149e481856020860161497b565b6149ed816149ae565b840191505092915050565b60006020820190508181036000830152614a1281846149bf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4582614a1a565b9050919050565b614a5581614a3a565b8114614a6057600080fd5b50565b600081359050614a7281614a4c565b92915050565b60008060408385031215614a8f57614a8e61488f565b5b6000614a9d85828601614a63565b9250506020614aae858286016148e3565b9150509250929050565b614ac181614894565b82525050565b6000602082019050614adc6000830184614ab8565b92915050565b60008060408385031215614af957614af861488f565b5b6000614b07858286016148e3565b9250506020614b18858286016148e3565b9150509250929050565b60008060008060808587031215614b3c57614b3b61488f565b5b6000614b4a878288016148e3565b9450506020614b5b878288016148e3565b9350506040614b6c878288016148e3565b9250506060614b7d878288016148e3565b91505092959194509250565b600060208284031215614b9f57614b9e61488f565b5b6000614bad848285016148e3565b91505092915050565b614bbf81614a3a565b82525050565b6000602082019050614bda6000830184614bb6565b92915050565b60008060408385031215614bf757614bf661488f565b5b6000614c0585828601614a63565b9250506020614c16858286016148b7565b9150509250929050565b600080600060608486031215614c3957614c3861488f565b5b6000614c4786828701614a63565b9350506020614c5886828701614a63565b9250506040614c69868287016148e3565b9150509250925092565b600060208284031215614c8957614c8861488f565b5b6000614c9784828501614a63565b91505092915050565b600060ff82169050919050565b614cb681614ca0565b82525050565b6000602082019050614cd16000830184614cad565b92915050565b60008060408385031215614cee57614ced61488f565b5b6000614cfc85828601614a63565b9250506020614d0d85828601614a63565b9150509250929050565b6000819050919050565b6000614d3c614d37614d3284614a1a565b614d17565b614a1a565b9050919050565b6000614d4e82614d21565b9050919050565b6000614d6082614d43565b9050919050565b614d7081614d55565b82525050565b6000602082019050614d8b6000830184614d67565b92915050565b60008060408385031215614da857614da761488f565b5b6000614db6858286016148b7565b9250506020614dc7858286016148e3565b9150509250929050565b6000614ddc82614a1a565b9050919050565b614dec81614dd1565b8114614df757600080fd5b50565b600081359050614e0981614de3565b92915050565b600060208284031215614e2557614e2461488f565b5b6000614e3384828501614dfa565b91505092915050565b6000614e4782614d43565b9050919050565b614e5781614e3c565b82525050565b6000602082019050614e726000830184614e4e565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614eae60068361496a565b9150614eb982614e78565b602082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000614f1a60148361496a565b9150614f2582614ee4565b602082019050919050565b60006020820190508181036000830152614f4981614f0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f8a8261485b565b9150614f958361485b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fca57614fc9614f50565b5b828201905092915050565b6000614fe08261485b565b9150614feb8361485b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561502457615023614f50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150698261485b565b91506150748361485b565b9250826150845761508361502f565b5b828204905092915050565b60006040820190506150a46000830185614865565b6150b16020830184614865565b9392505050565b60006040820190506150cd6000830185614bb6565b6150da6020830184614865565b9392505050565b6000815190506150f0816148a0565b92915050565b60006020828403121561510c5761510b61488f565b5b600061511a848285016150e1565b91505092915050565b7f546f74616c207472616e73666572206665657320657863656564732031302500600082015250565b6000615159601f8361496a565b915061516482615123565b602082019050919050565b600060208201905081810360008301526151888161514c565b9050919050565b600061519a82614d43565b9050919050565b6151aa8161518f565b82525050565b60006020820190506151c560008301846151a1565b92915050565b6000819050919050565b60006151f06151eb6151e6846151cb565b614d17565b61485b565b9050919050565b615200816151d5565b82525050565b600060408201905061521b6000830185614bb6565b61522860208301846151f7565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061526560148361496a565b91506152708261522f565b602082019050919050565b6000602082019050818103600083015261529481615258565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b60006152f7603e8361496a565b91506153028261529b565b604082019050919050565b60006020820190508181036000830152615326816152ea565b9050919050565b60006153388261485b565b91506153438361485b565b92508282101561535657615355614f50565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061539f81614a4c565b92915050565b6000602082840312156153bb576153ba61488f565b5b60006153c984828501615390565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61543681614a3a565b82525050565b6000615448838361542d565b60208301905092915050565b6000602082019050919050565b600061546c82615401565b615476818561540c565b93506154818361541d565b8060005b838110156154b2578151615499888261543c565b97506154a483615454565b925050600181019050615485565b5085935050505092915050565b60006080820190506154d460008301876151f7565b81810360208301526154e68186615461565b90506154f56040830185614bb6565b6155026060830184614865565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061554160118361496a565b915061554c8261550b565b602082019050919050565b6000602082019050818103600083015261557081615534565b9050919050565b600060a08201905061558c6000830188614865565b61559960208301876151f7565b81810360408301526155ab8186615461565b90506155ba6060830185614bb6565b6155c76080830184614865565b9695505050505050565b600060c0820190506155e66000830189614bb6565b6155f36020830188614865565b61560060408301876151f7565b61560d60608301866151f7565b61561a6080830185614bb6565b61562760a0830184614865565b979650505050505050565b600081519050615641816148cc565b92915050565b6000806000606084860312156156605761565f61488f565b5b600061566e86828701615632565b935050602061567f86828701615632565b925050604061569086828701615632565b915050925092509256fea26469706673582212206c3b11a46c2fbec1f472ca84b72702d6907b1d55a14be2830b0906952ed2858764736f6c63430008090033608060405273f97f4df75117a78c1a5a0dbb814af92458539fb4600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600b55610e10600c55678ac7230489e80000600d553480156200008b57600080fd5b5060405162001e9938038062001e998339818101604052810190620000b19190620001f5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200010257731b02da8cb0d097eb8d57a175b88c7d8b4799750662000104565b805b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000227565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001bd8262000190565b9050919050565b620001cf81620001b0565b8114620001db57600080fd5b50565b600081519050620001ef81620001c4565b92915050565b6000602082840312156200020e576200020d6200018b565b5b60006200021e84828501620001de565b91505092915050565b611c6280620002376000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed146102f9578063f0fc6bca14610324578063ffb2c4791461033b578063ffd49c8414610364576100f3565b8063997664d71461025a578063ce7c2ac214610285578063d0e30db0146102c4578063e2d2e219146102ce576100f3565b80632d48e896116100c65780632d48e896146101b25780633a98ef39146101db5780634fab0ae8146102065780635117196114610231576100f3565b806311ce023d146100f857806314b6ca961461012357806327b91d6f1461014c57806328fd319814610175575b600080fd5b34801561010457600080fd5b5061010d61038f565b60405161011a919061159d565b60405180910390f35b34801561012f57600080fd5b5061014a60048036038101906101459190611647565b610395565b005b34801561015857600080fd5b50610173600480360381019061016e9190611687565b610654565b005b34801561018157600080fd5b5061019c60048036038101906101979190611687565b6106f0565b6040516101a9919061159d565b60405180910390f35b3480156101be57600080fd5b506101d960048036038101906101d491906116b4565b61080a565b005b3480156101e757600080fd5b506101f0610874565b6040516101fd919061159d565b60405180910390f35b34801561021257600080fd5b5061021b61087a565b604051610228919061159d565b60405180910390f35b34801561023d57600080fd5b50610258600480360381019061025391906116f4565b610880565b005b34801561026657600080fd5b5061026f6108e2565b60405161027c919061159d565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190611687565b6108e8565b6040516102bb93929190611721565b60405180910390f35b6102cc610912565b005b3480156102da57600080fd5b506102e3610d7f565b6040516102f0919061159d565b60405180910390f35b34801561030557600080fd5b5061030e610d85565b60405161031b919061159d565b60405180910390f35b34801561033057600080fd5b50610339610d8b565b005b34801561034757600080fd5b50610362600480360381019061035d91906116f4565b610d96565b005b34801561037057600080fd5b50610379610f2a565b604051610386919061159d565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103ed57600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104425761044182610f30565b5b60008111801561049457506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104a7576104a2826111d7565b610509565b6000811480156104f957506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156105085761050782611286565b5b5b61057281610564600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461148d90919063ffffffff16565b6114a390919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061060a600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b9565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106ac57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156107455760009050610805565b6000610792600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b9565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107ed57600092505050610805565b610800818361148d90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086257600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108d857600080fd5b80600d8190555050565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461096a57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109c79190611767565b60206040518083038186803b1580156109df57600080fd5b505afa1580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a179190611797565b90506000600267ffffffffffffffff811115610a3657610a356117c4565b5b604051908082528060200260200182016040528015610a645781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610acf57600080fd5b505afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b079190611808565b81600081518110610b1b57610b1a611835565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b8c57610b8b611835565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610c299493929190611967565b6000604051808303818588803b158015610c4257600080fd5b505af1158015610c56573d6000803e3d6000fd5b50505050506000610d1a83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cbc9190611767565b60206040518083038186803b158015610cd457600080fd5b505afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190611797565b61148d90919063ffffffff16565b9050610d31816008546114a390919063ffffffff16565b600881905550610d74610d63600754610d5584600b546114eb90919063ffffffff16565b61150190919063ffffffff16565b600a546114a390919063ffffffff16565b600a81905550505050565b600a5481565b60095481565b610d9433610f30565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dee57600080fd5b600060038054905090506000811415610e075750610f27565b6000805a905060005b8483108015610e1e57508381105b15610f225783600e5410610e35576000600e819055505b610e7e6003600e5481548110610e4e57610e4d611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611517565b15610ecd57610ecc6003600e5481548110610e9c57610e9b611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f30565b5b610ef2610ee35a8461148d90919063ffffffff16565b846114a390919063ffffffff16565b92505a9150600e6000815480929190610f0a906119e2565b91905055508080610f1a906119e2565b915050610e10565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610f80576111d4565b6000610f8b826106f0565b905060008111156111d257610fab816009546114a390919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161100e929190611a2b565b602060405180830381600087803b15801561102857600080fd5b505af115801561103c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110609190611a8c565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110fa81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546114a390919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061118b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114b9565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6003600160038054905061129a9190611ab9565b815481106112ab576112aa611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061132957611328611835565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506113c99190611ab9565b815481106113da576113d9611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061145557611454611aed565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000818361149b9190611ab9565b905092915050565b600081836114b19190611b1c565b905092915050565b60006114e4600b546114d6600a54856114eb90919063ffffffff16565b61150190919063ffffffff16565b9050919050565b600081836114f99190611b72565b905092915050565b6000818361150f9190611bfb565b905092915050565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115679190611b1c565b10801561157d5750600d5461157b836106f0565b115b9050919050565b6000819050919050565b61159781611584565b82525050565b60006020820190506115b2600083018461158e565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115e8826115bd565b9050919050565b6115f8816115dd565b811461160357600080fd5b50565b600081359050611615816115ef565b92915050565b61162481611584565b811461162f57600080fd5b50565b6000813590506116418161161b565b92915050565b6000806040838503121561165e5761165d6115b8565b5b600061166c85828601611606565b925050602061167d85828601611632565b9150509250929050565b60006020828403121561169d5761169c6115b8565b5b60006116ab84828501611606565b91505092915050565b600080604083850312156116cb576116ca6115b8565b5b60006116d985828601611632565b92505060206116ea85828601611632565b9150509250929050565b60006020828403121561170a576117096115b8565b5b600061171884828501611632565b91505092915050565b6000606082019050611736600083018661158e565b611743602083018561158e565b611750604083018461158e565b949350505050565b611761816115dd565b82525050565b600060208201905061177c6000830184611758565b92915050565b6000815190506117918161161b565b92915050565b6000602082840312156117ad576117ac6115b8565b5b60006117bb84828501611782565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611802816115ef565b92915050565b60006020828403121561181e5761181d6115b8565b5b600061182c848285016117f3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061189361188e61188984611864565b61186e565b611584565b9050919050565b6118a381611878565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6118de816115dd565b82525050565b60006118f083836118d5565b60208301905092915050565b6000602082019050919050565b6000611914826118a9565b61191e81856118b4565b9350611929836118c5565b8060005b8381101561195a57815161194188826118e4565b975061194c836118fc565b92505060018101905061192d565b5085935050505092915050565b600060808201905061197c600083018761189a565b818103602083015261198e8186611909565b905061199d6040830185611758565b6119aa606083018461158e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119ed82611584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a2057611a1f6119b3565b5b600182019050919050565b6000604082019050611a406000830185611758565b611a4d602083018461158e565b9392505050565b60008115159050919050565b611a6981611a54565b8114611a7457600080fd5b50565b600081519050611a8681611a60565b92915050565b600060208284031215611aa257611aa16115b8565b5b6000611ab084828501611a77565b91505092915050565b6000611ac482611584565b9150611acf83611584565b925082821015611ae257611ae16119b3565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611b2782611584565b9150611b3283611584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b6757611b666119b3565b5b828201905092915050565b6000611b7d82611584565b9150611b8883611584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611bc157611bc06119b3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611c0682611584565b9150611c1183611584565b925082611c2157611c20611bcc565b5b82820490509291505056fea2646970667358221220708c2ab42e0d16456255b87be5a3d74a93e1881f035cf9f715748693b48313da64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106104975760003560e01c80636ddd171311610260578063ad7e185e11610144578063d8306786116100c1578063f6b700c211610085578063f6b700c21461121d578063f708a64f14611248578063f84ba65d14611271578063f887ea401461129a578063fb5f27fb146112c5578063fe9fbb80146112f05761049e565b8063d83067861461113a578063dd62ed3e14611165578063df20fd49146111a2578063f0b37c04146111cb578063f2fde38b146111f45761049e565b8063c33fb87711610108578063c33fb87714611086578063c6d2577d1461109d578063ca33e64c146110c8578063d0e30db0146110f3578063d51ed1c8146110fd5761049e565b8063ad7e185e14610fb1578063b6a5d7de14610fdc578063b91854f414611005578063bf56b37114611030578063bfe109281461105b5761049e565b80638b81f868116101dd578063a4b45c00116101a1578063a4b45c0014610ea1578063a51af4c514610eca578063a8aa1b3114610ef5578063a9059cbb14610f20578063aae0acf814610f5d578063ac45ed1c14610f865761049e565b80638b81f86814610dcc578063920eee6f14610df757806392258ec814610e2257806395d89b4114610e4d5780639d1944f514610e785761049e565b806382247ec01161022457806382247ec014610ce357806382d2011614610d0e578063893d20e814610d395780638ab6ffc714610d645780638b42507f14610d8f5761049e565b80636ddd171314610be85780636e78eb4914610c1357806370a0823114610c3e5780637d1db4a514610c7b5780638072250b14610ca65761049e565b80632f54bf6e1161038757806351171961116103045780635c85974f116102c85780635c85974f14610af05780635d0044ca14610b195780635ff82d9914610b4257806363a9549214610b6d578063658d4b7f14610b965780636c5b285514610bbf5761049e565b80635117196114610a095780635314841614610a32578063571ac8b014610a5d578063591cf08d14610a9a5780635a53c1fb14610ac55761049e565b80633bb8a8d41161034b5780633bb8a8d41461090e5780633f4218e014610939578063409d0566146109765780634355855a146109a15780634896a632146109de5761049e565b80632f54bf6e14610813578063313959ff14610850578063313ce5671461087b57806333f3d628146108a657806337bc957e146108e35761049e565b806318160ddd1161041557806323b872dd116103d957806323b872dd1461072e57806327b91d6f1461076b5780632b112e49146107945780632d48e896146107bf5780632e4a9bd7146107e85761049e565b806318160ddd1461065d5780631da1db5e146106885780631f619a64146106b1578063201e7991146106dc578063215a62d4146107055761049e565b8063095ea7b31161045c578063095ea7b3146105645780631107b3a5146105a15780631161ae39146105cc578063178d9b8e14610609578063180b0d7e146106325761049e565b80621bcc51146104a357806301339c21146104ce5780630445b667146104e5578063048c7baf1461051057806306fdde03146105395761049e565b3661049e57005b600080fd5b3480156104af57600080fd5b506104b861132d565b6040516104c59190614874565b60405180910390f35b3480156104da57600080fd5b506104e3611333565b005b3480156104f157600080fd5b506104fa6113d0565b6040516105079190614874565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906148f8565b6113d6565b005b34801561054557600080fd5b5061054e611462565b60405161055b91906149f8565b60405180910390f35b34801561057057600080fd5b5061058b60048036038101906105869190614a78565b61149f565b6040516105989190614ac7565b60405180910390f35b3480156105ad57600080fd5b506105b6611591565b6040516105c39190614874565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614ae2565b611597565b6040516106009190614ac7565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614b22565b6115ac565b005b34801561063e57600080fd5b5061064761163e565b6040516106549190614874565b60405180910390f35b34801561066957600080fd5b50610672611644565b60405161067f9190614874565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190614b89565b61164e565b005b3480156106bd57600080fd5b506106c661171f565b6040516106d39190614bc5565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190614ae2565b611745565b005b34801561071157600080fd5b5061072c60048036038101906107279190614be0565b61179f565b005b34801561073a57600080fd5b5061075560048036038101906107509190614c20565b6118f0565b6040516107629190614ac7565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614c73565b611ad2565b005b3480156107a057600080fd5b506107a9611baa565b6040516107b69190614874565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190614ae2565b611beb565b005b3480156107f457600080fd5b506107fd611cc6565b60405161080a9190614874565b60405180910390f35b34801561081f57600080fd5b5061083a60048036038101906108359190614c73565b611ccc565b6040516108479190614ac7565b60405180910390f35b34801561085c57600080fd5b50610865611d25565b6040516108729190614874565b60405180910390f35b34801561088757600080fd5b50610890611d2b565b60405161089d9190614cbc565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c89190614a78565b611d34565b6040516108da9190614ac7565b60405180910390f35b3480156108ef57600080fd5b506108f8611e13565b6040516109059190614874565b60405180910390f35b34801561091a57600080fd5b50610923611e19565b6040516109309190614ac7565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614c73565b611e2c565b60405161096d9190614ac7565b60405180910390f35b34801561098257600080fd5b5061098b611e4c565b6040516109989190614874565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c39190614c73565b611e52565b6040516109d59190614ac7565b60405180910390f35b3480156109ea57600080fd5b506109f3611e72565b604051610a009190614874565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190614b89565b611e78565b005b348015610a3e57600080fd5b50610a47611f50565b604051610a549190614874565b60405180910390f35b348015610a6957600080fd5b50610a846004803603810190610a7f9190614c73565b611f56565b604051610a919190614ac7565b60405180910390f35b348015610aa657600080fd5b50610aaf611f6b565b604051610abc9190614874565b60405180910390f35b348015610ad157600080fd5b50610ada611f71565b604051610ae79190614874565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190614b89565b611f77565b005b348015610b2557600080fd5b50610b406004803603810190610b3b9190614b89565b611fe5565b005b348015610b4e57600080fd5b50610b57612053565b604051610b649190614874565b60405180910390f35b348015610b7957600080fd5b50610b946004803603810190610b8f9190614b89565b612059565b005b348015610ba257600080fd5b50610bbd6004803603810190610bb89190614be0565b6120fc565b005b348015610bcb57600080fd5b50610be66004803603810190610be19190614b22565b61219f565b005b348015610bf457600080fd5b50610bfd612231565b604051610c0a9190614ac7565b60405180910390f35b348015610c1f57600080fd5b50610c28612244565b604051610c359190614874565b60405180910390f35b348015610c4a57600080fd5b50610c656004803603810190610c609190614c73565b61224a565b604051610c729190614874565b60405180910390f35b348015610c8757600080fd5b50610c90612293565b604051610c9d9190614874565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc89190614c73565b612299565b604051610cda9190614ac7565b60405180910390f35b348015610cef57600080fd5b50610cf86122b9565b604051610d059190614874565b60405180910390f35b348015610d1a57600080fd5b50610d236122bf565b604051610d309190614874565b60405180910390f35b348015610d4557600080fd5b50610d4e6122c5565b604051610d5b9190614bc5565b60405180910390f35b348015610d7057600080fd5b50610d796122ee565b604051610d869190614874565b60405180910390f35b348015610d9b57600080fd5b50610db66004803603810190610db19190614c73565b6122f4565b604051610dc39190614ac7565b60405180910390f35b348015610dd857600080fd5b50610de1612314565b604051610dee9190614874565b60405180910390f35b348015610e0357600080fd5b50610e0c61231a565b604051610e199190614874565b60405180910390f35b348015610e2e57600080fd5b50610e37612320565b604051610e449190614874565b60405180910390f35b348015610e5957600080fd5b50610e62612326565b604051610e6f91906149f8565b60405180910390f35b348015610e8457600080fd5b50610e9f6004803603810190610e9a9190614b89565b612363565b005b348015610ead57600080fd5b50610ec86004803603810190610ec39190614cd7565b6123c4565b005b348015610ed657600080fd5b50610edf612492565b604051610eec9190614bc5565b60405180910390f35b348015610f0157600080fd5b50610f0a6124b8565b604051610f179190614bc5565b60405180910390f35b348015610f2c57600080fd5b50610f476004803603810190610f429190614a78565b6124de565b604051610f549190614ac7565b60405180910390f35b348015610f6957600080fd5b50610f846004803603810190610f7f9190614b22565b6124f3565b005b348015610f9257600080fd5b50610f9b6125cc565b604051610fa89190614874565b60405180910390f35b348015610fbd57600080fd5b50610fc66125d2565b604051610fd39190614874565b60405180910390f35b348015610fe857600080fd5b506110036004803603810190610ffe9190614c73565b6125d8565b005b34801561101157600080fd5b5061101a61267a565b6040516110279190614874565b60405180910390f35b34801561103c57600080fd5b50611045612680565b6040516110529190614874565b60405180910390f35b34801561106757600080fd5b50611070612686565b60405161107d9190614d76565b60405180910390f35b34801561109257600080fd5b5061109b6126ac565b005b3480156110a957600080fd5b506110b2612788565b6040516110bf9190614874565b60405180910390f35b3480156110d457600080fd5b506110dd61278e565b6040516110ea9190614bc5565b60405180910390f35b6110fb6127b4565b005b34801561110957600080fd5b50611124600480360381019061111f9190614b89565b612884565b6040516111319190614874565b60405180910390f35b34801561114657600080fd5b5061114f6128f6565b60405161115c9190614ac7565b60405180910390f35b34801561117157600080fd5b5061118c60048036038101906111879190614cd7565b612909565b6040516111999190614874565b60405180910390f35b3480156111ae57600080fd5b506111c960048036038101906111c49190614d91565b612990565b005b3480156111d757600080fd5b506111f260048036038101906111ed9190614c73565b6129fd565b005b34801561120057600080fd5b5061121b60048036038101906112169190614e0f565b612aa0565b005b34801561122957600080fd5b50611232612bb9565b60405161123f9190614874565b60405180910390f35b34801561125457600080fd5b5061126f600480360381019061126a9190614be0565b612bbf565b005b34801561127d57600080fd5b5061129860048036038101906112939190614be0565b612e5f565b005b3480156112a657600080fd5b506112af612f02565b6040516112bc9190614e5d565b60405180910390f35b3480156112d157600080fd5b506112da612f28565b6040516112e79190614874565b60405180910390f35b3480156112fc57600080fd5b5061131760048036038101906113129190614c73565b612f2e565b6040516113249190614ac7565b60405180910390f35b601f5481565b61133c33611ccc565b61137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614ec4565b60405180910390fd5b6000602454146113c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b790614f30565b60405180910390fd5b4360248190555042602581905550565b60315481565b6113df33611ccc565b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614ec4565b60405180910390fd5b83602760146101000a81548160ff02191690831515021790555082602881905550600060298190555081602a8190555080602b8190555043602c8190555050505050565b60606040518060400160405280600a81526020017f4172625072696e74657200000000000000000000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161157f9190614874565b60405180910390a36001905092915050565b60165481565b6000826115a383612884565b11905092915050565b6115b533611ccc565b6115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90614ec4565b60405180910390fd5b836011819055508260128190555081601381905550806014819055508082848661161e9190614f7f565b6116289190614f7f565b6116329190614f7f565b60158190555050505050565b60105481565b6000600254905090565b61165733611ccc565b611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614ec4565b60405180910390fd5b6000479050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846116e59190614fd5565b6116ef919061505e565b9081150290604051600060405180830381858888f1935050505015801561171a573d6000803e3d6000fd5b505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174e33611ccc565b61178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614ec4565b60405180910390fd5b81602081905550806021819055505050565b6117a833611ccc565b6117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614ec4565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611abe57611a3d826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611ac9848484612fef565b90509392505050565b611adb33611ccc565b611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327b91d6f826040518263ffffffff1660e01b8152600401611b759190614bc5565b600060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b5050505050565b6000611be6611bb9600061224a565b611bd8611bc761dead61224a565b60025461396c90919063ffffffff16565b61396c90919063ffffffff16565b905090565b611bf433611ccc565b611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611c9092919061508f565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b505050505050565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b601d5481565b60006012905090565b6000611d3f33611ccc565b611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590614ec4565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611db99291906150b8565b602060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0b91906150f6565b905092915050565b60175481565b602760149054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60096020528060005260406000206000915054906101000a900460ff1681565b602a5481565b611e8133611ccc565b611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351171961826040518263ffffffff1660e01b8152600401611f1b9190614874565b600060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b5050505050565b601a5481565b6000611f648260025461149f565b9050919050565b60285481565b602b5481565b611f8033611ccc565b611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb690614ec4565b60405180910390fd5b6103e8600254611fcf919061505e565b811015611fdb57600080fd5b8060038190555050565b611fee33611ccc565b61202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614ec4565b60405180910390fd5b6103e860025461203d919061505e565b81101561204957600080fd5b8060048190555050565b601c5481565b61206233611ccc565b6120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209890614ec4565b60405180910390fd5b6120ad8161dead613982565b43602c819055506120cb602a54602954613bdd90919063ffffffff16565b60298190555060285460295411156120f9576000602760146101000a81548160ff0219169083151502179055505b50565b61210533611ccc565b612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614ec4565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6121a833611ccc565b6121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614ec4565b60405180910390fd5b83601681905550826017819055508160188190555080601981905550808284866122119190614f7f565b61221b9190614f7f565b6122259190614f7f565b601a8190555050505050565b603060009054906101000a900460ff1681565b60295481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60035481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60045481565b60115481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60215481565b60086020528060005260406000206000915054906101000a900460ff1681565b60145481565b60195481565b60205481565b60606040518060400160405280600581526020017f4152425052000000000000000000000000000000000000000000000000000000815250905090565b61236c33611ccc565b6123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a290614ec4565b60405180910390fd5b620dbba081106123ba57600080fd5b80602f8190555050565b6123cd33611ccc565b61240c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240390614ec4565b60405180910390fd5b81602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006124eb338484612fef565b905092915050565b6124fc33611ccc565b61253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614ec4565b60405180910390fd5b83601b8190555082601c8190555081601d8190555080601e81905550808284866125659190614f7f565b61256f9190614f7f565b6125799190614f7f565b601f819055506103e8601f5411156125c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bd9061516f565b60405180910390fd5b50505050565b60185481565b601e5481565b6125e133611ccc565b612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261790614ec4565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602c5481565b60245481565b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126b533611ccc565b6126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602f546040518263ffffffff1660e01b81526004016127519190614874565b600060405180830381600087803b15801561276b57600080fd5b505af192505050801561277c575060015b61278557612786565b5b565b60255481565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127bd33611ccc565b6127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390614ec4565b60405180910390fd5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561286657600080fd5b505af193505050508015612878575060015b61288157612882565b5b565b60006128ef612891611baa565b6128e16128d260026128c4602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661224a565b613bf390919063ffffffff16565b85613bf390919063ffffffff16565b612f8490919063ffffffff16565b9050919050565b603260009054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61299933611ccc565b6129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614ec4565b60405180910390fd5b81603060006101000a81548160ff021916908315150217905550806031819055505050565b612a0633611ccc565b612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614ec4565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612aa933611ccc565b612ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adf90614ec4565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612bae91906151b0565b60405180910390a150565b601b5481565b612bc833611ccc565b612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe90614ec4565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c915750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612c9a57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612d8c57602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401612d55929190615206565b600060405180830381600087803b158015612d6f57600080fd5b505af1158015612d83573d6000803e3d6000fd5b50505050612e5b565b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612e289291906150b8565b600060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050505b5050565b612e6833611ccc565b612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e90614ec4565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008183612f92919061505e565b905092915050565b6000838311158290612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd991906149f8565b60405180910390fd5b5082840390509392505050565b6000603260009054906101000a900460ff161561301857613011848484613c09565b9050613965565b613020613ddc565b15801561307a5750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156130d657600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130d557600080fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561317a5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c757613187613ddc565b6131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd9061527b565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561324d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015613287575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132e15750602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561333b5750602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156133955750602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156133f95760006133a58461224a565b905060045483826133b69190614f7f565b11156133f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ee9061530d565b60405180910390fd5b505b6134038483613de9565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561346657613461613e86565b6134d3565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134c9576134c4613eb5565b6134d2565b6134d1613ee4565b5b5b6134db613f13565b80156134e957506000600f54115b156134f7576134f6613fea565b5b6134ff6145b1565b1561350d5761350c614664565b5b613596826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006135e4856146c0565b6135ee57826135f9565b6135f88484614717565b5b905061364d81600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661377c57602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96866137298861224a565b6040518363ffffffff1660e01b81526004016137469291906150b8565b600060405180830381600087803b15801561376057600080fd5b505af1925050508015613771575060015b61377a5761377b565b5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386857602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96856138158761224a565b6040518363ffffffff1660e01b81526004016138329291906150b8565b600060405180830381600087803b15801561384c57600080fd5b505af192505050801561385d575060015b61386657613867565b5b5b602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479602f546040518263ffffffff1660e01b81526004016138c59190614874565b600060405180830381600087803b1580156138df57600080fd5b505af19250505080156138f0575060015b6138f9576138fa565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139579190614874565b60405180910390a360019150505b9392505050565b6000818361397a919061532d565b905092915050565b6001603260006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156139ba576139b9615361565b5b6040519080825280602002602001820160405280156139e85781602001602082028036833780820191505090505b509050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a5357600080fd5b505afa158015613a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8b91906153a5565b81600081518110613a9f57613a9e6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613aee57613aed6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401613b8b94939291906154bf565b6000604051808303818588803b158015613ba457600080fd5b505af1158015613bb8573d6000803e3d6000fd5b5050505050506000603260006101000a81548160ff0219169083151502179055505050565b60008183613beb9190614f7f565b905092915050565b60008183613c019190614fd5565b905092915050565b6000613c94826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9a9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2982600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dc99190614874565b60405180910390a3600190509392505050565b6000806024541415905090565b60035481111580613e435750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7990615557565b60405180910390fd5b5050565b601154600b81905550601254600c81905550601354600d81905550601454600e81905550601554600f81905550565b601654600b81905550601754600c81905550601854600d81905550601954600e81905550601a54600f81905550565b601b54600b81905550601c54600c81905550601d54600d81905550601e54600e81905550601f54600f81905550565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613f805750603260009054906101000a900460ff16155b8015613f985750603060009054906101000a900460ff165b8015613fe55750603154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001603260006101000a81548160ff0219169083151502179055506000614015602054602154611597565b61402157600b54614024565b60005b905060006140646002614056600f5461404886603154613bf390919063ffffffff16565b612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050600061407d8260315461396c90919063ffffffff16565b90506000600267ffffffffffffffff81111561409c5761409b615361565b5b6040519080825280602002602001820160405280156140ca5781602001602082028036833780820191505090505b50905030816000815181106140e2576140e16153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561418457600080fd5b505afa158015614198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141bc91906153a5565b816001815181106141d0576141cf6153d2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614273959493929190615577565b600060405180830381600087803b15801561428d57600080fd5b505af11580156142a1573d6000803e3d6000fd5b5050505060006142ba824761396c90919063ffffffff16565b905060006142e66142d5600289612f8490919063ffffffff16565b600f5461396c90919063ffffffff16565b905060006143226002614314846143068c88613bf390919063ffffffff16565b612f8490919063ffffffff16565b612f8490919063ffffffff16565b9050600061434d8361433f600d5487613bf390919063ffffffff16565b612f8490919063ffffffff16565b905060006143788461436a600e5488613bf390919063ffffffff16565b612f8490919063ffffffff16565b9050602d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156143e457600080fd5b505af1935050505080156143f6575060015b6143ff57614400565b5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614468573d6000803e3d6000fd5b50600089111561458a57602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016144fb969594939291906155d1565b6060604051808303818588803b15801561451457600080fd5b505af1158015614528573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061454d9190615647565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a60405161458192919061508f565b60405180910390a15b505050505050505050506000603260006101000a81548160ff021916908315150217905550565b6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561461e5750603260009054906101000a900460ff16155b80156146365750602760149054906101000a900460ff165b8015614651575043602b54602c5461464e9190614f7f565b11155b801561465f5750602a544710155b905090565b614672602a5461dead613982565b43602c81905550614690602a54602954613bdd90919063ffffffff16565b60298190555060285460295411156146be576000602760146101000a81548160ff0219169083151502179055505b565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080614743601054614735600f5486613bf390919063ffffffff16565b612f8490919063ffffffff16565b905061479781600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bdd90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516148379190614874565b60405180910390a3614852818461396c90919063ffffffff16565b91505092915050565b6000819050919050565b61486e8161485b565b82525050565b60006020820190506148896000830184614865565b92915050565b600080fd5b60008115159050919050565b6148a981614894565b81146148b457600080fd5b50565b6000813590506148c6816148a0565b92915050565b6148d58161485b565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b600080600080608085870312156149125761491161488f565b5b6000614920878288016148b7565b9450506020614931878288016148e3565b9350506040614942878288016148e3565b9250506060614953878288016148e3565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499957808201518184015260208101905061497e565b838111156149a8576000848401525b50505050565b6000601f19601f8301169050919050565b60006149ca8261495f565b6149d4818561496a565b93506149e481856020860161497b565b6149ed816149ae565b840191505092915050565b60006020820190508181036000830152614a1281846149bf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4582614a1a565b9050919050565b614a5581614a3a565b8114614a6057600080fd5b50565b600081359050614a7281614a4c565b92915050565b60008060408385031215614a8f57614a8e61488f565b5b6000614a9d85828601614a63565b9250506020614aae858286016148e3565b9150509250929050565b614ac181614894565b82525050565b6000602082019050614adc6000830184614ab8565b92915050565b60008060408385031215614af957614af861488f565b5b6000614b07858286016148e3565b9250506020614b18858286016148e3565b9150509250929050565b60008060008060808587031215614b3c57614b3b61488f565b5b6000614b4a878288016148e3565b9450506020614b5b878288016148e3565b9350506040614b6c878288016148e3565b9250506060614b7d878288016148e3565b91505092959194509250565b600060208284031215614b9f57614b9e61488f565b5b6000614bad848285016148e3565b91505092915050565b614bbf81614a3a565b82525050565b6000602082019050614bda6000830184614bb6565b92915050565b60008060408385031215614bf757614bf661488f565b5b6000614c0585828601614a63565b9250506020614c16858286016148b7565b9150509250929050565b600080600060608486031215614c3957614c3861488f565b5b6000614c4786828701614a63565b9350506020614c5886828701614a63565b9250506040614c69868287016148e3565b9150509250925092565b600060208284031215614c8957614c8861488f565b5b6000614c9784828501614a63565b91505092915050565b600060ff82169050919050565b614cb681614ca0565b82525050565b6000602082019050614cd16000830184614cad565b92915050565b60008060408385031215614cee57614ced61488f565b5b6000614cfc85828601614a63565b9250506020614d0d85828601614a63565b9150509250929050565b6000819050919050565b6000614d3c614d37614d3284614a1a565b614d17565b614a1a565b9050919050565b6000614d4e82614d21565b9050919050565b6000614d6082614d43565b9050919050565b614d7081614d55565b82525050565b6000602082019050614d8b6000830184614d67565b92915050565b60008060408385031215614da857614da761488f565b5b6000614db6858286016148b7565b9250506020614dc7858286016148e3565b9150509250929050565b6000614ddc82614a1a565b9050919050565b614dec81614dd1565b8114614df757600080fd5b50565b600081359050614e0981614de3565b92915050565b600060208284031215614e2557614e2461488f565b5b6000614e3384828501614dfa565b91505092915050565b6000614e4782614d43565b9050919050565b614e5781614e3c565b82525050565b6000602082019050614e726000830184614e4e565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614eae60068361496a565b9150614eb982614e78565b602082019050919050565b60006020820190508181036000830152614edd81614ea1565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000614f1a60148361496a565b9150614f2582614ee4565b602082019050919050565b60006020820190508181036000830152614f4981614f0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f8a8261485b565b9150614f958361485b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fca57614fc9614f50565b5b828201905092915050565b6000614fe08261485b565b9150614feb8361485b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561502457615023614f50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150698261485b565b91506150748361485b565b9250826150845761508361502f565b5b828204905092915050565b60006040820190506150a46000830185614865565b6150b16020830184614865565b9392505050565b60006040820190506150cd6000830185614bb6565b6150da6020830184614865565b9392505050565b6000815190506150f0816148a0565b92915050565b60006020828403121561510c5761510b61488f565b5b600061511a848285016150e1565b91505092915050565b7f546f74616c207472616e73666572206665657320657863656564732031302500600082015250565b6000615159601f8361496a565b915061516482615123565b602082019050919050565b600060208201905081810360008301526151888161514c565b9050919050565b600061519a82614d43565b9050919050565b6151aa8161518f565b82525050565b60006020820190506151c560008301846151a1565b92915050565b6000819050919050565b60006151f06151eb6151e6846151cb565b614d17565b61485b565b9050919050565b615200816151d5565b82525050565b600060408201905061521b6000830185614bb6565b61522860208301846151f7565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061526560148361496a565b91506152708261522f565b602082019050919050565b6000602082019050818103600083015261529481615258565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b60006152f7603e8361496a565b91506153028261529b565b604082019050919050565b60006020820190508181036000830152615326816152ea565b9050919050565b60006153388261485b565b91506153438361485b565b92508282101561535657615355614f50565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061539f81614a4c565b92915050565b6000602082840312156153bb576153ba61488f565b5b60006153c984828501615390565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61543681614a3a565b82525050565b6000615448838361542d565b60208301905092915050565b6000602082019050919050565b600061546c82615401565b615476818561540c565b93506154818361541d565b8060005b838110156154b2578151615499888261543c565b97506154a483615454565b925050600181019050615485565b5085935050505092915050565b60006080820190506154d460008301876151f7565b81810360208301526154e68186615461565b90506154f56040830185614bb6565b6155026060830184614865565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061554160118361496a565b915061554c8261550b565b602082019050919050565b6000602082019050818103600083015261557081615534565b9050919050565b600060a08201905061558c6000830188614865565b61559960208301876151f7565b81810360408301526155ab8186615461565b90506155ba6060830185614bb6565b6155c76080830184614865565b9695505050505050565b600060c0820190506155e66000830189614bb6565b6155f36020830188614865565b61560060408301876151f7565b61560d60608301866151f7565b61561a6080830185614bb6565b61562760a0830184614865565b979650505050505050565b600081519050615641816148cc565b92915050565b6000806000606084860312156156605761565f61488f565b5b600061566e86828701615632565b935050602061567f86828701615632565b925050604061569086828701615632565b915050925092509256fea26469706673582212206c3b11a46c2fbec1f472ca84b72702d6907b1d55a14be2830b0906952ed2858764736f6c63430008090033

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.