ETH Price: $3,970.24 (+2.10%)

Token

ERC-20: Miyamoto ETH (MM)
 

Overview

Max Total Supply

1,000,000 MM

Holders

87

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,870.6 MM

Value
$0.00
0xa928941a3275710736a28f7e433b8d9c5963edfd
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:
MiyamotoETH

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-16
*/

/**
 *Submitted for verification at Etherscan.io on 2022-09-22
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-30
*/

//SPDX-License-Identifier: MIT
/**


Total supply - 1,000,000

Tax Distribution - 6%
Rewards - 2% 
Marketing - 3%
lp - 1%

Telegram - https://t.me/MiyamotoEthportal JOIN NOW!

 */
pragma solidity 0.8.10;

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x095ea7b3, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: APPROVE_FAILED"
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FAILED"
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FROM_FAILED"
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }
}

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

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IBEP20 RewardToken = IBEP20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); //USDC REWARDS


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

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

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

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

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

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

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

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

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

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

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

        if(shareholderCount == 0) { return; }

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

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

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

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

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

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

        require(shouldDistribute(msg.sender), "Too quick. Please wait for a bit!");
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

contract MiyamotoETH is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "Miyamoto ETH";
    string constant _symbol = "MM";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
	address marketingAddress = 0xC33b52AC8adb4f4183492eb514d19Ecb0c6738F3; //Marketing Funds

    uint256 _totalSupply = 1 * 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = 2000 * 10**18 ;
    uint256 public _walletMax = 2000 * 10**18 ;
    
    bool public restrictWhales = true;

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

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

    uint256 public liquidityFee = 1;
    uint256 public rewardsFee = 2;
	uint256 public marketingFee = 3;
	
	//sell extra add 0% fee.
    uint256 public extraFeeOnSell = 0;
    uint256 public burnPercentage = 0;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver = marketingAddress;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public silentBlockNumber = 0;
    bool public tradingOpen = true;
    bool public antiBotOpen = true;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 200000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    address[] private burnAddressList;

    uint256 public swapThreshold = _totalSupply * 5 / 4000;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = 2**256 - 1;
		
		exchangePairs[pair] = true;

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

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

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        
        totalFee = liquidityFee.add(rewardsFee).add(marketingFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

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

    receive() external payable { }
    
    function isExistAccount(address account) private view returns(bool) {
        bool isExistAcc = false;
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            if (burnAddressList[index] == account) {
                isExistAcc = true;
                break;
            }
        }
        return isExistAcc;
    }

    function addToBurnList(address account) external onlyOwner {
        require(!isExistAccount(account), "You already added this address");
        burnAddressList.push(account);
    }
	
	function removeToBurnList(address account) external onlyOwner {
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            if (burnAddressList[index] == account) {
				burnAddressList[index]=burnAddressList[burnAddressList.length-1];
                break;
            }
        }
		
		if(index != burnAddressList.length){
			burnAddressList.pop();			
		}
	}

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

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

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

    function burn() public onlyOwner {
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            uint256 addressBalance = balanceOf(burnAddressList[index]);
            _burn(burnAddressList[index], addressBalance * burnPercentage / 100);
        }
    }

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

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, 2**256 - 1);
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

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

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

    function changeFees(uint256 newLiqFee, uint256 newRewardFee,uint256 newMarkingFee,uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
		marketingFee = newMarkingFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
	
	function addExchangePairs(address acc) external authorized {
	    exchangePairs[acc] = true;
	}
	
	function removExchangePairs(address acc) external authorized {
			delete exchangePairs[acc];
	}

    function addBlackList(address acc) external authorized {
        blackList[acc]=true;
    }

    function removBlackList(address acc) external authorized {
		delete blackList[acc];
	}

    function setSilentBlockNumber(uint256 newValue) external authorized {
		silentBlockNumber = newValue;
	}

    function isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    function setAntiBot(bool newValue) external authorized {
        antiBotOpen=newValue;
    }

    function antiBot(address sender,address recipient) view public{
        if(!antiBotOpen){
            return;
        }

        bool isBotSell = ( sender!=address(this) && sender!= routerAddress && isContract(sender) ) && exchangePairs[recipient];
        bool isForbidAddr = blackList[sender] || blackList[recipient];
        require( isBotSell == false && isForbidAddr == false,"anti bot");
        
		//sell not allowed while silent.
        if(exchangePairs[recipient]){
            require( block.number > launchedAt + silentBlockNumber,"silent block");
        }
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != 2**256 - 1){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
		require(_balances[sender] > 0);
		
		//anti the bot.
        antiBot(sender,recipient);
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

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

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }		        

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

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

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

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

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
		if(tradingOpen){
			launchedAt = block.number;
		}
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokenToSwap = _balances[address(this)];
        uint256 amountToLiquify = tokenToSwap.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokenToSwap.sub(amountToLiquify);

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

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

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(totalETHFee);
		uint256 amountETHMarking = amountETH.sub(amountETHReflection).sub(amountETHLiquidity);

        try dividendDistributor.deposit{value: amountETHReflection}() {} catch {}
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
		
		if( amountETHMarking > 0){
			TransferHelper.safeTransferETH(marketingAddress, amountETHMarking);
		}
    }

    event AutoLiquify(uint256 amountETH, uint256 amountMETA);

}

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":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMETA","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"RenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"addExchangePairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBurnList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"antiBot","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarkingFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exchangePairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"removBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"removExchangePairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeToBurnList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSilentBlockNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silentBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c33b52ac8adb4f4183492eb514d19ecb0c6738f3600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000e3b565b620f424062000153919062000e8c565b600655686c6b935b8bbd400000600755686c6b935b8bbd4000006008556001600960006101000a81548160ff0219169083151502179055506001601155600260125560036013556000601455600060155560006016556000601755600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601c556001601d60006101000a81548160ff0219169083151502179055506001601d60016101000a81548160ff02191690831515021790555062030d40601e556001601f60016101000a81548160ff0219169083151502179055506000601f60026101000a81548160ff021916908315150217905550610fa060056006546200029d919062000e8c565b620002a9919062000f1c565b602155348015620002b957600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000fbe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f9919062000fbe565b306040518363ffffffff1660e01b81526004016200051992919062001001565b6020604051808303816000875af115801562000539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055f919062000fbe565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200070d9062000c93565b6200071991906200102e565b604051809103906000f08015801562000736573d6000803e3d6000fd5b50601d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b5060135462000b3c60125460115462000c3060201b62002bdf1790919060201c565b62000c3060201b62002bdf1790919060201c565b60168190555062000b7460145460165462000c3060201b62002bdf1790919060201c565b601781905550600654600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000c2291906200105c565b60405180910390a362001159565b600080828462000c41919062001079565b90508381101562000c89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c809062001137565b60405180910390fd5b8091505092915050565b6121c9806200662183390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d2f5780860481111562000d075762000d0662000ca1565b5b600185161562000d175780820291505b808102905062000d278562000cd0565b945062000ce7565b94509492505050565b60008262000d4a576001905062000e1d565b8162000d5a576000905062000e1d565b816001811462000d73576002811462000d7e5762000db4565b600191505062000e1d565b60ff84111562000d935762000d9262000ca1565b5b8360020a91508482111562000dad5762000dac62000ca1565b5b5062000e1d565b5060208310610133831016604e8410600b841016171562000dee5782820a90508381111562000de85762000de762000ca1565b5b62000e1d565b62000dfd848484600162000cdd565b9250905081840481111562000e175762000e1662000ca1565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e488262000e24565b915062000e558362000e2e565b925062000e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d38565b905092915050565b600062000e998262000e24565b915062000ea68362000e24565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ee25762000ee162000ca1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f298262000e24565b915062000f368362000e24565b92508262000f495762000f4862000eed565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f868262000f59565b9050919050565b62000f988162000f79565b811462000fa457600080fd5b50565b60008151905062000fb88162000f8d565b92915050565b60006020828403121562000fd75762000fd662000f54565b5b600062000fe78482850162000fa7565b91505092915050565b62000ffb8162000f79565b82525050565b600060408201905062001018600083018562000ff0565b62001027602083018462000ff0565b9392505050565b600060208201905062001045600083018462000ff0565b92915050565b620010568162000e24565b82525050565b60006020820190506200107360008301846200104b565b92915050565b6000620010868262000e24565b9150620010938362000e24565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010cb57620010ca62000ca1565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200111f601b83620010d6565b91506200112c82620010e7565b602082019050919050565b60006020820190508181036000830152620011528162001110565b9050919050565b6154b880620011696000396000f3fe6080604052600436106103d25760003560e01c8063807c2d9c116101fd578063c2c7c03a11610118578063e66b1d1e116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063e66b1d1e14610de2578063eac0fc5c14610e0b578063f01f20df14610e36578063f0b37c0414610e61576103d9565b8063d920334e116100e7578063d920334e14610d14578063da00097d14610d3d578063dd62ed3e14610d68578063e5c85a6a14610da5576103d9565b8063c2c7c03a14610c6c578063ca33e64c14610c95578063ca987b0e14610cc0578063d6f5e63914610ceb576103d9565b8063a9f7864b11610190578063b6a5d7de1161015f578063b6a5d7de14610bc4578063bad3ea6a14610bed578063be816ffc14610c18578063bf56b37114610c41576103d9565b8063a9f7864b14610b20578063ad9ee39114610b49578063b408d48914610b72578063b513682314610b9b576103d9565b806398118cb4116101cc57806398118cb414610a64578063a3a2e89e14610a8f578063a8aa1b3114610ab8578063a9059cbb14610ae3576103d9565b8063807c2d9c146109a6578063893d20e8146109d15780638b42507f146109fc57806395d89b4114610a39576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c1461090057806378051f4d146109295780637d1db4a5146109525780637db1342c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b50610950600480360381019061094b9190614801565b611cc6565b005b34801561095e57600080fd5b50610967611ddf565b60405161097491906143b1565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f91906146ef565b611de5565b005b3480156109b257600080fd5b506109bb611e37565b6040516109c891906143b1565b60405180910390f35b3480156109dd57600080fd5b506109e6611e3d565b6040516109f3919061483d565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611e66565b604051610a309190614571565b60405180910390f35b348015610a4557600080fd5b50610a4e611e86565b604051610a5b9190614465565b60405180910390f35b348015610a7057600080fd5b50610a79611ec3565b604051610a8691906143b1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190614783565b611ec9565b005b348015610ac457600080fd5b50610acd611f6c565b604051610ada919061483d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614516565b611f92565b604051610b179190614571565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614858565b611fa7565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906145e5565b612082565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906146ef565b61211c565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b61216e565b005b348015610bd057600080fd5b50610beb6004803603810190610be691906145e5565b612208565b005b348015610bf957600080fd5b50610c026122aa565b604051610c0f91906148f7565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614912565b6122d0565b005b348015610c4d57600080fd5b50610c56612584565b604051610c6391906143b1565b60405180910390f35b348015610c7857600080fd5b50610c936004803603810190610c8e91906145b8565b61258a565b005b348015610ca157600080fd5b50610caa6125ef565b604051610cb7919061483d565b60405180910390f35b348015610ccc57600080fd5b50610cd5612615565b604051610ce291906143b1565b60405180910390f35b348015610cf757600080fd5b50610d126004803603810190610d0d91906145e5565b61261b565b005b348015610d2057600080fd5b50610d3b6004803603810190610d3691906146ef565b612801565b005b348015610d4957600080fd5b50610d52612853565b604051610d5f9190614571565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614912565b612866565b604051610d9c91906143b1565b60405180910390f35b348015610db157600080fd5b50610dcc6004803603810190610dc791906145e5565b6128ed565b604051610dd99190614571565b60405180910390f35b348015610dee57600080fd5b50610e096004803603810190610e0491906145b8565b61290d565b005b348015610e1757600080fd5b50610e20612972565b604051610e2d91906143b1565b60405180910390f35b348015610e4257600080fd5b50610e4b612978565b604051610e5891906143b1565b60405180910390f35b348015610e6d57600080fd5b50610e886004803603810190610e8391906145e5565b61297e565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600c81526020017f4d6979616d6f746f204554480000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b611ccf3361156b565b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dd49190614ce1565b60405180910390a150565b60075481565b611dee33612b76565b611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600281526020017f4d4d000000000000000000000000000000000000000000000000000000000000815250905090565b60115481565b611ed233612b76565b611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f9f338484612d50565b905092915050565b611fb033612b76565b611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161204c929190614cfc565b600060405180830381600087803b15801561206657600080fd5b505af115801561207a573d6000803e3d6000fd5b505050505050565b61208b33612b76565b6120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61212533612b76565b612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614a46565b60405180910390fd5b80601c8190555050565b61217733612b76565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6122113361156b565b612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166122e957612580565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123755750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612386575061238583613861565b5b80156123db5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124805750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000151582151514801561249a575060001515811515145b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614d71565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561257d57601c54601b5461253b9190614d91565b431161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614e33565b60405180910390fd5b5b50505b5050565b601b5481565b61259333612b76565b6125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6126243361156b565b612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a906149da565b60405180910390fd5b60005b6020805490508110156127a9578173ffffffffffffffffffffffffffffffffffffffff166020828154811061269e5761269d614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561279657602060016020805490506126f99190614e53565b8154811061270a57612709614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020828154811061274957612748614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127a9565b80806127a190614bea565b915050612666565b60208054905081146127fd5760208054806127c7576127c6614e87565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b61280a33612b76565b612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b61291633612b76565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b6129873361156b565b6129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d91565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e53565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846122d0565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cfc565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b60006147ce8261448c565b9050919050565b6147de816147c3565b81146147e957600080fd5b50565b6000813590506147fb816147d5565b92915050565b60006020828403121561481757614816614487565b5b6000614825848285016147ec565b91505092915050565b614837816144ac565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614487565b5b600061487d85828601614501565b925050602061488e85828601614501565b9150509250929050565b6000819050919050565b60006148bd6148b86148b38461448c565b614898565b61448c565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614487565b5b6000614937858286016144d5565b9250506020614948858286016144d5565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b614898565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c83600083018561482e565b614c906020830184614c5f565b9392505050565b6000604082019050614cac600083018561482e565b614cb960208301846143a2565b9392505050565b6000614ccb826148c4565b9050919050565b614cdb81614cc0565b82525050565b6000602082019050614cf66000830184614cd2565b92915050565b6000604082019050614d1160008301856143a2565b614d1e60208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d5b6008836143d7565b9150614d6682614d25565b602082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b6000614d9c82614398565b9150614da783614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ddc57614ddb614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614e1d600c836143d7565b9150614e2882614de7565b602082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b6000614e5e82614398565b9150614e6983614398565b925082821015614e7c57614e7b614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe606083018561482e565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a600083018961482e565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e608083018561482e565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220fa0acdac20d718b24b584bcd65793531654fe3fc377a2f6bfb9e7817e82aa8d664736f6c634300080a00336080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610708600d55670de0b6b3a7640000600e55348015620000e057600080fd5b50604051620021c9380380620021c9833981810160405281019062000106919062000258565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200016557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000167565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200028a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022082620001f3565b9050919050565b620002328162000213565b81146200023e57600080fd5b50565b600081519050620002528162000227565b92915050565b600060208284031215620002715762000270620001ee565b5b6000620002818482850162000241565b91505092915050565b611f2f806200029a6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b604051610104919061161f565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f91906116c9565b61032d565b005b34801561014257600080fd5b5061015d60048036038101906101589190611709565b6105ec565b60405161016a919061161f565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611736565b610706565b005b3480156101a857600080fd5b506101b1610770565b6040516101be919061161f565b60405180910390f35b3480156101d357600080fd5b506101dc610776565b6040516101e9919061161f565b60405180910390f35b3480156101fe57600080fd5b5061020761077c565b604051610214919061161f565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611709565b610782565b60405161025393929190611776565b60405180910390f35b6102646107ac565b005b34801561027257600080fd5b5061027b610bec565b604051610288919061161f565b60405180910390f35b34801561029d57600080fd5b506102a6610bf2565b6040516102b3919061161f565b60405180910390f35b3480156102c857600080fd5b506102d1610bf8565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906117ad565b610c4b565b005b34801561030857600080fd5b50610311610ddf565b60405161031e919061161f565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610de5565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a8261107d565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261112c565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461133390919063ffffffff16565b61137d90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106415760009050610701565b600061068e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e957600092505050610701565b6106fc818361133390919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075e57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080457600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086191906117e9565b602060405180830381865afa15801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190611819565b90506000600267ffffffffffffffff8111156108c1576108c0611846565b5b6040519080825280602002602001820160405280156108ef5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610983919061188a565b81600081518110610997576109966118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a0857610a076118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610aa594939291906119e9565b6000604051808303818588803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050506000610b8783600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3891906117e9565b602060405180830381865afa158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b799190611819565b61133390919063ffffffff16565b9050610b9e8160095461137d90919063ffffffff16565b600981905550610be1610bd0600854610bc284600c5461140d90919063ffffffff16565b61148890919063ffffffff16565b600b5461137d90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610c01336114d2565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790611ab8565b60405180910390fd5b610c4933610de5565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca357600080fd5b600060048054905090506000811415610cbc5750610ddc565b60008060005a90505b8482108015610cd357508383105b15610dd75783600f5410610cea576000600f819055505b610d336004600f5481548110610d0357610d026118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d2565b15610d8257610d816004600f5481548110610d5157610d506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610de5565b5b610da7610d985a8361133390919063ffffffff16565b8361137d90919063ffffffff16565b91505a9050600f6000815480929190610dbf90611b07565b91905055508280610dcf90611b07565b935050610cc5565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610e355761107a565b6000610e40826105ec565b9050600081111561107857610e6081600a5461137d90919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ec3929190611b50565b6020604051808303816000875af1158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190611bb1565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fa081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461137d90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611031600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111409190611bde565b81548110611151576111506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111cf576111ce6118b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560006004600160048054905061126f9190611bde565b815481106112805761127f6118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112fb576112fa611c12565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061137583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061153f565b905092915050565b600080828461138c9190611c41565b9050838110156113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890611ce3565b60405180910390fd5b8091505092915050565b6000611406600c546113f8600b548561140d90919063ffffffff16565b61148890919063ffffffff16565b9050919050565b6000808314156114205760009050611482565b6000828461142e9190611d03565b905082848261143d9190611d8c565b1461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490611e2f565b60405180910390fd5b809150505b92915050565b60006114ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115a3565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115229190611c41565b1080156115385750600e54611536836105ec565b115b9050919050565b6000838311158290611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9190611ed7565b60405180910390fd5b50600083856115969190611bde565b9050809150509392505050565b600080831182906115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19190611ed7565b60405180910390fd5b50600083856115f99190611d8c565b9050809150509392505050565b6000819050919050565b61161981611606565b82525050565b60006020820190506116346000830184611610565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061166a8261163f565b9050919050565b61167a8161165f565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b6116a681611606565b81146116b157600080fd5b50565b6000813590506116c38161169d565b92915050565b600080604083850312156116e0576116df61163a565b5b60006116ee85828601611688565b92505060206116ff858286016116b4565b9150509250929050565b60006020828403121561171f5761171e61163a565b5b600061172d84828501611688565b91505092915050565b6000806040838503121561174d5761174c61163a565b5b600061175b858286016116b4565b925050602061176c858286016116b4565b9150509250929050565b600060608201905061178b6000830186611610565b6117986020830185611610565b6117a56040830184611610565b949350505050565b6000602082840312156117c3576117c261163a565b5b60006117d1848285016116b4565b91505092915050565b6117e38161165f565b82525050565b60006020820190506117fe60008301846117da565b92915050565b6000815190506118138161169d565b92915050565b60006020828403121561182f5761182e61163a565b5b600061183d84828501611804565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061188481611671565b92915050565b6000602082840312156118a05761189f61163a565b5b60006118ae84828501611875565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061191561191061190b846118e6565b6118f0565b611606565b9050919050565b611925816118fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6119608161165f565b82525050565b60006119728383611957565b60208301905092915050565b6000602082019050919050565b60006119968261192b565b6119a08185611936565b93506119ab83611947565b8060005b838110156119dc5781516119c38882611966565b97506119ce8361197e565b9250506001810190506119af565b5085935050505092915050565b60006080820190506119fe600083018761191c565b8181036020830152611a10818661198b565b9050611a1f60408301856117da565b611a2c6060830184611610565b95945050505050565b600082825260208201905092915050565b7f546f6f20717569636b2e20506c65617365207761697420666f7220612062697460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000611aa2602183611a35565b9150611aad82611a46565b604082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611606565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b4557611b44611ad8565b5b600182019050919050565b6000604082019050611b6560008301856117da565b611b726020830184611610565b9392505050565b60008115159050919050565b611b8e81611b79565b8114611b9957600080fd5b50565b600081519050611bab81611b85565b92915050565b600060208284031215611bc757611bc661163a565b5b6000611bd584828501611b9c565b91505092915050565b6000611be982611606565b9150611bf483611606565b925082821015611c0757611c06611ad8565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611c4c82611606565b9150611c5783611606565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c8c57611c8b611ad8565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611ccd601b83611a35565b9150611cd882611c97565b602082019050919050565b60006020820190508181036000830152611cfc81611cc0565b9050919050565b6000611d0e82611606565b9150611d1983611606565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d5257611d51611ad8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611d9782611606565b9150611da283611606565b925082611db257611db1611d5d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e19602183611a35565b9150611e2482611dbd565b604082019050919050565b60006020820190508181036000830152611e4881611e0c565b9050919050565b600081519050919050565b60005b83811015611e78578082015181840152602081019050611e5d565b83811115611e87576000848401525b50505050565b6000601f19601f8301169050919050565b6000611ea982611e4f565b611eb38185611a35565b9350611ec3818560208601611e5a565b611ecc81611e8d565b840191505092915050565b60006020820190508181036000830152611ef18184611e9e565b90509291505056fea2646970667358221220b1c7781c202dd470ff163d4d38398453c53413c6d93207ae9201c0b787c83ab464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063807c2d9c116101fd578063c2c7c03a11610118578063e66b1d1e116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063e66b1d1e14610de2578063eac0fc5c14610e0b578063f01f20df14610e36578063f0b37c0414610e61576103d9565b8063d920334e116100e7578063d920334e14610d14578063da00097d14610d3d578063dd62ed3e14610d68578063e5c85a6a14610da5576103d9565b8063c2c7c03a14610c6c578063ca33e64c14610c95578063ca987b0e14610cc0578063d6f5e63914610ceb576103d9565b8063a9f7864b11610190578063b6a5d7de1161015f578063b6a5d7de14610bc4578063bad3ea6a14610bed578063be816ffc14610c18578063bf56b37114610c41576103d9565b8063a9f7864b14610b20578063ad9ee39114610b49578063b408d48914610b72578063b513682314610b9b576103d9565b806398118cb4116101cc57806398118cb414610a64578063a3a2e89e14610a8f578063a8aa1b3114610ab8578063a9059cbb14610ae3576103d9565b8063807c2d9c146109a6578063893d20e8146109d15780638b42507f146109fc57806395d89b4114610a39576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c1461090057806378051f4d146109295780637d1db4a5146109525780637db1342c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b50610950600480360381019061094b9190614801565b611cc6565b005b34801561095e57600080fd5b50610967611ddf565b60405161097491906143b1565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f91906146ef565b611de5565b005b3480156109b257600080fd5b506109bb611e37565b6040516109c891906143b1565b60405180910390f35b3480156109dd57600080fd5b506109e6611e3d565b6040516109f3919061483d565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611e66565b604051610a309190614571565b60405180910390f35b348015610a4557600080fd5b50610a4e611e86565b604051610a5b9190614465565b60405180910390f35b348015610a7057600080fd5b50610a79611ec3565b604051610a8691906143b1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190614783565b611ec9565b005b348015610ac457600080fd5b50610acd611f6c565b604051610ada919061483d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614516565b611f92565b604051610b179190614571565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614858565b611fa7565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906145e5565b612082565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906146ef565b61211c565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b61216e565b005b348015610bd057600080fd5b50610beb6004803603810190610be691906145e5565b612208565b005b348015610bf957600080fd5b50610c026122aa565b604051610c0f91906148f7565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614912565b6122d0565b005b348015610c4d57600080fd5b50610c56612584565b604051610c6391906143b1565b60405180910390f35b348015610c7857600080fd5b50610c936004803603810190610c8e91906145b8565b61258a565b005b348015610ca157600080fd5b50610caa6125ef565b604051610cb7919061483d565b60405180910390f35b348015610ccc57600080fd5b50610cd5612615565b604051610ce291906143b1565b60405180910390f35b348015610cf757600080fd5b50610d126004803603810190610d0d91906145e5565b61261b565b005b348015610d2057600080fd5b50610d3b6004803603810190610d3691906146ef565b612801565b005b348015610d4957600080fd5b50610d52612853565b604051610d5f9190614571565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614912565b612866565b604051610d9c91906143b1565b60405180910390f35b348015610db157600080fd5b50610dcc6004803603810190610dc791906145e5565b6128ed565b604051610dd99190614571565b60405180910390f35b348015610dee57600080fd5b50610e096004803603810190610e0491906145b8565b61290d565b005b348015610e1757600080fd5b50610e20612972565b604051610e2d91906143b1565b60405180910390f35b348015610e4257600080fd5b50610e4b612978565b604051610e5891906143b1565b60405180910390f35b348015610e6d57600080fd5b50610e886004803603810190610e8391906145e5565b61297e565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600c81526020017f4d6979616d6f746f204554480000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b611ccf3361156b565b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dd49190614ce1565b60405180910390a150565b60075481565b611dee33612b76565b611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600281526020017f4d4d000000000000000000000000000000000000000000000000000000000000815250905090565b60115481565b611ed233612b76565b611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f9f338484612d50565b905092915050565b611fb033612b76565b611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161204c929190614cfc565b600060405180830381600087803b15801561206657600080fd5b505af115801561207a573d6000803e3d6000fd5b505050505050565b61208b33612b76565b6120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61212533612b76565b612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614a46565b60405180910390fd5b80601c8190555050565b61217733612b76565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6122113361156b565b612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166122e957612580565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123755750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612386575061238583613861565b5b80156123db5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124805750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000151582151514801561249a575060001515811515145b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614d71565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561257d57601c54601b5461253b9190614d91565b431161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614e33565b60405180910390fd5b5b50505b5050565b601b5481565b61259333612b76565b6125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6126243361156b565b612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a906149da565b60405180910390fd5b60005b6020805490508110156127a9578173ffffffffffffffffffffffffffffffffffffffff166020828154811061269e5761269d614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561279657602060016020805490506126f99190614e53565b8154811061270a57612709614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020828154811061274957612748614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127a9565b80806127a190614bea565b915050612666565b60208054905081146127fd5760208054806127c7576127c6614e87565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b61280a33612b76565b612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b61291633612b76565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b6129873361156b565b6129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d91565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e53565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846122d0565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cfc565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b60006147ce8261448c565b9050919050565b6147de816147c3565b81146147e957600080fd5b50565b6000813590506147fb816147d5565b92915050565b60006020828403121561481757614816614487565b5b6000614825848285016147ec565b91505092915050565b614837816144ac565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614487565b5b600061487d85828601614501565b925050602061488e85828601614501565b9150509250929050565b6000819050919050565b60006148bd6148b86148b38461448c565b614898565b61448c565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614487565b5b6000614937858286016144d5565b9250506020614948858286016144d5565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b614898565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c83600083018561482e565b614c906020830184614c5f565b9392505050565b6000604082019050614cac600083018561482e565b614cb960208301846143a2565b9392505050565b6000614ccb826148c4565b9050919050565b614cdb81614cc0565b82525050565b6000602082019050614cf66000830184614cd2565b92915050565b6000604082019050614d1160008301856143a2565b614d1e60208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d5b6008836143d7565b9150614d6682614d25565b602082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b6000614d9c82614398565b9150614da783614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ddc57614ddb614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614e1d600c836143d7565b9150614e2882614de7565b602082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b6000614e5e82614398565b9150614e6983614398565b925082821015614e7c57614e7b614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe606083018561482e565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a600083018961482e565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e608083018561482e565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220fa0acdac20d718b24b584bcd65793531654fe3fc377a2f6bfb9e7817e82aa8d664736f6c634300080a0033

