false
true
0

Contract Address Details

0xa13eb56b9E1F2b10f33572716763dc131B8b7ffb

Token
HEX Reflections (HRS)
Creator
0x9214fc–efe22b at 0xa0405e–d49e0b
Balance
515,823.965460470002858458 PLS ( )
Tokens
Fetching tokens...
Transactions
1,035 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25919809
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
HRS




Optimization enabled
false
Compiler version
v0.8.19+commit.7dd6d404




EVM Version
default




Verified at
2023-10-09T04:24:19.096045Z

Contract source code

// SPDX-License-Identifier: MIT
// HEX Reflections - Get Paid to hold HRS

pragma solidity 0.8.19;


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

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

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

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WPLS() 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;
    }

    IERC20 RWRD = IERC20(0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39);
    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

    // minDistribution is the minimum amount that can be distributed in a single transaction.
    uint256 public minDistribution = 1 * (10 ** 5);

    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(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        _token = msg.sender;
    }

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

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

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

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

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

        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = address(RWRD);

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

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

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

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

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

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

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

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

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

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

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

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

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "HEX Reflections";
    string constant _symbol = "HRS";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 200000000000 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    uint256 public liquidityFee    = 0; 
    uint256 public burnFee         = 0; 
    uint256 public reflectionFee   = 3000; 
    uint256 public totalFee        = burnFee + liquidityFee + reflectionFee;
    uint256 public feeDenominator  = 100000; // Using larger denominator for lower fees

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    IDEXRouter public router2;
    address public pair2;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = 112471 * 10**_decimals; // 112471

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        router2 = IDEXRouter(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        pair2 = IDEXFactory(router2.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router2)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));

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

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

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

        autoLiquidityReceiver = msg.sender;

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

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    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] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        // Checks max transaction limit
        checkTxLimit(sender, amount);
        uint256 amountReceived;
        address routerAddress = address(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        address routerAddress2 = address(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        if(sender == pair || recipient == pair || sender == address(router) || recipient == address(router) || 
        recipient == routerAddress || sender == routerAddress ||
         recipient == routerAddress2 || sender == routerAddress2 || sender == address(router2) || recipient == address(router2) || 
         sender == pair2 || recipient == pair2 ){
                if(shouldSwapBack()){ swapBack(); }
                
                //Exchange tokens
            
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

                amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
                _balances[recipient] = _balances[recipient].add(amountReceived);
        }else{
                
                //Exchange tokens
            
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

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

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

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

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

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

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

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

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

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

        return amount.sub(feeAmount.add(burnAmount));
    }

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

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

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WPLS;

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalPLSFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountPLSLiquidity = amountPLS.mul(dynamicLiquidityFee).div(totalPLSFee).div(2);
        uint256 amountPLSReflection = amountPLS.mul(reflectionFee).div(totalPLSFee);

        try distributor.deposit{value: amountPLSReflection}() {} catch {}

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

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

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

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

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

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _burnFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        burnFee = _burnFee;
        feeDenominator = _feeDenominator;
    
        totalFee = _liquidityFee.add(_reflectionFee).add(_burnFee);

        uint256 maxTotalFee = _feeDenominator * 5 / 100;

        require(totalFee <= maxTotalFee, "Total fees are too high!");
    }

    function setFeeReceivers(address _autoLiquidityReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
    }
    
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

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

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

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

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

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

event AutoLiquify(uint256 amountPLS, uint256 amountBOG);

}        
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountPLS","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"burnFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router2","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_burnFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTimelockExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxPercent_base1000","inputs":[{"type":"uint256","name":"maxTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000ee919062000dba565b642e90edd00062000100919062000e0b565b6005556005546006556000600d556000600e55610bb8600f55600f54600d54600e546200012e919062000e56565b6200013a919062000e56565b601055620186a0601155601460135560646014556207a120601a556001601b60006101000a81548160ff0219169083151502179055506009600a62000180919062000dba565b6201b75762000190919062000e0b565b601c55348015620001a057600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073165c3410fc91ef562c50559f7d2289febed552d9601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000efb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200038192919062000f3e565b6020604051808303816000875af1158015620003a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c7919062000efb565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200058d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b3919062000efb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200061192919062000f3e565b6020604051808303816000875af115801562000631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000657919062000efb565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200078b9062000c12565b62000797919062000f6b565b604051809103906000f080158015620007b4573d6000803e3d6000fd5b50601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600554600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055460405162000c04919062000f99565b60405180910390a362000fb6565b611fde80620051c183390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cae5780860481111562000c865762000c8562000c20565b5b600185161562000c965780820291505b808102905062000ca68562000c4f565b945062000c66565b94509492505050565b60008262000cc9576001905062000d9c565b8162000cd9576000905062000d9c565b816001811462000cf2576002811462000cfd5762000d33565b600191505062000d9c565b60ff84111562000d125762000d1162000c20565b5b8360020a91508482111562000d2c5762000d2b62000c20565b5b5062000d9c565b5060208310610133831016604e8410600b841016171562000d6d5782820a90508381111562000d675762000d6662000c20565b5b62000d9c565b62000d7c848484600162000c5c565b9250905081840481111562000d965762000d9562000c20565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dc78262000da3565b915062000dd48362000dad565b925062000e037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cb7565b905092915050565b600062000e188262000da3565b915062000e258362000da3565b925082820262000e358162000da3565b9150828204841483151762000e4f5762000e4e62000c20565b5b5092915050565b600062000e638262000da3565b915062000e708362000da3565b925082820190508082111562000e8b5762000e8a62000c20565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ec38262000e96565b9050919050565b62000ed58162000eb6565b811462000ee157600080fd5b50565b60008151905062000ef58162000eca565b92915050565b60006020828403121562000f145762000f1362000e91565b5b600062000f248482850162000ee4565b91505092915050565b62000f388162000eb6565b82525050565b600060408201905062000f55600083018562000f2d565b62000f64602083018462000f2d565b9392505050565b600060208201905062000f82600083018462000f2d565b92915050565b62000f938162000da3565b82525050565b600060208201905062000fb0600083018462000f88565b92915050565b6141fb8062000fc66000396000f3fe6080604052600436106102765760003560e01c80637d1db4a51161014f578063ca33e64c116100c1578063f2fde38b1161007a578063f2fde38b14610999578063f708a64f146109c2578063f84ba65d146109eb578063f887ea4014610a14578063fce589d814610a3f578063fe9fbb8014610a6a5761027d565b8063ca33e64c14610879578063d51ed1c8146108a4578063dd62ed3e146108e1578063df20fd491461091e578063e01bb68814610947578063f0b37c04146109705761027d565b80639d1944f5116101135780639d1944f51461076b578063a8aa1b3114610794578063a9059cbb146107bf578063b6a5d7de146107fc578063bd9ab53714610825578063bfe109281461084e5761027d565b80637d1db4a51461069457806383ad7994146106bf578063893d20e8146106ea57806395d89b411461071557806398118cb4146107405761027d565b80632f54bf6e116101e8578063658d4b7f116101ac578063658d4b7f146105845780636ddd1713146105ad5780636fcba377146105d857806370a0823114610601578063762816d61461063e578063763014c7146106695761027d565b80632f54bf6e1461048d578063313ce567146104ca57806350db71fb146104f5578063571ac8b01461051e5780635c85974f1461055b5761027d565b806318160ddd1161023a57806318160ddd1461037d5780631df4ccfc146103a8578063201e7991146103d357806323b872dd146103fc5780632b112e49146104395780632d48e896146104645761027d565b80630445b6671461028257806306fdde03146102ad578063095ea7b3146102d85780631161ae3914610315578063180b0d7e146103525761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610aa7565b6040516102a49190613519565b60405180910390f35b3480156102b957600080fd5b506102c2610aad565b6040516102cf91906135c4565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613675565b610aea565b60405161030c91906136d0565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906136eb565b610bdc565b60405161034991906136d0565b60405180910390f35b34801561035e57600080fd5b50610367610bf1565b6040516103749190613519565b60405180910390f35b34801561038957600080fd5b50610392610bf7565b60405161039f9190613519565b60405180910390f35b3480156103b457600080fd5b506103bd610c01565b6040516103ca9190613519565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906136eb565b610c07565b005b34801561040857600080fd5b50610423600480360381019061041e919061372b565b610c61565b60405161043091906136d0565b60405180910390f35b34801561044557600080fd5b5061044e610e61565b60405161045b9190613519565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906136eb565b610ee3565b005b34801561049957600080fd5b506104b460048036038101906104af919061377e565b610fbe565b6040516104c191906136d0565b60405180910390f35b3480156104d657600080fd5b506104df611017565b6040516104ec91906137c7565b60405180910390f35b34801561050157600080fd5b5061051c6004803603810190610517919061380e565b611020565b005b34801561052a57600080fd5b506105456004803603810190610540919061377e565b6110c3565b60405161055291906136d0565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061384e565b6110f6565b005b34801561059057600080fd5b506105ab60048036038101906105a6919061380e565b611148565b005b3480156105b957600080fd5b506105c26111eb565b6040516105cf91906136d0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061387b565b6111fe565b005b34801561060d57600080fd5b506106286004803603810190610623919061377e565b6112f6565b6040516106359190613519565b60405180910390f35b34801561064a57600080fd5b5061065361133f565b6040516106609190613941565b60405180910390f35b34801561067557600080fd5b5061067e611365565b60405161068b919061396b565b60405180910390f35b3480156106a057600080fd5b506106a961138b565b6040516106b69190613519565b60405180910390f35b3480156106cb57600080fd5b506106d4611391565b6040516106e19190613519565b60405180910390f35b3480156106f657600080fd5b506106ff611397565b60405161070c919061396b565b60405180910390f35b34801561072157600080fd5b5061072a6113c0565b60405161073791906135c4565b60405180910390f35b34801561074c57600080fd5b506107556113fd565b6040516107629190613519565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061384e565b611403565b005b3480156107a057600080fd5b506107a9611464565b6040516107b6919061396b565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613675565b61148a565b6040516107f391906136d0565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061377e565b61149f565b005b34801561083157600080fd5b5061084c6004803603810190610847919061384e565b611541565b005b34801561085a57600080fd5b506108636115ad565b60405161087091906139a7565b60405180910390f35b34801561088557600080fd5b5061088e6115d3565b60405161089b919061396b565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061384e565b6115f9565b6040516108d89190613519565b60405180910390f35b3480156108ed57600080fd5b50610908600480360381019061090391906139c2565b61166b565b6040516109159190613519565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190613a02565b6116f2565b005b34801561095357600080fd5b5061096e6004803603810190610969919061377e565b61175f565b005b34801561097c57600080fd5b506109976004803603810190610992919061377e565b6117eb565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190613a80565b61188e565b005b3480156109ce57600080fd5b506109e960048036038101906109e4919061380e565b6119a7565b005b3480156109f757600080fd5b50610a126004803603810190610a0d919061380e565b611c47565b005b348015610a2057600080fd5b50610a29611cea565b604051610a369190613941565b60405180910390f35b348015610a4b57600080fd5b50610a54611d10565b604051610a619190613519565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061377e565b611d16565b604051610a9e91906136d0565b60405180910390f35b601c5481565b60606040518060400160405280600f81526020017f484558205265666c656374696f6e730000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bca9190613519565b60405180910390a36001905092915050565b600082610be8836115f9565b11905092915050565b60115481565b6000600554905090565b60105481565b610c1033611d16565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613af9565b60405180910390fd5b81601381905550806014819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e4d57610dcc826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e58848484611dd0565b90509392505050565b6000610ede610e91600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b610ed0610ebf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b6005546127fe90919063ffffffff16565b6127fe90919063ffffffff16565b905090565b610eec33611d16565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290613af9565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f88929190613b19565b600060405180830381600087803b158015610fa257600080fd5b505af1158015610fb6573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61102933611d16565b611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613af9565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ef827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aea565b9050919050565b6110ff33611d16565b61113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613af9565b60405180910390fd5b8060068190555050565b61115133611d16565b611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613af9565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b61120733611d16565b611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613af9565b60405180910390fd5b83600d8190555082600f8190555081600e819055508060118190555061128782611279858761284890919063ffffffff16565b61284890919063ffffffff16565b6010819055506000606460058361129e9190613b71565b6112a89190613be2565b90508060105411156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690613c5f565b60405180910390fd5b5050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4852530000000000000000000000000000000000000000000000000000000000815250905090565b600d5481565b61140c33611d16565b61144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613af9565b60405180910390fd5b620b71b0811061145a57600080fd5b80601a8190555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611497338484611dd0565b905092915050565b6114a833610fbe565b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613ccb565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61154a33610fbe565b611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613ccb565b60405180910390fd5b6103e88160055461159a9190613b71565b6115a49190613be2565b60068190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611664611606610e61565b6116566116476002611639601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b6128a690919063ffffffff16565b856128a690919063ffffffff16565b61292090919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116fb33611d16565b61173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190613af9565b60405180910390fd5b81601b60006101000a81548160ff02191690831515021790555080601c819055505050565b61176833611d16565b6117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613af9565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f433610fbe565b611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613ccb565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61189733610fbe565b6118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613ccb565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161199c9190613d0c565b60405180910390a150565b6119b033611d16565b6119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e690613af9565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a795750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611a8257600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611b7457601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611b3d929190613d62565b600060405180830381600087803b158015611b5757600080fd5b505af1158015611b6b573d6000803e3d6000fd5b50505050611c43565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c10929190613d8b565b600060405180830381600087803b158015611c2a57600080fd5b505af1158015611c3e573d6000803e3d6000fd5b505050505b5050565b611c5033611d16565b611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613af9565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000838311158290611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab91906135c4565b60405180910390fd5b5060008385611dc39190613db4565b9050809150509392505050565b6000601d60009054906101000a900460ff1615611df957611df284848461296a565b90506127f7565b611e038483612b3d565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611edf5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611f375750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80611f8f5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc557508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611ffb57508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061203157508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061206757508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120bf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121175750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061216f5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121c75750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15612368576121d4612bda565b156121e2576121e1612cb1565b5b61226b856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b78761314e565b6122c157846122cc565b6122cb87866131a5565b5b925061232083600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124cd565b6123f1856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061248983600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125e757601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016125ba929190613d8b565b600060405180830381600087803b1580156125d457600080fd5b505af19250505080156125e5575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661270157601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016126d4929190613d8b565b600060405180830381600087803b1580156126ee57600080fd5b505af19250505080156126ff575060015b505b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601a546040518263ffffffff1660e01b815260040161275e9190613519565b600060405180830381600087803b15801561277857600080fd5b505af1925050508015612789575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127e79190613519565b60405180910390a3600193505050505b9392505050565b600061284083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d6c565b905092915050565b60008082846128579190613de8565b90508381101561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390613e68565b60405180910390fd5b8091505092915050565b60008083036128b8576000905061291a565b600082846128c69190613b71565b90508284826128d59190613be2565b14612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90613efa565b60405180910390fd5b809150505b92915050565b600061296283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061349d565b905092915050565b60006129f5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a8a82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2a9190613519565b60405180910390a3600190509392505050565b60065481111580612b975750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90613f66565b60405180910390fd5b5050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612c475750601d60009054906101000a900460ff16155b8015612c5f5750601b60009054906101000a900460ff165b8015612cac5750601c54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60006101000a81548160ff0219169083151502179055506000612cdc601354601454610bdc565b612ce857600d54612ceb565b60005b90506000612d2b6002612d1d601054612d0f86601c546128a690919063ffffffff16565b61292090919063ffffffff16565b61292090919063ffffffff16565b90506000612d4482601c546127fe90919063ffffffff16565b90506000600267ffffffffffffffff811115612d6357612d62613f86565b5b604051908082528060200260200182016040528015612d915781602001602082028036833780820191505090505b5090503081600081518110612da957612da8613fb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612e1a57612e19613fb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612ebd9594939291906140a2565b600060405180830381600087803b158015612ed757600080fd5b505af1158015612eeb573d6000803e3d6000fd5b505050506000612f0482476127fe90919063ffffffff16565b90506000612f30612f1f60028961292090919063ffffffff16565b6010546127fe90919063ffffffff16565b90506000612f6c6002612f5e84612f508c886128a690919063ffffffff16565b61292090919063ffffffff16565b61292090919063ffffffff16565b90506000612f9783612f89600f54876128a690919063ffffffff16565b61292090919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561300357600080fd5b505af193505050508015613015575060015b50600088111561312857601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016130a8969594939291906140fc565b60606040518083038185885af11580156130c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130eb9190614172565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828960405161311f929190613b19565b60405180910390a15b5050505050505050506000601d60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806131e56011546131d76131c8600e546010546127fe90919063ffffffff16565b866128a690919063ffffffff16565b61292090919063ffffffff16565b90506000613212601154613204600e54876128a690919063ffffffff16565b61292090919063ffffffff16565b905061326682600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331d8160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133df9190613519565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134669190613519565b60405180910390a3613493613484828461284890919063ffffffff16565b856127fe90919063ffffffff16565b9250505092915050565b600080831182906134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db91906135c4565b60405180910390fd5b50600083856134f39190613be2565b9050809150509392505050565b6000819050919050565b61351381613500565b82525050565b600060208201905061352e600083018461350a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561356e578082015181840152602081019050613553565b60008484015250505050565b6000601f19601f8301169050919050565b600061359682613534565b6135a0818561353f565b93506135b0818560208601613550565b6135b98161357a565b840191505092915050565b600060208201905081810360008301526135de818461358b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613616826135eb565b9050919050565b6136268161360b565b811461363157600080fd5b50565b6000813590506136438161361d565b92915050565b61365281613500565b811461365d57600080fd5b50565b60008135905061366f81613649565b92915050565b6000806040838503121561368c5761368b6135e6565b5b600061369a85828601613634565b92505060206136ab85828601613660565b9150509250929050565b60008115159050919050565b6136ca816136b5565b82525050565b60006020820190506136e560008301846136c1565b92915050565b60008060408385031215613702576137016135e6565b5b600061371085828601613660565b925050602061372185828601613660565b9150509250929050565b600080600060608486031215613744576137436135e6565b5b600061375286828701613634565b935050602061376386828701613634565b925050604061377486828701613660565b9150509250925092565b600060208284031215613794576137936135e6565b5b60006137a284828501613634565b91505092915050565b600060ff82169050919050565b6137c1816137ab565b82525050565b60006020820190506137dc60008301846137b8565b92915050565b6137eb816136b5565b81146137f657600080fd5b50565b600081359050613808816137e2565b92915050565b60008060408385031215613825576138246135e6565b5b600061383385828601613634565b9250506020613844858286016137f9565b9150509250929050565b600060208284031215613864576138636135e6565b5b600061387284828501613660565b91505092915050565b60008060008060808587031215613895576138946135e6565b5b60006138a387828801613660565b94505060206138b487828801613660565b93505060406138c587828801613660565b92505060606138d687828801613660565b91505092959194509250565b6000819050919050565b60006139076139026138fd846135eb565b6138e2565b6135eb565b9050919050565b6000613919826138ec565b9050919050565b600061392b8261390e565b9050919050565b61393b81613920565b82525050565b60006020820190506139566000830184613932565b92915050565b6139658161360b565b82525050565b6000602082019050613980600083018461395c565b92915050565b60006139918261390e565b9050919050565b6139a181613986565b82525050565b60006020820190506139bc6000830184613998565b92915050565b600080604083850312156139d9576139d86135e6565b5b60006139e785828601613634565b92505060206139f885828601613634565b9150509250929050565b60008060408385031215613a1957613a186135e6565b5b6000613a27858286016137f9565b9250506020613a3885828601613660565b9150509250929050565b6000613a4d826135eb565b9050919050565b613a5d81613a42565b8114613a6857600080fd5b50565b600081359050613a7a81613a54565b92915050565b600060208284031215613a9657613a956135e6565b5b6000613aa484828501613a6b565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613ae3600b8361353f565b9150613aee82613aad565b602082019050919050565b60006020820190508181036000830152613b1281613ad6565b9050919050565b6000604082019050613b2e600083018561350a565b613b3b602083018461350a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7c82613500565b9150613b8783613500565b9250828202613b9581613500565b91508282048414831517613bac57613bab613b42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bed82613500565b9150613bf883613500565b925082613c0857613c07613bb3565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f2068696768210000000000000000600082015250565b6000613c4960188361353f565b9150613c5482613c13565b602082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cb560068361353f565b9150613cc082613c7f565b602082019050919050565b60006020820190508181036000830152613ce481613ca8565b9050919050565b6000613cf68261390e565b9050919050565b613d0681613ceb565b82525050565b6000602082019050613d216000830184613cfd565b92915050565b6000819050919050565b6000613d4c613d47613d4284613d27565b6138e2565b613500565b9050919050565b613d5c81613d31565b82525050565b6000604082019050613d77600083018561395c565b613d846020830184613d53565b9392505050565b6000604082019050613da0600083018561395c565b613dad602083018461350a565b9392505050565b6000613dbf82613500565b9150613dca83613500565b9250828203905081811115613de257613de1613b42565b5b92915050565b6000613df382613500565b9150613dfe83613500565b9250828201905080821115613e1657613e15613b42565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e52601b8361353f565b9150613e5d82613e1c565b602082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ee460218361353f565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613f5060118361353f565b9150613f5b82613f1a565b602082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140198161360b565b82525050565b600061402b8383614010565b60208301905092915050565b6000602082019050919050565b600061404f82613fe4565b6140598185613fef565b935061406483614000565b8060005b8381101561409557815161407c888261401f565b975061408783614037565b925050600181019050614068565b5085935050505092915050565b600060a0820190506140b7600083018861350a565b6140c46020830187613d53565b81810360408301526140d68186614044565b90506140e5606083018561395c565b6140f2608083018461350a565b9695505050505050565b600060c082019050614111600083018961395c565b61411e602083018861350a565b61412b6040830187613d53565b6141386060830186613d53565b614145608083018561395c565b61415260a083018461350a565b979650505050505050565b60008151905061416c81613649565b92915050565b60008060006060848603121561418b5761418a6135e6565b5b60006141998682870161415d565b93505060206141aa8682870161415d565b92505060406141bb8682870161415d565b915050925092509256fea264697066735822122094d2afdfe65c26f330979710db0dd0636869f28a6612ccf740787fef43271a0064736f6c634300081300336080604052732b591e99afe9f32eaa6214f7b7629768c40eeb39600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55603c600d55620186a0600e55348015620000da57600080fd5b5060405162001fde38038062001fde833981810160405281019062000100919062000243565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001505773165c3410fc91ef562c50559f7d2289febed552d962000152565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000275565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020b82620001de565b9050919050565b6200021d81620001fe565b81146200022957600080fd5b50565b6000815190506200023d8162000212565b92915050565b6000602082840312156200025c576200025b620001d9565b5b60006200026c848285016200022c565b91505092915050565b611d5980620002856000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611561565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f919061160b565b61032d565b005b34801561014257600080fd5b5061015d6004803603810190610158919061164b565b6105ec565b60405161016a9190611561565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611678565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be9190611561565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e99190611561565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b6040516102149190611561565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f919061164b565b610781565b604051610253939291906116b8565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610b7d565b6040516102889190611561565b60405180910390f35b34801561029d57600080fd5b506102a6610b83565b6040516102b39190611561565b60405180910390f35b3480156102c857600080fd5b506102d1610b89565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906116ef565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611561565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610860919061172b565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a1919061175b565b90506000600267ffffffffffffffff8111156108c0576108bf611788565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610928576109276117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610999576109986117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a3694939291906118e9565b6000604051808303818588803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050506000610b1883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac9919061172b565b602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061175b565b61127690919063ffffffff16565b9050610b2f816009546112c090919063ffffffff16565b600981905550610b72610b61600854610b5384600c5461135090919063ffffffff16565b6113ca90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9233610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611414565b15610cca57610cc96004600f5481548110610c9957610c986117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d0790611964565b91905055508080610d1790611964565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906119ac565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611a0d565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110839190611a3a565b81548110611094576110936117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116117b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b29190611a3a565b815481106111c3576111c26117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611a6e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60006112b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611481565b905092915050565b60008082846112cf9190611a9d565b905083811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611b2e565b60405180910390fd5b8091505092915050565b6000611349600c5461133b600b548561135090919063ffffffff16565b6113ca90919063ffffffff16565b9050919050565b600080830361136257600090506113c4565b600082846113709190611b4e565b905082848261137f9190611bbf565b146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690611c62565b60405180910390fd5b809150505b92915050565b600061140c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114e5565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190611a9d565b10801561147a5750600e54611478836105ec565b115b9050919050565b60008383111582906114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c09190611d01565b60405180910390fd5b50600083856114d89190611a3a565b9050809150509392505050565b6000808311829061152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239190611d01565b60405180910390fd5b506000838561153b9190611bbf565b9050809150509392505050565b6000819050919050565b61155b81611548565b82525050565b60006020820190506115766000830184611552565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6115e881611548565b81146115f357600080fd5b50565b600081359050611605816115df565b92915050565b600080604083850312156116225761162161157c565b5b6000611630858286016115ca565b9250506020611641858286016115f6565b9150509250929050565b6000602082840312156116615761166061157c565b5b600061166f848285016115ca565b91505092915050565b6000806040838503121561168f5761168e61157c565b5b600061169d858286016115f6565b92505060206116ae858286016115f6565b9150509250929050565b60006060820190506116cd6000830186611552565b6116da6020830185611552565b6116e76040830184611552565b949350505050565b6000602082840312156117055761170461157c565b5b6000611713848285016115f6565b91505092915050565b611725816115a1565b82525050565b6000602082019050611740600083018461171c565b92915050565b600081519050611755816115df565b92915050565b6000602082840312156117715761177061157c565b5b600061177f84828501611746565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061181561181061180b846117e6565b6117f0565b611548565b9050919050565b611825816117fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611860816115a1565b82525050565b60006118728383611857565b60208301905092915050565b6000602082019050919050565b60006118968261182b565b6118a08185611836565b93506118ab83611847565b8060005b838110156118dc5781516118c38882611866565b97506118ce8361187e565b9250506001810190506118af565b5085935050505092915050565b60006080820190506118fe600083018761181c565b8181036020830152611910818661188b565b905061191f604083018561171c565b61192c6060830184611552565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061196f82611548565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119a1576119a0611935565b5b600182019050919050565b60006040820190506119c1600083018561171c565b6119ce6020830184611552565b9392505050565b60008115159050919050565b6119ea816119d5565b81146119f557600080fd5b50565b600081519050611a07816119e1565b92915050565b600060208284031215611a2357611a2261157c565b5b6000611a31848285016119f8565b91505092915050565b6000611a4582611548565b9150611a5083611548565b9250828203905081811115611a6857611a67611935565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611aa882611548565b9150611ab383611548565b9250828201905080821115611acb57611aca611935565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611b18601b83611ad1565b9150611b2382611ae2565b602082019050919050565b60006020820190508181036000830152611b4781611b0b565b9050919050565b6000611b5982611548565b9150611b6483611548565b9250828202611b7281611548565b91508282048414831517611b8957611b88611935565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bca82611548565b9150611bd583611548565b925082611be557611be4611b90565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4c602183611ad1565b9150611c5782611bf0565b604082019050919050565b60006020820190508181036000830152611c7b81611c3f565b9050919050565b600081519050919050565b60005b83811015611cab578082015181840152602081019050611c90565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd382611c82565b611cdd8185611ad1565b9350611ced818560208601611c8d565b611cf681611cb7565b840191505092915050565b60006020820190508181036000830152611d1b8184611cc8565b90509291505056fea26469706673582212206ef2d0a1ed8646f93e8fadb9302e9e9cafc7a116aec58e2173abcc916354e76864736f6c63430008130033

Deployed ByteCode

0x6080604052600436106102765760003560e01c80637d1db4a51161014f578063ca33e64c116100c1578063f2fde38b1161007a578063f2fde38b14610999578063f708a64f146109c2578063f84ba65d146109eb578063f887ea4014610a14578063fce589d814610a3f578063fe9fbb8014610a6a5761027d565b8063ca33e64c14610879578063d51ed1c8146108a4578063dd62ed3e146108e1578063df20fd491461091e578063e01bb68814610947578063f0b37c04146109705761027d565b80639d1944f5116101135780639d1944f51461076b578063a8aa1b3114610794578063a9059cbb146107bf578063b6a5d7de146107fc578063bd9ab53714610825578063bfe109281461084e5761027d565b80637d1db4a51461069457806383ad7994146106bf578063893d20e8146106ea57806395d89b411461071557806398118cb4146107405761027d565b80632f54bf6e116101e8578063658d4b7f116101ac578063658d4b7f146105845780636ddd1713146105ad5780636fcba377146105d857806370a0823114610601578063762816d61461063e578063763014c7146106695761027d565b80632f54bf6e1461048d578063313ce567146104ca57806350db71fb146104f5578063571ac8b01461051e5780635c85974f1461055b5761027d565b806318160ddd1161023a57806318160ddd1461037d5780631df4ccfc146103a8578063201e7991146103d357806323b872dd146103fc5780632b112e49146104395780632d48e896146104645761027d565b80630445b6671461028257806306fdde03146102ad578063095ea7b3146102d85780631161ae3914610315578063180b0d7e146103525761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610aa7565b6040516102a49190613519565b60405180910390f35b3480156102b957600080fd5b506102c2610aad565b6040516102cf91906135c4565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613675565b610aea565b60405161030c91906136d0565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906136eb565b610bdc565b60405161034991906136d0565b60405180910390f35b34801561035e57600080fd5b50610367610bf1565b6040516103749190613519565b60405180910390f35b34801561038957600080fd5b50610392610bf7565b60405161039f9190613519565b60405180910390f35b3480156103b457600080fd5b506103bd610c01565b6040516103ca9190613519565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906136eb565b610c07565b005b34801561040857600080fd5b50610423600480360381019061041e919061372b565b610c61565b60405161043091906136d0565b60405180910390f35b34801561044557600080fd5b5061044e610e61565b60405161045b9190613519565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906136eb565b610ee3565b005b34801561049957600080fd5b506104b460048036038101906104af919061377e565b610fbe565b6040516104c191906136d0565b60405180910390f35b3480156104d657600080fd5b506104df611017565b6040516104ec91906137c7565b60405180910390f35b34801561050157600080fd5b5061051c6004803603810190610517919061380e565b611020565b005b34801561052a57600080fd5b506105456004803603810190610540919061377e565b6110c3565b60405161055291906136d0565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061384e565b6110f6565b005b34801561059057600080fd5b506105ab60048036038101906105a6919061380e565b611148565b005b3480156105b957600080fd5b506105c26111eb565b6040516105cf91906136d0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa919061387b565b6111fe565b005b34801561060d57600080fd5b506106286004803603810190610623919061377e565b6112f6565b6040516106359190613519565b60405180910390f35b34801561064a57600080fd5b5061065361133f565b6040516106609190613941565b60405180910390f35b34801561067557600080fd5b5061067e611365565b60405161068b919061396b565b60405180910390f35b3480156106a057600080fd5b506106a961138b565b6040516106b69190613519565b60405180910390f35b3480156106cb57600080fd5b506106d4611391565b6040516106e19190613519565b60405180910390f35b3480156106f657600080fd5b506106ff611397565b60405161070c919061396b565b60405180910390f35b34801561072157600080fd5b5061072a6113c0565b60405161073791906135c4565b60405180910390f35b34801561074c57600080fd5b506107556113fd565b6040516107629190613519565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061384e565b611403565b005b3480156107a057600080fd5b506107a9611464565b6040516107b6919061396b565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613675565b61148a565b6040516107f391906136d0565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061377e565b61149f565b005b34801561083157600080fd5b5061084c6004803603810190610847919061384e565b611541565b005b34801561085a57600080fd5b506108636115ad565b60405161087091906139a7565b60405180910390f35b34801561088557600080fd5b5061088e6115d3565b60405161089b919061396b565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061384e565b6115f9565b6040516108d89190613519565b60405180910390f35b3480156108ed57600080fd5b50610908600480360381019061090391906139c2565b61166b565b6040516109159190613519565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190613a02565b6116f2565b005b34801561095357600080fd5b5061096e6004803603810190610969919061377e565b61175f565b005b34801561097c57600080fd5b506109976004803603810190610992919061377e565b6117eb565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190613a80565b61188e565b005b3480156109ce57600080fd5b506109e960048036038101906109e4919061380e565b6119a7565b005b3480156109f757600080fd5b50610a126004803603810190610a0d919061380e565b611c47565b005b348015610a2057600080fd5b50610a29611cea565b604051610a369190613941565b60405180910390f35b348015610a4b57600080fd5b50610a54611d10565b604051610a619190613519565b60405180910390f35b348015610a7657600080fd5b50610a916004803603810190610a8c919061377e565b611d16565b604051610a9e91906136d0565b60405180910390f35b601c5481565b60606040518060400160405280600f81526020017f484558205265666c656374696f6e730000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bca9190613519565b60405180910390a36001905092915050565b600082610be8836115f9565b11905092915050565b60115481565b6000600554905090565b60105481565b610c1033611d16565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613af9565b60405180910390fd5b81601381905550806014819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e4d57610dcc826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610e58848484611dd0565b90509392505050565b6000610ede610e91600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b610ed0610ebf600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b6005546127fe90919063ffffffff16565b6127fe90919063ffffffff16565b905090565b610eec33611d16565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290613af9565b60405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610f88929190613b19565b600060405180830381600087803b158015610fa257600080fd5b505af1158015610fb6573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61102933611d16565b611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90613af9565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ef827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610aea565b9050919050565b6110ff33611d16565b61113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590613af9565b60405180910390fd5b8060068190555050565b61115133611d16565b611190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118790613af9565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b61120733611d16565b611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613af9565b60405180910390fd5b83600d8190555082600f8190555081600e819055508060118190555061128782611279858761284890919063ffffffff16565b61284890919063ffffffff16565b6010819055506000606460058361129e9190613b71565b6112a89190613be2565b90508060105411156112ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e690613c5f565b60405180910390fd5b5050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4852530000000000000000000000000000000000000000000000000000000000815250905090565b600d5481565b61140c33611d16565b61144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290613af9565b60405180910390fd5b620b71b0811061145a57600080fd5b80601a8190555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611497338484611dd0565b905092915050565b6114a833610fbe565b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613ccb565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61154a33610fbe565b611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613ccb565b60405180910390fd5b6103e88160055461159a9190613b71565b6115a49190613be2565b60068190555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611664611606610e61565b6116566116476002611639601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112f6565b6128a690919063ffffffff16565b856128a690919063ffffffff16565b61292090919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6116fb33611d16565b61173a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173190613af9565b60405180910390fd5b81601b60006101000a81548160ff02191690831515021790555080601c819055505050565b61176833611d16565b6117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613af9565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117f433610fbe565b611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90613ccb565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61189733610fbe565b6118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613ccb565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161199c9190613d0c565b60405180910390a150565b6119b033611d16565b6119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e690613af9565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611a795750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611a8257600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611b7457601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611b3d929190613d62565b600060405180830381600087803b158015611b5757600080fd5b505af1158015611b6b573d6000803e3d6000fd5b50505050611c43565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c10929190613d8b565b600060405180830381600087803b158015611c2a57600080fd5b505af1158015611c3e573d6000803e3d6000fd5b505050505b5050565b611c5033611d16565b611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613af9565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000838311158290611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab91906135c4565b60405180910390fd5b5060008385611dc39190613db4565b9050809150509392505050565b6000601d60009054906101000a900460ff1615611df957611df284848461296a565b90506127f7565b611e038483612b3d565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611edf5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611f375750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80611f8f5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc557508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611ffb57508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061203157508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061206757508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120bf5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121175750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061216f5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121c75750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15612368576121d4612bda565b156121e2576121e1612cb1565b5b61226b856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b78761314e565b6122c157846122cc565b6122cb87866131a5565b5b925061232083600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124cd565b6123f1856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061248983600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125e757601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016125ba929190613d8b565b600060405180830381600087803b1580156125d457600080fd5b505af19250505080156125e5575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661270157601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016126d4929190613d8b565b600060405180830381600087803b1580156126ee57600080fd5b505af19250505080156126ff575060015b505b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601a546040518263ffffffff1660e01b815260040161275e9190613519565b600060405180830381600087803b15801561277857600080fd5b505af1925050508015612789575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127e79190613519565b60405180910390a3600193505050505b9392505050565b600061284083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d6c565b905092915050565b60008082846128579190613de8565b90508381101561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390613e68565b60405180910390fd5b8091505092915050565b60008083036128b8576000905061291a565b600082846128c69190613b71565b90508284826128d59190613be2565b14612915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290c90613efa565b60405180910390fd5b809150505b92915050565b600061296283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061349d565b905092915050565b60006129f5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6c9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a8a82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2a9190613519565b60405180910390a3600190509392505050565b60065481111580612b975750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcd90613f66565b60405180910390fd5b5050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612c475750601d60009054906101000a900460ff16155b8015612c5f5750601b60009054906101000a900460ff165b8015612cac5750601c54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60006101000a81548160ff0219169083151502179055506000612cdc601354601454610bdc565b612ce857600d54612ceb565b60005b90506000612d2b6002612d1d601054612d0f86601c546128a690919063ffffffff16565b61292090919063ffffffff16565b61292090919063ffffffff16565b90506000612d4482601c546127fe90919063ffffffff16565b90506000600267ffffffffffffffff811115612d6357612d62613f86565b5b604051908082528060200260200182016040528015612d915781602001602082028036833780820191505090505b5090503081600081518110612da957612da8613fb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612e1a57612e19613fb5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612ebd9594939291906140a2565b600060405180830381600087803b158015612ed757600080fd5b505af1158015612eeb573d6000803e3d6000fd5b505050506000612f0482476127fe90919063ffffffff16565b90506000612f30612f1f60028961292090919063ffffffff16565b6010546127fe90919063ffffffff16565b90506000612f6c6002612f5e84612f508c886128a690919063ffffffff16565b61292090919063ffffffff16565b61292090919063ffffffff16565b90506000612f9783612f89600f54876128a690919063ffffffff16565b61292090919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561300357600080fd5b505af193505050508015613015575060015b50600088111561312857601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016130a8969594939291906140fc565b60606040518083038185885af11580156130c6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130eb9190614172565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828960405161311f929190613b19565b60405180910390a15b5050505050505050506000601d60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000806131e56011546131d76131c8600e546010546127fe90919063ffffffff16565b866128a690919063ffffffff16565b61292090919063ffffffff16565b90506000613212601154613204600e54876128a690919063ffffffff16565b61292090919063ffffffff16565b905061326682600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331d8160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461284890919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133df9190613519565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134669190613519565b60405180910390a3613493613484828461284890919063ffffffff16565b856127fe90919063ffffffff16565b9250505092915050565b600080831182906134e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134db91906135c4565b60405180910390fd5b50600083856134f39190613be2565b9050809150509392505050565b6000819050919050565b61351381613500565b82525050565b600060208201905061352e600083018461350a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561356e578082015181840152602081019050613553565b60008484015250505050565b6000601f19601f8301169050919050565b600061359682613534565b6135a0818561353f565b93506135b0818560208601613550565b6135b98161357a565b840191505092915050565b600060208201905081810360008301526135de818461358b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613616826135eb565b9050919050565b6136268161360b565b811461363157600080fd5b50565b6000813590506136438161361d565b92915050565b61365281613500565b811461365d57600080fd5b50565b60008135905061366f81613649565b92915050565b6000806040838503121561368c5761368b6135e6565b5b600061369a85828601613634565b92505060206136ab85828601613660565b9150509250929050565b60008115159050919050565b6136ca816136b5565b82525050565b60006020820190506136e560008301846136c1565b92915050565b60008060408385031215613702576137016135e6565b5b600061371085828601613660565b925050602061372185828601613660565b9150509250929050565b600080600060608486031215613744576137436135e6565b5b600061375286828701613634565b935050602061376386828701613634565b925050604061377486828701613660565b9150509250925092565b600060208284031215613794576137936135e6565b5b60006137a284828501613634565b91505092915050565b600060ff82169050919050565b6137c1816137ab565b82525050565b60006020820190506137dc60008301846137b8565b92915050565b6137eb816136b5565b81146137f657600080fd5b50565b600081359050613808816137e2565b92915050565b60008060408385031215613825576138246135e6565b5b600061383385828601613634565b9250506020613844858286016137f9565b9150509250929050565b600060208284031215613864576138636135e6565b5b600061387284828501613660565b91505092915050565b60008060008060808587031215613895576138946135e6565b5b60006138a387828801613660565b94505060206138b487828801613660565b93505060406138c587828801613660565b92505060606138d687828801613660565b91505092959194509250565b6000819050919050565b60006139076139026138fd846135eb565b6138e2565b6135eb565b9050919050565b6000613919826138ec565b9050919050565b600061392b8261390e565b9050919050565b61393b81613920565b82525050565b60006020820190506139566000830184613932565b92915050565b6139658161360b565b82525050565b6000602082019050613980600083018461395c565b92915050565b60006139918261390e565b9050919050565b6139a181613986565b82525050565b60006020820190506139bc6000830184613998565b92915050565b600080604083850312156139d9576139d86135e6565b5b60006139e785828601613634565b92505060206139f885828601613634565b9150509250929050565b60008060408385031215613a1957613a186135e6565b5b6000613a27858286016137f9565b9250506020613a3885828601613660565b9150509250929050565b6000613a4d826135eb565b9050919050565b613a5d81613a42565b8114613a6857600080fd5b50565b600081359050613a7a81613a54565b92915050565b600060208284031215613a9657613a956135e6565b5b6000613aa484828501613a6b565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613ae3600b8361353f565b9150613aee82613aad565b602082019050919050565b60006020820190508181036000830152613b1281613ad6565b9050919050565b6000604082019050613b2e600083018561350a565b613b3b602083018461350a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613b7c82613500565b9150613b8783613500565b9250828202613b9581613500565b91508282048414831517613bac57613bab613b42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613bed82613500565b9150613bf883613500565b925082613c0857613c07613bb3565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f2068696768210000000000000000600082015250565b6000613c4960188361353f565b9150613c5482613c13565b602082019050919050565b60006020820190508181036000830152613c7881613c3c565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cb560068361353f565b9150613cc082613c7f565b602082019050919050565b60006020820190508181036000830152613ce481613ca8565b9050919050565b6000613cf68261390e565b9050919050565b613d0681613ceb565b82525050565b6000602082019050613d216000830184613cfd565b92915050565b6000819050919050565b6000613d4c613d47613d4284613d27565b6138e2565b613500565b9050919050565b613d5c81613d31565b82525050565b6000604082019050613d77600083018561395c565b613d846020830184613d53565b9392505050565b6000604082019050613da0600083018561395c565b613dad602083018461350a565b9392505050565b6000613dbf82613500565b9150613dca83613500565b9250828203905081811115613de257613de1613b42565b5b92915050565b6000613df382613500565b9150613dfe83613500565b9250828201905080821115613e1657613e15613b42565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e52601b8361353f565b9150613e5d82613e1c565b602082019050919050565b60006020820190508181036000830152613e8181613e45565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ee460218361353f565b9150613eef82613e88565b604082019050919050565b60006020820190508181036000830152613f1381613ed7565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000613f5060118361353f565b9150613f5b82613f1a565b602082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140198161360b565b82525050565b600061402b8383614010565b60208301905092915050565b6000602082019050919050565b600061404f82613fe4565b6140598185613fef565b935061406483614000565b8060005b8381101561409557815161407c888261401f565b975061408783614037565b925050600181019050614068565b5085935050505092915050565b600060a0820190506140b7600083018861350a565b6140c46020830187613d53565b81810360408301526140d68186614044565b90506140e5606083018561395c565b6140f2608083018461350a565b9695505050505050565b600060c082019050614111600083018961395c565b61411e602083018861350a565b61412b6040830187613d53565b6141386060830186613d53565b614145608083018561395c565b61415260a083018461350a565b979650505050505050565b60008151905061416c81613649565b92915050565b60008060006060848603121561418b5761418a6135e6565b5b60006141998682870161415d565b93505060206141aa8682870161415d565b92505060406141bb8682870161415d565b915050925092509256fea264697066735822122094d2afdfe65c26f330979710db0dd0636869f28a6612ccf740787fef43271a0064736f6c63430008130033