ETH Price: $3,594.27 (+0.86%)
Gas: 4 Gwei

Contract

0xE99E0e909c10ab1D3E2175006D09A9f568780f5E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Exclude From Rew...189034942023-12-31 5:51:23168 days ago1704001883IN
0xE99E0e90...568780f5E
0 ETH0.0013055210.78062617
Exclude From Fee189034262023-12-31 5:37:23168 days ago1704001043IN
0xE99E0e90...568780f5E
0 ETH0.0005206511.1954237
Approve188820412023-12-28 5:30:47171 days ago1703741447IN
0xE99E0e90...568780f5E
0 ETH0.0008772729.38856262
Approve188817042023-12-28 4:22:11171 days ago1703737331IN
0xE99E0e90...568780f5E
0 ETH0.0014272152.76005677
Approve186672352023-11-28 2:45:59201 days ago1701139559IN
0xE99E0e90...568780f5E
0 ETH0.0008707132.18806192
Approve186672272023-11-28 2:44:23201 days ago1701139463IN
0xE99E0e90...568780f5E
0 ETH0.0009224834.10169186
Approve186672122023-11-28 2:41:23201 days ago1701139283IN
0xE99E0e90...568780f5E
0 ETH0.0008704532.17840176
Approve186672082023-11-28 2:40:35201 days ago1701139235IN
0xE99E0e90...568780f5E
0 ETH0.0015661533.3571532
0x60806040183104802023-10-09 4:17:59251 days ago1696825079IN
 Create: XDUPLIFY
0 ETH0.044537865.56188556

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XDUPLIFY

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-09
*/

// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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




library SafeMath {
    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);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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



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

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



library Address {
    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}




abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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