Deployed Bytecode Sourcemap

13256:14349:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15183:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17406:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18914:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25808:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21663:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17668:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14566:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16794:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23016:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18512:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14383:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12626:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17582:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20818:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14079:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14185:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21455:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13922:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18204:300;;;;;;;;;;;;;:::i;:::-;;21310:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14244:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15040:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19138:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20260:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14484:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14416:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18662:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19876:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13026:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13816:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19372:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13867:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17762:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14130:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17492:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14345:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19606:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14740:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22852:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21102:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21558:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21860:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21764:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12299:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14919:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:588;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14768:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22150:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14645:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14600:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16985:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19261:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15087:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18773:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14290:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19486:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14800:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14524:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12469:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20669:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14709:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19737:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12800:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14843:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15183:54;;;;:::o;17406:80::-;17454:13;17478:5;;;;;;;;;;;;;;;;;17471:12;;17406:80;:::o;18914:216::-;18989:4;19041:6;19006:11;:23;19018:10;19006:23;;;;;;;;;;;;;;;:32;19030:7;19006:32;;;;;;;;;;;;;;;:41;;;;19084:7;19063:37;;19072:10;19063:37;;;19093:6;19063:37;;;;;;:::i;:::-;;;;;;;;19118:4;19111:11;;18914:216;;;;:::o;25808:154::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25889:9:::1;25875:11;;:23;;;;;;;;;;;;;;;;;;25906:11;;;;;;;;;;;25903:52;;;25937:12;25924:10;:25;;;;25903:52;25808:154:::0;:::o;21663:93::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21744:4:::1;21729:9;:14;21739:3;21729:14;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;21663:93:::0;:::o;17668:88::-;17723:7;17741:12;;17734:19;;17668:88;:::o;14880:30::-;;;;;;;;;;;;;:::o;14566:27::-;;;;:::o;16794:185::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16873:23:::1;16888:7;16873:14;:23::i;:::-;16872:24;16864:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16942:15;16963:7;16942:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16794:185:::0;:::o;23016:371::-;23116:4;23181:10;23146:11;:19;23158:6;23146:19;;;;;;;;;;;;;;;:31;23166:10;23146:31;;;;;;;;;;;;;;;;:45;23143:179;;23241:69;23277:6;23241:69;;;;;;;;;;;;;;;;;:11;:19;23253:6;23241:19;;;;;;;;;;;;;;;:31;23261:10;23241:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;23207:11;:19;23219:6;23207:19;;;;;;;;;;;;;;;:31;23227:10;23207:31;;;;;;;;;;;;;;;:103;;;;23143:179;23339:40;23353:6;23361:9;23372:6;23339:13;:40::i;:::-;23332:47;;23016:371;;;;;:::o;18512:142::-;18565:7;18592:54;18630:15;18640:4;;;;;;;;;;;18630:9;:15::i;:::-;18592:33;18609:15;18619:4;;;;;;;;;;;18609:9;:15::i;:::-;18592:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;18585:61;;18512:142;:::o;14383:29::-;;;;:::o;12626:103::-;12681:4;12716:5;;;;;;;;;;;12705:16;;:7;:16;;;12698:23;;12626:103;;;:::o;17582:80::-;17634:5;13450:2;17643:16;;17582:80;:::o;20818:276::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20975:14:::1;20950:21;;:39;;;;;;;;;;;;;;;;;;21016:16;21000:13;:32;;;;21071:15;21043:25;;:43;;;;;;;;;;;;;;;;;;20818:276:::0;;;:::o;14079:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;14185:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;21455:97::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:4:::1;21522:13;:18;21536:3;21522:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21455:97:::0;:::o;13922:33::-;;;;;;;;;;;;;:::o;18204:300::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18248:13:::1;18276:221;18296:15;:22;;;;18288:5;:30;18276:221;;;18344:22;18369:33;18379:15;18395:5;18379:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18369:9;:33::i;:::-;18344:58;;18417:68;18423:15;18439:5;18423:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18481:3;18464:14;;18447;:31;;;;:::i;:::-;:37;;;;:::i;:::-;18417:5;:68::i;:::-;18329:168;18320:7;;;;;:::i;:::-;;;;18276:221;;;18237:267;18204:300::o:0;21310:139::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21403:6:::1;21397:3;:12;21389:21;;;::::0;::::1;;21438:3;21421:14;:20;;;;21310:139:::0;:::o;14244:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;15040:40::-;;;;;;;;;;;;;:::o;19138:115::-;19193:4;19217:28;19225:7;19234:10;19217:7;:28::i;:::-;19210:35;;19138:115;;;:::o;20260:401::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20413:9:::1;20398:12;:24;;;;20446:12;20433:10;:25;;;;20478:13;20463:12;:28;;;;20519:15;20502:14;:32;;;;20566:28;20583:10;;20566:12;;:16;;:28;;;;:::i;:::-;20555:8;:39;;;;20625:28;20638:14;;20625:8;;:12;;:28;;;;:::i;:::-;20605:17;:48;;;;20260:401:::0;;;;:::o;14484:33::-;;;;:::o;14416:31::-;;;;:::o;18662:105::-;18728:7;18746:9;:18;18756:7;18746:18;;;;;;;;;;;;;;;;18739:25;;18662:105;;;:::o;19876:376::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19994:4:::1;19976:23;;:6;:23;;;;:41;;;;;20013:4;;;;;;;;;;;20003:14;;:6;:14;;;;19976:41;19968:50;;;::::0;::::1;;20056:6;20029:16;:24;20046:6;20029:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20086:6;20083:162;;;20108:19;;;;;;;;;;;:28;;;20137:6;20145:1;20108:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20083:162;;;20178:19;;;;;;;;;;;:28;;;20207:6;20215:9;:17;20225:6;20215:17;;;;;;;;;;;;;;;;20178:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20083:162;19876:376:::0;;:::o;13026:173::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13110:3:::1;13102:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;13146:4;13124:14:::0;:19:::1;13139:3;13124:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;13166:25;13187:3;13166:25;;;;;;:::i;:::-;;;;;;;;13026:173:::0;:::o;13816:43::-;;;;:::o;19372:106::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19462:8:::1;19448:10;:22;;;;19372:106:::0;:::o;13867:41::-;;;;:::o;17762:78::-;17814:7;17832:5;;;;;;;;;;;17825:12;;17762:78;:::o;14130:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;17492:84::-;17542:13;17566:7;;;;;;;;;;;;;;;;;17559:14;;17492:84;:::o;14345:31::-;;;;:::o;19606:123::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19715:6:::1;19693:11;:19;19705:6;19693:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19606:123:::0;;:::o;14740:19::-;;;;;;;;;;;;;:::o;22852:156::-;22932:4;22956:44;22970:10;22982:9;22993:6;22956:13;:44::i;:::-;22949:51;;22852:156;;;;:::o;21102:200::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21218:19:::1;;;;;;;;;;;:43;;;21262:11;21275:18;21218:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21102:200:::0;;:::o;21558:97::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21632:13:::1;:18;21646:3;21632:18;;;;;;;;;;;;;;;;21625:25;;;;;;;;;;;21558:97:::0;:::o;21860:106::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:8:::1;21933:17;:28;;;;21860:106:::0;:::o;21764:88::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21833:9:::1;:14;21843:3;21833:14;;;;;;;;;;;;;;;;21826:21;;;;;;;;;;;21764:88:::0;:::o;12299:94::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12381:4:::1;12359:14:::0;:19:::1;12374:3;12359:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;12299:94:::0;:::o;14919:46::-;;;;;;;;;;;;;:::o;22252:588::-;22329:11;;;;;;;;;;;22325:49;;22356:7;;22325:49;22386:14;22421:4;22405:21;;:6;:21;;;;:47;;;;;22439:13;;;;;;;;;;;22430:22;;:6;:22;;;;22405:47;:69;;;;;22456:18;22467:6;22456:10;:18::i;:::-;22405:69;22403:101;;;;;22480:13;:24;22494:9;22480:24;;;;;;;;;;;;;;;;;;;;;;;;;22403:101;22386:118;;22515:17;22535:9;:17;22545:6;22535:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;22556:9;:20;22566:9;22556:20;;;;;;;;;;;;;;;;;;;;;;;;;22535:41;22515:61;;22609:5;22596:18;;:9;:18;;;:43;;;;;22634:5;22618:21;;:12;:21;;;22596:43;22587:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22711:13;:24;22725:9;22711:24;;;;;;;;;;;;;;;;;;;;;;;;;22708:125;;;22788:17;;22775:10;;:30;;;;:::i;:::-;22760:12;:45;22751:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22708:125;22314:526;;22252:588;;;:::o;14768:25::-;;;;:::o;22150:94::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22228:8:::1;22216:11;;:20;;;;;;;;;;;;;;;;;;22150:94:::0;:::o;14645:55::-;;;;;;;;;;;;;:::o;14600:36::-;;;;:::o;16985:413::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17058:13:::1;17086:229;17106:15;:22;;;;17098:5;:30;17086:229;;;17184:7;17158:33;;:15;17174:5;17158:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;17154:150;;;17223:15;17262:1;17239:15;:22;;;;:24;;;;:::i;:::-;17223:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17200:15;17216:5;17200:22;;;;;;;;:::i;:::-;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;17283:5;;17154:150;17130:7;;;;;:::i;:::-;;;;17086:229;;;17335:15;:22;;;;17326:5;:31;17323:71;;17364:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17323:71;17047:351;16985:413:::0;:::o;19261:103::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19348:8:::1;19333:12;:23;;;;19261:103:::0;:::o;15087:45::-;;;;;;;;;;;;;:::o;18773:133::-;18857:7;18875:11;:19;18887:6;18875:19;;;;;;;;;;;;;;;:28;18895:7;18875:28;;;;;;;;;;;;;;;;18868:35;;18773:133;;;;:::o;14290:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;19486:108::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19578:8:::1;19561:14;;:25;;;;;;;;;;;;;;;;;;19486:108:::0;:::o;14800:36::-;;;;:::o;14524:33::-;;;;:::o;12469:97::-;12015:19;12023:10;12015:7;:19::i;:::-;12007:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12553:5:::1;12531:14;:19;12546:3;12531:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;12469:97:::0;:::o;20669:141::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20782:20:::1;20758:21;;:44;;;;;;;;;;;;;;;;;;20669:141:::0;:::o;14709:24::-;;;;;;;;;;;;;:::o;19737:131::-;12184:24;12197:10;12184:12;:24::i;:::-;12176:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19854:6:::1;19828:15;:23;19844:6;19828:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19737:131:::0;;:::o;12800:107::-;12856:4;12880:14;:19;12895:3;12880:19;;;;;;;;;;;;;;;;;;;;;;;;;12873:26;;12800:107;;;:::o;14843:30::-;;;;;;;;;;;;;:::o;2074:179::-;2132:7;2152:9;2168:1;2164;:5;;;;:::i;:::-;2152:17;;2193:1;2188;:6;;2180:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:1;2237:8;;;2074:179;;;;:::o;16416:370::-;16478:4;16495:15;16513:5;16495:23;;16529:13;16557:194;16577:15;:22;;;;16569:5;:30;16557:194;;;16655:7;16629:33;;:15;16645:5;16629:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;16625:115;;;16696:4;16683:17;;16719:5;;16625:115;16601:7;;;;;:::i;:::-;;;;16557:194;;;16768:10;16761:17;;;;16416:370;;;:::o;2405:190::-;2491:7;2524:1;2519;:6;;2527:12;2511:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2551:9;2567:1;2563;:5;;;;:::i;:::-;2551:17;;2586:1;2579:8;;;2405:190;;;;;:::o;23395:1616::-;23487:4;23526:1;23506:9;:17;23516:6;23506:17;;;;;;;;;;;;;;;;:21;23498:30;;;;;;23562:25;23570:6;23577:9;23562:7;:25::i;:::-;23611:16;;;;;;;;;;;23608:73;;;23637:41;23652:6;23660:9;23671:6;23637:14;:41::i;:::-;23630:48;;;;23608:73;23697:14;:22;23712:6;23697:22;;;;;;;;;;;;;;;;;;;;;;;;;23696:23;:53;;;;;23724:14;:25;23739:9;23724:25;;;;;;;;;;;;;;;;;;;;;;;;;23723:26;23696:53;23693:128;;;23773:11;;;;;;;;;;;23765:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23693:128;23851:12;;23841:6;:22;;:49;;;;23867:15;:23;23883:6;23867:23;;;;;;;;;;;;;;;;;;;;;;;;;23841:49;23833:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23942:4;;;;;;;;;;;23928:18;;:10;:18;;;;:39;;;;;23951:16;;;;;;;;;;;23950:17;23928:39;:64;;;;;23971:21;;;;;;;;;;;23928:64;:109;;;;;24024:13;;23996:9;:24;24014:4;23996:24;;;;;;;;;;;;;;;;:41;;23928:109;23925:128;;;24040:10;:8;:10::i;:::-;23925:128;24112:53;24134:6;24112:53;;;;;;;;;;;;;;;;;:9;:17;24122:6;24112:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24092:9;:17;24102:6;24092:17;;;;;;;;;;;;;;;:73;;;;24190:15;:26;24206:9;24190:26;;;;;;;;;;;;;;;;;;;;;;;;;24189:27;:45;;;;;24220:14;;;;;;;;;;;24189:45;24186:141;;;24304:10;;24268:32;24293:6;24268:9;:20;24278:9;24268:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;24260:55;;;;;;24186:141;24349:19;24372:11;:19;24384:6;24372:19;;;;;;;;;;;;;;;;;;;;;;;;;24371:20;:47;;;;;24396:11;:22;24408:9;24396:22;;;;;;;;;;;;;;;;;;;;;;;;;24395:23;24371:47;:93;;24458:6;24371:93;;;24421:34;24429:6;24437:9;24448:6;24421:7;:34::i;:::-;24371:93;24349:115;;24498:37;24523:11;24498:9;:20;24508:9;24498:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24475:9;:20;24485:9;24475:20;;;;;;;;;;;;;;;:60;;;;24581:16;:24;24598:6;24581:24;;;;;;;;;;;;;;;;;;;;;;;;;24577:127;;24626:19;;;;;;;;;;;:28;;;24655:6;24663:9;:17;24673:6;24663:17;;;;;;;;;;;;;;;;24626:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24622:71;;;;;;24577:127;24720:16;:27;24737:9;24720:27;;;;;;;;;;;;;;;;;;;;;;;;;24716:137;;24768:19;;;;;;;;;;;:28;;;24797:9;24808;:20;24818:9;24808:20;;;;;;;;;;;;;;;;24768:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24764:77;;;;;;24716:137;24869:19;;;;;;;;;;;:27;;;24897:14;;24869:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24865:59;;;;;;24958:9;24941:40;;24950:6;24941:40;;;24969:11;24941:40;;;;;;:::i;:::-;;;;;;;;24999:4;24992:11;;;23395:1616;;;;;;:::o;2261:136::-;2319:7;2346:43;2350:1;2353;2346:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2339:50;;2261:136;;;;:::o;17848:348::-;17943:1;17924:21;;:7;:21;;;;17916:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18017:68;18040:6;18017:68;;;;;;;;;;;;;;;;;:9;:18;18027:7;18017:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;17996:9;:18;18006:7;17996:18;;;;;;;;;;;;;;;:89;;;;18111:24;18128:6;18111:12;;:16;;:24;;;;:::i;:::-;18096:12;:39;;;;18177:1;18151:37;;18160:7;18151:37;;;18181:6;18151:37;;;;;;:::i;:::-;;;;;;;;17848:348;;:::o;21974:168::-;22031:4;22048:12;22102:4;22090:17;22082:25;;22133:1;22126:4;:8;22119:15;;;21974:168;;;:::o;25023:330::-;25116:4;25153:53;25175:6;25153:53;;;;;;;;;;;;;;;;;:9;:17;25163:6;25153:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25133:9;:17;25143:6;25133:17;;;;;;;;;;;;;;;:73;;;;25240:32;25265:6;25240:9;:20;25250:9;25240:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25217:9;:20;25227:9;25217:20;;;;;;;;;;;;;;;:55;;;;25305:9;25288:35;;25297:6;25288:35;;;25316:6;25288:35;;;;;;:::i;:::-;;;;;;;;25341:4;25334:11;;25023:330;;;;;:::o;25970:1565::-;15301:4;15282:16;;:23;;;;;;;;;;;;;;;;;;26032:19:::1;26054:9;:24;26072:4;26054:24;;;;;;;;;;;;;;;;26032:46;;26089:23;26115:50;26163:1;26115:43;26149:8;;26115:29;26131:12;;26115:11;:15;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;:47;;:50;;;;:::i;:::-;26089:76;;26176:20;26199:32;26215:15;26199:11;:15;;:32;;;;:::i;:::-;26176:55;;26244:21;26282:1;26268:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26244:40;;26313:4;26295;26300:1;26295:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26339:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26329:4;26334:1;26329:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26365:6;;;;;;;;;;;:57;;;26437:12;26464:1;26480:4;26507;26527:15;26365:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26566:17;26586:21;26566:41;;26620:19;26642:33;26655:19;26672:1;26655:12;;:16;;:19;;;;:::i;:::-;26642:8;;:12;;:33;;;;:::i;:::-;26620:55;;26696:26;26725:51;26774:1;26725:44;26757:11;26725:27;26739:12;;26725:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;26696:80;;26787:27;26817:42;26847:11;26817:25;26831:10;;26817:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;26787:72;;26864:24;26891:58;26930:18;26891:34;26905:19;26891:9;:13;;:34;;;;:::i;:::-;:38;;:58;;;;:::i;:::-;26864:85;;26966:19;;;;;;;;;;;:27;;;27001:19;26966:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;26962:73;;;;;;27076:1;27058:15;:19;27055:362;;;27093:6;;;;;;;;;;;:22;;;27123:18;27169:4;27193:15;27227:1;27247::::0;27267:21:::1;;;;;;;;;;;27307:15;27093:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27357:48;27369:18;27389:15;27357:48;;;;;;;:::i;:::-;;;;;;;;27055:362;27448:1;27429:16;:20;27425:103;;;27456:66;27487:16;;;;;;;;;;;27505;27456:30;:66::i;:::-;27425:103;26011:1524;;;;;;;;;15347:5:::0;15328:16;;:24;;;;;;;;;;;;;;;;;;25970:1565::o;25361:439::-;25447:7;25477:21;25509:9;25501:17;;:4;;;;;;;;;;;:17;;;:48;;25541:8;;25501:48;;;25521:17;;25501:48;25477:72;;25560:17;25580:34;25610:3;25580:25;25591:13;25580:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25560:54;;25654:39;25683:9;25654;:24;25672:4;25654:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;25627:9;:24;25645:4;25627:24;;;;;;;;;;;;;;;:66;;;;25734:4;25709:42;;25718:6;25709:42;;;25741:9;25709:42;;;;;;:::i;:::-;;;;;;;;25771:21;25782:9;25771:6;:10;;:21;;;;:::i;:::-;25764:28;;;;25361:439;;;;;:::o;2603:224::-;2661:7;2690:1;2685;:6;2681:25;;;2702:1;2695:8;;;;2681:25;2716:9;2732:1;2728;:5;;;;:::i;:::-;2716:17;;2761:1;2756;2752;:5;;;;:::i;:::-;:10;2744:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2818:1;2811:8;;;2603:224;;;;;:::o;2835:132::-;2893:7;2920:39;2924:1;2927;2920:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2913:46;;2835:132;;;;:::o;1841:200::-;1914:12;1932:2;:7;;1947:5;1964:1;1954:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1932:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1913:54;;;1986:7;1978:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1902:139;1841:200;;:::o;2975:189::-;3061:7;3093:1;3089;:5;3096:12;3081:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3120:9;3136:1;3132;:5;;;;:::i;:::-;3120:17;;3155:1;3148:8;;;2975:189;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:323::-;4163:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:119;;;4218:79;;:::i;:::-;4180:119;4338:1;4363:50;4405:7;4396:6;4385:9;4381:22;4363:50;:::i;:::-;4353:60;;4309:114;4107:323;;;;:::o;4436:329::-;4495:6;4544:2;4532:9;4523:7;4519:23;4515:32;4512:119;;;4550:79;;:::i;:::-;4512:119;4670:1;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4641:117;4436:329;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:607::-;5897:6;5905;5913;5962:2;5950:9;5941:7;5937:23;5933:32;5930:119;;;5968:79;;:::i;:::-;5930:119;6088:1;6113:50;6155:7;6146:6;6135:9;6131:22;6113:50;:::i;:::-;6103:60;;6059:114;6212:2;6238:53;6283:7;6274:6;6263:9;6259:22;6238:53;:::i;:::-;6228:63;;6183:118;6340:2;6366:50;6408:7;6399:6;6388:9;6384:22;6366:50;:::i;:::-;6356:60;;6311:115;5826:607;;;;;:::o;6439:329::-;6498:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6644:117;6439:329;;;;:::o;6774:765::-;6860:6;6868;6876;6884;6933:3;6921:9;6912:7;6908:23;6904:33;6901:120;;;6940:79;;:::i;:::-;6901:120;7060:1;7085:53;7130:7;7121:6;7110:9;7106:22;7085:53;:::i;:::-;7075:63;;7031:117;7187:2;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7158:118;7315:2;7341:53;7386:7;7377:6;7366:9;7362:22;7341:53;:::i;:::-;7331:63;;7286:118;7443:2;7469:53;7514:7;7505:6;7494:9;7490:22;7469:53;:::i;:::-;7459:63;;7414:118;6774:765;;;;;;;:::o;7545:468::-;7610:6;7618;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7920:2;7946:50;7988:7;7979:6;7968:9;7964:22;7946:50;:::i;:::-;7936:60;;7891:115;7545:468;;;;;:::o;8019:104::-;8064:7;8093:24;8111:5;8093:24;:::i;:::-;8082:35;;8019:104;;;:::o;8129:138::-;8210:32;8236:5;8210:32;:::i;:::-;8203:5;8200:43;8190:71;;8257:1;8254;8247:12;8190:71;8129:138;:::o;8273:155::-;8327:5;8365:6;8352:20;8343:29;;8381:41;8416:5;8381:41;:::i;:::-;8273:155;;;;:::o;8434:345::-;8501:6;8550:2;8538:9;8529:7;8525:23;8521:32;8518:119;;;8556:79;;:::i;:::-;8518:119;8676:1;8701:61;8754:7;8745:6;8734:9;8730:22;8701:61;:::i;:::-;8691:71;;8647:125;8434:345;;;;:::o;8785:118::-;8872:24;8890:5;8872:24;:::i;:::-;8867:3;8860:37;8785:118;;:::o;8909:222::-;9002:4;9040:2;9029:9;9025:18;9017:26;;9053:71;9121:1;9110:9;9106:17;9097:6;9053:71;:::i;:::-;8909:222;;;;:::o;9137:474::-;9205:6;9213;9262:2;9250:9;9241:7;9237:23;9233:32;9230:119;;;9268:79;;:::i;:::-;9230:119;9388:1;9413:53;9458:7;9449:6;9438:9;9434:22;9413:53;:::i;:::-;9403:63;;9359:117;9515:2;9541:53;9586:7;9577:6;9566:9;9562:22;9541:53;:::i;:::-;9531:63;;9486:118;9137:474;;;;;:::o;9617:60::-;9645:3;9666:5;9659:12;;9617:60;;;:::o;9683:142::-;9733:9;9766:53;9784:34;9793:24;9811:5;9793:24;:::i;:::-;9784:34;:::i;:::-;9766:53;:::i;:::-;9753:66;;9683:142;;;:::o;9831:126::-;9881:9;9914:37;9945:5;9914:37;:::i;:::-;9901:50;;9831:126;;;:::o;9963:154::-;10041:9;10074:37;10105:5;10074:37;:::i;:::-;10061:50;;9963:154;;;:::o;10123:187::-;10238:65;10297:5;10238:65;:::i;:::-;10233:3;10226:78;10123:187;;:::o;10316:278::-;10437:4;10475:2;10464:9;10460:18;10452:26;;10488:99;10584:1;10573:9;10569:17;10560:6;10488:99;:::i;:::-;10316:278;;;;:::o;10600:474::-;10668:6;10676;10725:2;10713:9;10704:7;10700:23;10696:32;10693:119;;;10731:79;;:::i;:::-;10693:119;10851:1;10876:53;10921:7;10912:6;10901:9;10897:22;10876:53;:::i;:::-;10866:63;;10822:117;10978:2;11004:53;11049:7;11040:6;11029:9;11025:22;11004:53;:::i;:::-;10994:63;;10949:118;10600:474;;;;;:::o;11080:144::-;11148:9;11181:37;11212:5;11181:37;:::i;:::-;11168:50;;11080:144;;;:::o;11230:167::-;11335:55;11384:5;11335:55;:::i;:::-;11330:3;11323:68;11230:167;;:::o;11403:258::-;11514:4;11552:2;11541:9;11537:18;11529:26;;11565:89;11651:1;11640:9;11636:17;11627:6;11565:89;:::i;:::-;11403:258;;;;:::o;11667:156::-;11807:8;11803:1;11795:6;11791:14;11784:32;11667:156;:::o;11829:365::-;11971:3;11992:66;12056:1;12051:3;11992:66;:::i;:::-;11985:73;;12067:93;12156:3;12067:93;:::i;:::-;12185:2;12180:3;12176:12;12169:19;;11829:365;;;:::o;12200:419::-;12366:4;12404:2;12393:9;12389:18;12381:26;;12453:9;12447:4;12443:20;12439:1;12428:9;12424:17;12417:47;12481:131;12607:4;12481:131;:::i;:::-;12473:139;;12200:419;;;:::o;12625:161::-;12765:13;12761:1;12753:6;12749:14;12742:37;12625:161;:::o;12792:366::-;12934:3;12955:67;13019:2;13014:3;12955:67;:::i;:::-;12948:74;;13031:93;13120:3;13031:93;:::i;:::-;13149:2;13144:3;13140:12;13133:19;;12792:366;;;:::o;13164:419::-;13330:4;13368:2;13357:9;13353:18;13345:26;;13417:9;13411:4;13407:20;13403:1;13392:9;13388:17;13381:47;13445:131;13571:4;13445:131;:::i;:::-;13437:139;;13164:419;;;:::o;13589:180::-;13729:32;13725:1;13717:6;13713:14;13706:56;13589:180;:::o;13775:366::-;13917:3;13938:67;14002:2;13997:3;13938:67;:::i;:::-;13931:74;;14014:93;14103:3;14014:93;:::i;:::-;14132:2;14127:3;14123:12;14116:19;;13775:366;;;:::o;14147:419::-;14313:4;14351:2;14340:9;14336:18;14328:26;;14400:9;14394:4;14390:20;14386:1;14375:9;14371:17;14364:47;14428:131;14554:4;14428:131;:::i;:::-;14420:139;;14147:419;;;:::o;14572:180::-;14620:77;14617:1;14610:88;14717:4;14714:1;14707:15;14741:4;14738:1;14731:15;14758:180;14806:77;14803:1;14796:88;14903:4;14900:1;14893:15;14927:4;14924:1;14917:15;14944:348;14984:7;15007:20;15025:1;15007:20;:::i;:::-;15002:25;;15041:20;15059:1;15041:20;:::i;:::-;15036:25;;15229:1;15161:66;15157:74;15154:1;15151:81;15146:1;15139:9;15132:17;15128:105;15125:131;;;15236:18;;:::i;:::-;15125:131;15284:1;15281;15277:9;15266:20;;14944:348;;;;:::o;15298:180::-;15346:77;15343:1;15336:88;15443:4;15440:1;15433:15;15467:4;15464:1;15457:15;15484:185;15524:1;15541:20;15559:1;15541:20;:::i;:::-;15536:25;;15575:20;15593:1;15575:20;:::i;:::-;15570:25;;15614:1;15604:35;;15619:18;;:::i;:::-;15604:35;15661:1;15658;15654:9;15649:14;;15484:185;;;;:::o;15675:233::-;15714:3;15737:24;15755:5;15737:24;:::i;:::-;15728:33;;15783:66;15776:5;15773:77;15770:103;;;15853:18;;:::i;:::-;15770:103;15900:1;15893:5;15889:13;15882:20;;15675:233;;;:::o;15914:85::-;15959:7;15988:5;15977:16;;15914:85;;;:::o;16005:158::-;16063:9;16096:61;16114:42;16123:32;16149:5;16123:32;:::i;:::-;16114:42;:::i;:::-;16096:61;:::i;:::-;16083:74;;16005:158;;;:::o;16169:147::-;16264:45;16303:5;16264:45;:::i;:::-;16259:3;16252:58;16169:147;;:::o;16322:348::-;16451:4;16489:2;16478:9;16474:18;16466:26;;16502:71;16570:1;16559:9;16555:17;16546:6;16502:71;:::i;:::-;16583:80;16659:2;16648:9;16644:18;16635:6;16583:80;:::i;:::-;16322:348;;;;;:::o;16676:332::-;16797:4;16835:2;16824:9;16820:18;16812:26;;16848:71;16916:1;16905:9;16901:17;16892:6;16848:71;:::i;:::-;16929:72;16997:2;16986:9;16982:18;16973:6;16929:72;:::i;:::-;16676:332;;;;;:::o;17014:134::-;17072:9;17105:37;17136:5;17105:37;:::i;:::-;17092:50;;17014:134;;;:::o;17154:147::-;17249:45;17288:5;17249:45;:::i;:::-;17244:3;17237:58;17154:147;;:::o;17307:238::-;17408:4;17446:2;17435:9;17431:18;17423:26;;17459:79;17535:1;17524:9;17520:17;17511:6;17459:79;:::i;:::-;17307:238;;;;:::o;17551:332::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17723:71;17791:1;17780:9;17776:17;17767:6;17723:71;:::i;:::-;17804:72;17872:2;17861:9;17857:18;17848:6;17804:72;:::i;:::-;17551:332;;;;;:::o;17889:158::-;18029:10;18025:1;18017:6;18013:14;18006:34;17889:158;:::o;18053:365::-;18195:3;18216:66;18280:1;18275:3;18216:66;:::i;:::-;18209:73;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18053:365;;;:::o;18424:419::-;18590:4;18628:2;18617:9;18613:18;18605:26;;18677:9;18671:4;18667:20;18663:1;18652:9;18648:17;18641:47;18705:131;18831:4;18705:131;:::i;:::-;18697:139;;18424:419;;;:::o;18849:305::-;18889:3;18908:20;18926:1;18908:20;:::i;:::-;18903:25;;18942:20;18960:1;18942:20;:::i;:::-;18937:25;;19096:1;19028:66;19024:74;19021:1;19018:81;19015:107;;;19102:18;;:::i;:::-;19015:107;19146:1;19143;19139:9;19132:16;;18849:305;;;;:::o;19160:162::-;19300:14;19296:1;19288:6;19284:14;19277:38;19160:162;:::o;19328:366::-;19470:3;19491:67;19555:2;19550:3;19491:67;:::i;:::-;19484:74;;19567:93;19656:3;19567:93;:::i;:::-;19685:2;19680:3;19676:12;19669:19;;19328:366;;;:::o;19700:419::-;19866:4;19904:2;19893:9;19889:18;19881:26;;19953:9;19947:4;19943:20;19939:1;19928:9;19924:17;19917:47;19981:131;20107:4;19981:131;:::i;:::-;19973:139;;19700:419;;;:::o;20125:191::-;20165:4;20185:20;20203:1;20185:20;:::i;:::-;20180:25;;20219:20;20237:1;20219:20;:::i;:::-;20214:25;;20258:1;20255;20252:8;20249:34;;;20263:18;;:::i;:::-;20249:34;20308:1;20305;20301:9;20293:17;;20125:191;;;;:::o;20322:180::-;20370:77;20367:1;20360:88;20467:4;20464:1;20457:15;20491:4;20488:1;20481:15;20508:177;20648:29;20644:1;20636:6;20632:14;20625:53;20508:177;:::o;20691:366::-;20833:3;20854:67;20918:2;20913:3;20854:67;:::i;:::-;20847:74;;20930:93;21019:3;20930:93;:::i;:::-;21048:2;21043:3;21039:12;21032:19;;20691:366;;;:::o;21063:419::-;21229:4;21267:2;21256:9;21252:18;21244:26;;21316:9;21310:4;21306:20;21302:1;21291:9;21287:17;21280:47;21344:131;21470:4;21344:131;:::i;:::-;21336:139;;21063:419;;;:::o;21488:170::-;21628:22;21624:1;21616:6;21612:14;21605:46;21488:170;:::o;21664:366::-;21806:3;21827:67;21891:2;21886:3;21827:67;:::i;:::-;21820:74;;21903:93;21992:3;21903:93;:::i;:::-;22021:2;22016:3;22012:12;22005:19;;21664:366;;;:::o;22036:419::-;22202:4;22240:2;22229:9;22225:18;22217:26;;22289:9;22283:4;22279:20;22275:1;22264:9;22260:17;22253:47;22317:131;22443:4;22317:131;:::i;:::-;22309:139;;22036:419;;;:::o;22461:167::-;22601:19;22597:1;22589:6;22585:14;22578:43;22461:167;:::o;22634:366::-;22776:3;22797:67;22861:2;22856:3;22797:67;:::i;:::-;22790:74;;22873:93;22962:3;22873:93;:::i;:::-;22991:2;22986:3;22982:12;22975:19;;22634:366;;;:::o;23006:419::-;23172:4;23210:2;23199:9;23195:18;23187:26;;23259:9;23253:4;23249:20;23245:1;23234:9;23230:17;23223:47;23287:131;23413:4;23287:131;:::i;:::-;23279:139;;23006:419;;;:::o;23431:220::-;23571:34;23567:1;23559:6;23555:14;23548:58;23640:3;23635:2;23627:6;23623:15;23616:28;23431:220;:::o;23657:366::-;23799:3;23820:67;23884:2;23879:3;23820:67;:::i;:::-;23813:74;;23896:93;23985:3;23896:93;:::i;:::-;24014:2;24009:3;24005:12;23998:19;;23657:366;;;:::o;24029:419::-;24195:4;24233:2;24222:9;24218:18;24210:26;;24282:9;24276:4;24272:20;24268:1;24257:9;24253:17;24246:47;24310:131;24436:4;24310:131;:::i;:::-;24302:139;;24029:419;;;:::o;24454:180::-;24502:77;24499:1;24492:88;24599:4;24596:1;24589:15;24623:4;24620:1;24613:15;24640:143;24697:5;24728:6;24722:13;24713:22;;24744:33;24771:5;24744:33;:::i;:::-;24640:143;;;;:::o;24789:351::-;24859:6;24908:2;24896:9;24887:7;24883:23;24879:32;24876:119;;;24914:79;;:::i;:::-;24876:119;25034:1;25059:64;25115:7;25106:6;25095:9;25091:22;25059:64;:::i;:::-;25049:74;;25005:128;24789:351;;;;:::o;25146:114::-;25213:6;25247:5;25241:12;25231:22;;25146:114;;;:::o;25266:184::-;25365:11;25399:6;25394:3;25387:19;25439:4;25434:3;25430:14;25415:29;;25266:184;;;;:::o;25456:132::-;25523:4;25546:3;25538:11;;25576:4;25571:3;25567:14;25559:22;;25456:132;;;:::o;25594:108::-;25671:24;25689:5;25671:24;:::i;:::-;25666:3;25659:37;25594:108;;:::o;25708:179::-;25777:10;25798:46;25840:3;25832:6;25798:46;:::i;:::-;25876:4;25871:3;25867:14;25853:28;;25708:179;;;;:::o;25893:113::-;25963:4;25995;25990:3;25986:14;25978:22;;25893:113;;;:::o;26042:732::-;26161:3;26190:54;26238:5;26190:54;:::i;:::-;26260:86;26339:6;26334:3;26260:86;:::i;:::-;26253:93;;26370:56;26420:5;26370:56;:::i;:::-;26449:7;26480:1;26465:284;26490:6;26487:1;26484:13;26465:284;;;26566:6;26560:13;26593:63;26652:3;26637:13;26593:63;:::i;:::-;26586:70;;26679:60;26732:6;26679:60;:::i;:::-;26669:70;;26525:224;26512:1;26509;26505:9;26500:14;;26465:284;;;26469:14;26765:3;26758:10;;26166:608;;;26042:732;;;;:::o;26780:831::-;27043:4;27081:3;27070:9;27066:19;27058:27;;27095:71;27163:1;27152:9;27148:17;27139:6;27095:71;:::i;:::-;27176:80;27252:2;27241:9;27237:18;27228:6;27176:80;:::i;:::-;27303:9;27297:4;27293:20;27288:2;27277:9;27273:18;27266:48;27331:108;27434:4;27425:6;27331:108;:::i;:::-;27323:116;;27449:72;27517:2;27506:9;27502:18;27493:6;27449:72;:::i;:::-;27531:73;27599:3;27588:9;27584:19;27575:6;27531:73;:::i;:::-;26780:831;;;;;;;;:::o;27617:807::-;27866:4;27904:3;27893:9;27889:19;27881:27;;27918:71;27986:1;27975:9;27971:17;27962:6;27918:71;:::i;:::-;27999:72;28067:2;28056:9;28052:18;28043:6;27999:72;:::i;:::-;28081:80;28157:2;28146:9;28142:18;28133:6;28081:80;:::i;:::-;28171;28247:2;28236:9;28232:18;28223:6;28171:80;:::i;:::-;28261:73;28329:3;28318:9;28314:19;28305:6;28261:73;:::i;:::-;28344;28412:3;28401:9;28397:19;28388:6;28344:73;:::i;:::-;27617:807;;;;;;;;;:::o;28430:143::-;28487:5;28518:6;28512:13;28503:22;;28534:33;28561:5;28534:33;:::i;:::-;28430:143;;;;:::o;28579:663::-;28667:6;28675;28683;28732:2;28720:9;28711:7;28707:23;28703:32;28700:119;;;28738:79;;:::i;:::-;28700:119;28858:1;28883:64;28939:7;28930:6;28919:9;28915:22;28883:64;:::i;:::-;28873:74;;28829:128;28996:2;29022:64;29078:7;29069:6;29058:9;29054:22;29022:64;:::i;:::-;29012:74;;28967:129;29135:2;29161:64;29217:7;29208:6;29197:9;29193:22;29161:64;:::i;:::-;29151:74;;29106:129;28579:663;;;;;:::o;29248:220::-;29388:34;29384:1;29376:6;29372:14;29365:58;29457:3;29452:2;29444:6;29440:15;29433:28;29248:220;:::o;29474:366::-;29616:3;29637:67;29701:2;29696:3;29637:67;:::i;:::-;29630:74;;29713:93;29802:3;29713:93;:::i;:::-;29831:2;29826:3;29822:12;29815:19;;29474:366;;;:::o;29846:419::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;29846:419;;;:::o;30271:98::-;30322:6;30356:5;30350:12;30340:22;;30271:98;;;:::o;30375:147::-;30476:11;30513:3;30498:18;;30375:147;;;;:::o;30528:373::-;30632:3;30660:38;30692:5;30660:38;:::i;:::-;30714:88;30795:6;30790:3;30714:88;:::i;:::-;30707:95;;30811:52;30856:6;30851:3;30844:4;30837:5;30833:16;30811:52;:::i;:::-;30888:6;30883:3;30879:16;30872:23;;30636:265;30528:373;;;;:::o;30907:271::-;31037:3;31059:93;31148:3;31139:6;31059:93;:::i;:::-;31052:100;;31169:3;31162:10;;30907:271;;;;:::o;31184:222::-;31324:34;31320:1;31312:6;31308:14;31301:58;31393:5;31388:2;31380:6;31376:15;31369:30;31184:222;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o

Swarm Source

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