ETH Price: $2,517.76 (+0.42%)

Token

JIANGLI (JIANGLI)
 

Overview

Max Total Supply

100,000 JIANGLI

Holders

74

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
64.016538869 JIANGLI

Value
$0.00
0x06f65cf6543728b111f2a8541f51aa99a60181bd
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
JIANGLI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-07
*/

//TG: https://t.me/Jiangli_ETH
//WEB: https://Jiangli.io
//TWITTER: https://twitter.com/JiangliEth

pragma solidity ^0.8.19;
// SPDX-License-Identifier: Unlicensed
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 SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

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

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

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

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

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

    
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {
 
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

}

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

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] memory path) external view returns (uint[] memory amounts);
}


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

    event HolderBuySell(address holder, string actionType, uint256 ethAmount, uint256 ethBalance);
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private botWallets;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromRewards;
    string private _name = "JIANGLI";
    string private _symbol = "JIANGLI";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 100_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public ethPriceToSwap = .4 ether;
    uint256 public highSellFeeSwapAmount = 3 ether;
    uint256 public _maxWalletAmount = 2000 * 10 ** _decimals;
    address public jTreasuryAddress = 0x9FEa6FF2FadB0Bad098754489cBB1Acc2F468A80;
    address developmentAddress = 0xee093e11A09E3C4B9667860F83f46346FA8B75BE;
    address public deadWallet = address(0xdead);
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    IterableMapping private holderBalanceMap = new IterableMapping();
    
    struct Distribution {
        uint256 jTreasury;
        uint256 development;
        uint256 jiangliDividend;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 highSellFee;
    }

    TaxFees public taxFees;
    DividendTracker public dividendTracker;
    Distribution public distribution = Distribution(50,50,0);

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[deadWallet] = true;
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
        taxFees = TaxFees(30, 35, 35);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[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].add(addedValue));
        return true;
    }

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

    function ethHolderBalance(address account) public view returns (uint) {
        return holderBalanceMap.get(account);
    }
    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns (bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function setHighSellFeeSwapAmount(uint256 ethAmount) external onlyOwner {
        highSellFeeSwapAmount = ethAmount;
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 highSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.highSellFee = highSellFee;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if (doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

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

    receive() external payable {}

    function getTokenAmountByEthPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

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

    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");
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        uint256 taxAmount = 0;
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if (from != owner() && to != owner() && to != deadWallet && from != address(this) && to != address(this)) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");

            if (from == uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) :  0;
                uint ethBuy = getEthValueFromTokens(amount);
                uint newBalance = holderBalanceMap.get(to).add(ethBuy);
                holderBalanceMap.set(to, newBalance);
                emit HolderBuySell(to, "BUY", ethBuy,  newBalance);
            }
            if (from != uniswapV2Pair && to == uniswapV2Pair) {
                taxAmount = takeFees ? amount.mul(taxFees.sellFee).div(100) : 0;
                uint ethSell = getEthValueFromTokens(amount);
                if(taxAmount > 0 && ethSell > highSellFeeSwapAmount) {
                    taxAmount = taxFees.highSellFee;
                }
                int val = int(holderBalanceMap.get(from)) - int(ethSell);
                uint256 newBalance = val <= 0 ? 0 : uint256(val);
                holderBalanceMap.set(from, newBalance);
                emit HolderBuySell(from, "SELL", ethSell,  newBalance);
                swapTokens();
            }
            if (from != uniswapV2Pair && to != uniswapV2Pair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }

            try dividendTracker.setTokenBalance(from) {} catch{}
            try dividendTracker.setTokenBalance(to) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, amount);
    }

    function airDrops(address[] calldata holders, uint256[] calldata amounts) external onlyOwner {
        require(holders.length == amounts.length, "Holders and amounts must be the same count");
        address from = _msgSender();
        for(uint256 i=0; i < holders.length; i++) {
            address to = holders[i];
            uint256 amount = amounts[i];
            _balances[from] = _balances[from].sub(amount);
            _balances[to] = _balances[to].add(amount);
            emit Transfer(from, to, amount);
        }
    }

    function swapTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                swapTokensForEth(tokenAmount);
                distributeShares();
            }
        }
    }

    function getEthValueFromTokens(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsIn(tokenAmount, path)[0];
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares() private lockTheSwap {
        uint256 ethBalance = address(this).balance;
        uint256 jTreasury = ethBalance.mul(distribution.jTreasury).div(100);
        uint256 development = ethBalance.mul(distribution.development).div(100);
        uint256 jiangliDividend = ethBalance.mul(distribution.jiangliDividend).div(100);
        
        payable(jTreasuryAddress).transfer(jTreasury);
        payable(developmentAddress).transfer(development);
        sendEthDividends(jiangliDividend);
    }

    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
                distributeShares();
            }
        }
    }

    function setDistribution(uint256 jTreasury, uint256 development, uint256 jiangliDividend) external onlyOwner {
        distribution.jTreasury = jTreasury;
        distribution.development = development;
        distribution.jiangliDividend = jiangliDividend;
    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function removeEthFromContract() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

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

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

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

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

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

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

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

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

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "JIANGLI REWARDS";
    string private _symbol = "JIANGLIREWARDS";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    JIANGLI private jiangli;

    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
    IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IERC20 public jiangliToken = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); //USDT

    struct EthDividendTiers {
        uint tier7;
        uint tier6;
        uint tier5;
        uint tier4;
        uint tier3;
        uint tier2;
        uint tier1;
    }

    struct TierLevels {
        uint level1;
        uint level2;
        uint level3;
        uint level4;
        uint level5;
        uint level6;
        uint level7;

    }
    EthDividendTiers public ethDividendTiers;
    TierLevels public tierLevels;
    constructor() {

        ethDividendTiers = EthDividendTiers(
            8 ether,
            4 ether,
            2 ether,
            1 ether,
            .5 ether,
            .25 ether,
            .1 ether);

        tierLevels = TierLevels(
            1 ether,
            2 ether,
            3 ether,
            4 ether,
            5 ether,
            6 ether,
            8 ether);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

    function updateTierLevels( TierLevels memory _tierLevels) external onlyOwner {
        tierLevels = _tierLevels;

    }

    function updateEthDividendTier(EthDividendTiers memory _dividendTiers) external onlyOwner {
        ethDividendTiers = _dividendTiers;
    }

    function getEthTier(uint256 amount) public view returns (uint, string memory) {
        uint tierLevel = 0;
        string memory tier = "Not Eligible";
        if(amount >= ethDividendTiers.tier1) {
            tierLevel = .1 ether;
            tier = "Fortune Seeker";
        } 
        if(amount >= ethDividendTiers.tier2) {
            tierLevel = .25 ether;
            tier = "Abundance Enthusiast";
        } 
        if(amount >= ethDividendTiers.tier3) {
            tierLevel = .5 ether;
            tier = "Prosperity Advocate";
        } 
        if(amount >= ethDividendTiers.tier4) {
            tierLevel = 1 ether;
            tier = "Weahlth Architect";
        } 
        if(amount >= ethDividendTiers.tier5) {
            tierLevel = 2 ether;
            tier = "Bounty Seeker";
        } 
        if(amount >= ethDividendTiers.tier6) {
            tierLevel = 4 ether;
            tier = "Virtuous Benefactor";
        } 
        if(amount >= ethDividendTiers.tier7) {
            tierLevel = 8 ether;
            tier = "Sumpreme Luminary";
        } 
        return (tierLevel, tier);
    }

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

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

    function _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 setTokenBalance(address account) public {
        uint256 balance = jiangli.ethHolderBalance(account);
        if (!jiangli.isExcludedFromRewards(account)) {
            (uint tierLevel,) = getEthTier(balance);
            if (tierLevel > 0) {
                _setBalance(account, tierLevel);
                tokenHoldersMap.set(account, tierLevel);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if (balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function updateTokenBalances(address[] memory accounts) external {
        uint256 index = 0;
        while (index < accounts.length) {
            setTokenBalance(accounts[index]);
            index += 1;
        }
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

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

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

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

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        jiangli = JIANGLI(payable(contractAddr));
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);
        uint256 initialBalance = jiangliToken.balanceOf(address(this));
        swapEthForJIANGLI(msg.value);
        uint256 newBalance = jiangliToken.balanceOf(address(this)).sub(initialBalance);
        if (newBalance > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (newBalance).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, newBalance);
            totalDividendsDistributed = totalDividendsDistributed.add(newBalance);
        }
    }

    function swapEthForJIANGLI(uint256 ethAmount) public {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(jiangliToken);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(this),
            block.timestamp
        );
    }


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

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            jiangliToken.transfer(user, _withdrawableDividend);
            return _withdrawableDividend;
        }
        return 0;
    }

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

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

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

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


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

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

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

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

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

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

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

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function airDropJIANGLI(address[] calldata holders, uint256[] calldata amounts) external onlyOwner {
        require(holders.length == amounts.length, "Holders and amounts must be the same count");
        for(uint256 i=0; i < holders.length; i++) {
            address to = holders[i];
            uint256 jiangliAmount = amounts[i];
            jiangliToken.transfer(to, jiangliAmount);
        }
    }
    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }

    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    //This should never be used, but available in case of unforseen issues
    function sendJIANGLIBack() external onlyOwner {
        uint256 jiangliBalance = jiangliToken.balanceOf(address(this));
        jiangliToken.transfer(owner(), jiangliBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"string","name":"actionType","type":"string"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethBalance","type":"uint256"}],"name":"HolderBuySell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"holders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"jTreasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"jiangliDividend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ethHolderBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthValueFromTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highSellFeeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jTreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEthFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"jTreasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"jiangliDividend","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"setHighSellFeeSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"highSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"highSellFee","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":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f4a49414e474c490000000000000000000000000000000000000000000000000081525060089081620000e1919062000baf565b506040518060400160405280600781526020017f4a49414e474c49000000000000000000000000000000000000000000000000008152506009908162000128919062000baf565b506009600a60006101000a81548160ff021916908360ff160217905550600a60009054906101000a900460ff16600a62000163919062000e26565b620186a062000173919062000e77565b600b556001600c60016101000a81548160ff02191690831515021790555067058d15e176280000600d556729a2241af62c0000600e55600a60009054906101000a900460ff16600a620001c7919062000e26565b6107d0620001d6919062000e77565b600f55739fea6ff2fadb0bad098754489cbb1acc2f468a80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ee093e11a09e3c4b9667860f83f46346fa8b75be601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c350601355604051620002da9062000927565b604051809103906000f080158015620002f7573d6000803e3d6000fd5b50601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060328152602001603281526020016000815250601960008201518160000155602082015181600101556040820151816002015550503480156200038557600080fd5b50600062000398620008f660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b54600360006200044d620008f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620004a1620008fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600062000508620008fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000641573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000667919062000f2c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000717919062000f2c565b6040518363ffffffff1660e01b81526004016200073692919062000f6f565b6020604051808303816000875af115801562000756573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077c919062000f2c565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060600160405280601e8152602001602381526020016023815250601560008201518160000155602082015181600101556040820151816002015590505062000887620008f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620008e8919062000fad565b60405180910390a362000fca565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b08806200686d83390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009b757607f821691505b602082108103620009cd57620009cc6200096f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009f8565b62000a438683620009f8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a9062000a8a62000a848462000a5b565b62000a65565b62000a5b565b9050919050565b6000819050919050565b62000aac8362000a6f565b62000ac462000abb8262000a97565b84845462000a05565b825550505050565b600090565b62000adb62000acc565b62000ae881848462000aa1565b505050565b5b8181101562000b105762000b0460008262000ad1565b60018101905062000aee565b5050565b601f82111562000b5f5762000b2981620009d3565b62000b3484620009e8565b8101602085101562000b44578190505b62000b5c62000b5385620009e8565b83018262000aed565b50505b505050565b600082821c905092915050565b600062000b846000198460080262000b64565b1980831691505092915050565b600062000b9f838362000b71565b9150826002028217905092915050565b62000bba8262000935565b67ffffffffffffffff81111562000bd65762000bd562000940565b5b62000be282546200099e565b62000bef82828562000b14565b600060209050601f83116001811462000c27576000841562000c12578287015190505b62000c1e858262000b91565b86555062000c8e565b601f19841662000c3786620009d3565b60005b8281101562000c615784890151825560018201915060208501945060208101905062000c3a565b8683101562000c81578489015162000c7d601f89168262000b71565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d245780860481111562000cfc5762000cfb62000c96565b5b600185161562000d0c5780820291505b808102905062000d1c8562000cc5565b945062000cdc565b94509492505050565b60008262000d3f576001905062000e12565b8162000d4f576000905062000e12565b816001811462000d68576002811462000d735762000da9565b600191505062000e12565b60ff84111562000d885762000d8762000c96565b5b8360020a91508482111562000da25762000da162000c96565b5b5062000e12565b5060208310610133831016604e8410600b841016171562000de35782820a90508381111562000ddd5762000ddc62000c96565b5b62000e12565b62000df2848484600162000cd2565b9250905081840481111562000e0c5762000e0b62000c96565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e338262000a5b565b915062000e408362000e19565b925062000e6f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d2d565b905092915050565b600062000e848262000a5b565b915062000e918362000a5b565b925082820262000ea18162000a5b565b9150828204841483151762000ebb5762000eba62000c96565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ef48262000ec7565b9050919050565b62000f068162000ee7565b811462000f1257600080fd5b50565b60008151905062000f268162000efb565b92915050565b60006020828403121562000f455762000f4462000ec2565b5b600062000f558482850162000f15565b91505092915050565b62000f698162000ee7565b82525050565b600060408201905062000f86600083018562000f5e565b62000f95602083018462000f5e565b9392505050565b62000fa78162000a5b565b82525050565b600060208201905062000fc4600083018462000f9c565b92915050565b6158938062000fda6000396000f3fe60806040526004361061028c5760003560e01c80636f3430521161015a57806398acb5d8116100c1578063c49b9a801161007a578063c49b9a80146109e3578063ce96fe6a14610a0c578063dcda6af314610a35578063dd62ed3e14610a5e578063e7dad4f914610a9b578063f2fde38b14610ad857610293565b806398acb5d8146108c35780639b0e2e86146108ec5780639c1b8af514610915578063a457c2d714610940578063a9059cbb1461097d578063b2abbbc4146109ba57610293565b8063871c128d11610113578063871c128d146107c55780638da5cb5b146107ee578063950c8c531461081957806395d89b41146108445780639758f61d1461086f578063979957061461089857610293565b80636f343052146106cb57806370a08231146106f4578063715018a61461073157806371cd56af1461074857806385141a771461077157806385d4787b1461079c57610293565b8063313ce567116101fe57806351bc3c85116101b757806351bc3c85146105c95780635342acb4146105e057806354a5df1f1461061d5780635ee58efc146106485780636c0a24eb146106755780636db7c64e146106a057610293565b8063313ce567146104a5578063345487d0146104d0578063395093511461050d578063441d801f1461054a57806349bd5a5e146105735780634a74bb021461059e57610293565b80631694505e116102505780631694505e146103a757806318160ddd146103d257806323b872dd146103fd57806327a14fc21461043a578063280d3821146104635780632c1f52161461047a57610293565b806306fdde0314610298578063095ea7b3146102c35780630ddc0976146103005780630e8322731461032d57806314f944bd1461036a57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b01565b6040516102ba91906141c9565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614293565b610b93565b6040516102f791906142ee565b60405180910390f35b34801561030c57600080fd5b50610315610bb1565b60405161032493929190614318565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061434f565b610bc9565b60405161036191906142ee565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c919061437c565b610c1f565b60405161039e91906143a9565b60405180910390f35b3480156103b357600080fd5b506103bc610e62565b6040516103c99190614423565b60405180910390f35b3480156103de57600080fd5b506103e7610e88565b6040516103f491906143a9565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061443e565b610e92565b60405161043191906142ee565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061437c565b610f6b565b005b34801561046f57600080fd5b50610478611019565b005b34801561048657600080fd5b5061048f611104565b60405161049c91906144c4565b60405180910390f35b3480156104b157600080fd5b506104ba61112a565b6040516104c791906144fb565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f2919061434f565b611141565b60405161050491906143a9565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190614293565b6111e6565b60405161054191906142ee565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c91906145a7565b611299565b005b34801561057f57600080fd5b5061058861133e565b6040516105959190614616565b60405180910390f35b3480156105aa57600080fd5b506105b3611364565b6040516105c091906142ee565b60405180910390f35b3480156105d557600080fd5b506105de611377565b005b3480156105ec57600080fd5b506106076004803603810190610602919061434f565b6113b7565b60405161061491906142ee565b60405180910390f35b34801561062957600080fd5b5061063261140d565b60405161063f91906143a9565b60405180910390f35b34801561065457600080fd5b5061065d611413565b60405161066c93929190614318565b60405180910390f35b34801561068157600080fd5b5061068a61142b565b60405161069791906143a9565b60405180910390f35b3480156106ac57600080fd5b506106b5611431565b6040516106c29190614616565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190614631565b611457565b005b34801561070057600080fd5b5061071b6004803603810190610716919061434f565b61150f565b60405161072891906143a9565b60405180910390f35b34801561073d57600080fd5b50610746611558565b005b34801561075457600080fd5b5061076f600480360381019061076a91906145a7565b6116ab565b005b34801561077d57600080fd5b50610786611750565b6040516107939190614616565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906147c2565b611776565b005b3480156107d157600080fd5b506107ec60048036038101906107e7919061437c565b611819565b005b3480156107fa57600080fd5b506108036118fc565b6040516108109190614616565b60405180910390f35b34801561082557600080fd5b5061082e611925565b60405161083b91906143a9565b60405180910390f35b34801561085057600080fd5b5061085961192b565b60405161086691906141c9565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190614631565b6119bd565b005b3480156108a457600080fd5b506108ad611a75565b6040516108ba91906143a9565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e5919061434f565b611cb8565b005b3480156108f857600080fd5b50610913600480360381019061090e91906147c2565b611d91565b005b34801561092157600080fd5b5061092a611e34565b60405161093791906143a9565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190614293565b611e3a565b60405161097491906142ee565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614293565b611f07565b6040516109b191906142ee565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc919061437c565b611f25565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061480b565b611fc4565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061437c565b6120ad565b005b348015610a4157600080fd5b50610a5c6004803603810190610a57919061488e565b61214c565b005b348015610a6a57600080fd5b50610a856004803603810190610a80919061490f565b612439565b604051610a9291906143a9565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061434f565b6124c0565b604051610acf91906142ee565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa919061434f565b612516565b005b606060088054610b109061497e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c9061497e565b8015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b6000610ba7610ba06126d7565b84846126df565b6001905092915050565b60158060000154908060010154908060020154905083565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600267ffffffffffffffff811115610c3d57610c3c614684565b5b604051908082528060200260200182016040528015610c6b5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906149c4565b81600081518110610d1357610d126149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610d6257610d616149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b8152600401610df9929190614ade565b600060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e3f9190614be6565b600081518110610e5257610e516149f1565b5b6020026020010151915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610e9f8484846128a8565b610f6084610eab6126d7565b610f5b8560405180606001604052806028815260200161581160289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f116126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378a9092919063ffffffff16565b6126df565b600190509392505050565b610f736126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790614c7b565b60405180910390fd5b633b9aca00816110109190614cca565b600f8190555050565b6110216126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590614c7b565b60405180910390fd5b60004790506110bb6118fc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611100573d6000803e3d6000fd5b5050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900460ff16905090565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b815260040161119e9190614616565b602060405180830381865afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190614d0c565b9050919050565b600061128f6111f36126d7565b8461128a85600460006112046126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b6126df565b6001905092915050565b6112a16126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590614c7b565b60405180910390fd5b61133983838361384c565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b60006113823061150f565b905060008111156113b457600c60009054906101000a900460ff166113b3576113aa816138f7565b6113b2613b3a565b5b5b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60198060000154908060010154908060020154905083565b600f5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61145f6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614c7b565b60405180910390fd5b826019600001819055508160196001018190555080601960020181905550505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115606126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614c7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116b36126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790614c7b565b60405180910390fd5b61174b838383613ce3565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177e6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614c7b565b60405180910390fd5b611816816001613d8e565b50565b6118216126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614c7b565b60405180910390fd5b60135481036118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614dab565b60405180910390fd5b8060138190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606009805461193a9061497e565b80601f01602080910402602001604051908101604052809291908181526020018280546119669061497e565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050905090565b6119c56126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614c7b565b60405180910390fd5b826015600001819055508160156001018190555080601560020181905550505050565b600080600267ffffffffffffffff811115611a9357611a92614684565b5b604051908082528060200260200182016040528015611ac15781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5591906149c4565b81600081518110611b6957611b686149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611bb857611bb76149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611c51929190614ade565b600060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c979190614be6565b600181518110611caa57611ca96149f1565b5b602002602001015191505090565b611cc06126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490614c7b565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d996126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90614c7b565b60405180910390fd5b611e31816000613d8e565b50565b60135481565b6000611efd611e476126d7565b84611ef8856040518060600160405280602581526020016158396025913960046000611e716126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378a9092919063ffffffff16565b6126df565b6001905092915050565b6000611f1b611f146126d7565b84846128a8565b6001905092915050565b611f2d6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614c7b565b60405180910390fd5b80600d8190555050565b611fcc6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614c7b565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120a291906142ee565b60405180910390a150565b6120b56126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990614c7b565b60405180910390fd5b80600e8190555050565b6121546126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614c7b565b60405180910390fd5b818190508484905014612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090614e3d565b60405180910390fd5b60006122336126d7565b905060005b85859050811015612431576000868683818110612258576122576149f1565b5b905060200201602081019061226d919061434f565b90506000858584818110612284576122836149f1565b5b9050602002013590506122df81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8590919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061237481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161241491906143a9565b60405180910390a35050808061242990614e5d565b915050612238565b505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61251e6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614c7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190614f17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b49061503b565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161289b91906143a9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e906150cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9061515f565b60405180910390fd5b600081116129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c0906151f1565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a6f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aae5750612a7e6118fc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612aed5750612abd6118fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000612b0c83612afe8661150f565b6137ee90919063ffffffff16565b90506000612b186118fc565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612b865750612b566118fc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612be05750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612c5057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561354657600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cf95750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90615283565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f9857600f54821115612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc990615315565b60405180910390fd5b82612dde576000612e0a565b612e096064612dfb60156000015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b5b90506000612e1785610c1f565b90506000612ec982601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401612e7a9190614616565b602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb9190614d0c565b6137ee90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401612f28929190615335565b600060405180830381600087803b158015612f4257600080fd5b505af1158015612f56573d6000803e3d6000fd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051612f8d939291906153aa565b60405180910390a150505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130435750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156132445782613054576000613080565b61307f606461307160156001015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b5b9050600061308d85610c1f565b90506000821180156130a05750600e5481115b156130ae5760156002015491505b600081601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161310c9190614616565b602060405180830381865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190614d0c565b61315791906153fe565b9050600080821315613169578161316c565b60005b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016131cb929190615335565b600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038984836040516132309392919061548d565b60405180910390a1613240613f93565b5050505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156132f05750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561333b57600f5482111561333a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333190615315565b60405180910390fd5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1876040518263ffffffff1660e01b81526004016133969190614616565b600060405180830381600087803b1580156133b057600080fd5b505af19250505080156133c1575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1866040518263ffffffff1660e01b815260040161341d9190614616565b600060405180830381600087803b15801561343757600080fd5b505af1925050508015613448575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016134a691906143a9565b6060604051808303816000875af19250505080156134e257506040513d601f19601f820116820180604052508101906134df91906154d7565b60015b15613545573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601354604051613539949392919061552a565b60405180910390a35050505b5b600061355b8286613e8590919063ffffffff16565b90506135af85600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364481600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136d982600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161377991906143a9565b60405180910390a350505050505050565b60008383111582906137d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c991906141c9565b60405180910390fd5b50600083856137e1919061556f565b9050809150509392505050565b60008082846137fd91906155a3565b905083811015613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990615623565b60405180910390fd5b8091505092915050565b60005b838390508110156138f157600084848381811061386f5761386e6149f1565b5b9050602002016020810190613884919061434f565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806138e990614e5d565b91505061384f565b50505050565b6000600267ffffffffffffffff81111561391457613913614684565b5b6040519080825280602002602001820160405280156139425781602001602082028036833780820191505090505b509050308160008151811061395a576139596149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2591906149c4565b81600181518110613a3957613a386149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126df565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0495949392919061567e565b600060405180830381600087803b158015613b1e57600080fd5b505af1158015613b32573d6000803e3d6000fd5b505050505050565b6001600c60006101000a81548160ff02191690831515021790555060004790506000613b876064613b7960196000015485613ecf90919063ffffffff16565b613f4990919063ffffffff16565b90506000613bb66064613ba860196001015486613ecf90919063ffffffff16565b613f4990919063ffffffff16565b90506000613be56064613bd760196002015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613c4f573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613cb8573d6000803e3d6000fd5b50613cc281614006565b505050506000600c60006101000a81548160ff021916908315150217905550565b60005b83839050811015613d88576000848483818110613d0657613d056149f1565b5b9050602002016020810190613d1b919061434f565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613d8090614e5d565b915050613ce6565b50505050565b60005b8251811015613e80576000838281518110613daf57613dae6149f1565b5b602002602001015190508215613e1c576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613e6c565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613e7890614e5d565b915050613d91565b505050565b6000613ec783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061378a565b905092915050565b6000808303613ee15760009050613f43565b60008284613eef9190614cca565b9050828482613efe9190615707565b14613f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f35906157aa565b60405180910390fd5b809150505b92915050565b6000613f8b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140d6565b905092915050565b6000613f9e3061150f565b90506000811115614003576000613fb3611a75565b9050808210158015613fd25750600c60009054906101000a900460ff16155b8015613fea5750600c60019054906101000a900460ff165b1561400157613ff8816138f7565b614000613b3a565b5b505b50565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161404e906157fb565b60006040518083038185875af1925050503d806000811461408b576040519150601f19603f3d011682016040523d82523d6000602084013e614090565b606091505b5050905080156140d2577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516140c991906143a9565b60405180910390a15b5050565b6000808311829061411d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161411491906141c9565b60405180910390fd5b506000838561412c9190615707565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614173578082015181840152602081019050614158565b60008484015250505050565b6000601f19601f8301169050919050565b600061419b82614139565b6141a58185614144565b93506141b5818560208601614155565b6141be8161417f565b840191505092915050565b600060208201905081810360008301526141e38184614190565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061422a826141ff565b9050919050565b61423a8161421f565b811461424557600080fd5b50565b60008135905061425781614231565b92915050565b6000819050919050565b6142708161425d565b811461427b57600080fd5b50565b60008135905061428d81614267565b92915050565b600080604083850312156142aa576142a96141f5565b5b60006142b885828601614248565b92505060206142c98582860161427e565b9150509250929050565b60008115159050919050565b6142e8816142d3565b82525050565b600060208201905061430360008301846142df565b92915050565b6143128161425d565b82525050565b600060608201905061432d6000830186614309565b61433a6020830185614309565b6143476040830184614309565b949350505050565b600060208284031215614365576143646141f5565b5b600061437384828501614248565b91505092915050565b600060208284031215614392576143916141f5565b5b60006143a08482850161427e565b91505092915050565b60006020820190506143be6000830184614309565b92915050565b6000819050919050565b60006143e96143e46143df846141ff565b6143c4565b6141ff565b9050919050565b60006143fb826143ce565b9050919050565b600061440d826143f0565b9050919050565b61441d81614402565b82525050565b60006020820190506144386000830184614414565b92915050565b600080600060608486031215614457576144566141f5565b5b600061446586828701614248565b935050602061447686828701614248565b92505060406144878682870161427e565b9150509250925092565b600061449c826143ce565b9050919050565b60006144ae82614491565b9050919050565b6144be816144a3565b82525050565b60006020820190506144d960008301846144b5565b92915050565b600060ff82169050919050565b6144f5816144df565b82525050565b600060208201905061451060008301846144ec565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261453b5761453a614516565b5b8235905067ffffffffffffffff8111156145585761455761451b565b5b60208301915083602082028301111561457457614573614520565b5b9250929050565b614584816142d3565b811461458f57600080fd5b50565b6000813590506145a18161457b565b92915050565b6000806000604084860312156145c0576145bf6141f5565b5b600084013567ffffffffffffffff8111156145de576145dd6141fa565b5b6145ea86828701614525565b935093505060206145fd86828701614592565b9150509250925092565b6146108161421f565b82525050565b600060208201905061462b6000830184614607565b92915050565b60008060006060848603121561464a576146496141f5565b5b60006146588682870161427e565b93505060206146698682870161427e565b925050604061467a8682870161427e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc8261417f565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee6141eb565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600061473e614739846146ff565b6146e4565b9050808382526020820190506020840283018581111561476157614760614520565b5b835b8181101561478a57806147768882614248565b845260208401935050602081019050614763565b5050509392505050565b600082601f8301126147a9576147a8614516565b5b81356147b984826020860161472b565b91505092915050565b6000602082840312156147d8576147d76141f5565b5b600082013567ffffffffffffffff8111156147f6576147f56141fa565b5b61480284828501614794565b91505092915050565b600060208284031215614821576148206141f5565b5b600061482f84828501614592565b91505092915050565b60008083601f84011261484e5761484d614516565b5b8235905067ffffffffffffffff81111561486b5761486a61451b565b5b60208301915083602082028301111561488757614886614520565b5b9250929050565b600080600080604085870312156148a8576148a76141f5565b5b600085013567ffffffffffffffff8111156148c6576148c56141fa565b5b6148d287828801614525565b9450945050602085013567ffffffffffffffff8111156148f5576148f46141fa565b5b61490187828801614838565b925092505092959194509250565b60008060408385031215614926576149256141f5565b5b600061493485828601614248565b925050602061494585828601614248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061499657607f821691505b6020821081036149a9576149a861494f565b5b50919050565b6000815190506149be81614231565b92915050565b6000602082840312156149da576149d96141f5565b5b60006149e8848285016149af565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a558161421f565b82525050565b6000614a678383614a4c565b60208301905092915050565b6000602082019050919050565b6000614a8b82614a20565b614a958185614a2b565b9350614aa083614a3c565b8060005b83811015614ad1578151614ab88882614a5b565b9750614ac383614a73565b925050600181019050614aa4565b5085935050505092915050565b6000604082019050614af36000830185614309565b8181036020830152614b058184614a80565b90509392505050565b600067ffffffffffffffff821115614b2957614b28614684565b5b602082029050602081019050919050565b600081519050614b4981614267565b92915050565b6000614b62614b5d84614b0e565b6146e4565b90508083825260208201905060208402830185811115614b8557614b84614520565b5b835b81811015614bae5780614b9a8882614b3a565b845260208401935050602081019050614b87565b5050509392505050565b600082601f830112614bcd57614bcc614516565b5b8151614bdd848260208601614b4f565b91505092915050565b600060208284031215614bfc57614bfb6141f5565b5b600082015167ffffffffffffffff811115614c1a57614c196141fa565b5b614c2684828501614bb8565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c65602083614144565b9150614c7082614c2f565b602082019050919050565b60006020820190508181036000830152614c9481614c58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cd58261425d565b9150614ce08361425d565b9250828202614cee8161425d565b91508282048414831517614d0557614d04614c9b565b5b5092915050565b600060208284031215614d2257614d216141f5565b5b6000614d3084828501614b3a565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614d95602c83614144565b9150614da082614d39565b604082019050919050565b60006020820190508181036000830152614dc481614d88565b9050919050565b7f486f6c6465727320616e6420616d6f756e7473206d757374206265207468652060008201527f73616d6520636f756e7400000000000000000000000000000000000000000000602082015250565b6000614e27602a83614144565b9150614e3282614dcb565b604082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b6000614e688261425d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e9a57614e99614c9b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f01602683614144565b9150614f0c82614ea5565b604082019050919050565b60006020820190508181036000830152614f3081614ef4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f93602483614144565b9150614f9e82614f37565b604082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615025602283614144565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150b7602583614144565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615149602383614144565b9150615154826150ed565b604082019050919050565b600060208201905081810360008301526151788161513c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006151db602983614144565b91506151e68261517f565b604082019050919050565b6000602082019050818103600083015261520a816151ce565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061526d602f83614144565b915061527882615211565b604082019050919050565b6000602082019050818103600083015261529c81615260565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006152ff602583614144565b915061530a826152a3565b604082019050919050565b6000602082019050818103600083015261532e816152f2565b9050919050565b600060408201905061534a6000830185614607565b6153576020830184614309565b9392505050565b7f4255590000000000000000000000000000000000000000000000000000000000600082015250565b6000615394600383614144565b915061539f8261535e565b602082019050919050565b60006080820190506153bf6000830186614607565b81810360208301526153d081615387565b90506153df6040830185614309565b6153ec6060830184614309565b949350505050565b6000819050919050565b6000615409826153f4565b9150615414836153f4565b925082820390508181126000841216828213600085121516171561543b5761543a614c9b565b5b92915050565b7f53454c4c00000000000000000000000000000000000000000000000000000000600082015250565b6000615477600483614144565b915061548282615441565b602082019050919050565b60006080820190506154a26000830186614607565b81810360208301526154b38161546a565b90506154c26040830185614309565b6154cf6060830184614309565b949350505050565b6000806000606084860312156154f0576154ef6141f5565b5b60006154fe86828701614b3a565b935050602061550f86828701614b3a565b925050604061552086828701614b3a565b9150509250925092565b600060808201905061553f6000830187614309565b61554c6020830186614309565b6155596040830185614309565b6155666060830184614309565b95945050505050565b600061557a8261425d565b91506155858361425d565b925082820390508181111561559d5761559c614c9b565b5b92915050565b60006155ae8261425d565b91506155b98361425d565b92508282019050808211156155d1576155d0614c9b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061560d601b83614144565b9150615618826155d7565b602082019050919050565b6000602082019050818103600083015261563c81615600565b9050919050565b6000819050919050565b600061566861566361565e84615643565b6143c4565b61425d565b9050919050565b6156788161564d565b82525050565b600060a0820190506156936000830188614309565b6156a0602083018761566f565b81810360408301526156b28186614a80565b90506156c16060830185614607565b6156ce6080830184614309565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157128261425d565b915061571d8361425d565b92508261572d5761572c6156d8565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615794602183614144565b915061579f82615738565b604082019050919050565b600060208201905081810360008301526157c381615787565b9050919050565b600081905092915050565b50565b60006157e56000836157ca565b91506157f0826157d5565b600082019050919050565b6000615806826157d8565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206ebeaebdf96e6d49467b89594e0db5abf053a2145ae5720e4dcc73446ab72f9064736f6c63430008130033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122075101884e33621166beb47cd3d21a1f24874de5a1c6dd9e634643a6a0fc6f53964736f6c63430008130033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636f3430521161015a57806398acb5d8116100c1578063c49b9a801161007a578063c49b9a80146109e3578063ce96fe6a14610a0c578063dcda6af314610a35578063dd62ed3e14610a5e578063e7dad4f914610a9b578063f2fde38b14610ad857610293565b806398acb5d8146108c35780639b0e2e86146108ec5780639c1b8af514610915578063a457c2d714610940578063a9059cbb1461097d578063b2abbbc4146109ba57610293565b8063871c128d11610113578063871c128d146107c55780638da5cb5b146107ee578063950c8c531461081957806395d89b41146108445780639758f61d1461086f578063979957061461089857610293565b80636f343052146106cb57806370a08231146106f4578063715018a61461073157806371cd56af1461074857806385141a771461077157806385d4787b1461079c57610293565b8063313ce567116101fe57806351bc3c85116101b757806351bc3c85146105c95780635342acb4146105e057806354a5df1f1461061d5780635ee58efc146106485780636c0a24eb146106755780636db7c64e146106a057610293565b8063313ce567146104a5578063345487d0146104d0578063395093511461050d578063441d801f1461054a57806349bd5a5e146105735780634a74bb021461059e57610293565b80631694505e116102505780631694505e146103a757806318160ddd146103d257806323b872dd146103fd57806327a14fc21461043a578063280d3821146104635780632c1f52161461047a57610293565b806306fdde0314610298578063095ea7b3146102c35780630ddc0976146103005780630e8322731461032d57806314f944bd1461036a57610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b01565b6040516102ba91906141c9565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190614293565b610b93565b6040516102f791906142ee565b60405180910390f35b34801561030c57600080fd5b50610315610bb1565b60405161032493929190614318565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061434f565b610bc9565b60405161036191906142ee565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c919061437c565b610c1f565b60405161039e91906143a9565b60405180910390f35b3480156103b357600080fd5b506103bc610e62565b6040516103c99190614423565b60405180910390f35b3480156103de57600080fd5b506103e7610e88565b6040516103f491906143a9565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f919061443e565b610e92565b60405161043191906142ee565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061437c565b610f6b565b005b34801561046f57600080fd5b50610478611019565b005b34801561048657600080fd5b5061048f611104565b60405161049c91906144c4565b60405180910390f35b3480156104b157600080fd5b506104ba61112a565b6040516104c791906144fb565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f2919061434f565b611141565b60405161050491906143a9565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190614293565b6111e6565b60405161054191906142ee565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c91906145a7565b611299565b005b34801561057f57600080fd5b5061058861133e565b6040516105959190614616565b60405180910390f35b3480156105aa57600080fd5b506105b3611364565b6040516105c091906142ee565b60405180910390f35b3480156105d557600080fd5b506105de611377565b005b3480156105ec57600080fd5b506106076004803603810190610602919061434f565b6113b7565b60405161061491906142ee565b60405180910390f35b34801561062957600080fd5b5061063261140d565b60405161063f91906143a9565b60405180910390f35b34801561065457600080fd5b5061065d611413565b60405161066c93929190614318565b60405180910390f35b34801561068157600080fd5b5061068a61142b565b60405161069791906143a9565b60405180910390f35b3480156106ac57600080fd5b506106b5611431565b6040516106c29190614616565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed9190614631565b611457565b005b34801561070057600080fd5b5061071b6004803603810190610716919061434f565b61150f565b60405161072891906143a9565b60405180910390f35b34801561073d57600080fd5b50610746611558565b005b34801561075457600080fd5b5061076f600480360381019061076a91906145a7565b6116ab565b005b34801561077d57600080fd5b50610786611750565b6040516107939190614616565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be91906147c2565b611776565b005b3480156107d157600080fd5b506107ec60048036038101906107e7919061437c565b611819565b005b3480156107fa57600080fd5b506108036118fc565b6040516108109190614616565b60405180910390f35b34801561082557600080fd5b5061082e611925565b60405161083b91906143a9565b60405180910390f35b34801561085057600080fd5b5061085961192b565b60405161086691906141c9565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190614631565b6119bd565b005b3480156108a457600080fd5b506108ad611a75565b6040516108ba91906143a9565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e5919061434f565b611cb8565b005b3480156108f857600080fd5b50610913600480360381019061090e91906147c2565b611d91565b005b34801561092157600080fd5b5061092a611e34565b60405161093791906143a9565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190614293565b611e3a565b60405161097491906142ee565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190614293565b611f07565b6040516109b191906142ee565b60405180910390f35b3480156109c657600080fd5b506109e160048036038101906109dc919061437c565b611f25565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a05919061480b565b611fc4565b005b348015610a1857600080fd5b50610a336004803603810190610a2e919061437c565b6120ad565b005b348015610a4157600080fd5b50610a5c6004803603810190610a57919061488e565b61214c565b005b348015610a6a57600080fd5b50610a856004803603810190610a80919061490f565b612439565b604051610a9291906143a9565b60405180910390f35b348015610aa757600080fd5b50610ac26004803603810190610abd919061434f565b6124c0565b604051610acf91906142ee565b60405180910390f35b348015610ae457600080fd5b50610aff6004803603810190610afa919061434f565b612516565b005b606060088054610b109061497e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c9061497e565b8015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b6000610ba7610ba06126d7565b84846126df565b6001905092915050565b60158060000154908060010154908060020154905083565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600267ffffffffffffffff811115610c3d57610c3c614684565b5b604051908082528060200260200182016040528015610c6b5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906149c4565b81600081518110610d1357610d126149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610d6257610d616149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f00ca7484836040518363ffffffff1660e01b8152600401610df9929190614ade565b600060405180830381865afa158015610e16573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e3f9190614be6565b600081518110610e5257610e516149f1565b5b6020026020010151915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610e9f8484846128a8565b610f6084610eab6126d7565b610f5b8560405180606001604052806028815260200161581160289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f116126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378a9092919063ffffffff16565b6126df565b600190509392505050565b610f736126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790614c7b565b60405180910390fd5b633b9aca00816110109190614cca565b600f8190555050565b6110216126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590614c7b565b60405180910390fd5b60004790506110bb6118fc565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611100573d6000803e3d6000fd5b5050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900460ff16905090565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b815260040161119e9190614616565b602060405180830381865afa1580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190614d0c565b9050919050565b600061128f6111f36126d7565b8461128a85600460006112046126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b6126df565b6001905092915050565b6112a16126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132590614c7b565b60405180910390fd5b61133983838361384c565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b60006113823061150f565b905060008111156113b457600c60009054906101000a900460ff166113b3576113aa816138f7565b6113b2613b3a565b5b5b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60198060000154908060010154908060020154905083565b600f5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61145f6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614c7b565b60405180910390fd5b826019600001819055508160196001018190555080601960020181905550505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115606126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614c7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116b36126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790614c7b565b60405180910390fd5b61174b838383613ce3565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61177e6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180290614c7b565b60405180910390fd5b611816816001613d8e565b50565b6118216126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614c7b565b60405180910390fd5b60135481036118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614dab565b60405180910390fd5b8060138190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606009805461193a9061497e565b80601f01602080910402602001604051908101604052809291908181526020018280546119669061497e565b80156119b35780601f10611988576101008083540402835291602001916119b3565b820191906000526020600020905b81548152906001019060200180831161199657829003601f168201915b5050505050905090565b6119c56126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614c7b565b60405180910390fd5b826015600001819055508160156001018190555080601560020181905550505050565b600080600267ffffffffffffffff811115611a9357611a92614684565b5b604051908082528060200260200182016040528015611ac15781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5591906149c4565b81600081518110611b6957611b686149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611bb857611bb76149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611c51929190614ade565b600060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c979190614be6565b600181518110611caa57611ca96149f1565b5b602002602001015191505090565b611cc06126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490614c7b565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d996126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d90614c7b565b60405180910390fd5b611e31816000613d8e565b50565b60135481565b6000611efd611e476126d7565b84611ef8856040518060600160405280602581526020016158396025913960046000611e716126d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378a9092919063ffffffff16565b6126df565b6001905092915050565b6000611f1b611f146126d7565b84846128a8565b6001905092915050565b611f2d6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614c7b565b60405180910390fd5b80600d8190555050565b611fcc6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205090614c7b565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516120a291906142ee565b60405180910390a150565b6120b56126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213990614c7b565b60405180910390fd5b80600e8190555050565b6121546126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d890614c7b565b60405180910390fd5b818190508484905014612229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222090614e3d565b60405180910390fd5b60006122336126d7565b905060005b85859050811015612431576000868683818110612258576122576149f1565b5b905060200201602081019061226d919061434f565b90506000858584818110612284576122836149f1565b5b9050602002013590506122df81600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8590919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061237481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161241491906143a9565b60405180910390a35050808061242990614e5d565b915050612238565b505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61251e6126d7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a290614c7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190614f17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614fa9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b49061503b565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161289b91906143a9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e906150cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9061515f565b60405180910390fd5b600081116129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c0906151f1565b60405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a6f5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aae5750612a7e6118fc565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612aed5750612abd6118fc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000612b0c83612afe8661150f565b6137ee90919063ffffffff16565b90506000612b186118fc565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612b865750612b566118fc565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612be05750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c1857503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612c5057503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561354657600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cf95750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90615283565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612f9857600f54821115612dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc990615315565b60405180910390fd5b82612dde576000612e0a565b612e096064612dfb60156000015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b5b90506000612e1785610c1f565b90506000612ec982601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b8152600401612e7a9190614616565b602060405180830381865afa158015612e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebb9190614d0c565b6137ee90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82888836040518363ffffffff1660e01b8152600401612f28929190615335565b600060405180830381600087803b158015612f4257600080fd5b505af1158015612f56573d6000803e3d6000fd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c03878383604051612f8d939291906153aa565b60405180910390a150505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130435750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156132445782613054576000613080565b61307f606461307160156001015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b5b9050600061308d85610c1f565b90506000821180156130a05750600e5481115b156130ae5760156002015491505b600081601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc8a6040518263ffffffff1660e01b815260040161310c9190614616565b602060405180830381865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190614d0c565b61315791906153fe565b9050600080821315613169578161316c565b60005b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d8288a836040518363ffffffff1660e01b81526004016131cb929190615335565b600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b505050507f47744cc547f0cc32a68348ccb6e26f815f647757d949205cd3da16ed48446c038984836040516132309392919061548d565b60405180910390a1613240613f93565b5050505b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156132f05750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561333b57600f5482111561333a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333190615315565b60405180910390fd5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1876040518263ffffffff1660e01b81526004016133969190614616565b600060405180830381600087803b1580156133b057600080fd5b505af19250505080156133c1575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1866040518263ffffffff1660e01b815260040161341d9190614616565b600060405180830381600087803b15801561343757600080fd5b505af1925050508015613448575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b81526004016134a691906143a9565b6060604051808303816000875af19250505080156134e257506040513d601f19601f820116820180604052508101906134df91906154d7565b60015b15613545573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601354604051613539949392919061552a565b60405180910390a35050505b5b600061355b8286613e8590919063ffffffff16565b90506135af85600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364481600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136d982600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ee90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161377991906143a9565b60405180910390a350505050505050565b60008383111582906137d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137c991906141c9565b60405180910390fd5b50600083856137e1919061556f565b9050809150509392505050565b60008082846137fd91906155a3565b905083811015613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990615623565b60405180910390fd5b8091505092915050565b60005b838390508110156138f157600084848381811061386f5761386e6149f1565b5b9050602002016020810190613884919061434f565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806138e990614e5d565b91505061384f565b50505050565b6000600267ffffffffffffffff81111561391457613913614684565b5b6040519080825280602002602001820160405280156139425781602001602082028036833780820191505090505b509050308160008151811061395a576139596149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2591906149c4565b81600181518110613a3957613a386149f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126df565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0495949392919061567e565b600060405180830381600087803b158015613b1e57600080fd5b505af1158015613b32573d6000803e3d6000fd5b505050505050565b6001600c60006101000a81548160ff02191690831515021790555060004790506000613b876064613b7960196000015485613ecf90919063ffffffff16565b613f4990919063ffffffff16565b90506000613bb66064613ba860196001015486613ecf90919063ffffffff16565b613f4990919063ffffffff16565b90506000613be56064613bd760196002015487613ecf90919063ffffffff16565b613f4990919063ffffffff16565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613c4f573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613cb8573d6000803e3d6000fd5b50613cc281614006565b505050506000600c60006101000a81548160ff021916908315150217905550565b60005b83839050811015613d88576000848483818110613d0657613d056149f1565b5b9050602002016020810190613d1b919061434f565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613d8090614e5d565b915050613ce6565b50505050565b60005b8251811015613e80576000838281518110613daf57613dae6149f1565b5b602002602001015190508215613e1c576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613e6c565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613e7890614e5d565b915050613d91565b505050565b6000613ec783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061378a565b905092915050565b6000808303613ee15760009050613f43565b60008284613eef9190614cca565b9050828482613efe9190615707565b14613f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f35906157aa565b60405180910390fd5b809150505b92915050565b6000613f8b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140d6565b905092915050565b6000613f9e3061150f565b90506000811115614003576000613fb3611a75565b9050808210158015613fd25750600c60009054906101000a900460ff16155b8015613fea5750600c60019054906101000a900460ff165b1561400157613ff8816138f7565b614000613b3a565b5b505b50565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161404e906157fb565b60006040518083038185875af1925050503d806000811461408b576040519150601f19603f3d011682016040523d82523d6000602084013e614090565b606091505b5050905080156140d2577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516140c991906143a9565b60405180910390a15b5050565b6000808311829061411d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161411491906141c9565b60405180910390fd5b506000838561412c9190615707565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614173578082015181840152602081019050614158565b60008484015250505050565b6000601f19601f8301169050919050565b600061419b82614139565b6141a58185614144565b93506141b5818560208601614155565b6141be8161417f565b840191505092915050565b600060208201905081810360008301526141e38184614190565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061422a826141ff565b9050919050565b61423a8161421f565b811461424557600080fd5b50565b60008135905061425781614231565b92915050565b6000819050919050565b6142708161425d565b811461427b57600080fd5b50565b60008135905061428d81614267565b92915050565b600080604083850312156142aa576142a96141f5565b5b60006142b885828601614248565b92505060206142c98582860161427e565b9150509250929050565b60008115159050919050565b6142e8816142d3565b82525050565b600060208201905061430360008301846142df565b92915050565b6143128161425d565b82525050565b600060608201905061432d6000830186614309565b61433a6020830185614309565b6143476040830184614309565b949350505050565b600060208284031215614365576143646141f5565b5b600061437384828501614248565b91505092915050565b600060208284031215614392576143916141f5565b5b60006143a08482850161427e565b91505092915050565b60006020820190506143be6000830184614309565b92915050565b6000819050919050565b60006143e96143e46143df846141ff565b6143c4565b6141ff565b9050919050565b60006143fb826143ce565b9050919050565b600061440d826143f0565b9050919050565b61441d81614402565b82525050565b60006020820190506144386000830184614414565b92915050565b600080600060608486031215614457576144566141f5565b5b600061446586828701614248565b935050602061447686828701614248565b92505060406144878682870161427e565b9150509250925092565b600061449c826143ce565b9050919050565b60006144ae82614491565b9050919050565b6144be816144a3565b82525050565b60006020820190506144d960008301846144b5565b92915050565b600060ff82169050919050565b6144f5816144df565b82525050565b600060208201905061451060008301846144ec565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261453b5761453a614516565b5b8235905067ffffffffffffffff8111156145585761455761451b565b5b60208301915083602082028301111561457457614573614520565b5b9250929050565b614584816142d3565b811461458f57600080fd5b50565b6000813590506145a18161457b565b92915050565b6000806000604084860312156145c0576145bf6141f5565b5b600084013567ffffffffffffffff8111156145de576145dd6141fa565b5b6145ea86828701614525565b935093505060206145fd86828701614592565b9150509250925092565b6146108161421f565b82525050565b600060208201905061462b6000830184614607565b92915050565b60008060006060848603121561464a576146496141f5565b5b60006146588682870161427e565b93505060206146698682870161427e565b925050604061467a8682870161427e565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc8261417f565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee6141eb565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600061473e614739846146ff565b6146e4565b9050808382526020820190506020840283018581111561476157614760614520565b5b835b8181101561478a57806147768882614248565b845260208401935050602081019050614763565b5050509392505050565b600082601f8301126147a9576147a8614516565b5b81356147b984826020860161472b565b91505092915050565b6000602082840312156147d8576147d76141f5565b5b600082013567ffffffffffffffff8111156147f6576147f56141fa565b5b61480284828501614794565b91505092915050565b600060208284031215614821576148206141f5565b5b600061482f84828501614592565b91505092915050565b60008083601f84011261484e5761484d614516565b5b8235905067ffffffffffffffff81111561486b5761486a61451b565b5b60208301915083602082028301111561488757614886614520565b5b9250929050565b600080600080604085870312156148a8576148a76141f5565b5b600085013567ffffffffffffffff8111156148c6576148c56141fa565b5b6148d287828801614525565b9450945050602085013567ffffffffffffffff8111156148f5576148f46141fa565b5b61490187828801614838565b925092505092959194509250565b60008060408385031215614926576149256141f5565b5b600061493485828601614248565b925050602061494585828601614248565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061499657607f821691505b6020821081036149a9576149a861494f565b5b50919050565b6000815190506149be81614231565b92915050565b6000602082840312156149da576149d96141f5565b5b60006149e8848285016149af565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a558161421f565b82525050565b6000614a678383614a4c565b60208301905092915050565b6000602082019050919050565b6000614a8b82614a20565b614a958185614a2b565b9350614aa083614a3c565b8060005b83811015614ad1578151614ab88882614a5b565b9750614ac383614a73565b925050600181019050614aa4565b5085935050505092915050565b6000604082019050614af36000830185614309565b8181036020830152614b058184614a80565b90509392505050565b600067ffffffffffffffff821115614b2957614b28614684565b5b602082029050602081019050919050565b600081519050614b4981614267565b92915050565b6000614b62614b5d84614b0e565b6146e4565b90508083825260208201905060208402830185811115614b8557614b84614520565b5b835b81811015614bae5780614b9a8882614b3a565b845260208401935050602081019050614b87565b5050509392505050565b600082601f830112614bcd57614bcc614516565b5b8151614bdd848260208601614b4f565b91505092915050565b600060208284031215614bfc57614bfb6141f5565b5b600082015167ffffffffffffffff811115614c1a57614c196141fa565b5b614c2684828501614bb8565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c65602083614144565b9150614c7082614c2f565b602082019050919050565b60006020820190508181036000830152614c9481614c58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cd58261425d565b9150614ce08361425d565b9250828202614cee8161425d565b91508282048414831517614d0557614d04614c9b565b5b5092915050565b600060208284031215614d2257614d216141f5565b5b6000614d3084828501614b3a565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614d95602c83614144565b9150614da082614d39565b604082019050919050565b60006020820190508181036000830152614dc481614d88565b9050919050565b7f486f6c6465727320616e6420616d6f756e7473206d757374206265207468652060008201527f73616d6520636f756e7400000000000000000000000000000000000000000000602082015250565b6000614e27602a83614144565b9150614e3282614dcb565b604082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b6000614e688261425d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e9a57614e99614c9b565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f01602683614144565b9150614f0c82614ea5565b604082019050919050565b60006020820190508181036000830152614f3081614ef4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f93602483614144565b9150614f9e82614f37565b604082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615025602283614144565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150b7602583614144565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615149602383614144565b9150615154826150ed565b604082019050919050565b600060208201905081810360008301526151788161513c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006151db602983614144565b91506151e68261517f565b604082019050919050565b6000602082019050818103600083015261520a816151ce565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061526d602f83614144565b915061527882615211565b604082019050919050565b6000602082019050818103600083015261529c81615260565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006152ff602583614144565b915061530a826152a3565b604082019050919050565b6000602082019050818103600083015261532e816152f2565b9050919050565b600060408201905061534a6000830185614607565b6153576020830184614309565b9392505050565b7f4255590000000000000000000000000000000000000000000000000000000000600082015250565b6000615394600383614144565b915061539f8261535e565b602082019050919050565b60006080820190506153bf6000830186614607565b81810360208301526153d081615387565b90506153df6040830185614309565b6153ec6060830184614309565b949350505050565b6000819050919050565b6000615409826153f4565b9150615414836153f4565b925082820390508181126000841216828213600085121516171561543b5761543a614c9b565b5b92915050565b7f53454c4c00000000000000000000000000000000000000000000000000000000600082015250565b6000615477600483614144565b915061548282615441565b602082019050919050565b60006080820190506154a26000830186614607565b81810360208301526154b38161546a565b90506154c26040830185614309565b6154cf6060830184614309565b949350505050565b6000806000606084860312156154f0576154ef6141f5565b5b60006154fe86828701614b3a565b935050602061550f86828701614b3a565b925050604061552086828701614b3a565b9150509250925092565b600060808201905061553f6000830187614309565b61554c6020830186614309565b6155596040830185614309565b6155666060830184614309565b95945050505050565b600061557a8261425d565b91506155858361425d565b925082820390508181111561559d5761559c614c9b565b5b92915050565b60006155ae8261425d565b91506155b98361425d565b92508282019050808211156155d1576155d0614c9b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061560d601b83614144565b9150615618826155d7565b602082019050919050565b6000602082019050818103600083015261563c81615600565b9050919050565b6000819050919050565b600061566861566361565e84615643565b6143c4565b61425d565b9050919050565b6156788161564d565b82525050565b600060a0820190506156936000830188614309565b6156a0602083018761566f565b81810360408301526156b28186614a80565b90506156c16060830185614607565b6156ce6080830184614309565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157128261425d565b915061571d8361425d565b92508261572d5761572c6156d8565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615794602183614144565b915061579f82615738565b604082019050919050565b600060208201905081810360008301526157c381615787565b9050919050565b600081905092915050565b50565b60006157e56000836157ca565b91506157f0826157d5565b600082019050919050565b6000615806826157d8565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206ebeaebdf96e6d49467b89594e0db5abf053a2145ae5720e4dcc73446ab72f9064736f6c63430008130033

Deployed Bytecode Sourcemap

8391:14830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11208:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12041:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10573:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13644:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20430:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8922:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11485:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12210:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13165:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22464:161;;;;;;;;;;;;;:::i;:::-;;10602:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11394:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13034:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12531:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13310:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9035:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9579:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21473:304;;;;;;;;;;;;;:::i;:::-;;16005:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9626:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10647:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9726;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9789:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21785:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11588:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7060:148;;;;;;;;;;;;;:::i;:::-;;13479:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9950:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14876:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20719:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6846:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9673:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11299:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14536:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15722:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22061:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15012:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10000:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12757:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11715:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14030:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15506:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14160:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19392:543;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11890:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14759:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7216:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11208:83;11245:13;11278:5;11271:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11208:83;:::o;12041:161::-;12116:4;12133:39;12142:12;:10;:12::i;:::-;12156:7;12165:6;12133:8;:39::i;:::-;12190:4;12183:11;;12041:161;;;;:::o;10573:22::-;;;;;;;;;;;;;;;;;;;:::o;13644:126::-;13710:4;13734:22;:28;13757:4;13734:28;;;;;;;;;;;;;;;;;;;;;;;;;13727:35;;13644:126;;;:::o;20430:281::-;20500:4;20518:21;20556:1;20542:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20518:40;;20579:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20569:4;20574:1;20569:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;20630:4;20612;20617:1;20612:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20653:15;;;;;;;;;;;:28;;;20682:11;20695:4;20653:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20701:1;20653:50;;;;;;;;:::i;:::-;;;;;;;;20646:57;;;20430:281;;;:::o;8922:106::-;;;;;;;;;;;;;:::o;11485:95::-;11538:7;11565;;11558:14;;11485:95;:::o;12210:313::-;12308:4;12325:36;12335:6;12343:9;12354:6;12325:9;:36::i;:::-;12372:121;12381:6;12389:12;:10;:12::i;:::-;12403:89;12441:6;12403:89;;;;;;;;;;;;;;;;;:11;:19;12415:6;12403:19;;;;;;;;;;;;;;;:33;12423:12;:10;:12::i;:::-;12403:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12372:8;:121::i;:::-;12511:4;12504:11;;12210:313;;;;;:::o;13165:137::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13287:7:::1;13269:15;:25;;;;:::i;:::-;13250:16;:44;;;;13165:137:::0;:::o;22464:161::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22527:18:::1;22548:21;22527:42;;22588:7;:5;:7::i;:::-;22580:25;;:37;22606:10;22580:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22516:109;22464:161::o:0;10602:38::-;;;;;;;;;;;;;:::o;11394:83::-;11435:5;11460:9;;;;;;;;;;;11453:16;;11394:83;:::o;13034:125::-;13098:4;13122:16;;;;;;;;;;;:20;;;13143:7;13122:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13115:36;;13034:125;;;:::o;12531:218::-;12619:4;12636:83;12645:12;:10;:12::i;:::-;12659:7;12668:50;12707:10;12668:11;:25;12680:12;:10;:12::i;:::-;12668:25;;;;;;;;;;;;;;;:34;12694:7;12668:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12636:8;:83::i;:::-;12737:4;12730:11;;12531:218;;;;:::o;13310:161::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13422:41:::1;13435:9;;13446:16;13422:12;:41::i;:::-;13310:161:::0;;;:::o;9035:41::-;;;;;;;;;;;;;:::o;9579:40::-;;;;;;;;;;;;;:::o;21473:304::-;21515:28;21546:24;21564:4;21546:9;:24::i;:::-;21515:55;;21608:1;21585:20;:24;21581:189;;;21631:16;;;;;;;;;;;21626:133;;21668:38;21685:20;21668:16;:38::i;:::-;21725:18;:16;:18::i;:::-;21626:133;21581:189;21504:273;21473:304::o;16005:124::-;16070:4;16094:18;:27;16113:7;16094:27;;;;;;;;;;;;;;;;;;;;;;;;;16087:34;;16005:124;;;:::o;9626:40::-;;;;:::o;10647:56::-;;;;;;;;;;;;;;;;;;;:::o;9726:::-;;;;:::o;9789:76::-;;;;;;;;;;;;;:::o;21785:268::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21930:9:::1;21905:12;:22;;:34;;;;21977:11;21950:12;:24;;:38;;;;22030:15;21999:12;:28;;:46;;;;21785:268:::0;;;:::o;11588:119::-;11654:7;11681:9;:18;11691:7;11681:18;;;;;;;;;;;;;;;;11674:25;;11588:119;;;:::o;7060:148::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7167:1:::1;7130:40;;7151:6;::::0;::::1;;;;;;;;7130:40;;;;;;;;;;;;7198:1;7181:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7060:148::o:0;13479:157::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13589:39:::1;13606:9;;13617:10;13589:16;:39::i;:::-;13479:157:::0;;;:::o;9950:43::-;;;;;;;;;;;;;:::o;14876:128::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14960:36:::1;14980:9;14991:4;14960:19;:36::i;:::-;14876:128:::0;:::o;20719:209::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20817:16:::1;;20805:8;:28:::0;20797:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20912:8;20893:16;:27;;;;20719:209:::0;:::o;6846:79::-;6884:7;6911:6;;;;;;;;;;;6904:13;;6846:79;:::o;9673:46::-;;;;:::o;11299:87::-;11338:13;11371:7;11364:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11299:87;:::o;14536:215::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14657:6:::1;14640:7;:14;;:23;;;;14692:7;14674;:15;;:25;;;;14732:11;14710:7;:19;;:33;;;;14536:215:::0;;;:::o;15722:275::-;15779:7;15800:21;15838:1;15824:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:40;;15861:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15851:4;15856:1;15851:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;15912:4;15894;15899:1;15894:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15935:15;;;;;;;;;;;:29;;;15965:14;;15981:4;15935:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15987:1;15935:54;;;;;;;;:::i;:::-;;;;;;;;15928:61;;;15722:275;:::o;22061:166::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22194:23:::1;22152:15;;:67;;;;;;;;;;;;;;;;;;22061:166:::0;:::o;15012:131::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15098:37:::1;15118:9;15129:5;15098:19;:37::i;:::-;15012:131:::0;:::o;10000:39::-;;;;:::o;12757:269::-;12850:4;12867:129;12876:12;:10;:12::i;:::-;12890:7;12899:96;12938:15;12899:96;;;;;;;;;;;;;;;;;:11;:25;12911:12;:10;:12::i;:::-;12899:25;;;;;;;;;;;;;;;:34;12925:7;12899:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12867:8;:129::i;:::-;13014:4;13007:11;;12757:269;;;;:::o;11715:167::-;11793:4;11810:42;11820:12;:10;:12::i;:::-;11834:9;11845:6;11810:9;:42::i;:::-;11870:4;11863:11;;11715:167;;;;:::o;14030:122::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14129:15:::1;14112:14;:32;;;;14030:122:::0;:::o;15506:171::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15607:8:::1;15583:21;;:32;;;;;;;;;;;;;;;;;;15631:38;15660:8;15631:38;;;;;;:::i;:::-;;;;;;;;15506:171:::0;:::o;14160:124::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14267:9:::1;14243:21;:33;;;;14160:124:::0;:::o;19392:543::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19522:7:::1;;:14;;19504:7;;:14;;:32;19496:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;19594:12;19609;:10;:12::i;:::-;19594:27;;19636:9;19632:296;19653:7;;:14;;19649:1;:18;19632:296;;;19689:10;19702:7;;19710:1;19702:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19689:23;;19727:14;19744:7;;19752:1;19744:10;;;;;;;:::i;:::-;;;;;;;;19727:27;;19787;19807:6;19787:9;:15;19797:4;19787:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;19769:9;:15;19779:4;19769:15;;;;;;;;;;;;;;;:45;;;;19845:25;19863:6;19845:9;:13;19855:2;19845:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;19829:9;:13;19839:2;19829:13;;;;;;;;;;;;;;;:41;;;;19905:2;19890:26;;19899:4;19890:26;;;19909:6;19890:26;;;;;;:::i;:::-;;;;;;;;19674:254;;19669:3;;;;;:::i;:::-;;;;19632:296;;;;19485:450;19392:543:::0;;;;:::o;11890:143::-;11971:7;11998:11;:18;12010:5;11998:18;;;;;;;;;;;;;;;:27;12017:7;11998:27;;;;;;;;;;;;;;;;11991:34;;11890:143;;;;:::o;14759:109::-;14820:4;14844:10;:16;14855:4;14844:16;;;;;;;;;;;;;;;;;;;;;;;;;14837:23;;14759:109;;;:::o;7216:244::-;6983:12;:10;:12::i;:::-;6973:22;;:6;;;;;;;;;;:22;;;6965:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7325:1:::1;7305:22;;:8;:22;;::::0;7297:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7415:8;7386:38;;7407:6;::::0;::::1;;;;;;;;7386:38;;;;;;;;;;;;7444:8;7435:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7216:244:::0;:::o;3915:98::-;3968:7;3995:10;3988:17;;3915:98;:::o;16137:337::-;16247:1;16230:19;;:5;:19;;;16222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16328:1;16309:21;;:7;:21;;;16301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16412:6;16382:11;:18;16394:5;16382:18;;;;;;;;;;;;;;;:27;16401:7;16382:27;;;;;;;;;;;;;;;:36;;;;16450:7;16434:32;;16443:5;16434:32;;;16459:6;16434:32;;;;;;:::i;:::-;;;;;;;;16137:337;;;:::o;16482:2902::-;16586:1;16570:18;;:4;:18;;;16562:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16663:1;16649:16;;:2;:16;;;16641:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16733:1;16724:6;:10;16716:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16791:13;16808:18;:24;16827:4;16808:24;;;;;;;;;;;;;;;;;;;;;;;;;16807:25;:52;;;;;16837:18;:22;16856:2;16837:22;;;;;;;;;;;;;;;;;;;;;;;;;16836:23;16807:52;:71;;;;;16871:7;:5;:7::i;:::-;16863:15;;:4;:15;;;;16807:71;:88;;;;;16888:7;:5;:7::i;:::-;16882:13;;:2;:13;;;;16807:88;16791:104;;16906:21;16930:25;16948:6;16930:13;16940:2;16930:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;16906:49;;16966:17;17099:7;:5;:7::i;:::-;17091:15;;:4;:15;;;;:32;;;;;17116:7;:5;:7::i;:::-;17110:13;;:2;:13;;;;17091:32;:52;;;;;17133:10;;;;;;;;;;;17127:16;;:2;:16;;;;17091:52;:77;;;;;17163:4;17147:21;;:4;:21;;;;17091:77;:100;;;;;17186:4;17172:19;;:2;:19;;;;17091:100;17087:1998;;;17217:10;:16;17228:4;17217:16;;;;;;;;;;;;;;;;;;;;;;;;;17216:17;:36;;;;;17238:10;:14;17249:2;17238:14;;;;;;;;;;;;;;;;;;;;;;;;;17237:15;17216:36;17208:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;17333:13;;;;;;;;;;;17325:21;;:4;:21;;;17321:486;;17392:16;;17375:13;:33;;17367:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;17481:8;:51;;17531:1;17481:51;;;17492:35;17523:3;17492:26;17503:7;:14;;;17492:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;17481:51;17469:63;;17551:11;17565:29;17587:6;17565:21;:29::i;:::-;17551:43;;17613:15;17631:36;17660:6;17631:16;;;;;;;;;;;:20;;;17652:2;17631:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;17613:54;;17686:16;;;;;;;;;;;:20;;;17707:2;17711:10;17686:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17746:45;17760:2;17771:6;17780:10;17746:45;;;;;;;;:::i;:::-;;;;;;;;17348:459;;17321:486;17833:13;;;;;;;;;;;17825:21;;:4;:21;;;;:44;;;;;17856:13;;;;;;;;;;;17850:19;;:2;:19;;;17825:44;17821:659;;;17902:8;:51;;17952:1;17902:51;;;17913:36;17945:3;17913:27;17924:7;:15;;;17913:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;17902:51;17890:63;;17972:12;17987:29;18009:6;17987:21;:29::i;:::-;17972:44;;18050:1;18038:9;:13;:48;;;;;18065:21;;18055:7;:31;18038:48;18035:127;;;18123:7;:19;;;18111:31;;18035:127;18180:7;18228;18194:16;;;;;;;;;;;:20;;;18215:4;18194:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18190:46;;;;:::i;:::-;18180:56;;18255:18;18283:1;18276:3;:8;;:27;;18299:3;18276:27;;;18287:1;18276:27;18255:48;;18322:16;;;;;;;;;;;:20;;;18343:4;18349:10;18322:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18384:49;18398:4;18412:7;18422:10;18384:49;;;;;;;;:::i;:::-;;;;;;;;18452:12;:10;:12::i;:::-;17871:609;;;17821:659;18506:13;;;;;;;;;;;18498:21;;:4;:21;;;;:44;;;;;18529:13;;;;;;;;;;;18523:19;;:2;:19;;;;18498:44;18494:168;;;18588:16;;18571:13;:33;;18563:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;18494:168;18682:15;;;;;;;;;;;:31;;;18714:4;18682:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18678:52;18748:15;;;;;;;;;;;:31;;;18780:2;18748:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18744:50;18812:15;;;;;;;;;;;:23;;;18836:16;;18812:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18808:266;;;19040:9;18951:99;;19016:4;18951:99;;;18976:10;18988:6;18996:18;19022:16;;18951:99;;;;;;;;;:::i;:::-;;;;;;;;18854:212;;;18808:266;17087:1998;19095:22;19120:21;19131:9;19120:6;:10;;:21;;;;:::i;:::-;19095:46;;19170:27;19190:6;19170:9;:15;19180:4;19170:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;19152:9;:15;19162:4;19152:15;;;;;;;;;;;;;;;:45;;;;19224:33;19242:14;19224:9;:13;19234:2;19224:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;19208:9;:13;19218:2;19208:13;;;;;;;;;;;;;;;:49;;;;19295:39;19324:9;19295;:24;19313:4;19295:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;19268:9;:24;19286:4;19268:24;;;;;;;;;;;;;;;:66;;;;19365:2;19350:26;;19359:4;19350:26;;;19369:6;19350:26;;;;;;:::i;:::-;;;;;;;;16551:2833;;;;16482:2902;;;:::o;2774:192::-;2860:7;2893:1;2888;:6;;2896:12;2880:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2920:9;2936:1;2932;:5;;;;:::i;:::-;2920:17;;2957:1;2950:8;;;2774:192;;;;;:::o;2441:181::-;2499:7;2519:9;2535:1;2531;:5;;;;:::i;:::-;2519:17;;2560:1;2555;:6;;2547:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2613:1;2606:8;;;2441:181;;;;:::o;14292:236::-;14379:9;14374:147;14398:9;;:16;;14394:1;:20;14374:147;;;14436:12;14451:9;;14461:1;14451:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14436:27;;14505:4;14478:18;:24;14497:4;14478:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14421:100;14416:3;;;;;:::i;:::-;;;;14374:147;;;;14292:236;;;:::o;22633:585::-;22759:21;22797:1;22783:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22759:40;;22828:4;22810;22815:1;22810:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22854:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22844:4;22849:1;22844:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;22887:62;22904:4;22919:15;;;;;;;;;;;22937:11;22887:8;:62::i;:::-;22986:15;;;;;;;;;;;:66;;;23067:11;23093:1;23137:4;23164;23184:15;22986:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22688:530;22633:585;:::o;20936:529::-;8857:4;8838:16;;:23;;;;;;;;;;;;;;;;;;20995:18:::1;21016:21;20995:42;;21048:17;21068:47;21111:3;21068:38;21083:12;:22;;;21068:10;:14;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;21048:67;;21126:19;21148:49;21193:3;21148:40;21163:12;:24;;;21148:10;:14;;:40;;;;:::i;:::-;:44;;:49;;;;:::i;:::-;21126:71;;21208:23;21234:53;21283:3;21234:44;21249:12;:28;;;21234:10;:14;;:44;;;;:::i;:::-;:48;;:53;;;;:::i;:::-;21208:79;;21316:16;;;;;;;;;;;21308:34;;:45;21343:9;21308:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21372:18;;;;;;;;;;;21364:36;;:49;21401:11;21364:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21424:33;21441:15;21424:16;:33::i;:::-;20984:481;;;;8903:5:::0;8884:16;;:24;;;;;;;;;;;;;;;;;;20936:529::o;13778:244::-;13869:9;13864:151;13888:9;;:16;;13884:1;:20;13864:151;;;13926:12;13941:9;;13951:1;13941:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;13926:27;;13999:4;13968:22;:28;13991:4;13968:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;13911:104;13906:3;;;;;:::i;:::-;;;;13864:151;;;;13778:244;;;:::o;15151:347::-;15246:9;15241:250;15265:9;:16;15261:1;:20;15241:250;;;15303:12;15318:9;15328:1;15318:12;;;;;;;;:::i;:::-;;;;;;;;15303:27;;15349:7;15345:135;;;15396:4;15377:10;:16;15388:4;15377:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;15345:135;;;15448:10;:16;15459:4;15448:16;;;;;;;;;;;;;;;;15441:23;;;;;;;;;;;15345:135;15288:203;15283:3;;;;;:::i;:::-;;;;15241:250;;;;15151:347;;:::o;2630:136::-;2688:7;2715:43;2719:1;2722;2715:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2708:50;;2630:136;;;;:::o;2974:250::-;3032:7;3061:1;3056;:6;3052:47;;3086:1;3079:8;;;;3052:47;3111:9;3127:1;3123;:5;;;;:::i;:::-;3111:17;;3156:1;3151;3147;:5;;;;:::i;:::-;:10;3139:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3215:1;3208:8;;;2974:250;;;;;:::o;3232:132::-;3290:7;3317:39;3321:1;3324;3317:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3310:46;;3232:132;;;;:::o;19943:479::-;19984:28;20015:24;20033:4;20015:9;:24::i;:::-;19984:55;;20077:1;20054:20;:24;20050:365;;;20095:19;20117:26;:24;:26::i;:::-;20095:48;;20186:11;20162:20;:35;;:56;;;;;20202:16;;;;;;;;;;;20201:17;20162:56;:81;;;;;20222:21;;;;;;;;;;;20162:81;20158:246;;;20322:29;20339:11;20322:16;:29::i;:::-;20370:18;:16;:18::i;:::-;20158:246;20080:335;20050:365;19973:449;19943:479::o;22235:221::-;22300:12;22325:15;;;;;;;;;;;22317:29;;22355:9;22317:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22299:70;;;22384:7;22380:69;;;22413:24;22427:9;22413:24;;;;;;:::i;:::-;;;;;;;;22380:69;22288:168;22235:221;:::o;3372:191::-;3458:7;3490:1;3486;:5;3493:12;3478:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3517:9;3533:1;3529;:5;;;;:::i;:::-;3517:17;;3554:1;3547:8;;;3372:191;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:442::-;3719:4;3757:2;3746:9;3742:18;3734:26;;3770:71;3838:1;3827:9;3823:17;3814:6;3770:71;:::i;:::-;3851:72;3919:2;3908:9;3904:18;3895:6;3851:72;:::i;:::-;3933;4001:2;3990:9;3986:18;3977:6;3933:72;:::i;:::-;3570:442;;;;;;:::o;4018:329::-;4077:6;4126:2;4114:9;4105:7;4101:23;4097:32;4094:119;;;4132:79;;:::i;:::-;4094:119;4252:1;4277:53;4322:7;4313:6;4302:9;4298:22;4277:53;:::i;:::-;4267:63;;4223:117;4018:329;;;;:::o;4353:::-;4412:6;4461:2;4449:9;4440:7;4436:23;4432:32;4429:119;;;4467:79;;:::i;:::-;4429:119;4587:1;4612:53;4657:7;4648:6;4637:9;4633:22;4612:53;:::i;:::-;4602:63;;4558:117;4353:329;;;;:::o;4688:222::-;4781:4;4819:2;4808:9;4804:18;4796:26;;4832:71;4900:1;4889:9;4885:17;4876:6;4832:71;:::i;:::-;4688:222;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:152::-;5338:9;5371:37;5402:5;5371:37;:::i;:::-;5358:50;;5262:152;;;:::o;5420:183::-;5533:63;5590:5;5533:63;:::i;:::-;5528:3;5521:76;5420:183;;:::o;5609:274::-;5728:4;5766:2;5755:9;5751:18;5743:26;;5779:97;5873:1;5862:9;5858:17;5849:6;5779:97;:::i;:::-;5609:274;;;;:::o;5889:619::-;5966:6;5974;5982;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;6284:2;6310:53;6355:7;6346:6;6335:9;6331:22;6310:53;:::i;:::-;6300:63;;6255:118;6412:2;6438:53;6483:7;6474:6;6463:9;6459:22;6438:53;:::i;:::-;6428:63;;6383:118;5889:619;;;;;:::o;6514:134::-;6572:9;6605:37;6636:5;6605:37;:::i;:::-;6592:50;;6514:134;;;:::o;6654:166::-;6736:9;6769:45;6808:5;6769:45;:::i;:::-;6756:58;;6654:166;;;:::o;6826:195::-;6945:69;7008:5;6945:69;:::i;:::-;6940:3;6933:82;6826:195;;:::o;7027:286::-;7152:4;7190:2;7179:9;7175:18;7167:26;;7203:103;7303:1;7292:9;7288:17;7279:6;7203:103;:::i;:::-;7027:286;;;;:::o;7319:86::-;7354:7;7394:4;7387:5;7383:16;7372:27;;7319:86;;;:::o;7411:112::-;7494:22;7510:5;7494:22;:::i;:::-;7489:3;7482:35;7411:112;;:::o;7529:214::-;7618:4;7656:2;7645:9;7641:18;7633:26;;7669:67;7733:1;7722:9;7718:17;7709:6;7669:67;:::i;:::-;7529:214;;;;:::o;7749:117::-;7858:1;7855;7848:12;7872:117;7981:1;7978;7971:12;7995:117;8104:1;8101;8094:12;8135:568;8208:8;8218:6;8268:3;8261:4;8253:6;8249:17;8245:27;8235:122;;8276:79;;:::i;:::-;8235:122;8389:6;8376:20;8366:30;;8419:18;8411:6;8408:30;8405:117;;;8441:79;;:::i;:::-;8405:117;8555:4;8547:6;8543:17;8531:29;;8609:3;8601:4;8593:6;8589:17;8579:8;8575:32;8572:41;8569:128;;;8616:79;;:::i;:::-;8569:128;8135:568;;;;;:::o;8709:116::-;8779:21;8794:5;8779:21;:::i;:::-;8772:5;8769:32;8759:60;;8815:1;8812;8805:12;8759:60;8709:116;:::o;8831:133::-;8874:5;8912:6;8899:20;8890:29;;8928:30;8952:5;8928:30;:::i;:::-;8831:133;;;;:::o;8970:698::-;9062:6;9070;9078;9127:2;9115:9;9106:7;9102:23;9098:32;9095:119;;;9133:79;;:::i;:::-;9095:119;9281:1;9270:9;9266:17;9253:31;9311:18;9303:6;9300:30;9297:117;;;9333:79;;:::i;:::-;9297:117;9446:80;9518:7;9509:6;9498:9;9494:22;9446:80;:::i;:::-;9428:98;;;;9224:312;9575:2;9601:50;9643:7;9634:6;9623:9;9619:22;9601:50;:::i;:::-;9591:60;;9546:115;8970:698;;;;;:::o;9674:118::-;9761:24;9779:5;9761:24;:::i;:::-;9756:3;9749:37;9674:118;;:::o;9798:222::-;9891:4;9929:2;9918:9;9914:18;9906:26;;9942:71;10010:1;9999:9;9995:17;9986:6;9942:71;:::i;:::-;9798:222;;;;:::o;10026:619::-;10103:6;10111;10119;10168:2;10156:9;10147:7;10143:23;10139:32;10136:119;;;10174:79;;:::i;:::-;10136:119;10294:1;10319:53;10364:7;10355:6;10344:9;10340:22;10319:53;:::i;:::-;10309:63;;10265:117;10421:2;10447:53;10492:7;10483:6;10472:9;10468:22;10447:53;:::i;:::-;10437:63;;10392:118;10549:2;10575:53;10620:7;10611:6;10600:9;10596:22;10575:53;:::i;:::-;10565:63;;10520:118;10026:619;;;;;:::o;10651:180::-;10699:77;10696:1;10689:88;10796:4;10793:1;10786:15;10820:4;10817:1;10810:15;10837:281;10920:27;10942:4;10920:27;:::i;:::-;10912:6;10908:40;11050:6;11038:10;11035:22;11014:18;11002:10;10999:34;10996:62;10993:88;;;11061:18;;:::i;:::-;10993:88;11101:10;11097:2;11090:22;10880:238;10837:281;;:::o;11124:129::-;11158:6;11185:20;;:::i;:::-;11175:30;;11214:33;11242:4;11234:6;11214:33;:::i;:::-;11124:129;;;:::o;11259:311::-;11336:4;11426:18;11418:6;11415:30;11412:56;;;11448:18;;:::i;:::-;11412:56;11498:4;11490:6;11486:17;11478:25;;11558:4;11552;11548:15;11540:23;;11259:311;;;:::o;11593:710::-;11689:5;11714:81;11730:64;11787:6;11730:64;:::i;:::-;11714:81;:::i;:::-;11705:90;;11815:5;11844:6;11837:5;11830:21;11878:4;11871:5;11867:16;11860:23;;11931:4;11923:6;11919:17;11911:6;11907:30;11960:3;11952:6;11949:15;11946:122;;;11979:79;;:::i;:::-;11946:122;12094:6;12077:220;12111:6;12106:3;12103:15;12077:220;;;12186:3;12215:37;12248:3;12236:10;12215:37;:::i;:::-;12210:3;12203:50;12282:4;12277:3;12273:14;12266:21;;12153:144;12137:4;12132:3;12128:14;12121:21;;12077:220;;;12081:21;11695:608;;11593:710;;;;;:::o;12326:370::-;12397:5;12446:3;12439:4;12431:6;12427:17;12423:27;12413:122;;12454:79;;:::i;:::-;12413:122;12571:6;12558:20;12596:94;12686:3;12678:6;12671:4;12663:6;12659:17;12596:94;:::i;:::-;12587:103;;12403:293;12326:370;;;;:::o;12702:539::-;12786:6;12835:2;12823:9;12814:7;12810:23;12806:32;12803:119;;;12841:79;;:::i;:::-;12803:119;12989:1;12978:9;12974:17;12961:31;13019:18;13011:6;13008:30;13005:117;;;13041:79;;:::i;:::-;13005:117;13146:78;13216:7;13207:6;13196:9;13192:22;13146:78;:::i;:::-;13136:88;;12932:302;12702:539;;;;:::o;13247:323::-;13303:6;13352:2;13340:9;13331:7;13327:23;13323:32;13320:119;;;13358:79;;:::i;:::-;13320:119;13478:1;13503:50;13545:7;13536:6;13525:9;13521:22;13503:50;:::i;:::-;13493:60;;13449:114;13247:323;;;;:::o;13593:568::-;13666:8;13676:6;13726:3;13719:4;13711:6;13707:17;13703:27;13693:122;;13734:79;;:::i;:::-;13693:122;13847:6;13834:20;13824:30;;13877:18;13869:6;13866:30;13863:117;;;13899:79;;:::i;:::-;13863:117;14013:4;14005:6;14001:17;13989:29;;14067:3;14059:4;14051:6;14047:17;14037:8;14033:32;14030:41;14027:128;;;14074:79;;:::i;:::-;14027:128;13593:568;;;;;:::o;14167:934::-;14289:6;14297;14305;14313;14362:2;14350:9;14341:7;14337:23;14333:32;14330:119;;;14368:79;;:::i;:::-;14330:119;14516:1;14505:9;14501:17;14488:31;14546:18;14538:6;14535:30;14532:117;;;14568:79;;:::i;:::-;14532:117;14681:80;14753:7;14744:6;14733:9;14729:22;14681:80;:::i;:::-;14663:98;;;;14459:312;14838:2;14827:9;14823:18;14810:32;14869:18;14861:6;14858:30;14855:117;;;14891:79;;:::i;:::-;14855:117;15004:80;15076:7;15067:6;15056:9;15052:22;15004:80;:::i;:::-;14986:98;;;;14781:313;14167:934;;;;;;;:::o;15107:474::-;15175:6;15183;15232:2;15220:9;15211:7;15207:23;15203:32;15200:119;;;15238:79;;:::i;:::-;15200:119;15358:1;15383:53;15428:7;15419:6;15408:9;15404:22;15383:53;:::i;:::-;15373:63;;15329:117;15485:2;15511:53;15556:7;15547:6;15536:9;15532:22;15511:53;:::i;:::-;15501:63;;15456:118;15107:474;;;;;:::o;15587:180::-;15635:77;15632:1;15625:88;15732:4;15729:1;15722:15;15756:4;15753:1;15746:15;15773:320;15817:6;15854:1;15848:4;15844:12;15834:22;;15901:1;15895:4;15891:12;15922:18;15912:81;;15978:4;15970:6;15966:17;15956:27;;15912:81;16040:2;16032:6;16029:14;16009:18;16006:38;16003:84;;16059:18;;:::i;:::-;16003:84;15824:269;15773:320;;;:::o;16099:143::-;16156:5;16187:6;16181:13;16172:22;;16203:33;16230:5;16203:33;:::i;:::-;16099:143;;;;:::o;16248:351::-;16318:6;16367:2;16355:9;16346:7;16342:23;16338:32;16335:119;;;16373:79;;:::i;:::-;16335:119;16493:1;16518:64;16574:7;16565:6;16554:9;16550:22;16518:64;:::i;:::-;16508:74;;16464:128;16248:351;;;;:::o;16605:180::-;16653:77;16650:1;16643:88;16750:4;16747:1;16740:15;16774:4;16771:1;16764:15;16791:114;16858:6;16892:5;16886:12;16876:22;;16791:114;;;:::o;16911:184::-;17010:11;17044:6;17039:3;17032:19;17084:4;17079:3;17075:14;17060:29;;16911:184;;;;:::o;17101:132::-;17168:4;17191:3;17183:11;;17221:4;17216:3;17212:14;17204:22;;17101:132;;;:::o;17239:108::-;17316:24;17334:5;17316:24;:::i;:::-;17311:3;17304:37;17239:108;;:::o;17353:179::-;17422:10;17443:46;17485:3;17477:6;17443:46;:::i;:::-;17521:4;17516:3;17512:14;17498:28;;17353:179;;;;:::o;17538:113::-;17608:4;17640;17635:3;17631:14;17623:22;;17538:113;;;:::o;17687:732::-;17806:3;17835:54;17883:5;17835:54;:::i;:::-;17905:86;17984:6;17979:3;17905:86;:::i;:::-;17898:93;;18015:56;18065:5;18015:56;:::i;:::-;18094:7;18125:1;18110:284;18135:6;18132:1;18129:13;18110:284;;;18211:6;18205:13;18238:63;18297:3;18282:13;18238:63;:::i;:::-;18231:70;;18324:60;18377:6;18324:60;:::i;:::-;18314:70;;18170:224;18157:1;18154;18150:9;18145:14;;18110:284;;;18114:14;18410:3;18403:10;;17811:608;;;17687:732;;;;:::o;18425:483::-;18596:4;18634:2;18623:9;18619:18;18611:26;;18647:71;18715:1;18704:9;18700:17;18691:6;18647:71;:::i;:::-;18765:9;18759:4;18755:20;18750:2;18739:9;18735:18;18728:48;18793:108;18896:4;18887:6;18793:108;:::i;:::-;18785:116;;18425:483;;;;;:::o;18914:311::-;18991:4;19081:18;19073:6;19070:30;19067:56;;;19103:18;;:::i;:::-;19067:56;19153:4;19145:6;19141:17;19133:25;;19213:4;19207;19203:15;19195:23;;18914:311;;;:::o;19231:143::-;19288:5;19319:6;19313:13;19304:22;;19335:33;19362:5;19335:33;:::i;:::-;19231:143;;;;:::o;19397:732::-;19504:5;19529:81;19545:64;19602:6;19545:64;:::i;:::-;19529:81;:::i;:::-;19520:90;;19630:5;19659:6;19652:5;19645:21;19693:4;19686:5;19682:16;19675:23;;19746:4;19738:6;19734:17;19726:6;19722:30;19775:3;19767:6;19764:15;19761:122;;;19794:79;;:::i;:::-;19761:122;19909:6;19892:231;19926:6;19921:3;19918:15;19892:231;;;20001:3;20030:48;20074:3;20062:10;20030:48;:::i;:::-;20025:3;20018:61;20108:4;20103:3;20099:14;20092:21;;19968:155;19952:4;19947:3;19943:14;19936:21;;19892:231;;;19896:21;19510:619;;19397:732;;;;;:::o;20152:385::-;20234:5;20283:3;20276:4;20268:6;20264:17;20260:27;20250:122;;20291:79;;:::i;:::-;20250:122;20401:6;20395:13;20426:105;20527:3;20519:6;20512:4;20504:6;20500:17;20426:105;:::i;:::-;20417:114;;20240:297;20152:385;;;;:::o;20543:554::-;20638:6;20687:2;20675:9;20666:7;20662:23;20658:32;20655:119;;;20693:79;;:::i;:::-;20655:119;20834:1;20823:9;20819:17;20813:24;20864:18;20856:6;20853:30;20850:117;;;20886:79;;:::i;:::-;20850:117;20991:89;21072:7;21063:6;21052:9;21048:22;20991:89;:::i;:::-;20981:99;;20784:306;20543:554;;;;:::o;21103:182::-;21243:34;21239:1;21231:6;21227:14;21220:58;21103:182;:::o;21291:366::-;21433:3;21454:67;21518:2;21513:3;21454:67;:::i;:::-;21447:74;;21530:93;21619:3;21530:93;:::i;:::-;21648:2;21643:3;21639:12;21632:19;;21291:366;;;:::o;21663:419::-;21829:4;21867:2;21856:9;21852:18;21844:26;;21916:9;21910:4;21906:20;21902:1;21891:9;21887:17;21880:47;21944:131;22070:4;21944:131;:::i;:::-;21936:139;;21663:419;;;:::o;22088:180::-;22136:77;22133:1;22126:88;22233:4;22230:1;22223:15;22257:4;22254:1;22247:15;22274:410;22314:7;22337:20;22355:1;22337:20;:::i;:::-;22332:25;;22371:20;22389:1;22371:20;:::i;:::-;22366:25;;22426:1;22423;22419:9;22448:30;22466:11;22448:30;:::i;:::-;22437:41;;22627:1;22618:7;22614:15;22611:1;22608:22;22588:1;22581:9;22561:83;22538:139;;22657:18;;:::i;:::-;22538:139;22322:362;22274:410;;;;:::o;22690:351::-;22760:6;22809:2;22797:9;22788:7;22784:23;22780:32;22777:119;;;22815:79;;:::i;:::-;22777:119;22935:1;22960:64;23016:7;23007:6;22996:9;22992:22;22960:64;:::i;:::-;22950:74;;22906:128;22690:351;;;;:::o;23047:231::-;23187:34;23183:1;23175:6;23171:14;23164:58;23256:14;23251:2;23243:6;23239:15;23232:39;23047:231;:::o;23284:366::-;23426:3;23447:67;23511:2;23506:3;23447:67;:::i;:::-;23440:74;;23523:93;23612:3;23523:93;:::i;:::-;23641:2;23636:3;23632:12;23625:19;;23284:366;;;:::o;23656:419::-;23822:4;23860:2;23849:9;23845:18;23837:26;;23909:9;23903:4;23899:20;23895:1;23884:9;23880:17;23873:47;23937:131;24063:4;23937:131;:::i;:::-;23929:139;;23656:419;;;:::o;24081:229::-;24221:34;24217:1;24209:6;24205:14;24198:58;24290:12;24285:2;24277:6;24273:15;24266:37;24081:229;:::o;24316:366::-;24458:3;24479:67;24543:2;24538:3;24479:67;:::i;:::-;24472:74;;24555:93;24644:3;24555:93;:::i;:::-;24673:2;24668:3;24664:12;24657:19;;24316:366;;;:::o;24688:419::-;24854:4;24892:2;24881:9;24877:18;24869:26;;24941:9;24935:4;24931:20;24927:1;24916:9;24912:17;24905:47;24969:131;25095:4;24969:131;:::i;:::-;24961:139;;24688:419;;;:::o;25113:233::-;25152:3;25175:24;25193:5;25175:24;:::i;:::-;25166:33;;25221:66;25214:5;25211:77;25208:103;;25291:18;;:::i;:::-;25208:103;25338:1;25331:5;25327:13;25320:20;;25113:233;;;:::o;25352:225::-;25492:34;25488:1;25480:6;25476:14;25469:58;25561:8;25556:2;25548:6;25544:15;25537:33;25352:225;:::o;25583:366::-;25725:3;25746:67;25810:2;25805:3;25746:67;:::i;:::-;25739:74;;25822:93;25911:3;25822:93;:::i;:::-;25940:2;25935:3;25931:12;25924:19;;25583:366;;;:::o;25955:419::-;26121:4;26159:2;26148:9;26144:18;26136:26;;26208:9;26202:4;26198:20;26194:1;26183:9;26179:17;26172:47;26236:131;26362:4;26236:131;:::i;:::-;26228:139;;25955:419;;;:::o;26380:223::-;26520:34;26516:1;26508:6;26504:14;26497:58;26589:6;26584:2;26576:6;26572:15;26565:31;26380:223;:::o;26609:366::-;26751:3;26772:67;26836:2;26831:3;26772:67;:::i;:::-;26765:74;;26848:93;26937:3;26848:93;:::i;:::-;26966:2;26961:3;26957:12;26950:19;;26609:366;;;:::o;26981:419::-;27147:4;27185:2;27174:9;27170:18;27162:26;;27234:9;27228:4;27224:20;27220:1;27209:9;27205:17;27198:47;27262:131;27388:4;27262:131;:::i;:::-;27254:139;;26981:419;;;:::o;27406:221::-;27546:34;27542:1;27534:6;27530:14;27523:58;27615:4;27610:2;27602:6;27598:15;27591:29;27406:221;:::o;27633:366::-;27775:3;27796:67;27860:2;27855:3;27796:67;:::i;:::-;27789:74;;27872:93;27961:3;27872:93;:::i;:::-;27990:2;27985:3;27981:12;27974:19;;27633:366;;;:::o;28005:419::-;28171:4;28209:2;28198:9;28194:18;28186:26;;28258:9;28252:4;28248:20;28244:1;28233:9;28229:17;28222:47;28286:131;28412:4;28286:131;:::i;:::-;28278:139;;28005:419;;;:::o;28430:224::-;28570:34;28566:1;28558:6;28554:14;28547:58;28639:7;28634:2;28626:6;28622:15;28615:32;28430:224;:::o;28660:366::-;28802:3;28823:67;28887:2;28882:3;28823:67;:::i;:::-;28816:74;;28899:93;28988:3;28899:93;:::i;:::-;29017:2;29012:3;29008:12;29001:19;;28660:366;;;:::o;29032:419::-;29198:4;29236:2;29225:9;29221:18;29213:26;;29285:9;29279:4;29275:20;29271:1;29260:9;29256:17;29249:47;29313:131;29439:4;29313:131;:::i;:::-;29305:139;;29032:419;;;:::o;29457:222::-;29597:34;29593:1;29585:6;29581:14;29574:58;29666:5;29661:2;29653:6;29649:15;29642:30;29457:222;:::o;29685:366::-;29827:3;29848:67;29912:2;29907:3;29848:67;:::i;:::-;29841:74;;29924:93;30013:3;29924:93;:::i;:::-;30042:2;30037:3;30033:12;30026:19;;29685:366;;;:::o;30057:419::-;30223:4;30261:2;30250:9;30246:18;30238:26;;30310:9;30304:4;30300:20;30296:1;30285:9;30281:17;30274:47;30338:131;30464:4;30338:131;:::i;:::-;30330:139;;30057:419;;;:::o;30482:228::-;30622:34;30618:1;30610:6;30606:14;30599:58;30691:11;30686:2;30678:6;30674:15;30667:36;30482:228;:::o;30716:366::-;30858:3;30879:67;30943:2;30938:3;30879:67;:::i;:::-;30872:74;;30955:93;31044:3;30955:93;:::i;:::-;31073:2;31068:3;31064:12;31057:19;;30716:366;;;:::o;31088:419::-;31254:4;31292:2;31281:9;31277:18;31269:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31369:131;31495:4;31369:131;:::i;:::-;31361:139;;31088:419;;;:::o;31513:234::-;31653:34;31649:1;31641:6;31637:14;31630:58;31722:17;31717:2;31709:6;31705:15;31698:42;31513:234;:::o;31753:366::-;31895:3;31916:67;31980:2;31975:3;31916:67;:::i;:::-;31909:74;;31992:93;32081:3;31992:93;:::i;:::-;32110:2;32105:3;32101:12;32094:19;;31753:366;;;:::o;32125:419::-;32291:4;32329:2;32318:9;32314:18;32306:26;;32378:9;32372:4;32368:20;32364:1;32353:9;32349:17;32342:47;32406:131;32532:4;32406:131;:::i;:::-;32398:139;;32125:419;;;:::o;32550:224::-;32690:34;32686:1;32678:6;32674:14;32667:58;32759:7;32754:2;32746:6;32742:15;32735:32;32550:224;:::o;32780:366::-;32922:3;32943:67;33007:2;33002:3;32943:67;:::i;:::-;32936:74;;33019:93;33108:3;33019:93;:::i;:::-;33137:2;33132:3;33128:12;33121:19;;32780:366;;;:::o;33152:419::-;33318:4;33356:2;33345:9;33341:18;33333:26;;33405:9;33399:4;33395:20;33391:1;33380:9;33376:17;33369:47;33433:131;33559:4;33433:131;:::i;:::-;33425:139;;33152:419;;;:::o;33577:332::-;33698:4;33736:2;33725:9;33721:18;33713:26;;33749:71;33817:1;33806:9;33802:17;33793:6;33749:71;:::i;:::-;33830:72;33898:2;33887:9;33883:18;33874:6;33830:72;:::i;:::-;33577:332;;;;;:::o;33915:153::-;34055:5;34051:1;34043:6;34039:14;34032:29;33915:153;:::o;34074:365::-;34216:3;34237:66;34301:1;34296:3;34237:66;:::i;:::-;34230:73;;34312:93;34401:3;34312:93;:::i;:::-;34430:2;34425:3;34421:12;34414:19;;34074:365;;;:::o;34445:750::-;34695:4;34733:3;34722:9;34718:19;34710:27;;34747:71;34815:1;34804:9;34800:17;34791:6;34747:71;:::i;:::-;34865:9;34859:4;34855:20;34850:2;34839:9;34835:18;34828:48;34893:131;35019:4;34893:131;:::i;:::-;34885:139;;35034:72;35102:2;35091:9;35087:18;35078:6;35034:72;:::i;:::-;35116;35184:2;35173:9;35169:18;35160:6;35116:72;:::i;:::-;34445:750;;;;;;:::o;35201:76::-;35237:7;35266:5;35255:16;;35201:76;;;:::o;35283:372::-;35322:4;35342:19;35359:1;35342:19;:::i;:::-;35337:24;;35375:19;35392:1;35375:19;:::i;:::-;35370:24;;35418:1;35415;35411:9;35403:17;;35612:1;35606:4;35602:12;35598:1;35595;35591:9;35587:28;35570:1;35564:4;35560:12;35555:1;35552;35548:9;35541:17;35537:36;35521:104;35518:130;;;35628:18;;:::i;:::-;35518:130;35283:372;;;;:::o;35661:154::-;35801:6;35797:1;35789:6;35785:14;35778:30;35661:154;:::o;35821:365::-;35963:3;35984:66;36048:1;36043:3;35984:66;:::i;:::-;35977:73;;36059:93;36148:3;36059:93;:::i;:::-;36177:2;36172:3;36168:12;36161:19;;35821:365;;;:::o;36192:750::-;36442:4;36480:3;36469:9;36465:19;36457:27;;36494:71;36562:1;36551:9;36547:17;36538:6;36494:71;:::i;:::-;36612:9;36606:4;36602:20;36597:2;36586:9;36582:18;36575:48;36640:131;36766:4;36640:131;:::i;:::-;36632:139;;36781:72;36849:2;36838:9;36834:18;36825:6;36781:72;:::i;:::-;36863;36931:2;36920:9;36916:18;36907:6;36863:72;:::i;:::-;36192:750;;;;;;:::o;36948:663::-;37036:6;37044;37052;37101:2;37089:9;37080:7;37076:23;37072:32;37069:119;;;37107:79;;:::i;:::-;37069:119;37227:1;37252:64;37308:7;37299:6;37288:9;37284:22;37252:64;:::i;:::-;37242:74;;37198:128;37365:2;37391:64;37447:7;37438:6;37427:9;37423:22;37391:64;:::i;:::-;37381:74;;37336:129;37504:2;37530:64;37586:7;37577:6;37566:9;37562:22;37530:64;:::i;:::-;37520:74;;37475:129;36948:663;;;;;:::o;37617:553::-;37794:4;37832:3;37821:9;37817:19;37809:27;;37846:71;37914:1;37903:9;37899:17;37890:6;37846:71;:::i;:::-;37927:72;37995:2;37984:9;37980:18;37971:6;37927:72;:::i;:::-;38009;38077:2;38066:9;38062:18;38053:6;38009:72;:::i;:::-;38091;38159:2;38148:9;38144:18;38135:6;38091:72;:::i;:::-;37617:553;;;;;;;:::o;38176:194::-;38216:4;38236:20;38254:1;38236:20;:::i;:::-;38231:25;;38270:20;38288:1;38270:20;:::i;:::-;38265:25;;38314:1;38311;38307:9;38299:17;;38338:1;38332:4;38329:11;38326:37;;;38343:18;;:::i;:::-;38326:37;38176:194;;;;:::o;38376:191::-;38416:3;38435:20;38453:1;38435:20;:::i;:::-;38430:25;;38469:20;38487:1;38469:20;:::i;:::-;38464:25;;38512:1;38509;38505:9;38498:16;;38533:3;38530:1;38527:10;38524:36;;;38540:18;;:::i;:::-;38524:36;38376:191;;;;:::o;38573:177::-;38713:29;38709:1;38701:6;38697:14;38690:53;38573:177;:::o;38756:366::-;38898:3;38919:67;38983:2;38978:3;38919:67;:::i;:::-;38912:74;;38995:93;39084:3;38995:93;:::i;:::-;39113:2;39108:3;39104:12;39097:19;;38756:366;;;:::o;39128:419::-;39294:4;39332:2;39321:9;39317:18;39309:26;;39381:9;39375:4;39371:20;39367:1;39356:9;39352:17;39345:47;39409:131;39535:4;39409:131;:::i;:::-;39401:139;;39128:419;;;:::o;39553:85::-;39598:7;39627:5;39616:16;;39553:85;;;:::o;39644:158::-;39702:9;39735:61;39753:42;39762:32;39788:5;39762:32;:::i;:::-;39753:42;:::i;:::-;39735:61;:::i;:::-;39722:74;;39644:158;;;:::o;39808:147::-;39903:45;39942:5;39903:45;:::i;:::-;39898:3;39891:58;39808:147;;:::o;39961:831::-;40224:4;40262:3;40251:9;40247:19;40239:27;;40276:71;40344:1;40333:9;40329:17;40320:6;40276:71;:::i;:::-;40357:80;40433:2;40422:9;40418:18;40409:6;40357:80;:::i;:::-;40484:9;40478:4;40474:20;40469:2;40458:9;40454:18;40447:48;40512:108;40615:4;40606:6;40512:108;:::i;:::-;40504:116;;40630:72;40698:2;40687:9;40683:18;40674:6;40630:72;:::i;:::-;40712:73;40780:3;40769:9;40765:19;40756:6;40712:73;:::i;:::-;39961:831;;;;;;;;:::o;40798:180::-;40846:77;40843:1;40836:88;40943:4;40940:1;40933:15;40967:4;40964:1;40957:15;40984:185;41024:1;41041:20;41059:1;41041:20;:::i;:::-;41036:25;;41075:20;41093:1;41075:20;:::i;:::-;41070:25;;41114:1;41104:35;;41119:18;;:::i;:::-;41104:35;41161:1;41158;41154:9;41149:14;;40984:185;;;;:::o;41175:220::-;41315:34;41311:1;41303:6;41299:14;41292:58;41384:3;41379:2;41371:6;41367:15;41360:28;41175:220;:::o;41401:366::-;41543:3;41564:67;41628:2;41623:3;41564:67;:::i;:::-;41557:74;;41640:93;41729:3;41640:93;:::i;:::-;41758:2;41753:3;41749:12;41742:19;;41401:366;;;:::o;41773:419::-;41939:4;41977:2;41966:9;41962:18;41954:26;;42026:9;42020:4;42016:20;42012:1;42001:9;41997:17;41990:47;42054:131;42180:4;42054:131;:::i;:::-;42046:139;;41773:419;;;:::o;42198:147::-;42299:11;42336:3;42321:18;;42198:147;;;;:::o;42351:114::-;;:::o;42471:398::-;42630:3;42651:83;42732:1;42727:3;42651:83;:::i;:::-;42644:90;;42743:93;42832:3;42743:93;:::i;:::-;42861:1;42856:3;42852:11;42845:18;;42471:398;;;:::o;42875:379::-;43059:3;43081:147;43224:3;43081:147;:::i;:::-;43074:154;;43245:3;43238:10;;42875:379;;;:::o

Swarm Source

ipfs://75101884e33621166beb47cd3d21a1f24874de5a1c6dd9e634643a6a0fc6f539
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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