contract XDUPLIFY is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;

    address[] private _excluded;

    bool public swapEnabled;
    bool private swapping;

    IRouter public router;
    address public pair;

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

    uint256 private _tTotal = 100 * 10**3 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxBuyAmount = 100000000 * 10**3 * 10**18;
    uint256 public maxSellAmount = 100000000 * 10**3 * 10**18;
    uint256 public swapTokensAtAmount = 3000 * 10**3 * 10**18;

    address public marketingAddress = 0x06cE882F232B600013aB540EE82192E4A71ccD48;
    address public loanAddress = 0x91909602B4f9C0e8e8dF3a73352AE8930FC4A227;
    address public lotteryAddress = 0x1C756CFcAb1A60b2670e2634aF3996d752281aCD;
    address public constant deadAddress = 0x000000000000000000000000000000000000dEaD;

    string private constant _name = "XDUPLIFY";
    string private constant _symbol = "X";


    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 loan;
      uint256 lottery;
      uint256 liquidity;
    }


    feeRatesStruct public feeRates = feeRatesStruct(
     {rfi: 0,
      marketing: 20,
      loan: 20,
      lottery: 5,
      liquidity: 5
    });

    feeRatesStruct public sellFeeRates = feeRatesStruct(
    {rfi: 0,
     marketing: 20,
     loan: 20,
     lottery: 5,
     liquidity: 5
    });

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 marketing;
        uint256 liquidity;
        uint256 loan;
        uint256 lottery;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rMarketing;
      uint256 rLiquidity;
      uint256 rLoan;
      uint256 rLottery;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tMarketing;
      uint256 tLiquidity;
      uint256 tLoan;
      uint256 tLottery;
    }

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

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

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

        router = _router;
        pair = _pair;

        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[loanAddress] = true;
        _isExcludedFromFee[loanAddress] = true;

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

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

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

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

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

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

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

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

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

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        valuesFromGetValues memory s = _getValues(tAmount, true, false);
        _rOwned[sender] = _rOwned[sender].sub(s.rAmount);
        _rTotal = _rTotal.sub(s.rAmount);
        totFeesPaid.rfi += tAmount;
    }

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


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

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

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


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

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


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

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

    function _takeMarketing(uint256 rMarketing, uint256 tMarketing) private {
        totFeesPaid.marketing +=tMarketing;
        if(_isExcluded[address(this)]){
             _tOwned[address(this)]+=tMarketing;
        }
        _rOwned[address(this)] +=rMarketing;

    }

    function _takeLoan(uint256 rLoan, uint256 tLoan) private {
        totFeesPaid.loan +=tLoan;
        if(_isExcluded[address(this)]){
             _tOwned[address(this)]+=tLoan;
        }
        _rOwned[address(this)] +=rLoan;

    }

    function _takeLottery(uint256 rLottery, uint256 tLottery) private {
        totFeesPaid.lottery +=tLottery;
        if(_isExcluded[address(this)]){
             _tOwned[address(this)]+=tLottery;
        }
        _rOwned[address(this)] +=rLottery;

    }

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

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

    function _getValues(uint256 tAmount, bool takeFee, bool isSale) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rMarketing,to_return.rLoan,to_return.rLottery, to_return.rLiquidity) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

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

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }

        if(isSale){
            s.tRfi = tAmount*sellFeeRates.rfi/1000;
            s.tMarketing = tAmount*sellFeeRates.marketing/1000;
            s.tLoan = tAmount*sellFeeRates.loan/1000;
            s.tLoan = tAmount*sellFeeRates.lottery/1000;
            s.tLiquidity = tAmount*sellFeeRates.liquidity/1000;
            s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tLoan-s.tLottery;
        }
        else{
            s.tRfi = tAmount*feeRates.rfi/1000;
            s.tMarketing = tAmount*feeRates.marketing/1000;
            s.tLoan = tAmount*feeRates.loan/1000;
            s.tLoan = tAmount*feeRates.loan/1000;
            s.tLiquidity = tAmount*feeRates.liquidity/1000;
            s.tTransferAmount = tAmount-s.tRfi-s.tMarketing-s.tLiquidity-s.tLoan-s.tLottery;
        }
        return s;
    }

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

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

        rRfi = s.tRfi*currentRate;
        rMarketing = s.tMarketing*currentRate;
        rLoan = s.tLoan*currentRate;
        rLottery = s.tLottery*currentRate;
        rLiquidity = s.tLiquidity*currentRate;
        rTransferAmount =  rAmount-rRfi-rMarketing-rLiquidity-rLoan-rLottery;
        return (rAmount, rTransferAmount, rRfi,rMarketing,rLiquidity,rLoan,rLottery);
    }

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

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");

        if(from == pair && !_isExcludedFromFee[to]){
            require(amount <= maxBuyAmount, 'you are exceeding maxBuyAmount');
        }

        if(!_isExcludedFromFee[from] && to == pair){
            require(amount <= maxSellAmount, "Amount is exceeding maxSellAmount");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if(!swapping && swapEnabled && canSwap && from != pair){
            swapAndLiquify(swapTokensAtAmount);
        }
        bool isSale;
        if(to == pair) isSale = true;

        _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to]), isSale);
    }


    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale);

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

        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi);
        _takeMarketing(s.rMarketing,s.tMarketing);
        _takeLoan(s.rLoan,s.tLoan);
        _takeLottery(s.rLottery,s.tLottery);
        _takeLiquidity(s.rLiquidity,s.tLiquidity);
        emit Transfer(sender, recipient, s.tTransferAmount);
        emit Transfer(sender, address(this), s.tLiquidity + s.tMarketing + s.tLoan + s.tLottery);

    }

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

      // make the swap
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
     }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
         // Split the contract balance into halves
        uint256 denominator= (feeRates.liquidity + feeRates.marketing + feeRates.loan + feeRates.lottery) * 2;
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForBNB(toSwap);

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

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

        // Send BNB to marketingWallet
        uint256 marketingAmt = unitBalance * 2 * feeRates.marketing;
        if(marketingAmt > 0){
          payable(marketingAddress).transfer(marketingAmt);
        }
        uint256 loanAmt = unitBalance * 2 * feeRates.loan;
        if(loanAmt > 0){
          payable(loanAddress).transfer(loanAmt);
        }
        uint256 lotteryAmt = unitBalance * 2 * feeRates.lottery;
        if(lotteryAmt > 0){
          payable(lotteryAddress).transfer(lotteryAmt);
        }
    }

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

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

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function setMaxBuyAmount(uint256 _maxBuyamount) external onlyOwner{
        require(_maxBuyamount >= 10 && _maxBuyamount <= 100000000, 'Max Buy Amount should me 10 - 100000000');
        maxBuyAmount = _maxBuyamount * 10**18;
    }

    function setMaxSellAmount(uint256 _maxSellAmount) external onlyOwner{
        require(_maxSellAmount >= 10 && _maxSellAmount <= 100000000, 'Max Sell Amount should me 10 - 100000000');
        maxSellAmount = _maxSellAmount * 10**18;
    }

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

    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }

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

    /// @dev Update router address in case of pancakeswap migration
    function setRouterAddress(address newRouter) external onlyOwner {
        require(newRouter != address(router));
        IRouter _newRouter = IRouter(newRouter);
        address get_pair = IFactory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            pair = IFactory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            pair = get_pair;
        }
        router = _newRouter;
    }

    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"lottery","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loanAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRates","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"lottery","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyamount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"lottery","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269152d02c7e14af680000060095560095460001962000024919062000966565b600019620000339190620008ed565b600a556c01431e0fae6d7217caa0000000600b556c01431e0fae6d7217caa0000000600c556a027b46536c66c8e3000000600d557306ce882f232b600013ab540ee82192e4a71ccd48600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507391909602b4f9c0e8e8df3a73352ae8930fc4a227600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731c756cfcab1a60b2670e2634af3996d752281acd601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060a001604052806000815260200160148152602001601481526020016005815260200160058152506011600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550506040518060a001604052806000815260200160148152602001601481526020016005815260200160058152506016600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550503480156200023757600080fd5b506040516200632a3803806200632a83398181016040528101906200025d919062000855565b6200027d620002716200074960201b60201c565b6200075160201b60201c565b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cb57600080fd5b505afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000855565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036957600080fd5b505afa1580156200037e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a4919062000855565b6040518363ffffffff1660e01b8152600401620003c3929190620008a3565b602060405180830381600087803b158015620003de57600080fd5b505af1158015620003f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000419919062000855565b905081600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460016000620004b46200081560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160046000620005086200081560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006d76200081560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620007389190620008d0565b60405180910390a350505062000a16565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000815190506200084f81620009fc565b92915050565b6000602082840312156200086857600080fd5b600062000878848285016200083e565b91505092915050565b6200088c8162000928565b82525050565b6200089d816200095c565b82525050565b6000604082019050620008ba600083018562000881565b620008c9602083018462000881565b9392505050565b6000602082019050620008e7600083018462000892565b92915050565b6000620008fa826200095c565b915062000907836200095c565b9250828210156200091d576200091c6200099e565b5b828203905092915050565b600062000935826200093c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000973826200095c565b915062000980836200095c565b925082620009935762000992620009cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b62000a078162000928565b811462000a1357600080fd5b50565b6159048062000a266000396000f3fe6080604052600436106102555760003560e01c8063715018a611610139578063a5ece941116100b6578063e2f456051161007a578063e2f456051461091b578063e99c9d0914610946578063ea2f0b371461096f578063f2fde38b14610998578063f34eb0b8146109c1578063f887ea40146109ea5761025c565b8063a5ece94114610822578063a8aa1b311461084d578063a9059cbb14610878578063d257b34f146108b5578063dd62ed3e146108de5761025c565b8063924de9b7116100fd578063924de9b71461073957806395d89b41146107625780639ba5e4d51461078d5780639e252f00146107bc578063a457c2d7146107e55761025c565b8063715018a6146106605780637688c5841461067757806388e765ff146106a657806388f82020146106d15780638da5cb5b1461070e5761025c565b806339509351116101d25780634549b039116101965780634549b0391461052a57806352390c02146105675780635342acb41461059057806366d602ae146105cd5780636ddd1713146105f857806370a08231146106235761025c565b806339509351146104475780633bd5d173146104845780633beedf6d146104ad57806341cb87fc146104d8578063437823ec146105015761025c565b806327c8f8351161021957806327c8f835146103605780632d8381191461038b578063313ce567146103c857806335bc868a146103f35780633685d4191461041e5761025c565b806306fdde0314610261578063095ea7b31461028c57806318160ddd146102c957806318a90c44146102f457806323b872dd146103235761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a15565b6040516102839190614bef565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061466d565b610a52565b6040516102c09190614bb9565b60405180910390f35b3480156102d557600080fd5b506102de610a70565b6040516102eb9190614e51565b60405180910390f35b34801561030057600080fd5b50610309610a7a565b60405161031a959493929190614ec6565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061461e565b610a9e565b6040516103579190614bb9565b60405180910390f35b34801561036c57600080fd5b50610375610b77565b6040516103829190614b14565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad91906146d2565b610b7d565b6040516103bf9190614e51565b60405180910390f35b3480156103d457600080fd5b506103dd610be4565b6040516103ea9190614f19565b60405180910390f35b3480156103ff57600080fd5b50610408610bed565b6040516104159190614b14565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614590565b610c13565b005b34801561045357600080fd5b5061046e6004803603810190610469919061466d565b610fe1565b60405161047b9190614bb9565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a691906146d2565b61108d565b005b3480156104b957600080fd5b506104c2611210565b6040516104cf9190614b14565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614590565b611236565b005b34801561050d57600080fd5b5061052860048036038101906105239190614590565b611724565b005b34801561053657600080fd5b50610551600480360381019061054c91906146fb565b6117fb565b60405161055e9190614e51565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190614590565b611885565b005b34801561059c57600080fd5b506105b760048036038101906105b29190614590565b611b20565b6040516105c49190614bb9565b60405180910390f35b3480156105d957600080fd5b506105e2611b76565b6040516105ef9190614e51565b60405180910390f35b34801561060457600080fd5b5061060d611b7c565b60405161061a9190614bb9565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614590565b611b8f565b6040516106579190614e51565b60405180910390f35b34801561066c57600080fd5b50610675611c7a565b005b34801561068357600080fd5b5061068c611d02565b60405161069d959493929190614ec6565b60405180910390f35b3480156106b257600080fd5b506106bb611d26565b6040516106c89190614e51565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190614590565b611d2c565b6040516107059190614bb9565b60405180910390f35b34801561071a57600080fd5b50610723611d82565b6040516107309190614b14565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b91906146a9565b611dab565b005b34801561076e57600080fd5b50610777611e44565b6040516107849190614bef565b60405180910390f35b34801561079957600080fd5b506107a2611e81565b6040516107b3959493929190614ec6565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de91906146d2565b611ea5565b005b3480156107f157600080fd5b5061080c6004803603810190610807919061466d565b611fae565b6040516108199190614bb9565b60405180910390f35b34801561082e57600080fd5b5061083761207b565b6040516108449190614b14565b60405180910390f35b34801561085957600080fd5b506108626120a1565b60405161086f9190614b14565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a919061466d565b6120c7565b6040516108ac9190614bb9565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906146d2565b6120e5565b005b3480156108ea57600080fd5b50610905600480360381019061090091906145e2565b612183565b6040516109129190614e51565b60405180910390f35b34801561092757600080fd5b5061093061220a565b60405161093d9190614e51565b60405180910390f35b34801561095257600080fd5b5061096d600480360381019061096891906146d2565b612210565b005b34801561097b57600080fd5b5061099660048036038101906109919190614590565b6122fd565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190614590565b6123d4565b005b3480156109cd57600080fd5b506109e860048036038101906109e391906146d2565b6124cc565b005b3480156109f657600080fd5b506109ff6125b9565b604051610a0c9190614bd4565b60405180910390f35b60606040518060400160405280600881526020017f584455504c494659000000000000000000000000000000000000000000000000815250905090565b6000610a66610a5f6125df565b84846125e7565b6001905092915050565b6000600954905090565b60168060000154908060010154908060020154908060030154908060040154905085565b6000610aab8484846127b2565b610b6c84610ab76125df565b610b678560405180606001604052806028815260200161588260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b1d6125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ccb9092919063ffffffff16565b6125e7565b600190509392505050565b61dead81565b6000600a54821115610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90614c51565b60405180910390fd5b6000610bce612d20565b90508083610bdc9190614fdf565b915050919050565b60006012905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1b6125df565b73ffffffffffffffffffffffffffffffffffffffff16610c39611d82565b73ffffffffffffffffffffffffffffffffffffffff1614610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690614d31565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290614cd1565b60405180910390fd5b60005b600680549050811015610fdd578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fca5760066001600680549050610dd791906151db565b81548110610e0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fdd565b8080610fd5906152cd565b915050610d1e565b5050565b6000611083610fee6125df565b848460036000610ffc6125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461107e9190614f89565b6125e7565b6001905092915050565b60006110976125df565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90614e11565b60405180910390fd5b60006111358360016000612d44565b905061118d8160000151600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111e98160000151600a54612db290919063ffffffff16565b600a8190555082601b60000160008282546112049190614f89565b92505081905550505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123e6125df565b73ffffffffffffffffffffffffffffffffffffffff1661125c611d82565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614d31565b60405180910390fd5b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130d57600080fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561135a57600080fd5b505afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139291906145b9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f457600080fd5b505afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c91906145b9565b6040518363ffffffff1660e01b8152600401611449929190614b2f565b60206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906145b9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561151657600080fd5b505afa15801561152a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154e91906145b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b057600080fd5b505afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e891906145b9565b6040518363ffffffff1660e01b8152600401611605929190614b2f565b602060405180830381600087803b15801561161f57600080fd5b505af1158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906145b9565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116de565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61172c6125df565b73ffffffffffffffffffffffffffffffffffffffff1661174a611d82565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790614d31565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990614d11565b60405180910390fd5b816118655760006118568460016000612d44565b9050806000015191505061187f565b60006118748460016000612d44565b905080602001519150505b92915050565b61188d6125df565b73ffffffffffffffffffffffffffffffffffffffff166118ab611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614d31565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614cb1565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a6257611a1e600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b600760009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c75565b611c72600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7d565b90505b919050565b611c826125df565b73ffffffffffffffffffffffffffffffffffffffff16611ca0611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614d31565b60405180910390fd5b611d006000612dc8565b565b60118060000154908060010154908060020154908060030154908060040154905085565b600b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611db36125df565b73ffffffffffffffffffffffffffffffffffffffff16611dd1611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614d31565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600181526020017f5800000000000000000000000000000000000000000000000000000000000000815250905090565b601b8060000154908060010154908060020154908060030154908060040154905085565b611ead6125df565b73ffffffffffffffffffffffffffffffffffffffff16611ecb611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614d31565b60405180910390fd5b80471015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614d51565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611faa573d6000803e3d6000fd5b5050565b6000612071611fbb6125df565b8461206c856040518060600160405280602581526020016158aa6025913960036000611fe56125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ccb9092919063ffffffff16565b6125e7565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120db6120d46125df565b84846127b2565b6001905092915050565b6120ed6125df565b73ffffffffffffffffffffffffffffffffffffffff1661210b611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614d31565b60405180910390fd5b6012600a61216f9190615063565b8161217a9190615181565b600d8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122186125df565b73ffffffffffffffffffffffffffffffffffffffff16612236611d82565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614d31565b60405180910390fd5b600a81101580156122a157506305f5e1008111155b6122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d790614df1565b60405180910390fd5b670de0b6b3a7640000816122f49190615181565b600c8190555050565b6123056125df565b73ffffffffffffffffffffffffffffffffffffffff16612323611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614d31565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123dc6125df565b73ffffffffffffffffffffffffffffffffffffffff166123fa611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244790614d31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614c71565b60405180910390fd5b6124c981612dc8565b50565b6124d46125df565b73ffffffffffffffffffffffffffffffffffffffff166124f2611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90614d31565b60405180910390fd5b600a811015801561255d57506305f5e1008111155b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614cf1565b60405180910390fd5b670de0b6b3a7640000816125b09190615181565b600b8190555050565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614db1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614c91565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a59190614e51565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990614d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990614c11565b60405180910390fd5b600081116128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90614d71565b60405180910390fd5b6128de83611b8f565b811115612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614c31565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156129c75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1257600b54811115612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0890614dd1565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ab95750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612b0457600c54811115612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614e31565b60405180910390fd5b5b6000612b0f30611b8f565b90506000600d548210159050600760019054906101000a900460ff16158015612b445750600760009054906101000a900460ff165b8015612b4d5750805b8015612ba75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612bb857612bb7600d54612e8c565b5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c1557600190505b612cc3868686600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbc5750600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1585613168565b505050505050565b6000838311158290612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a9190614bef565b60405180910390fd5b5082840390509392505050565b6000806000612d2d6135cb565b915091508082612d3d9190614fdf565b9250505090565b612d4c6144bf565b612d57848484613901565b9050612d6c818585612d67612d20565b613b75565b8760000188602001896040018a6060018b60a0018c60c0018d60800187815250878152508781525087815250878152508781525087815250505050505050509392505050565b60008183612dc091906151db565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600760016101000a81548160ff02191690831515021790555060006002601160030154601160020154601160010154601160040154612ecd9190614f89565b612ed79190614f89565b612ee19190614f89565b612eeb9190615181565b905060008160116004015484612f019190615181565b612f0b9190614fdf565b905060008184612f1b91906151db565b90506000479050612f2b82613c58565b60008147612f3991906151db565b9050600060116004015486612f4e91906151db565b82612f599190614fdf565b9050600060116004015482612f6e9190615181565b90506000811115612f8457612f838682613f1c565b5b6000601160010154600284612f999190615181565b612fa39190615181565b9050600081111561301857600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613016573d6000803e3d6000fd5b505b600060116002015460028561302d9190615181565b6130379190615181565b905060008111156130ac57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130aa573d6000803e3d6000fd5b505b60006011600301546002866130c19190615181565b6130cb9190615181565b9050600081111561314057601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561313e573d6000803e3d6000fd5b505b505050505050505050506000600760016101000a81548160ff02191690831515021790555050565b6000613175848484612d44565b9050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132585783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321491906151db565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561333d578060e00151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f99190614f89565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338c91906151db565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341e9190614f89565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613474816040015182610100015161400a565b6134878160600151826101200151614043565b61349a8160a00151826101600151614162565b6134ad8160c00151826101800151614281565b6134c081608001518261014001516143a0565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e001516040516135219190614e51565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610180015184610160015185610120015186610140015161359a9190614f89565b6135a49190614f89565b6135ae9190614f89565b6040516135bb9190614e51565b60405180910390a3505050505050565b6000806000600a5490506000600954905060005b6006805490508110156138cb5782600160006006848154811061362b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061373f57508160026000600684815481106136d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561375657600a54600954945094505050506138fd565b6001600060068381548110613794577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361380591906151db565b92506002600060068381548110613845577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826138b691906151db565b915080806138c3906152cd565b9150506135df565b50600954600a546138dc9190614fdf565b8210156138f457600a546009549350935050506138fd565b81819350935050505b9091565b6139096144bf565b8261391d57838160e0018181525050613b6e565b8115613a4a576103e8601660000154856139379190615181565b6139419190614fdf565b816101000181815250506103e86016600101548561395f9190615181565b6139699190614fdf565b816101200181815250506103e8601660020154856139879190615181565b6139919190614fdf565b816101600181815250506103e8601660030154856139af9190615181565b6139b99190614fdf565b816101600181815250506103e8601660040154856139d79190615181565b6139e19190614fdf565b8161014001818152505080610180015181610160015182610140015183610120015184610100015188613a1491906151db565b613a1e91906151db565b613a2891906151db565b613a3291906151db565b613a3c91906151db565b8160e0018181525050613b6d565b6103e860116000015485613a5e9190615181565b613a689190614fdf565b816101000181815250506103e860116001015485613a869190615181565b613a909190614fdf565b816101200181815250506103e860116002015485613aae9190615181565b613ab89190614fdf565b816101600181815250506103e860116002015485613ad69190615181565b613ae09190614fdf565b816101600181815250506103e860116004015485613afe9190615181565b613b089190614fdf565b8161014001818152505080610180015181610160015182610140015183610120015184610100015188613b3b91906151db565b613b4591906151db565b613b4f91906151db565b613b5991906151db565b613b6391906151db565b8160e00181815250505b5b9392505050565b6000806000806000806000878a613b8c9190615181565b965088613bb057868760008060008060009650965096509650965096509650613c4a565b878b6101000151613bc19190615181565b9450878b6101200151613bd49190615181565b9350878b6101600151613be79190615181565b9150878b6101800151613bfa9190615181565b9050878b6101400151613c0d9190615181565b925080828486888b613c1f91906151db565b613c2991906151db565b613c3391906151db565b613c3d91906151db565b613c4791906151db565b95505b949950949992975094509450565b6000600267ffffffffffffffff811115613c9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613cc95781602001602082028036833780820191505090505b5090503081600081518110613d07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de191906145b9565b81600181518110613e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e8230600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125e7565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ee6959493929190614e6c565b600060405180830381600087803b158015613f0057600080fd5b505af1158015613f14573d6000803e3d6000fd5b505050505050565b613f4930600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125e7565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b8152600401613fb196959493929190614b58565b6060604051808303818588803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140039190614737565b5050505050565b81600a600082825461401c91906151db565b9250508190555080601b60000160008282546140389190614f89565b925050819055505050565b80601b60010160008282546140589190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141085780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141009190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141579190614f89565b925050819055505050565b80601b60030160008282546141779190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142275780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461421f9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546142769190614f89565b925050819055505050565b80601b60040160008282546142969190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143465780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461433e9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143959190614f89565b925050819055505050565b80601b60020160008282546143b59190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144655780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461445d9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144b49190614f89565b925050819055505050565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000813590506145368161583c565b92915050565b60008151905061454b8161583c565b92915050565b60008135905061456081615853565b92915050565b6000813590506145758161586a565b92915050565b60008151905061458a8161586a565b92915050565b6000602082840312156145a257600080fd5b60006145b084828501614527565b91505092915050565b6000602082840312156145cb57600080fd5b60006145d98482850161453c565b91505092915050565b600080604083850312156145f557600080fd5b600061460385828601614527565b925050602061461485828601614527565b9150509250929050565b60008060006060848603121561463357600080fd5b600061464186828701614527565b935050602061465286828701614527565b925050604061466386828701614566565b9150509250925092565b6000806040838503121561468057600080fd5b600061468e85828601614527565b925050602061469f85828601614566565b9150509250929050565b6000602082840312156146bb57600080fd5b60006146c984828501614551565b91505092915050565b6000602082840312156146e457600080fd5b60006146f284828501614566565b91505092915050565b6000806040838503121561470e57600080fd5b600061471c85828601614566565b925050602061472d85828601614551565b9150509250929050565b60008060006060848603121561474c57600080fd5b600061475a8682870161457b565b935050602061476b8682870161457b565b925050604061477c8682870161457b565b9150509250925092565b6000614792838361479e565b60208301905092915050565b6147a78161520f565b82525050565b6147b68161520f565b82525050565b60006147c782614f44565b6147d18185614f67565b93506147dc83614f34565b8060005b8381101561480d5781516147f48882614786565b97506147ff83614f5a565b9250506001810190506147e0565b5085935050505092915050565b61482381615221565b82525050565b61483281615264565b82525050565b61484181615288565b82525050565b600061485282614f4f565b61485c8185614f78565b935061486c81856020860161529a565b61487581615374565b840191505092915050565b600061488d602383614f78565b915061489882615392565b604082019050919050565b60006148b0603183614f78565b91506148bb826153e1565b604082019050919050565b60006148d3602a83614f78565b91506148de82615430565b604082019050919050565b60006148f6602683614f78565b91506149018261547f565b604082019050919050565b6000614919602283614f78565b9150614924826154ce565b604082019050919050565b600061493c601b83614f78565b91506149478261551d565b602082019050919050565b600061495f601783614f78565b915061496a82615546565b602082019050919050565b6000614982602783614f78565b915061498d8261556f565b604082019050919050565b60006149a5601f83614f78565b91506149b0826155be565b602082019050919050565b60006149c8602083614f78565b91506149d3826155e7565b602082019050919050565b60006149eb601883614f78565b91506149f682615610565b602082019050919050565b6000614a0e602983614f78565b9150614a1982615639565b604082019050919050565b6000614a31602583614f78565b9150614a3c82615688565b604082019050919050565b6000614a54602483614f78565b9150614a5f826156d7565b604082019050919050565b6000614a77601e83614f78565b9150614a8282615726565b602082019050919050565b6000614a9a602883614f78565b9150614aa58261574f565b604082019050919050565b6000614abd602c83614f78565b9150614ac88261579e565b604082019050919050565b6000614ae0602183614f78565b9150614aeb826157ed565b604082019050919050565b614aff8161524d565b82525050565b614b0e81615257565b82525050565b6000602082019050614b2960008301846147ad565b92915050565b6000604082019050614b4460008301856147ad565b614b5160208301846147ad565b9392505050565b600060c082019050614b6d60008301896147ad565b614b7a6020830188614af6565b614b876040830187614838565b614b946060830186614838565b614ba160808301856147ad565b614bae60a0830184614af6565b979650505050505050565b6000602082019050614bce600083018461481a565b92915050565b6000602082019050614be96000830184614829565b92915050565b60006020820190508181036000830152614c098184614847565b905092915050565b60006020820190508181036000830152614c2a81614880565b9050919050565b60006020820190508181036000830152614c4a816148a3565b9050919050565b60006020820190508181036000830152614c6a816148c6565b9050919050565b60006020820190508181036000830152614c8a816148e9565b9050919050565b60006020820190508181036000830152614caa8161490c565b9050919050565b60006020820190508181036000830152614cca8161492f565b9050919050565b60006020820190508181036000830152614cea81614952565b9050919050565b60006020820190508181036000830152614d0a81614975565b9050919050565b60006020820190508181036000830152614d2a81614998565b9050919050565b60006020820190508181036000830152614d4a816149bb565b9050919050565b60006020820190508181036000830152614d6a816149de565b9050919050565b60006020820190508181036000830152614d8a81614a01565b9050919050565b60006020820190508181036000830152614daa81614a24565b9050919050565b60006020820190508181036000830152614dca81614a47565b9050919050565b60006020820190508181036000830152614dea81614a6a565b9050919050565b60006020820190508181036000830152614e0a81614a8d565b9050919050565b60006020820190508181036000830152614e2a81614ab0565b9050919050565b60006020820190508181036000830152614e4a81614ad3565b9050919050565b6000602082019050614e666000830184614af6565b92915050565b600060a082019050614e816000830188614af6565b614e8e6020830187614838565b8181036040830152614ea081866147bc565b9050614eaf60608301856147ad565b614ebc6080830184614af6565b9695505050505050565b600060a082019050614edb6000830188614af6565b614ee86020830187614af6565b614ef56040830186614af6565b614f026060830185614af6565b614f0f6080830184614af6565b9695505050505050565b6000602082019050614f2e6000830184614b05565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614f948261524d565b9150614f9f8361524d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fd457614fd3615316565b5b828201905092915050565b6000614fea8261524d565b9150614ff58361524d565b92508261500557615004615345565b5b828204905092915050565b6000808291508390505b600185111561505a5780860481111561503657615035615316565b5b60018516156150455780820291505b808102905061505385615385565b945061501a565b94509492505050565b600061506e8261524d565b915061507983615257565b92506150a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846150ae565b905092915050565b6000826150be576001905061517a565b816150cc576000905061517a565b81600181146150e257600281146150ec5761511b565b600191505061517a565b60ff8411156150fe576150fd615316565b5b8360020a91508482111561511557615114615316565b5b5061517a565b5060208310610133831016604e8410600b84101617156151505782820a90508381111561514b5761514a615316565b5b61517a565b61515d8484846001615010565b9250905081840481111561517457615173615316565b5b81810290505b9392505050565b600061518c8261524d565b91506151978361524d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151d0576151cf615316565b5b828202905092915050565b60006151e68261524d565b91506151f18361524d565b92508282101561520457615203615316565b5b828203905092915050565b600061521a8261522d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061526f82615276565b9050919050565b60006152818261522d565b9050919050565b60006152938261524d565b9050919050565b60005b838110156152b857808201518184015260208101905061529d565b838111156152c7576000848401525b50505050565b60006152d88261524d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561530b5761530a615316565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f4d61782042757920416d6f756e742073686f756c64206d65203130202d20313060008201527f3030303030303000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f796f752061726520657863656564696e67206d6178427579416d6f756e740000600082015250565b7f4d61782053656c6c20416d6f756e742073686f756c64206d65203130202d203160008201527f3030303030303030000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f416d6f756e7420697320657863656564696e67206d617853656c6c416d6f756e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6158458161520f565b811461585057600080fd5b50565b61585c81615221565b811461586757600080fd5b50565b6158738161524d565b811461587e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220880e6bd86a4d89f43b8e3b72ceeef986b69ec0ac31e2152af7c78ca686c451f464736f6c634300080100330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102555760003560e01c8063715018a611610139578063a5ece941116100b6578063e2f456051161007a578063e2f456051461091b578063e99c9d0914610946578063ea2f0b371461096f578063f2fde38b14610998578063f34eb0b8146109c1578063f887ea40146109ea5761025c565b8063a5ece94114610822578063a8aa1b311461084d578063a9059cbb14610878578063d257b34f146108b5578063dd62ed3e146108de5761025c565b8063924de9b7116100fd578063924de9b71461073957806395d89b41146107625780639ba5e4d51461078d5780639e252f00146107bc578063a457c2d7146107e55761025c565b8063715018a6146106605780637688c5841461067757806388e765ff146106a657806388f82020146106d15780638da5cb5b1461070e5761025c565b806339509351116101d25780634549b039116101965780634549b0391461052a57806352390c02146105675780635342acb41461059057806366d602ae146105cd5780636ddd1713146105f857806370a08231146106235761025c565b806339509351146104475780633bd5d173146104845780633beedf6d146104ad57806341cb87fc146104d8578063437823ec146105015761025c565b806327c8f8351161021957806327c8f835146103605780632d8381191461038b578063313ce567146103c857806335bc868a146103f35780633685d4191461041e5761025c565b806306fdde0314610261578063095ea7b31461028c57806318160ddd146102c957806318a90c44146102f457806323b872dd146103235761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a15565b6040516102839190614bef565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae919061466d565b610a52565b6040516102c09190614bb9565b60405180910390f35b3480156102d557600080fd5b506102de610a70565b6040516102eb9190614e51565b60405180910390f35b34801561030057600080fd5b50610309610a7a565b60405161031a959493929190614ec6565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061461e565b610a9e565b6040516103579190614bb9565b60405180910390f35b34801561036c57600080fd5b50610375610b77565b6040516103829190614b14565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad91906146d2565b610b7d565b6040516103bf9190614e51565b60405180910390f35b3480156103d457600080fd5b506103dd610be4565b6040516103ea9190614f19565b60405180910390f35b3480156103ff57600080fd5b50610408610bed565b6040516104159190614b14565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190614590565b610c13565b005b34801561045357600080fd5b5061046e6004803603810190610469919061466d565b610fe1565b60405161047b9190614bb9565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a691906146d2565b61108d565b005b3480156104b957600080fd5b506104c2611210565b6040516104cf9190614b14565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614590565b611236565b005b34801561050d57600080fd5b5061052860048036038101906105239190614590565b611724565b005b34801561053657600080fd5b50610551600480360381019061054c91906146fb565b6117fb565b60405161055e9190614e51565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190614590565b611885565b005b34801561059c57600080fd5b506105b760048036038101906105b29190614590565b611b20565b6040516105c49190614bb9565b60405180910390f35b3480156105d957600080fd5b506105e2611b76565b6040516105ef9190614e51565b60405180910390f35b34801561060457600080fd5b5061060d611b7c565b60405161061a9190614bb9565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190614590565b611b8f565b6040516106579190614e51565b60405180910390f35b34801561066c57600080fd5b50610675611c7a565b005b34801561068357600080fd5b5061068c611d02565b60405161069d959493929190614ec6565b60405180910390f35b3480156106b257600080fd5b506106bb611d26565b6040516106c89190614e51565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190614590565b611d2c565b6040516107059190614bb9565b60405180910390f35b34801561071a57600080fd5b50610723611d82565b6040516107309190614b14565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b91906146a9565b611dab565b005b34801561076e57600080fd5b50610777611e44565b6040516107849190614bef565b60405180910390f35b34801561079957600080fd5b506107a2611e81565b6040516107b3959493929190614ec6565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de91906146d2565b611ea5565b005b3480156107f157600080fd5b5061080c6004803603810190610807919061466d565b611fae565b6040516108199190614bb9565b60405180910390f35b34801561082e57600080fd5b5061083761207b565b6040516108449190614b14565b60405180910390f35b34801561085957600080fd5b506108626120a1565b60405161086f9190614b14565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a919061466d565b6120c7565b6040516108ac9190614bb9565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906146d2565b6120e5565b005b3480156108ea57600080fd5b50610905600480360381019061090091906145e2565b612183565b6040516109129190614e51565b60405180910390f35b34801561092757600080fd5b5061093061220a565b60405161093d9190614e51565b60405180910390f35b34801561095257600080fd5b5061096d600480360381019061096891906146d2565b612210565b005b34801561097b57600080fd5b5061099660048036038101906109919190614590565b6122fd565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190614590565b6123d4565b005b3480156109cd57600080fd5b506109e860048036038101906109e391906146d2565b6124cc565b005b3480156109f657600080fd5b506109ff6125b9565b604051610a0c9190614bd4565b60405180910390f35b60606040518060400160405280600881526020017f584455504c494659000000000000000000000000000000000000000000000000815250905090565b6000610a66610a5f6125df565b84846125e7565b6001905092915050565b6000600954905090565b60168060000154908060010154908060020154908060030154908060040154905085565b6000610aab8484846127b2565b610b6c84610ab76125df565b610b678560405180606001604052806028815260200161588260289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b1d6125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ccb9092919063ffffffff16565b6125e7565b600190509392505050565b61dead81565b6000600a54821115610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90614c51565b60405180910390fd5b6000610bce612d20565b90508083610bdc9190614fdf565b915050919050565b60006012905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c1b6125df565b73ffffffffffffffffffffffffffffffffffffffff16610c39611d82565b73ffffffffffffffffffffffffffffffffffffffff1614610c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8690614d31565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290614cd1565b60405180910390fd5b60005b600680549050811015610fdd578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610d7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fca5760066001600680549050610dd791906151db565b81548110610e0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fdd565b8080610fd5906152cd565b915050610d1e565b5050565b6000611083610fee6125df565b848460036000610ffc6125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461107e9190614f89565b6125e7565b6001905092915050565b60006110976125df565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90614e11565b60405180910390fd5b60006111358360016000612d44565b905061118d8160000151600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506111e98160000151600a54612db290919063ffffffff16565b600a8190555082601b60000160008282546112049190614f89565b92505081905550505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61123e6125df565b73ffffffffffffffffffffffffffffffffffffffff1661125c611d82565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614d31565b60405180910390fd5b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130d57600080fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561135a57600080fd5b505afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139291906145b9565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f457600080fd5b505afa158015611408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142c91906145b9565b6040518363ffffffff1660e01b8152600401611449929190614b2f565b60206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906145b9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561151657600080fd5b505afa15801561152a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154e91906145b9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b057600080fd5b505afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e891906145b9565b6040518363ffffffff1660e01b8152600401611605929190614b2f565b602060405180830381600087803b15801561161f57600080fd5b505af1158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906145b9565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116de565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61172c6125df565b73ffffffffffffffffffffffffffffffffffffffff1661174a611d82565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790614d31565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990614d11565b60405180910390fd5b816118655760006118568460016000612d44565b9050806000015191505061187f565b60006118748460016000612d44565b905080602001519150505b92915050565b61188d6125df565b73ffffffffffffffffffffffffffffffffffffffff166118ab611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614d31565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590614cb1565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a6257611a1e600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7d565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b600760009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c75565b611c72600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7d565b90505b919050565b611c826125df565b73ffffffffffffffffffffffffffffffffffffffff16611ca0611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614d31565b60405180910390fd5b611d006000612dc8565b565b60118060000154908060010154908060020154908060030154908060040154905085565b600b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611db36125df565b73ffffffffffffffffffffffffffffffffffffffff16611dd1611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90614d31565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600181526020017f5800000000000000000000000000000000000000000000000000000000000000815250905090565b601b8060000154908060010154908060020154908060030154908060040154905085565b611ead6125df565b73ffffffffffffffffffffffffffffffffffffffff16611ecb611d82565b73ffffffffffffffffffffffffffffffffffffffff1614611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614d31565b60405180910390fd5b80471015611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b90614d51565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611faa573d6000803e3d6000fd5b5050565b6000612071611fbb6125df565b8461206c856040518060600160405280602581526020016158aa6025913960036000611fe56125df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ccb9092919063ffffffff16565b6125e7565b6001905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006120db6120d46125df565b84846127b2565b6001905092915050565b6120ed6125df565b73ffffffffffffffffffffffffffffffffffffffff1661210b611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215890614d31565b60405180910390fd5b6012600a61216f9190615063565b8161217a9190615181565b600d8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6122186125df565b73ffffffffffffffffffffffffffffffffffffffff16612236611d82565b73ffffffffffffffffffffffffffffffffffffffff161461228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390614d31565b60405180910390fd5b600a81101580156122a157506305f5e1008111155b6122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d790614df1565b60405180910390fd5b670de0b6b3a7640000816122f49190615181565b600c8190555050565b6123056125df565b73ffffffffffffffffffffffffffffffffffffffff16612323611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614d31565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123dc6125df565b73ffffffffffffffffffffffffffffffffffffffff166123fa611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244790614d31565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614c71565b60405180910390fd5b6124c981612dc8565b50565b6124d46125df565b73ffffffffffffffffffffffffffffffffffffffff166124f2611d82565b73ffffffffffffffffffffffffffffffffffffffff1614612548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253f90614d31565b60405180910390fd5b600a811015801561255d57506305f5e1008111155b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390614cf1565b60405180910390fd5b670de0b6b3a7640000816125b09190615181565b600b8190555050565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614db1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614c91565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a59190614e51565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990614d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990614c11565b60405180910390fd5b600081116128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90614d71565b60405180910390fd5b6128de83611b8f565b811115612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790614c31565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156129c75750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1257600b54811115612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0890614dd1565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ab95750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612b0457600c54811115612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afa90614e31565b60405180910390fd5b5b6000612b0f30611b8f565b90506000600d548210159050600760019054906101000a900460ff16158015612b445750600760009054906101000a900460ff165b8015612b4d5750805b8015612ba75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612bb857612bb7600d54612e8c565b5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c1557600190505b612cc3868686600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbc5750600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1585613168565b505050505050565b6000838311158290612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a9190614bef565b60405180910390fd5b5082840390509392505050565b6000806000612d2d6135cb565b915091508082612d3d9190614fdf565b9250505090565b612d4c6144bf565b612d57848484613901565b9050612d6c818585612d67612d20565b613b75565b8760000188602001896040018a6060018b60a0018c60c0018d60800187815250878152508781525087815250878152508781525087815250505050505050509392505050565b60008183612dc091906151db565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600760016101000a81548160ff02191690831515021790555060006002601160030154601160020154601160010154601160040154612ecd9190614f89565b612ed79190614f89565b612ee19190614f89565b612eeb9190615181565b905060008160116004015484612f019190615181565b612f0b9190614fdf565b905060008184612f1b91906151db565b90506000479050612f2b82613c58565b60008147612f3991906151db565b9050600060116004015486612f4e91906151db565b82612f599190614fdf565b9050600060116004015482612f6e9190615181565b90506000811115612f8457612f838682613f1c565b5b6000601160010154600284612f999190615181565b612fa39190615181565b9050600081111561301857600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613016573d6000803e3d6000fd5b505b600060116002015460028561302d9190615181565b6130379190615181565b905060008111156130ac57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130aa573d6000803e3d6000fd5b505b60006011600301546002866130c19190615181565b6130cb9190615181565b9050600081111561314057601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561313e573d6000803e3d6000fd5b505b505050505050505050506000600760016101000a81548160ff02191690831515021790555050565b6000613175848484612d44565b9050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132585783600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321491906151db565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561333d578060e00151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f99190614f89565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8060000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338c91906151db565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341e9190614f89565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613474816040015182610100015161400a565b6134878160600151826101200151614043565b61349a8160a00151826101600151614162565b6134ad8160c00151826101800151614281565b6134c081608001518261014001516143a0565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360e001516040516135219190614e51565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610180015184610160015185610120015186610140015161359a9190614f89565b6135a49190614f89565b6135ae9190614f89565b6040516135bb9190614e51565b60405180910390a3505050505050565b6000806000600a5490506000600954905060005b6006805490508110156138cb5782600160006006848154811061362b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061373f57508160026000600684815481106136d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561375657600a54600954945094505050506138fd565b6001600060068381548110613794577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361380591906151db565b92506002600060068381548110613845577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826138b691906151db565b915080806138c3906152cd565b9150506135df565b50600954600a546138dc9190614fdf565b8210156138f457600a546009549350935050506138fd565b81819350935050505b9091565b6139096144bf565b8261391d57838160e0018181525050613b6e565b8115613a4a576103e8601660000154856139379190615181565b6139419190614fdf565b816101000181815250506103e86016600101548561395f9190615181565b6139699190614fdf565b816101200181815250506103e8601660020154856139879190615181565b6139919190614fdf565b816101600181815250506103e8601660030154856139af9190615181565b6139b99190614fdf565b816101600181815250506103e8601660040154856139d79190615181565b6139e19190614fdf565b8161014001818152505080610180015181610160015182610140015183610120015184610100015188613a1491906151db565b613a1e91906151db565b613a2891906151db565b613a3291906151db565b613a3c91906151db565b8160e0018181525050613b6d565b6103e860116000015485613a5e9190615181565b613a689190614fdf565b816101000181815250506103e860116001015485613a869190615181565b613a909190614fdf565b816101200181815250506103e860116002015485613aae9190615181565b613ab89190614fdf565b816101600181815250506103e860116002015485613ad69190615181565b613ae09190614fdf565b816101600181815250506103e860116004015485613afe9190615181565b613b089190614fdf565b8161014001818152505080610180015181610160015182610140015183610120015184610100015188613b3b91906151db565b613b4591906151db565b613b4f91906151db565b613b5991906151db565b613b6391906151db565b8160e00181815250505b5b9392505050565b6000806000806000806000878a613b8c9190615181565b965088613bb057868760008060008060009650965096509650965096509650613c4a565b878b6101000151613bc19190615181565b9450878b6101200151613bd49190615181565b9350878b6101600151613be79190615181565b9150878b6101800151613bfa9190615181565b9050878b6101400151613c0d9190615181565b925080828486888b613c1f91906151db565b613c2991906151db565b613c3391906151db565b613c3d91906151db565b613c4791906151db565b95505b949950949992975094509450565b6000600267ffffffffffffffff811115613c9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613cc95781602001602082028036833780820191505090505b5090503081600081518110613d07577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613da957600080fd5b505afa158015613dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de191906145b9565b81600181518110613e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e8230600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125e7565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ee6959493929190614e6c565b600060405180830381600087803b158015613f0057600080fd5b505af1158015613f14573d6000803e3d6000fd5b505050505050565b613f4930600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846125e7565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806000426040518863ffffffff1660e01b8152600401613fb196959493929190614b58565b6060604051808303818588803b158015613fca57600080fd5b505af1158015613fde573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140039190614737565b5050505050565b81600a600082825461401c91906151db565b9250508190555080601b60000160008282546140389190614f89565b925050819055505050565b80601b60010160008282546140589190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156141085780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141009190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141579190614f89565b925050819055505050565b80601b60030160008282546141779190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142275780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461421f9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546142769190614f89565b925050819055505050565b80601b60040160008282546142969190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143465780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461433e9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546143959190614f89565b925050819055505050565b80601b60020160008282546143b59190614f89565b92505081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144655780600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461445d9190614f89565b925050819055505b81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546144b49190614f89565b925050819055505050565b604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000813590506145368161583c565b92915050565b60008151905061454b8161583c565b92915050565b60008135905061456081615853565b92915050565b6000813590506145758161586a565b92915050565b60008151905061458a8161586a565b92915050565b6000602082840312156145a257600080fd5b60006145b084828501614527565b91505092915050565b6000602082840312156145cb57600080fd5b60006145d98482850161453c565b91505092915050565b600080604083850312156145f557600080fd5b600061460385828601614527565b925050602061461485828601614527565b9150509250929050565b60008060006060848603121561463357600080fd5b600061464186828701614527565b935050602061465286828701614527565b925050604061466386828701614566565b9150509250925092565b6000806040838503121561468057600080fd5b600061468e85828601614527565b925050602061469f85828601614566565b9150509250929050565b6000602082840312156146bb57600080fd5b60006146c984828501614551565b91505092915050565b6000602082840312156146e457600080fd5b60006146f284828501614566565b91505092915050565b6000806040838503121561470e57600080fd5b600061471c85828601614566565b925050602061472d85828601614551565b9150509250929050565b60008060006060848603121561474c57600080fd5b600061475a8682870161457b565b935050602061476b8682870161457b565b925050604061477c8682870161457b565b9150509250925092565b6000614792838361479e565b60208301905092915050565b6147a78161520f565b82525050565b6147b68161520f565b82525050565b60006147c782614f44565b6147d18185614f67565b93506147dc83614f34565b8060005b8381101561480d5781516147f48882614786565b97506147ff83614f5a565b9250506001810190506147e0565b5085935050505092915050565b61482381615221565b82525050565b61483281615264565b82525050565b61484181615288565b82525050565b600061485282614f4f565b61485c8185614f78565b935061486c81856020860161529a565b61487581615374565b840191505092915050565b600061488d602383614f78565b915061489882615392565b604082019050919050565b60006148b0603183614f78565b91506148bb826153e1565b604082019050919050565b60006148d3602a83614f78565b91506148de82615430565b604082019050919050565b60006148f6602683614f78565b91506149018261547f565b604082019050919050565b6000614919602283614f78565b9150614924826154ce565b604082019050919050565b600061493c601b83614f78565b91506149478261551d565b602082019050919050565b600061495f601783614f78565b915061496a82615546565b602082019050919050565b6000614982602783614f78565b915061498d8261556f565b604082019050919050565b60006149a5601f83614f78565b91506149b0826155be565b602082019050919050565b60006149c8602083614f78565b91506149d3826155e7565b602082019050919050565b60006149eb601883614f78565b91506149f682615610565b602082019050919050565b6000614a0e602983614f78565b9150614a1982615639565b604082019050919050565b6000614a31602583614f78565b9150614a3c82615688565b604082019050919050565b6000614a54602483614f78565b9150614a5f826156d7565b604082019050919050565b6000614a77601e83614f78565b9150614a8282615726565b602082019050919050565b6000614a9a602883614f78565b9150614aa58261574f565b604082019050919050565b6000614abd602c83614f78565b9150614ac88261579e565b604082019050919050565b6000614ae0602183614f78565b9150614aeb826157ed565b604082019050919050565b614aff8161524d565b82525050565b614b0e81615257565b82525050565b6000602082019050614b2960008301846147ad565b92915050565b6000604082019050614b4460008301856147ad565b614b5160208301846147ad565b9392505050565b600060c082019050614b6d60008301896147ad565b614b7a6020830188614af6565b614b876040830187614838565b614b946060830186614838565b614ba160808301856147ad565b614bae60a0830184614af6565b979650505050505050565b6000602082019050614bce600083018461481a565b92915050565b6000602082019050614be96000830184614829565b92915050565b60006020820190508181036000830152614c098184614847565b905092915050565b60006020820190508181036000830152614c2a81614880565b9050919050565b60006020820190508181036000830152614c4a816148a3565b9050919050565b60006020820190508181036000830152614c6a816148c6565b9050919050565b60006020820190508181036000830152614c8a816148e9565b9050919050565b60006020820190508181036000830152614caa8161490c565b9050919050565b60006020820190508181036000830152614cca8161492f565b9050919050565b60006020820190508181036000830152614cea81614952565b9050919050565b60006020820190508181036000830152614d0a81614975565b9050919050565b60006020820190508181036000830152614d2a81614998565b9050919050565b60006020820190508181036000830152614d4a816149bb565b9050919050565b60006020820190508181036000830152614d6a816149de565b9050919050565b60006020820190508181036000830152614d8a81614a01565b9050919050565b60006020820190508181036000830152614daa81614a24565b9050919050565b60006020820190508181036000830152614dca81614a47565b9050919050565b60006020820190508181036000830152614dea81614a6a565b9050919050565b60006020820190508181036000830152614e0a81614a8d565b9050919050565b60006020820190508181036000830152614e2a81614ab0565b9050919050565b60006020820190508181036000830152614e4a81614ad3565b9050919050565b6000602082019050614e666000830184614af6565b92915050565b600060a082019050614e816000830188614af6565b614e8e6020830187614838565b8181036040830152614ea081866147bc565b9050614eaf60608301856147ad565b614ebc6080830184614af6565b9695505050505050565b600060a082019050614edb6000830188614af6565b614ee86020830187614af6565b614ef56040830186614af6565b614f026060830185614af6565b614f0f6080830184614af6565b9695505050505050565b6000602082019050614f2e6000830184614b05565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614f948261524d565b9150614f9f8361524d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fd457614fd3615316565b5b828201905092915050565b6000614fea8261524d565b9150614ff58361524d565b92508261500557615004615345565b5b828204905092915050565b6000808291508390505b600185111561505a5780860481111561503657615035615316565b5b60018516156150455780820291505b808102905061505385615385565b945061501a565b94509492505050565b600061506e8261524d565b915061507983615257565b92506150a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846150ae565b905092915050565b6000826150be576001905061517a565b816150cc576000905061517a565b81600181146150e257600281146150ec5761511b565b600191505061517a565b60ff8411156150fe576150fd615316565b5b8360020a91508482111561511557615114615316565b5b5061517a565b5060208310610133831016604e8410600b84101617156151505782820a90508381111561514b5761514a615316565b5b61517a565b61515d8484846001615010565b9250905081840481111561517457615173615316565b5b81810290505b9392505050565b600061518c8261524d565b91506151978361524d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156151d0576151cf615316565b5b828202905092915050565b60006151e68261524d565b91506151f18361524d565b92508282101561520457615203615316565b5b828203905092915050565b600061521a8261522d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061526f82615276565b9050919050565b60006152818261522d565b9050919050565b60006152938261524d565b9050919050565b60005b838110156152b857808201518184015260208101905061529d565b838111156152c7576000848401525b50505050565b60006152d88261524d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561530b5761530a615316565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f4d61782042757920416d6f756e742073686f756c64206d65203130202d20313060008201527f3030303030303000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f796f752061726520657863656564696e67206d6178427579416d6f756e740000600082015250565b7f4d61782053656c6c20416d6f756e742073686f756c64206d65203130202d203160008201527f3030303030303030000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f416d6f756e7420697320657863656564696e67206d617853656c6c416d6f756e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6158458161520f565b811461585057600080fd5b50565b61585c81615221565b811461586757600080fd5b50565b6158738161524d565b811461587e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220880e6bd86a4d89f43b8e3b72ceeef986b69ec0ac31e2152af7c78ca686c451f464736f6c63430008010033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

9121:19042:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12336:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13267:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12632:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10826:148;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;13436:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10325:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15261:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12518:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10166:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15924:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13757:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14383:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10244:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27612:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16409:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14781:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15583:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16648:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9953:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9568:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12735:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7601:94;;;;;;;;;;;;;:::i;:::-;;10668:149;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;9890:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14255:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7378:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27166:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12425:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11148:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;27339:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13978:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10083:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9656:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12941:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27028:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13116:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10017:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26779:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16528:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7703:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26537:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9628:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12336:83;12373:13;12406:5;;;;;;;;;;;;;;;;;12399:12;;12336:83;:::o;13267:161::-;13342:4;13359:39;13368:12;:10;:12::i;:::-;13382:7;13391:6;13359:8;:39::i;:::-;13416:4;13409:11;;13267:161;;;;:::o;12632:95::-;12685:7;12712;;12705:14;;12632:95;:::o;10826:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13436:313::-;13534:4;13551:36;13561:6;13569:9;13580:6;13551:9;:36::i;:::-;13598:121;13607:6;13615:12;:10;:12::i;:::-;13629:89;13667:6;13629:89;;;;;;;;;;;;;;;;;:11;:19;13641:6;13629:19;;;;;;;;;;;;;;;:33;13649:12;:10;:12::i;:::-;13629:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13598:8;:121::i;:::-;13737:4;13730:11;;13436:313;;;;;:::o;10325:80::-;10363:42;10325:80;:::o;15261:248::-;15327:7;15366;;15355;:18;;15347:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15431:19;15454:10;:8;:10::i;:::-;15431:33;;15490:11;15482:7;:19;;;;:::i;:::-;15475:26;;;15261:248;;;:::o;12518:83::-;12559:5;9719:2;12577:16;;12518:83;:::o;10166:71::-;;;;;;;;;;;;;:::o;15924:475::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16006:11:::1;:20;16018:7;16006:20;;;;;;;;;;;;;;;;;;;;;;;;;15998:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16070:9;16065:327;16089:9;:16;;;;16085:1;:20;16065:327;;;16147:7;16131:23;;:9;16141:1;16131:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;16127:254;;;16190:9;16219:1;16200:9;:16;;;;:20;;;;:::i;:::-;16190:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16175:9;16185:1;16175:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16259:1;16240:7;:16;16248:7;16240:16;;;;;;;;;;;;;;;:20;;;;16302:5;16279:11;:20;16291:7;16279:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;16326:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16360:5;;16127:254;16107:3;;;;;:::i;:::-;;;;16065:327;;;;15924:475:::0;:::o;13757:213::-;13845:4;13862:78;13871:12;:10;:12::i;:::-;13885:7;13929:10;13894:11;:25;13906:12;:10;:12::i;:::-;13894:25;;;;;;;;;;;;;;;:34;13920:7;13894:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;13862:8;:78::i;:::-;13958:4;13951:11;;13757:213;;;;:::o;14383:390::-;14435:14;14452:12;:10;:12::i;:::-;14435:29;;14484:11;:19;14496:6;14484:19;;;;;;;;;;;;;;;;;;;;;;;;;14483:20;14475:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;14563:28;14594:32;14605:7;14614:4;14620:5;14594:10;:32::i;:::-;14563:63;;14655:30;14675:1;:9;;;14655:7;:15;14663:6;14655:15;;;;;;;;;;;;;;;;:19;;:30;;;;:::i;:::-;14637:7;:15;14645:6;14637:15;;;;;;;;;;;;;;;:48;;;;14706:22;14718:1;:9;;;14706:7;;:11;;:22;;;;:::i;:::-;14696:7;:32;;;;14758:7;14739:11;:15;;;:26;;;;;;;:::i;:::-;;;;;;;;14383:390;;;:::o;10244:74::-;;;;;;;;;;;;;:::o;27612:506::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27716:6:::1;;;;;;;;;;;27695:28;;:9;:28;;;;27687:37;;;::::0;::::1;;27735:18;27764:9;27735:39;;27785:16;27813:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27804:38;;;27851:4;27858:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27804:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27785:91;;27911:1;27891:22;;:8;:22;;;27887:194;;;27946:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27937:41;;;27987:4;27994:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27937:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27930:4;;:82;;;;;;;;;;;;;;;;;;27887:194;;;28061:8;28054:4;;:15;;;;;;;;;;;;;;;;;;27887:194;28100:10;28091:6;;:19;;;;;;;;;;;;;;;;;;7584:1;;27612:506:::0;:::o;16409:111::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16508:4:::1;16478:18;:27;16497:7;16478:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;16409:111:::0;:::o;14781:470::-;14871:7;14910;;14899;:18;;14891:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14969:17;14964:280;;15003:28;15034:32;15045:7;15054:4;15060:5;15034:10;:32::i;:::-;15003:63;;15088:1;:9;;;15081:16;;;;;14964:280;15130:28;15161:32;15172:7;15181:4;15187:5;15161:10;:32::i;:::-;15130:63;;15215:1;:17;;;15208:24;;;14781:470;;;;;:::o;15583:333::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15666:11:::1;:20;15678:7;15666:20;;;;;;;;;;;;;;;;;;;;;;;;;15665:21;15657:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;15751:1;15732:7;:16;15740:7;15732:16;;;;;;;;;;;;;;;;:20;15729:108;;;15788:37;15808:7;:16;15816:7;15808:16;;;;;;;;;;;;;;;;15788:19;:37::i;:::-;15769:7;:16;15777:7;15769:16;;;;;;;;;;;;;;;:56;;;;15729:108;15870:4;15847:11;:20;15859:7;15847:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;15885:9;15900:7;15885:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15583:333:::0;:::o;16648:123::-;16712:4;16736:18;:27;16755:7;16736:27;;;;;;;;;;;;;;;;;;;;;;;;;16729:34;;16648:123;;;:::o;9953:57::-;;;;:::o;9568:23::-;;;;;;;;;;;;;:::o;12735:198::-;12801:7;12825:11;:20;12837:7;12825:20;;;;;;;;;;;;;;;;;;;;;;;;;12821:49;;;12854:7;:16;12862:7;12854:16;;;;;;;;;;;;;;;;12847:23;;;;12821:49;12888:37;12908:7;:16;12916:7;12908:16;;;;;;;;;;;;;;;;12888:19;:37::i;:::-;12881:44;;12735:198;;;;:::o;7601:94::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7666:21:::1;7684:1;7666:9;:21::i;:::-;7601:94::o:0;10668:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9890:56::-;;;;:::o;14255:120::-;14323:4;14347:11;:20;14359:7;14347:20;;;;;;;;;;;;;;;;;;;;;;;;;14340:27;;14255:120;;;:::o;7378:87::-;7424:7;7451:6;;;;;;;;;;;7444:13;;7378:87;:::o;27166:101::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27251:8:::1;27237:11;;:22;;;;;;;;;;;;;;;;;;27166:101:::0;:::o;12425:87::-;12464:13;12497:7;;;;;;;;;;;;;;;;;12490:14;;12425:87;:::o;11148:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27339:196::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27439:9:::1;27414:21;:34;;27406:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27496:10;27488:28;;:39;27517:9;27488:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27339:196:::0;:::o;13978:269::-;14071:4;14088:129;14097:12;:10;:12::i;:::-;14111:7;14120:96;14159:15;14120:96;;;;;;;;;;;;;;;;;:11;:25;14132:12;:10;:12::i;:::-;14120:25;;;;;;;;;;;;;;;:34;14146:7;14120:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14088:8;:129::i;:::-;14235:4;14228:11;;13978:269;;;;:::o;10083:76::-;;;;;;;;;;;;;:::o;9656:19::-;;;;;;;;;;;;;:::o;12941:167::-;13019:4;13036:42;13046:12;:10;:12::i;:::-;13060:9;13071:6;13036:9;:42::i;:::-;13096:4;13089:11;;12941:167;;;;:::o;27028:130::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9719:2:::1;27137;:13;;;;:::i;:::-;27128:6;:22;;;;:::i;:::-;27107:18;:43;;;;27028:130:::0;:::o;13116:143::-;13197:7;13224:11;:18;13236:5;13224:18;;;;;;;;;;;;;;;:27;13243:7;13224:27;;;;;;;;;;;;;;;;13217:34;;13116:143;;;;:::o;10017:57::-;;;;:::o;26779:241::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26884:2:::1;26866:14;:20;;:51;;;;;26908:9;26890:14;:27;;26866:51;26858:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;27006:6;26989:14;:23;;;;:::i;:::-;26973:13;:39;;;;26779:241:::0;:::o;16528:110::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16625:5:::1;16595:18;:27;16614:7;16595:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;16528:110:::0;:::o;7703:192::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7812:1:::1;7792:22;;:8;:22;;;;7784:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7868:19;7878:8;7868:9;:19::i;:::-;7703:192:::0;:::o;26537:234::-;7524:12;:10;:12::i;:::-;7513:23;;:7;:5;:7::i;:::-;:23;;;7505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26639:2:::1;26622:13;:19;;:49;;;;;26662:9;26645:13;:26;;26622:49;26614:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;26757:6;26741:13;:22;;;;:::i;:::-;26726:12;:37;;;;26537:234:::0;:::o;9628:21::-;;;;;;;;;;;;;:::o;3245:98::-;3298:7;3325:10;3318:17;;3245:98;:::o;20993:335::-;21103:1;21086:19;;:5;:19;;;;21078:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21184:1;21165:21;;:7;:21;;;;21157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21266:6;21236:11;:18;21248:5;21236:18;;;;;;;;;;;;;;;:27;21255:7;21236:27;;;;;;;;;;;;;;;:36;;;;21304:7;21288:32;;21297:5;21288:32;;;21313:6;21288:32;;;;;;:::i;:::-;;;;;;;;20993:335;;;:::o;21336:1132::-;21440:1;21424:18;;:4;:18;;;;21416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21517:1;21503:16;;:2;:16;;;;21495:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21587:1;21578:6;:10;21570:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21663:15;21673:4;21663:9;:15::i;:::-;21653:6;:25;;21645:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;21755:4;;;;;;;;;;;21747:12;;:4;:12;;;:39;;;;;21764:18;:22;21783:2;21764:22;;;;;;;;;;;;;;;;;;;;;;;;;21763:23;21747:39;21744:135;;;21820:12;;21810:6;:22;;21802:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21744:135;21895:18;:24;21914:4;21895:24;;;;;;;;;;;;;;;;;;;;;;;;;21894:25;:39;;;;;21929:4;;;;;;;;;;;21923:10;;:2;:10;;;21894:39;21891:139;;;21967:13;;21957:6;:23;;21949:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:139;22042:28;22073:24;22091:4;22073:9;:24::i;:::-;22042:55;;22108:12;22147:18;;22123:20;:42;;22108:57;;22180:8;;;;;;;;;;;22179:9;:24;;;;;22192:11;;;;;;;;;;;22179:24;:35;;;;;22207:7;22179:35;:51;;;;;22226:4;;;;;;;;;;;22218:12;;:4;:12;;;;22179:51;22176:116;;;22246:34;22261:18;;22246:14;:34::i;:::-;22176:116;22302:11;22333:4;;;;;;;;;;;22327:10;;:2;:10;;;22324:28;;;22348:4;22339:13;;22324:28;22365:95;22380:4;22386:2;22390:6;22400:18;:24;22419:4;22400:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;22428:18;:22;22447:2;22428:22;;;;;;;;;;;;;;;;;;;;;;;;;22400:50;22398:53;22453:6;22365:14;:95::i;:::-;21336:1132;;;;;;:::o;2467:240::-;2587:7;2645:1;2640;:6;;2648:12;2632:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2687:1;2683;:5;2676:12;;2467:240;;;;;:::o;20279:158::-;20320:7;20341:15;20358;20377:19;:17;:19::i;:::-;20340:56;;;;20422:7;20414;:15;;;;:::i;:::-;20407:22;;;;20279:158;:::o;18002:425::-;18088:36;;:::i;:::-;18149:37;18161:7;18170;18179:6;18149:11;:37::i;:::-;18137:49;;18340:52;18352:9;18363:7;18372;18381:10;:8;:10::i;:::-;18340:11;:52::i;:::-;18198:9;:17;;18217:9;:25;;18244:9;:14;;18259:9;:20;;18280:9;:15;;18296:9;:18;;18316:9;:20;;18197:195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18002:425;;;;;:::o;2043:98::-;2101:7;2132:1;2128;:5;;;;:::i;:::-;2121:12;;2043:98;;;;:::o;7903:173::-;7959:16;7978:6;;;;;;;;;;;7959:25;;8004:8;7995:6;;:17;;;;;;;;;;;;;;;;;;8059:8;8028:40;;8049:8;8028:40;;;;;;;;;;;;7903:173;;:::o;24050:1401::-;11702:4;11691:8;;:15;;;;;;;;;;;;;;;;;;24172:19:::1;24272:1;24252:8;:16;;;24236:8;:13;;;24215:8;:18;;;24194:8;:18;;;:39;;;;:::i;:::-;:55;;;;:::i;:::-;:74;;;;:::i;:::-;24193:80;;;;:::i;:::-;24172:101;;24284:32;24349:11;24328:8;:18;;;24319:6;:27;;;;:::i;:::-;:41;;;;:::i;:::-;24284:76;;24371:14;24397:24;24388:6;:33;;;;:::i;:::-;24371:50;;24434:22;24459:21;24434:46;;24493:24;24510:6;24493:16;:24::i;:::-;24530:20;24577:14;24553:21;:38;;;;:::i;:::-;24530:61;;24602:19;24653:8;:18;;;24639:11;:32;;;;:::i;:::-;24623:12;:49;;;;:::i;:::-;24602:70;;24683:29;24729:8;:18;;;24715:11;:32;;;;:::i;:::-;24683:64;;24787:1;24763:21;:25;24760:158;;;24845:61;24858:24;24884:21;24845:12;:61::i;:::-;24760:158;24970:20;25011:8;:18;;;25007:1;24993:11;:15;;;;:::i;:::-;:36;;;;:::i;:::-;24970:59;;25058:1;25043:12;:16;25040:93;;;25081:16;;;;;;;;;;;25073:34;;:48;25108:12;25073:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25040:93;25143:15;25179:8;:13;;;25175:1;25161:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;25143:49;;25216:1;25206:7;:11;25203:78;;;25239:11;;;;;;;;;;;25231:29;;:38;25261:7;25231:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25203:78;25291:18;25330:8;:16;;;25326:1;25312:11;:15;;;;:::i;:::-;:34;;;;:::i;:::-;25291:55;;25373:1;25360:10;:14;25357:87;;;25396:14;;;;;;;;;;;25388:32;;:44;25421:10;25388:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25357:87;11717:1;;;;;;;;;;11740:5:::0;11729:8;;:16;;;;;;;;;;;;;;;;;;24050:1401;:::o;22551:978::-;22675:28;22706:36;22717:7;22726;22735:6;22706:10;:36::i;:::-;22675:67;;22759:11;:19;22771:6;22759:19;;;;;;;;;;;;;;;;;;;;;;;;;22755:115;;;22851:7;22835;:15;22843:6;22835:15;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;22817:7;:15;22825:6;22817:15;;;;;;;;;;;;;;;:41;;;;22755:115;22884:11;:22;22896:9;22884:22;;;;;;;;;;;;;;;;;;;;;;;;;22880:130;;;22981:1;:17;;;22962:7;:18;22970:9;22962:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;22941:7;:18;22949:9;22941:18;;;;;;;;;;;;;;;:57;;;;22880:130;23056:1;:9;;;23040:7;:15;23048:6;23040:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;23022:7;:15;23030:6;23022:15;;;;;;;;;;;;;;;:43;;;;23116:1;:17;;;23097:7;:18;23105:9;23097:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;23076:7;:18;23084:9;23076:18;;;;;;;;;;;;;;;:57;;;;23144:27;23156:1;:6;;;23164:1;:6;;;23144:11;:27::i;:::-;23182:41;23197:1;:12;;;23210:1;:12;;;23182:14;:41::i;:::-;23234:26;23244:1;:7;;;23252:1;:7;;;23234:9;:26::i;:::-;23271:35;23284:1;:10;;;23295:1;:10;;;23271:12;:35::i;:::-;23317:41;23332:1;:12;;;23345:1;:12;;;23317:14;:41::i;:::-;23391:9;23374:46;;23383:6;23374:46;;;23402:1;:17;;;23374:46;;;;;;:::i;:::-;;;;;;;;23461:4;23436:83;;23445:6;23436:83;;;23508:1;:10;;;23498:1;:7;;;23483:1;:12;;;23468:1;:12;;;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;23436:83;;;;;;:::i;:::-;;;;;;;;22551:978;;;;;;:::o;20445:540::-;20495:7;20504;20524:15;20542:7;;20524:25;;20560:15;20578:7;;20560:25;;20601:9;20596:279;20620:9;:16;;;;20616:1;:20;20596:279;;;20686:7;20662;:21;20670:9;20680:1;20670:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20662:21;;;;;;;;;;;;;;;;:31;:66;;;;20721:7;20697;:21;20705:9;20715:1;20705:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20697:21;;;;;;;;;;;;;;;;:31;20662:66;20658:97;;;20738:7;;20747;;20730:25;;;;;;;;;20658:97;20788:7;:21;20796:9;20806:1;20796:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20788:21;;;;;;;;;;;;;;;;20780:7;:29;;;;:::i;:::-;20770:39;;20842:7;:21;20850:9;20860:1;20850:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20842:21;;;;;;;;;;;;;;;;20834:7;:29;;;;:::i;:::-;20824:39;;20638:3;;;;;:::i;:::-;;;;20596:279;;;;20907:7;;20899;;:15;;;;:::i;:::-;20889:7;:25;20885:56;;;20924:7;;20933;;20916:25;;;;;;;;20885:56;20960:7;20969;20952:25;;;;;;20445:540;;;:::o;18435:1059::-;18522:28;;:::i;:::-;18569:7;18565:86;;18611:7;18591:1;:17;;:27;;;;;18631:8;;18565:86;18666:6;18663:805;;;18722:4;18705:12;:16;;;18697:7;:24;;;;:::i;:::-;:29;;;;:::i;:::-;18688:1;:6;;:38;;;;;18787:4;18764:12;:22;;;18756:7;:30;;;;:::i;:::-;:35;;;;:::i;:::-;18741:1;:12;;:50;;;;;18842:4;18824:12;:17;;;18816:7;:25;;;;:::i;:::-;:30;;;;:::i;:::-;18806:1;:7;;:40;;;;;18900:4;18879:12;:20;;;18871:7;:28;;;;:::i;:::-;:33;;;;:::i;:::-;18861:1;:7;;:43;;;;;18965:4;18942:12;:22;;;18934:7;:30;;;;:::i;:::-;:35;;;;:::i;:::-;18919:1;:12;;:50;;;;;19053:1;:10;;;19045:1;:7;;;19032:1;:12;;;19019:1;:12;;;19012:1;:6;;;19004:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:48;;;;:::i;:::-;:59;;;;:::i;:::-;18984:1;:17;;:79;;;;;18663:805;;;19134:4;19121:8;:12;;;19113:7;:20;;;;:::i;:::-;:25;;;;:::i;:::-;19104:1;:6;;:34;;;;;19195:4;19176:8;:18;;;19168:7;:26;;;;:::i;:::-;:31;;;;:::i;:::-;19153:1;:12;;:46;;;;;19246:4;19232:8;:13;;;19224:7;:21;;;;:::i;:::-;:26;;;;:::i;:::-;19214:1;:7;;:36;;;;;19297:4;19283:8;:13;;;19275:7;:21;;;;:::i;:::-;:26;;;;:::i;:::-;19265:1;:7;;:36;;;;;19358:4;19339:8;:18;;;19331:7;:26;;;;:::i;:::-;:31;;;;:::i;:::-;19316:1;:12;;:46;;;;;19446:1;:10;;;19438:1;:7;;;19425:1;:12;;;19412:1;:12;;;19405:1;:6;;;19397:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;:48;;;;:::i;:::-;:59;;;;:::i;:::-;19377:1;:17;;:79;;;;;18663:805;18435:1059;;;;;;:::o;19502:769::-;19627:15;19644:23;19669:12;19683:18;19703;19723:13;19738:16;19785:11;19777:7;:19;;;;:::i;:::-;19767:29;;19813:7;19809:73;;19842:7;19851;19860:1;19862;19864;19866;19868;19835:35;;;;;;;;;;;;;;;;19809:73;19908:11;19901:1;:6;;;:18;;;;:::i;:::-;19894:25;;19956:11;19943:1;:12;;;:24;;;;:::i;:::-;19930:37;;19994:11;19986:1;:7;;;:19;;;;:::i;:::-;19978:27;;20038:11;20027:1;:10;;;:22;;;;:::i;:::-;20016:33;;20086:11;20073:1;:12;;;:24;;;;:::i;:::-;20060:37;;20168:8;20162:5;20151:10;20140;20135:4;20127:7;:12;;;;:::i;:::-;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:40;;;;:::i;:::-;:49;;;;:::i;:::-;20108:68;;19502:769;;;;;;;;;;;;;:::o;25965:564::-;26091:21;26129:1;26115:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26091:40;;26160:4;26142;26147:1;26142:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26186:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26176:4;26181:1;26176:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26212:53;26229:4;26244:6;;;;;;;;;;;26253:11;26212:8;:53::i;:::-;26304:6;;;;;;;;;;;:57;;;26376:11;26402:1;26446:4;26473;26493:15;26304:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25965:564;;:::o;25459:498::-;25607:53;25624:4;25639:6;;;;;;;;;;;25648:11;25607:8;:53::i;:::-;25703:6;;;;;;;;;;;:22;;;25733:9;25766:4;25786:11;25812:1;25855;25906;25923:15;25703:246;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25459:498;;:::o;16779:123::-;16857:4;16847:7;;:14;;;;;;;:::i;:::-;;;;;;;;16890:4;16872:11;:15;;;:22;;;;;;;:::i;:::-;;;;;;;;16779:123;;:::o;16910:275::-;17017:10;16993:11;:21;;;:34;;;;;;;:::i;:::-;;;;;;;;17041:11;:26;17061:4;17041:26;;;;;;;;;;;;;;;;;;;;;;;;;17038:92;;;17108:10;17084:7;:22;17100:4;17084:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;17038:92;17165:10;17140:7;:22;17156:4;17140:22;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;16910:275;;:::o;17193:240::-;17280:5;17261:11;:16;;;:24;;;;;;;:::i;:::-;;;;;;;;17299:11;:26;17319:4;17299:26;;;;;;;;;;;;;;;;;;;;;;;;;17296:87;;;17366:5;17342:7;:22;17358:4;17342:22;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;17296:87;17418:5;17393:7;:22;17409:4;17393:22;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17193:240;;:::o;17441:261::-;17540:8;17518:11;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;17562:11;:26;17582:4;17562:26;;;;;;;;;;;;;;;;;;;;;;;;;17559:90;;;17629:8;17605:7;:22;17621:4;17605:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;17559:90;17684:8;17659:7;:22;17675:4;17659:22;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;17441:261;;:::o;17710:284::-;17817:10;17793:11;:21;;;:34;;;;;;;:::i;:::-;;;;;;;;17843:11;:26;17863:4;17843:26;;;;;;;;;;;;;;;;;;;;;;;;;17840:101;;;17919:10;17895:7;:22;17911:4;17895:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;17840:101;17976:10;17951:7;:22;17967:4;17951:22;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;17710:284;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:161::-;5623:52;5669:5;5623:52;:::i;:::-;5618:3;5611:65;5601:81;;:::o;5688:147::-;5783:45;5822:5;5783:45;:::i;:::-;5778:3;5771:58;5761:74;;:::o;5841:364::-;;5957:39;5990:5;5957:39;:::i;:::-;6012:71;6076:6;6071:3;6012:71;:::i;:::-;6005:78;;6092:52;6137:6;6132:3;6125:4;6118:5;6114:16;6092:52;:::i;:::-;6169:29;6191:6;6169:29;:::i;:::-;6164:3;6160:39;6153:46;;5933:272;;;;;:::o;6211:366::-;;6374:67;6438:2;6433:3;6374:67;:::i;:::-;6367:74;;6450:93;6539:3;6450:93;:::i;:::-;6568:2;6563:3;6559:12;6552:19;;6357:220;;;:::o;6583:366::-;;6746:67;6810:2;6805:3;6746:67;:::i;:::-;6739:74;;6822:93;6911:3;6822:93;:::i;:::-;6940:2;6935:3;6931:12;6924:19;;6729:220;;;:::o;6955:366::-;;7118:67;7182:2;7177:3;7118:67;:::i;:::-;7111:74;;7194:93;7283:3;7194:93;:::i;:::-;7312:2;7307:3;7303:12;7296:19;;7101:220;;;:::o;7327:366::-;;7490:67;7554:2;7549:3;7490:67;:::i;:::-;7483:74;;7566:93;7655:3;7566:93;:::i;:::-;7684:2;7679:3;7675:12;7668:19;;7473:220;;;:::o;7699:366::-;;7862:67;7926:2;7921:3;7862:67;:::i;:::-;7855:74;;7938:93;8027:3;7938:93;:::i;:::-;8056:2;8051:3;8047:12;8040:19;;7845:220;;;:::o;8071:366::-;;8234:67;8298:2;8293:3;8234:67;:::i;:::-;8227:74;;8310:93;8399:3;8310:93;:::i;:::-;8428:2;8423:3;8419:12;8412:19;;8217:220;;;:::o;8443:366::-;;8606:67;8670:2;8665:3;8606:67;:::i;:::-;8599:74;;8682:93;8771:3;8682:93;:::i;:::-;8800:2;8795:3;8791:12;8784:19;;8589:220;;;:::o;8815:366::-;;8978:67;9042:2;9037:3;8978:67;:::i;:::-;8971:74;;9054:93;9143:3;9054:93;:::i;:::-;9172:2;9167:3;9163:12;9156:19;;8961:220;;;:::o;9187:366::-;;9350:67;9414:2;9409:3;9350:67;:::i;:::-;9343:74;;9426:93;9515:3;9426:93;:::i;:::-;9544:2;9539:3;9535:12;9528:19;;9333:220;;;:::o;9559:366::-;;9722:67;9786:2;9781:3;9722:67;:::i;:::-;9715:74;;9798:93;9887:3;9798:93;:::i;:::-;9916:2;9911:3;9907:12;9900:19;;9705:220;;;:::o;9931:366::-;;10094:67;10158:2;10153:3;10094:67;:::i;:::-;10087:74;;10170:93;10259:3;10170:93;:::i;:::-;10288:2;10283:3;10279:12;10272:19;;10077:220;;;:::o;10303:366::-;;10466:67;10530:2;10525:3;10466:67;:::i;:::-;10459:74;;10542:93;10631:3;10542:93;:::i;:::-;10660:2;10655:3;10651:12;10644:19;;10449:220;;;:::o;10675:366::-;;10838:67;10902:2;10897:3;10838:67;:::i;:::-;10831:74;;10914:93;11003:3;10914:93;:::i;:::-;11032:2;11027:3;11023:12;11016:19;;10821:220;;;:::o;11047:366::-;;11210:67;11274:2;11269:3;11210:67;:::i;:::-;11203:74;;11286:93;11375:3;11286:93;:::i;:::-;11404:2;11399:3;11395:12;11388:19;;11193:220;;;:::o;11419:366::-;;11582:67;11646:2;11641:3;11582:67;:::i;:::-;11575:74;;11658:93;11747:3;11658:93;:::i;:::-;11776:2;11771:3;11767:12;11760:19;;11565:220;;;:::o;11791:366::-;;11954:67;12018:2;12013:3;11954:67;:::i;:::-;11947:74;;12030:93;12119:3;12030:93;:::i;:::-;12148:2;12143:3;12139:12;12132:19;;11937:220;;;:::o;12163:366::-;;12326:67;12390:2;12385:3;12326:67;:::i;:::-;12319:74;;12402:93;12491:3;12402:93;:::i;:::-;12520:2;12515:3;12511:12;12504:19;;12309:220;;;:::o;12535:366::-;;12698:67;12762:2;12757:3;12698:67;:::i;:::-;12691:74;;12774:93;12863:3;12774:93;:::i;:::-;12892:2;12887:3;12883:12;12876:19;;12681:220;;;:::o;12907:118::-;12994:24;13012:5;12994:24;:::i;:::-;12989:3;12982:37;12972:53;;:::o;13031:112::-;13114:22;13130:5;13114:22;:::i;:::-;13109:3;13102:35;13092:51;;:::o;13149:222::-;;13280:2;13269:9;13265:18;13257:26;;13293:71;13361:1;13350:9;13346:17;13337:6;13293:71;:::i;:::-;13247:124;;;;:::o;13377:332::-;;13536:2;13525:9;13521:18;13513:26;;13549:71;13617:1;13606:9;13602:17;13593:6;13549:71;:::i;:::-;13630:72;13698:2;13687:9;13683:18;13674:6;13630:72;:::i;:::-;13503:206;;;;;:::o;13715:807::-;;14002:3;13991:9;13987:19;13979:27;;14016:71;14084:1;14073:9;14069:17;14060:6;14016:71;:::i;:::-;14097:72;14165:2;14154:9;14150:18;14141:6;14097:72;:::i;:::-;14179:80;14255:2;14244:9;14240:18;14231:6;14179:80;:::i;:::-;14269;14345:2;14334:9;14330:18;14321:6;14269:80;:::i;:::-;14359:73;14427:3;14416:9;14412:19;14403:6;14359:73;:::i;:::-;14442;14510:3;14499:9;14495:19;14486:6;14442:73;:::i;:::-;13969:553;;;;;;;;;:::o;14528:210::-;;14653:2;14642:9;14638:18;14630:26;;14666:65;14728:1;14717:9;14713:17;14704:6;14666:65;:::i;:::-;14620:118;;;;:::o;14744:252::-;;14890:2;14879:9;14875:18;14867:26;;14903:86;14986:1;14975:9;14971:17;14962:6;14903:86;:::i;:::-;14857:139;;;;:::o;15002:313::-;;15153:2;15142:9;15138:18;15130:26;;15202:9;15196:4;15192:20;15188:1;15177:9;15173:17;15166:47;15230:78;15303:4;15294:6;15230:78;:::i;:::-;15222:86;;15120:195;;;;:::o;15321:419::-;;15525:2;15514:9;15510:18;15502:26;;15574:9;15568:4;15564:20;15560:1;15549:9;15545:17;15538:47;15602:131;15728:4;15602:131;:::i;:::-;15594:139;;15492:248;;;:::o;15746:419::-;;15950:2;15939:9;15935:18;15927:26;;15999:9;15993:4;15989:20;15985:1;15974:9;15970:17;15963:47;16027:131;16153:4;16027:131;:::i;:::-;16019:139;;15917:248;;;:::o;16171:419::-;;16375:2;16364:9;16360:18;16352:26;;16424:9;16418:4;16414:20;16410:1;16399:9;16395:17;16388:47;16452:131;16578:4;16452:131;:::i;:::-;16444:139;;16342:248;;;:::o;16596:419::-;;16800:2;16789:9;16785:18;16777:26;;16849:9;16843:4;16839:20;16835:1;16824:9;16820:17;16813:47;16877:131;17003:4;16877:131;:::i;:::-;16869:139;;16767:248;;;:::o;17021:419::-;;17225:2;17214:9;17210:18;17202:26;;17274:9;17268:4;17264:20;17260:1;17249:9;17245:17;17238:47;17302:131;17428:4;17302:131;:::i;:::-;17294:139;;17192:248;;;:::o;17446:419::-;;17650:2;17639:9;17635:18;17627:26;;17699:9;17693:4;17689:20;17685:1;17674:9;17670:17;17663:47;17727:131;17853:4;17727:131;:::i;:::-;17719:139;;17617:248;;;:::o;17871:419::-;;18075:2;18064:9;18060:18;18052:26;;18124:9;18118:4;18114:20;18110:1;18099:9;18095:17;18088:47;18152:131;18278:4;18152:131;:::i;:::-;18144:139;;18042:248;;;:::o;18296:419::-;;18500:2;18489:9;18485:18;18477:26;;18549:9;18543:4;18539:20;18535:1;18524:9;18520:17;18513:47;18577:131;18703:4;18577:131;:::i;:::-;18569:139;;18467:248;;;:::o;18721:419::-;;18925:2;18914:9;18910:18;18902:26;;18974:9;18968:4;18964:20;18960:1;18949:9;18945:17;18938:47;19002:131;19128:4;19002:131;:::i;:::-;18994:139;;18892:248;;;:::o;19146:419::-;;19350:2;19339:9;19335:18;19327:26;;19399:9;19393:4;19389:20;19385:1;19374:9;19370:17;19363:47;19427:131;19553:4;19427:131;:::i;:::-;19419:139;;19317:248;;;:::o;19571:419::-;;19775:2;19764:9;19760:18;19752:26;;19824:9;19818:4;19814:20;19810:1;19799:9;19795:17;19788:47;19852:131;19978:4;19852:131;:::i;:::-;19844:139;;19742:248;;;:::o;19996:419::-;;20200:2;20189:9;20185:18;20177:26;;20249:9;20243:4;20239:20;20235:1;20224:9;20220:17;20213:47;20277:131;20403:4;20277:131;:::i;:::-;20269:139;;20167:248;;;:::o;20421:419::-;;20625:2;20614:9;20610:18;20602:26;;20674:9;20668:4;20664:20;20660:1;20649:9;20645:17;20638:47;20702:131;20828:4;20702:131;:::i;:::-;20694:139;;20592:248;;;:::o;20846:419::-;;21050:2;21039:9;21035:18;21027:26;;21099:9;21093:4;21089:20;21085:1;21074:9;21070:17;21063:47;21127:131;21253:4;21127:131;:::i;:::-;21119:139;;21017:248;;;:::o;21271:419::-;;21475:2;21464:9;21460:18;21452:26;;21524:9;21518:4;21514:20;21510:1;21499:9;21495:17;21488:47;21552:131;21678:4;21552:131;:::i;:::-;21544:139;;21442:248;;;:::o;21696:419::-;;21900:2;21889:9;21885:18;21877:26;;21949:9;21943:4;21939:20;21935:1;21924:9;21920:17;21913:47;21977:131;22103:4;21977:131;:::i;:::-;21969:139;;21867:248;;;:::o;22121:419::-;;22325:2;22314:9;22310:18;22302:26;;22374:9;22368:4;22364:20;22360:1;22349:9;22345:17;22338:47;22402:131;22528:4;22402:131;:::i;:::-;22394:139;;22292:248;;;:::o;22546:419::-;;22750:2;22739:9;22735:18;22727:26;;22799:9;22793:4;22789:20;22785:1;22774:9;22770:17;22763:47;22827:131;22953:4;22827:131;:::i;:::-;22819:139;;22717:248;;;:::o;22971:222::-;;23102:2;23091:9;23087:18;23079:26;;23115:71;23183:1;23172:9;23168:17;23159:6;23115:71;:::i;:::-;23069:124;;;;:::o;23199:831::-;;23500:3;23489:9;23485:19;23477:27;;23514:71;23582:1;23571:9;23567:17;23558:6;23514:71;:::i;:::-;23595:80;23671:2;23660:9;23656:18;23647:6;23595:80;:::i;:::-;23722:9;23716:4;23712:20;23707:2;23696:9;23692:18;23685:48;23750:108;23853:4;23844:6;23750:108;:::i;:::-;23742:116;;23868:72;23936:2;23925:9;23921:18;23912:6;23868:72;:::i;:::-;23950:73;24018:3;24007:9;24003:19;23994:6;23950:73;:::i;:::-;23467:563;;;;;;;;:::o;24036:664::-;;24279:3;24268:9;24264:19;24256:27;;24293:71;24361:1;24350:9;24346:17;24337:6;24293:71;:::i;:::-;24374:72;24442:2;24431:9;24427:18;24418:6;24374:72;:::i;:::-;24456;24524:2;24513:9;24509:18;24500:6;24456:72;:::i;:::-;24538;24606:2;24595:9;24591:18;24582:6;24538:72;:::i;:::-;24620:73;24688:3;24677:9;24673:19;24664:6;24620:73;:::i;:::-;24246:454;;;;;;;;:::o;24706:214::-;;24833:2;24822:9;24818:18;24810:26;;24846:67;24910:1;24899:9;24895:17;24886:6;24846:67;:::i;:::-;24800:120;;;;:::o;24926:132::-;;25016:3;25008:11;;25046:4;25041:3;25037:14;25029:22;;24998:60;;;:::o;25064:114::-;;25165:5;25159:12;25149:22;;25138:40;;;:::o;25184:99::-;;25270:5;25264:12;25254:22;;25243:40;;;:::o;25289:113::-;;25391:4;25386:3;25382:14;25374:22;;25364:38;;;:::o;25408:184::-;;25541:6;25536:3;25529:19;25581:4;25576:3;25572:14;25557:29;;25519:73;;;;:::o;25598:169::-;;25716:6;25711:3;25704:19;25756:4;25751:3;25747:14;25732:29;;25694:73;;;;:::o;25773:305::-;;25832:20;25850:1;25832:20;:::i;:::-;25827:25;;25866:20;25884:1;25866:20;:::i;:::-;25861:25;;26020:1;25952:66;25948:74;25945:1;25942:81;25939:2;;;26026:18;;:::i;:::-;25939:2;26070:1;26067;26063:9;26056:16;;25817:261;;;;:::o;26084:185::-;;26141:20;26159:1;26141:20;:::i;:::-;26136:25;;26175:20;26193:1;26175:20;:::i;:::-;26170:25;;26214:1;26204:2;;26219:18;;:::i;:::-;26204:2;26261:1;26258;26254:9;26249:14;;26126:143;;;;:::o;26275:848::-;;;26367:6;26358:15;;26391:5;26382:14;;26405:712;26426:1;26416:8;26413:15;26405:712;;;26521:4;26516:3;26512:14;26506:4;26503:24;26500:2;;;26530:18;;:::i;:::-;26500:2;26580:1;26570:8;26566:16;26563:2;;;26995:4;26988:5;26984:16;26975:25;;26563:2;27045:4;27039;27035:15;27027:23;;27075:32;27098:8;27075:32;:::i;:::-;27063:44;;26405:712;;;26348:775;;;;;;;:::o;27129:281::-;;27211:23;27229:4;27211:23;:::i;:::-;27203:31;;27255:25;27271:8;27255:25;:::i;:::-;27243:37;;27299:104;27336:66;27326:8;27320:4;27299:104;:::i;:::-;27290:113;;27193:217;;;;:::o;27416:1073::-;;27661:8;27651:2;;27682:1;27673:10;;27684:5;;27651:2;27710:4;27700:2;;27727:1;27718:10;;27729:5;;27700:2;27796:4;27844:1;27839:27;;;;27880:1;27875:191;;;;27789:277;;27839:27;27857:1;27848:10;;27859:5;;;27875:191;27920:3;27910:8;27907:17;27904:2;;;27927:18;;:::i;:::-;27904:2;27976:8;27973:1;27969:16;27960:25;;28011:3;28004:5;28001:14;27998:2;;;28018:18;;:::i;:::-;27998:2;28051:5;;;27789:277;;28175:2;28165:8;28162:16;28156:3;28150:4;28147:13;28143:36;28125:2;28115:8;28112:16;28107:2;28101:4;28098:12;28094:35;28078:111;28075:2;;;28231:8;28225:4;28221:19;28212:28;;28266:3;28259:5;28256:14;28253:2;;;28273:18;;:::i;:::-;28253:2;28306:5;;28075:2;28346:42;28384:3;28374:8;28368:4;28365:1;28346:42;:::i;:::-;28331:57;;;;28420:4;28415:3;28411:14;28404:5;28401:25;28398:2;;;28429:18;;:::i;:::-;28398:2;28478:4;28471:5;28467:16;28458:25;;27476:1013;;;;;;:::o;28495:348::-;;28558:20;28576:1;28558:20;:::i;:::-;28553:25;;28592:20;28610:1;28592:20;:::i;:::-;28587:25;;28780:1;28712:66;28708:74;28705:1;28702:81;28697:1;28690:9;28683:17;28679:105;28676:2;;;28787:18;;:::i;:::-;28676:2;28835:1;28832;28828:9;28817:20;;28543:300;;;;:::o;28849:191::-;;28909:20;28927:1;28909:20;:::i;:::-;28904:25;;28943:20;28961:1;28943:20;:::i;:::-;28938:25;;28982:1;28979;28976:8;28973:2;;;28987:18;;:::i;:::-;28973:2;29032:1;29029;29025:9;29017:17;;28894:146;;;;:::o;29046:96::-;;29112:24;29130:5;29112:24;:::i;:::-;29101:35;;29091:51;;;:::o;29148:90::-;;29225:5;29218:13;29211:21;29200:32;;29190:48;;;:::o;29244:126::-;;29321:42;29314:5;29310:54;29299:65;;29289:81;;;:::o;29376:77::-;;29442:5;29431:16;;29421:32;;;:::o;29459:86::-;;29534:4;29527:5;29523:16;29512:27;;29502:43;;;:::o;29551:156::-;;29649:52;29695:5;29649:52;:::i;:::-;29636:65;;29626:81;;;:::o;29713:128::-;;29811:24;29829:5;29811:24;:::i;:::-;29798:37;;29788:53;;;:::o;29847:121::-;;29938:24;29956:5;29938:24;:::i;:::-;29925:37;;29915:53;;;:::o;29974:307::-;30042:1;30052:113;30066:6;30063:1;30060:13;30052:113;;;30151:1;30146:3;30142:11;30136:18;30132:1;30127:3;30123:11;30116:39;30088:2;30085:1;30081:10;30076:15;;30052:113;;;30183:6;30180:1;30177:13;30174:2;;;30263:1;30254:6;30249:3;30245:16;30238:27;30174:2;30023:258;;;;:::o;30287:233::-;;30349:24;30367:5;30349:24;:::i;:::-;30340:33;;30395:66;30388:5;30385:77;30382:2;;;30465:18;;:::i;:::-;30382:2;30512:1;30505:5;30501:13;30494:20;;30330:190;;;:::o;30526:180::-;30574:77;30571:1;30564:88;30671:4;30668:1;30661:15;30695:4;30692:1;30685:15;30712:180;30760:77;30757:1;30750:88;30857:4;30854:1;30847:15;30881:4;30878:1;30871:15;30898:102;;30990:2;30986:7;30981:2;30974:5;30970:14;30966:28;30956:38;;30946:54;;;:::o;31006:102::-;;31095:5;31092:1;31088:13;31067:34;;31057:51;;;:::o;31114:222::-;31254:34;31250:1;31242:6;31238:14;31231:58;31323:5;31318:2;31310:6;31306:15;31299:30;31220:116;:::o;31342:236::-;31482:34;31478:1;31470:6;31466:14;31459:58;31551:19;31546:2;31538:6;31534:15;31527:44;31448:130;:::o;31584:229::-;31724:34;31720:1;31712:6;31708:14;31701:58;31793:12;31788:2;31780:6;31776:15;31769:37;31690:123;:::o;31819:225::-;31959:34;31955:1;31947:6;31943:14;31936:58;32028:8;32023:2;32015:6;32011:15;32004:33;31925:119;:::o;32050:221::-;32190:34;32186:1;32178:6;32174:14;32167:58;32259:4;32254:2;32246:6;32242:15;32235:29;32156:115;:::o;32277:177::-;32417:29;32413:1;32405:6;32401:14;32394:53;32383:71;:::o;32460:173::-;32600:25;32596:1;32588:6;32584:14;32577:49;32566:67;:::o;32639:226::-;32779:34;32775:1;32767:6;32763:14;32756:58;32848:9;32843:2;32835:6;32831:15;32824:34;32745:120;:::o;32871:181::-;33011:33;33007:1;32999:6;32995:14;32988:57;32977:75;:::o;33058:182::-;33198:34;33194:1;33186:6;33182:14;33175:58;33164:76;:::o;33246:174::-;33386:26;33382:1;33374:6;33370:14;33363:50;33352:68;:::o;33426:228::-;33566:34;33562:1;33554:6;33550:14;33543:58;33635:11;33630:2;33622:6;33618:15;33611:36;33532:122;:::o;33660:224::-;33800:34;33796:1;33788:6;33784:14;33777:58;33869:7;33864:2;33856:6;33852:15;33845:32;33766:118;:::o;33890:223::-;34030:34;34026:1;34018:6;34014:14;34007:58;34099:6;34094:2;34086:6;34082:15;34075:31;33996:117;:::o;34119:180::-;34259:32;34255:1;34247:6;34243:14;34236:56;34225:74;:::o;34305:227::-;34445:34;34441:1;34433:6;34429:14;34422:58;34514:10;34509:2;34501:6;34497:15;34490:35;34411:121;:::o;34538:231::-;34678:34;34674:1;34666:6;34662:14;34655:58;34747:14;34742:2;34734:6;34730:15;34723:39;34644:125;:::o;34775:220::-;34915:34;34911:1;34903:6;34899:14;34892:58;34984:3;34979:2;34971:6;34967:15;34960:28;34881:114;:::o;35001:122::-;35074:24;35092:5;35074:24;:::i;:::-;35067:5;35064:35;35054:2;;35113:1;35110;35103:12;35054:2;35044:79;:::o;35129:116::-;35199:21;35214:5;35199:21;:::i;:::-;35192:5;35189:32;35179:2;;35235:1;35232;35225:12;35179:2;35169:76;:::o;35251:122::-;35324:24;35342:5;35324:24;:::i;:::-;35317:5;35314:35;35304:2;;35363:1;35360;35353:12;35304:2;35294:79;:::o

Swarm Source

ipfs://880e6bd86a4d89f43b8e3b72ceeef986b69ec0ac31e2152af7c78ca686c451f4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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