Contract Address Details

0xc54abea15CFd8c669861e03995835961aEA27cCA

Token
Solar Shepard (Shepard)
Creator
0xd365d5–573600 at 0xecc0a4–323475
Balance
0 Doge
Tokens
Fetching tokens...
Transactions
191 Transactions
Transfers
0 Transfers
Gas Used
9,822,252
Last Balance Update
27003173
Contract name:
Solar_Shepard




Optimization enabled
false
Compiler version
v0.8.10+commit.fc410830




EVM Version
default




Verified at
2022-08-24T19:29:54.312418Z

Contract source code

// SPDX-License-Identifier:MIT

/*
  ______   __                                           __  
.' ____ \ [  |                                         |  ] 
| (___ \_| | |--.  .---.  _ .--.   ,--.   _ .--.   .--.| |  
 _.____`.  | .-. |/ /__\\[ '/'`\ \`'_\ : [ `/'`\]/ /'`\' |  
| \____) | | | | || \__., | \__/ |// | |, | |    | \__/  |  
 \______.'[___]|__]'.__.' | ;.__/ \'-;__/[___]    '.__.;__] 
                         [__|                               
*/

pragma solidity ^0.8.10;

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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address payable private _owner;
    address payable private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = payable(address(0));
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock"
        );
        require(
            block.timestamp > _lockTime,
            "Contract is locked until defined days"
        );
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
        _previousOwner = payable(address(0));
    }
}

contract Solar_Shepard is Context, IERC20, Ownable {
    using SafeMath for uint256;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;

    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1 * 1e9 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Solar Shepard";
    string private _symbol = "Shepard";
    uint8 private _decimals = 9;

    mapping(address => bool) public AMMs;

    bool public reflectionFeesdiabled = false; // should be false to charge fee

    uint256 public taxFee = 500; // 5% will be distributed among holder as token divideneds
    uint256 private _previousTaxFee = taxFee;

    uint256 public percentDivider = 100_00;

    constructor() {
        _rOwned[owner()] = _rTotal;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        uint256 rAmount = tAmount.mul(_getRate());
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            uint256 rAmount = tAmount.mul(_getRate());
            return rAmount;
        } else {
            uint256 rAmount = tAmount.mul(_getRate());
            uint256 rTransferAmount = rAmount.sub(
                totalFeePerTx(tAmount).mul(_getRate())
            );
            return rTransferAmount;
        }
    }

    function totalFeePerTx(uint256 tAmount) public view returns (uint256) {
        return tAmount.mul(taxFee).div(percentDivider);
    }

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

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

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

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

    function setTaxFeePercent(uint256 _taxFee) external onlyOwner {
        taxFee = _taxFee;
    }

    function setReflectionFees(bool _state) external onlyOwner {
        reflectionFeesdiabled = _state;
    }

    function setAMMs(address _pair, bool _state) external onlyOwner {
        AMMs[_pair] = _state;
    }

    function _reflectFee(uint256 tAmount) private {
        uint256 tFee = totalFeePerTx(tAmount);
        uint256 rFee = tFee.mul(_getRate());
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

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

    function removeAllFee() private {
        _previousTaxFee = taxFee;

        taxFee = 0;
    }

    function restoreAllFee() private {
        taxFee = _previousTaxFee;
    }

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "Shepard: approve from the zero address");
        require(spender != address(0), "Shepard: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "Shepard: transfer from the zero address");
        require(to != address(0), "Shepard: transfer to the zero address");
        require(
            amount > 0,
            "Shepard: Transfer amount must be greater than zero"
        );

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (
            _isExcludedFromFee[from] ||
            _isExcludedFromFee[to] ||
            reflectionFeesdiabled ||
            !AMMs[to]
        ) {
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount, takeFee);
    }

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

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount.sub(totalFeePerTx(tAmount));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(
            totalFeePerTx(tAmount).mul(currentRate)
        );
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

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: Insufficient Balance");
    }

    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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"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":"bool","name":"","internalType":"bool"}],"name":"AMMs","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","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":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deliver","inputs":[{"type":"uint256","name":"tAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"excludeFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"geUnlockTime","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeInReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromReward","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"lock","inputs":[{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"percentDivider","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"reflectionFeesdiabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFromToken","inputs":[{"type":"uint256","name":"tAmount","internalType":"uint256"},{"type":"bool","name":"deductTransferFee","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAMMs","inputs":[{"type":"address","name":"_pair","internalType":"address"},{"type":"bool","name":"_state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setReflectionFees","inputs":[{"type":"bool","name":"_state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTaxFeePercent","inputs":[{"type":"uint256","name":"_taxFee","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"taxFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenFromReflection","inputs":[{"type":"uint256","name":"rAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFeePerTx","inputs":[{"type":"uint256","name":"tAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFees","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":"newOwner","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unlock","inputs":[]}]
            

Contract Creation Code

0x6080604052670de0b6b3a76400006009556009546000196200002291906200049e565b60001962000031919062000505565b600a556040518060400160405280600d81526020017f536f6c6172205368657061726400000000000000000000000000000000000000815250600c908051906020019062000081929190620003b5565b506040518060400160405280600781526020017f5368657061726400000000000000000000000000000000000000000000000000815250600d9080519060200190620000cf929190620003b5565b506009600e60006101000a81548160ff021916908360ff1602179055506000601060006101000a81548160ff0219169083151502179055506101f46011556011546012556127106013553480156200012657600080fd5b50620001376200038460201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600a5460036000620002086200038c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600660006200025c6200038c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003156200038c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60095460405162000376919062000551565b60405180910390a3620005d3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c3906200059d565b90600052602060002090601f016020900481019282620003e7576000855562000433565b82601f106200040257805160ff191683800117855562000433565b8280016001018555821562000433579182015b828111156200043257825182559160200191906001019062000415565b5b50905062000442919062000446565b5090565b5b808211156200046157600081600090555060010162000447565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620004ab8262000465565b9150620004b88362000465565b925082620004cb57620004ca6200046f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620005128262000465565b91506200051f8362000465565b925082821015620005355762000534620004d6565b5b828203905092915050565b6200054b8162000465565b82525050565b600060208201905062000568600083018462000540565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005b657607f821691505b60208210811415620005cd57620005cc6200056e565b5b50919050565b61483480620005e36000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063b6c52324116100ad578063f2fde38b1161007c578063f2fde38b1461063a578063f882a05614610656578063f945fa7314610686578063fc6f4cbb146106a2578063fe6f1b05146106c057610211565b8063b6c52324146105b4578063dd467064146105d2578063dd62ed3e146105ee578063ea2f0b371461061e57610211565b806395d89b41116100f457806395d89b411461050e578063a071dcf41461052c578063a457c2d71461054a578063a69df4b51461057a578063a9059cbb1461058457610211565b806370a0823114610486578063715018a6146104b657806388f82020146104c05780638da5cb5b146104f057610211565b8063313ce567116101a8578063437823ec11610177578063437823ec146103d25780634549b039146103ee57806352390c021461041e5780635342acb41461043a57806365d60e561461046a57610211565b8063313ce5671461034c5780633685d4191461036a57806339509351146103865780633bd5d173146103b657610211565b806318160ddd116101e457806318160ddd1461029e5780631e9fe6c6146102bc57806323b872dd146102ec5780632d8381191461031c57610211565b8063061c82d01461021657806306fdde0314610232578063095ea7b31461025057806313114a9d14610280575b600080fd5b610230600480360381019061022b91906138f1565b6106de565b005b61023a61077d565b60405161024791906139b7565b60405180910390f35b61026a60048036038101906102659190613a37565b61080f565b6040516102779190613a92565b60405180910390f35b61028861082d565b6040516102959190613abc565b60405180910390f35b6102a6610837565b6040516102b39190613abc565b60405180910390f35b6102d660048036038101906102d19190613ad7565b610841565b6040516102e39190613a92565b60405180910390f35b61030660048036038101906103019190613b04565b610861565b6040516103139190613a92565b60405180910390f35b610336600480360381019061033191906138f1565b61093a565b6040516103439190613abc565b60405180910390f35b6103546109a8565b6040516103619190613b73565b60405180910390f35b610384600480360381019061037f9190613ad7565b6109bf565b005b6103a0600480360381019061039b9190613a37565b610daa565b6040516103ad9190613a92565b60405180910390f35b6103d060048036038101906103cb91906138f1565b610e5d565b005b6103ec60048036038101906103e79190613ad7565b610fe4565b005b61040860048036038101906104039190613bba565b6110d4565b6040516104159190613abc565b60405180910390f35b61043860048036038101906104339190613ad7565b6111a9565b005b610454600480360381019061044f9190613ad7565b61145d565b6040516104619190613a92565b60405180910390f35b610484600480360381019061047f9190613bfa565b6114b3565b005b6104a0600480360381019061049b9190613ad7565b611565565b6040516104ad9190613abc565b60405180910390f35b6104be611650565b005b6104da60048036038101906104d59190613ad7565b6117a3565b6040516104e79190613a92565b60405180910390f35b6104f86117f9565b6040516105059190613c36565b60405180910390f35b610516611822565b60405161052391906139b7565b60405180910390f35b6105346118b4565b6040516105419190613abc565b60405180910390f35b610564600480360381019061055f9190613a37565b6118ba565b6040516105719190613a92565b60405180910390f35b610582611987565b005b61059e60048036038101906105999190613a37565b611b9d565b6040516105ab9190613a92565b60405180910390f35b6105bc611bbb565b6040516105c99190613abc565b60405180910390f35b6105ec60048036038101906105e791906138f1565b611bc5565b005b61060860048036038101906106039190613c51565b611d8c565b6040516106159190613abc565b60405180910390f35b61063860048036038101906106339190613ad7565b611e13565b005b610654600480360381019061064f9190613ccf565b611f03565b005b610670600480360381019061066b91906138f1565b6120c5565b60405161067d9190613abc565b60405180910390f35b6106a0600480360381019061069b9190613cfc565b6120f7565b005b6106aa6121e7565b6040516106b79190613a92565b60405180910390f35b6106c86121fa565b6040516106d59190613abc565b60405180910390f35b6106e6612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a90613d88565b60405180910390fd5b8060118190555050565b6060600c805461078c90613dd7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b890613dd7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061082361081c612200565b8484612208565b6001905092915050565b6000600b54905090565b6000600954905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b600061086e8484846123d3565b61092f8461087a612200565b61092a856040518060600160405280602a81526020016147d5602a9139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108e0612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b612208565b600190509392505050565b6000600a54821115610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890613e7b565b60405180910390fd5b600061098b612689565b90506109a081846126b490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6109c7612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613d88565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613ee7565b60405180910390fd5b60005b600880549050811015610da6578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610b1b57610b1a613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d935760086001600880549050610b769190613f65565b81548110610b8757610b86613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610bc657610bc5613f07565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c67610c19612689565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126fe90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610d5957610d58613f99565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610da6565b8080610d9e90613fc8565b915050610ae3565b5050565b6000610e53610db7612200565b84610e4e8560056000610dc8612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b612208565b6001905092915050565b6000610e67612200565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90614083565b60405180910390fd5b6000610f12610f03612689565b846126fe90919063ffffffff16565b9050610f6681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fbe81600a546127d790919063ffffffff16565b600a81905550610fd983600b5461277990919063ffffffff16565b600b81905550505050565b610fec612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613d88565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561111b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611112906140ef565b60405180910390fd5b8161114757600061113c61112d612689565b856126fe90919063ffffffff16565b9050809150506111a3565b6000611163611154612689565b856126fe90919063ffffffff16565b9050600061119b61118c611175612689565b61117e886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b905080925050505b92915050565b6111b1612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613d88565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290613ee7565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561139f5761135b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093a565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114bb612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90613d88565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561160057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061164b565b611648600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093a565b90505b919050565b611658612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d805461183190613dd7565b80601f016020809104026020016040519081016040528092919081815260200182805461185d90613dd7565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b5050505050905090565b60115481565b600061197d6118c7612200565b84611978856040518060600160405280602781526020016147ae60279139600560006118f1612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b612208565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90614181565b60405180910390fd5b6002544211611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290614213565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611bb1611baa612200565b84846123d3565b6001905092915050565b6000600254905090565b611bcd612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190613d88565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611d089190614233565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e1b612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613d88565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f0b612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006120f06013546120e2601154856126fe90919063ffffffff16565b6126b490919063ffffffff16565b9050919050565b6120ff612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218390613d88565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b60135481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f9061438d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df9061441f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123c69190613abc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a906144b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614543565b60405180910390fd5b600081116124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906145d5565b60405180910390fd5b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061259d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b45750601060009054906101000a900460ff165b806126095750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261357600090505b61261f84848484612821565b50505050565b600083831115829061266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266491906139b7565b60405180910390fd5b506000838561267c9190613f65565b9050809150509392505050565b6000806000612696612a78565b915091506126ad81836126b490919063ffffffff16565b9250505090565b60006126f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d2b565b905092915050565b6000808314156127115760009050612773565b6000828461271f91906145f5565b905082848261272e919061467e565b1461276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614721565b60405180910390fd5b809150505b92915050565b60008082846127889190614233565b9050838110156127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c49061478d565b60405180910390fd5b8091505092915050565b600061281983836040518060400160405280601e81526020017f536166654d6174683a20496e73756666696369656e742042616c616e63650000815250612625565b905092915050565b8061282f5761282e612d8e565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e7576128e2848484612da1565b612a64565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561299f5761299a84848461304a565b612a63565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a5657612a518484846132f3565b612a62565b612a61848484613631565b5b5b5b80612a7257612a71613845565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015612cee57826003600060088481548110612ab257612ab1613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba05750816004600060088481548110612b3857612b37613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bb757600a5460095494509450505050612d27565b612c476003600060088481548110612bd257612bd1613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127d790919063ffffffff16565b9250612cd96004600060088481548110612c6457612c63613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127d790919063ffffffff16565b91508080612ce690613fc8565b915050612a8c565b50612d06600954600a546126b490919063ffffffff16565b821015612d1e57600a54600954935093505050612d27565b81819350935050505b9091565b60008083118290612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6991906139b7565b60405180910390fd5b5060008385612d81919061467e565b9050809150509392505050565b6011546012819055506000601181905550565b6000612dab612689565b90506000612dca612dbb846120c5565b846127d790919063ffffffff16565b90506000612de183856126fe90919063ffffffff16565b90506000612e12612e0385612df5886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b9050612e6685600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612efb82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f9081600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fdc85613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130399190613abc565b60405180910390a350505050505050565b6000613054612689565b90506000613073613064846120c5565b846127d790919063ffffffff16565b9050600061308a83856126fe90919063ffffffff16565b905060006130bb6130ac8561309e886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b905061310f82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a483600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323981600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328585613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132e29190613abc565b60405180910390a350505050505050565b60006132fd612689565b9050600061331c61330d846120c5565b846127d790919063ffffffff16565b9050600061333383856126fe90919063ffffffff16565b9050600061336461335585613347886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b90506133b885600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061344d82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e283600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357781600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c385613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136209190613abc565b60405180910390a350505050505050565b600061363b612689565b9050600061365a61364b846120c5565b846127d790919063ffffffff16565b9050600061367183856126fe90919063ffffffff16565b905060006136a261369385613685886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b90506136f682600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378b81600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d785613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138349190613abc565b60405180910390a350505050505050565b601254601181905550565b600061385b826120c5565b9050600061387961386a612689565b836126fe90919063ffffffff16565b905061389081600a546127d790919063ffffffff16565b600a819055506138ab82600b5461277990919063ffffffff16565b600b81905550505050565b600080fd5b6000819050919050565b6138ce816138bb565b81146138d957600080fd5b50565b6000813590506138eb816138c5565b92915050565b600060208284031215613907576139066138b6565b5b6000613915848285016138dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561395857808201518184015260208101905061393d565b83811115613967576000848401525b50505050565b6000601f19601f8301169050919050565b60006139898261391e565b6139938185613929565b93506139a381856020860161393a565b6139ac8161396d565b840191505092915050565b600060208201905081810360008301526139d1818461397e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a04826139d9565b9050919050565b613a14816139f9565b8114613a1f57600080fd5b50565b600081359050613a3181613a0b565b92915050565b60008060408385031215613a4e57613a4d6138b6565b5b6000613a5c85828601613a22565b9250506020613a6d858286016138dc565b9150509250929050565b60008115159050919050565b613a8c81613a77565b82525050565b6000602082019050613aa76000830184613a83565b92915050565b613ab6816138bb565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b600060208284031215613aed57613aec6138b6565b5b6000613afb84828501613a22565b91505092915050565b600080600060608486031215613b1d57613b1c6138b6565b5b6000613b2b86828701613a22565b9350506020613b3c86828701613a22565b9250506040613b4d868287016138dc565b9150509250925092565b600060ff82169050919050565b613b6d81613b57565b82525050565b6000602082019050613b886000830184613b64565b92915050565b613b9781613a77565b8114613ba257600080fd5b50565b600081359050613bb481613b8e565b92915050565b60008060408385031215613bd157613bd06138b6565b5b6000613bdf858286016138dc565b9250506020613bf085828601613ba5565b9150509250929050565b600060208284031215613c1057613c0f6138b6565b5b6000613c1e84828501613ba5565b91505092915050565b613c30816139f9565b82525050565b6000602082019050613c4b6000830184613c27565b92915050565b60008060408385031215613c6857613c676138b6565b5b6000613c7685828601613a22565b9250506020613c8785828601613a22565b9150509250929050565b6000613c9c826139d9565b9050919050565b613cac81613c91565b8114613cb757600080fd5b50565b600081359050613cc981613ca3565b92915050565b600060208284031215613ce557613ce46138b6565b5b6000613cf384828501613cba565b91505092915050565b60008060408385031215613d1357613d126138b6565b5b6000613d2185828601613a22565b9250506020613d3285828601613ba5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d72602083613929565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613def57607f821691505b60208210811415613e0357613e02613da8565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613e65602a83613929565b9150613e7082613e09565b604082019050919050565b60006020820190508181036000830152613e9481613e58565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613ed1601b83613929565b9150613edc82613e9b565b602082019050919050565b60006020820190508181036000830152613f0081613ec4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f70826138bb565b9150613f7b836138bb565b925082821015613f8e57613f8d613f36565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613fd3826138bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561400657614005613f36565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061406d602c83613929565b915061407882614011565b604082019050919050565b6000602082019050818103600083015261409c81614060565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006140d9601f83613929565b91506140e4826140a3565b602082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061416b602383613929565b91506141768261410f565b604082019050919050565b6000602082019050818103600083015261419a8161415e565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c20646566696e656460008201527f2064617973000000000000000000000000000000000000000000000000000000602082015250565b60006141fd602583613929565b9150614208826141a1565b604082019050919050565b6000602082019050818103600083015261422c816141f0565b9050919050565b600061423e826138bb565b9150614249836138bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427e5761427d613f36565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142e5602683613929565b91506142f082614289565b604082019050919050565b60006020820190508181036000830152614314816142d8565b9050919050565b7f536865706172643a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614377602683613929565b91506143828261431b565b604082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b7f536865706172643a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614409602483613929565b9150614414826143ad565b604082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f536865706172643a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b600061449b602783613929565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f536865706172643a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452d602583613929565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b7f536865706172643a205472616e7366657220616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b60006145bf603283613929565b91506145ca82614563565b604082019050919050565b600060208201905081810360008301526145ee816145b2565b9050919050565b6000614600826138bb565b915061460b836138bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464457614643613f36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614689826138bb565b9150614694836138bb565b9250826146a4576146a361464f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061470b602183613929565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614777601b83613929565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b905091905056fe536865706172643a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f536865706172643a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a8bd99fe9d1efa10904c296362b9e706f7cd957d634bf237f6765991098a635764736f6c634300080a0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063b6c52324116100ad578063f2fde38b1161007c578063f2fde38b1461063a578063f882a05614610656578063f945fa7314610686578063fc6f4cbb146106a2578063fe6f1b05146106c057610211565b8063b6c52324146105b4578063dd467064146105d2578063dd62ed3e146105ee578063ea2f0b371461061e57610211565b806395d89b41116100f457806395d89b411461050e578063a071dcf41461052c578063a457c2d71461054a578063a69df4b51461057a578063a9059cbb1461058457610211565b806370a0823114610486578063715018a6146104b657806388f82020146104c05780638da5cb5b146104f057610211565b8063313ce567116101a8578063437823ec11610177578063437823ec146103d25780634549b039146103ee57806352390c021461041e5780635342acb41461043a57806365d60e561461046a57610211565b8063313ce5671461034c5780633685d4191461036a57806339509351146103865780633bd5d173146103b657610211565b806318160ddd116101e457806318160ddd1461029e5780631e9fe6c6146102bc57806323b872dd146102ec5780632d8381191461031c57610211565b8063061c82d01461021657806306fdde0314610232578063095ea7b31461025057806313114a9d14610280575b600080fd5b610230600480360381019061022b91906138f1565b6106de565b005b61023a61077d565b60405161024791906139b7565b60405180910390f35b61026a60048036038101906102659190613a37565b61080f565b6040516102779190613a92565b60405180910390f35b61028861082d565b6040516102959190613abc565b60405180910390f35b6102a6610837565b6040516102b39190613abc565b60405180910390f35b6102d660048036038101906102d19190613ad7565b610841565b6040516102e39190613a92565b60405180910390f35b61030660048036038101906103019190613b04565b610861565b6040516103139190613a92565b60405180910390f35b610336600480360381019061033191906138f1565b61093a565b6040516103439190613abc565b60405180910390f35b6103546109a8565b6040516103619190613b73565b60405180910390f35b610384600480360381019061037f9190613ad7565b6109bf565b005b6103a0600480360381019061039b9190613a37565b610daa565b6040516103ad9190613a92565b60405180910390f35b6103d060048036038101906103cb91906138f1565b610e5d565b005b6103ec60048036038101906103e79190613ad7565b610fe4565b005b61040860048036038101906104039190613bba565b6110d4565b6040516104159190613abc565b60405180910390f35b61043860048036038101906104339190613ad7565b6111a9565b005b610454600480360381019061044f9190613ad7565b61145d565b6040516104619190613a92565b60405180910390f35b610484600480360381019061047f9190613bfa565b6114b3565b005b6104a0600480360381019061049b9190613ad7565b611565565b6040516104ad9190613abc565b60405180910390f35b6104be611650565b005b6104da60048036038101906104d59190613ad7565b6117a3565b6040516104e79190613a92565b60405180910390f35b6104f86117f9565b6040516105059190613c36565b60405180910390f35b610516611822565b60405161052391906139b7565b60405180910390f35b6105346118b4565b6040516105419190613abc565b60405180910390f35b610564600480360381019061055f9190613a37565b6118ba565b6040516105719190613a92565b60405180910390f35b610582611987565b005b61059e60048036038101906105999190613a37565b611b9d565b6040516105ab9190613a92565b60405180910390f35b6105bc611bbb565b6040516105c99190613abc565b60405180910390f35b6105ec60048036038101906105e791906138f1565b611bc5565b005b61060860048036038101906106039190613c51565b611d8c565b6040516106159190613abc565b60405180910390f35b61063860048036038101906106339190613ad7565b611e13565b005b610654600480360381019061064f9190613ccf565b611f03565b005b610670600480360381019061066b91906138f1565b6120c5565b60405161067d9190613abc565b60405180910390f35b6106a0600480360381019061069b9190613cfc565b6120f7565b005b6106aa6121e7565b6040516106b79190613a92565b60405180910390f35b6106c86121fa565b6040516106d59190613abc565b60405180910390f35b6106e6612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a90613d88565b60405180910390fd5b8060118190555050565b6060600c805461078c90613dd7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b890613dd7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061082361081c612200565b8484612208565b6001905092915050565b6000600b54905090565b6000600954905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b600061086e8484846123d3565b61092f8461087a612200565b61092a856040518060600160405280602a81526020016147d5602a9139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108e0612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b612208565b600190509392505050565b6000600a54821115610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890613e7b565b60405180910390fd5b600061098b612689565b90506109a081846126b490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6109c7612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613d88565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613ee7565b60405180910390fd5b60005b600880549050811015610da6578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610b1b57610b1a613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d935760086001600880549050610b769190613f65565b81548110610b8757610b86613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610bc657610bc5613f07565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c67610c19612689565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126fe90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610d5957610d58613f99565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610da6565b8080610d9e90613fc8565b915050610ae3565b5050565b6000610e53610db7612200565b84610e4e8560056000610dc8612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b612208565b6001905092915050565b6000610e67612200565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed90614083565b60405180910390fd5b6000610f12610f03612689565b846126fe90919063ffffffff16565b9050610f6681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fbe81600a546127d790919063ffffffff16565b600a81905550610fd983600b5461277990919063ffffffff16565b600b81905550505050565b610fec612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613d88565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561111b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611112906140ef565b60405180910390fd5b8161114757600061113c61112d612689565b856126fe90919063ffffffff16565b9050809150506111a3565b6000611163611154612689565b856126fe90919063ffffffff16565b9050600061119b61118c611175612689565b61117e886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b905080925050505b92915050565b6111b1612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613d88565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c290613ee7565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561139f5761135b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093a565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114bb612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90613d88565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561160057600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061164b565b611648600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093a565b90505b919050565b611658612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d805461183190613dd7565b80601f016020809104026020016040519081016040528092919081815260200182805461185d90613dd7565b80156118aa5780601f1061187f576101008083540402835291602001916118aa565b820191906000526020600020905b81548152906001019060200180831161188d57829003601f168201915b5050505050905090565b60115481565b600061197d6118c7612200565b84611978856040518060600160405280602781526020016147ae60279139600560006118f1612200565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126259092919063ffffffff16565b612208565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90614181565b60405180910390fd5b6002544211611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290614213565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611bb1611baa612200565b84846123d3565b6001905092915050565b6000600254905090565b611bcd612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5190613d88565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611d089190614233565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e1b612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613d88565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f0b612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff906142fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006120f06013546120e2601154856126fe90919063ffffffff16565b6126b490919063ffffffff16565b9050919050565b6120ff612200565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218390613d88565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b60135481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f9061438d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df9061441f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123c69190613abc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a906144b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90614543565b60405180910390fd5b600081116124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906145d5565b60405180910390fd5b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061259d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125b45750601060009054906101000a900460ff165b806126095750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261357600090505b61261f84848484612821565b50505050565b600083831115829061266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266491906139b7565b60405180910390fd5b506000838561267c9190613f65565b9050809150509392505050565b6000806000612696612a78565b915091506126ad81836126b490919063ffffffff16565b9250505090565b60006126f683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d2b565b905092915050565b6000808314156127115760009050612773565b6000828461271f91906145f5565b905082848261272e919061467e565b1461276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276590614721565b60405180910390fd5b809150505b92915050565b60008082846127889190614233565b9050838110156127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c49061478d565b60405180910390fd5b8091505092915050565b600061281983836040518060400160405280601e81526020017f536166654d6174683a20496e73756666696369656e742042616c616e63650000815250612625565b905092915050565b8061282f5761282e612d8e565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128d25750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128e7576128e2848484612da1565b612a64565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561299f5761299a84848461304a565b612a63565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a415750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a5657612a518484846132f3565b612a62565b612a61848484613631565b5b5b5b80612a7257612a71613845565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015612cee57826003600060088481548110612ab257612ab1613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612ba05750816004600060088481548110612b3857612b37613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612bb757600a5460095494509450505050612d27565b612c476003600060088481548110612bd257612bd1613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846127d790919063ffffffff16565b9250612cd96004600060088481548110612c6457612c63613f07565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836127d790919063ffffffff16565b91508080612ce690613fc8565b915050612a8c565b50612d06600954600a546126b490919063ffffffff16565b821015612d1e57600a54600954935093505050612d27565b81819350935050505b9091565b60008083118290612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6991906139b7565b60405180910390fd5b5060008385612d81919061467e565b9050809150509392505050565b6011546012819055506000601181905550565b6000612dab612689565b90506000612dca612dbb846120c5565b846127d790919063ffffffff16565b90506000612de183856126fe90919063ffffffff16565b90506000612e12612e0385612df5886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b9050612e6685600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612efb82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f9081600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fdc85613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130399190613abc565b60405180910390a350505050505050565b6000613054612689565b90506000613073613064846120c5565b846127d790919063ffffffff16565b9050600061308a83856126fe90919063ffffffff16565b905060006130bb6130ac8561309e886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b905061310f82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a483600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323981600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328585613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516132e29190613abc565b60405180910390a350505050505050565b60006132fd612689565b9050600061331c61330d846120c5565b846127d790919063ffffffff16565b9050600061333383856126fe90919063ffffffff16565b9050600061336461335585613347886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b90506133b885600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061344d82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e283600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357781600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135c385613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516136209190613abc565b60405180910390a350505050505050565b600061363b612689565b9050600061365a61364b846120c5565b846127d790919063ffffffff16565b9050600061367183856126fe90919063ffffffff16565b905060006136a261369385613685886120c5565b6126fe90919063ffffffff16565b836127d790919063ffffffff16565b90506136f682600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d790919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378b81600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461277990919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d785613850565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138349190613abc565b60405180910390a350505050505050565b601254601181905550565b600061385b826120c5565b9050600061387961386a612689565b836126fe90919063ffffffff16565b905061389081600a546127d790919063ffffffff16565b600a819055506138ab82600b5461277990919063ffffffff16565b600b81905550505050565b600080fd5b6000819050919050565b6138ce816138bb565b81146138d957600080fd5b50565b6000813590506138eb816138c5565b92915050565b600060208284031215613907576139066138b6565b5b6000613915848285016138dc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561395857808201518184015260208101905061393d565b83811115613967576000848401525b50505050565b6000601f19601f8301169050919050565b60006139898261391e565b6139938185613929565b93506139a381856020860161393a565b6139ac8161396d565b840191505092915050565b600060208201905081810360008301526139d1818461397e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a04826139d9565b9050919050565b613a14816139f9565b8114613a1f57600080fd5b50565b600081359050613a3181613a0b565b92915050565b60008060408385031215613a4e57613a4d6138b6565b5b6000613a5c85828601613a22565b9250506020613a6d858286016138dc565b9150509250929050565b60008115159050919050565b613a8c81613a77565b82525050565b6000602082019050613aa76000830184613a83565b92915050565b613ab6816138bb565b82525050565b6000602082019050613ad16000830184613aad565b92915050565b600060208284031215613aed57613aec6138b6565b5b6000613afb84828501613a22565b91505092915050565b600080600060608486031215613b1d57613b1c6138b6565b5b6000613b2b86828701613a22565b9350506020613b3c86828701613a22565b9250506040613b4d868287016138dc565b9150509250925092565b600060ff82169050919050565b613b6d81613b57565b82525050565b6000602082019050613b886000830184613b64565b92915050565b613b9781613a77565b8114613ba257600080fd5b50565b600081359050613bb481613b8e565b92915050565b60008060408385031215613bd157613bd06138b6565b5b6000613bdf858286016138dc565b9250506020613bf085828601613ba5565b9150509250929050565b600060208284031215613c1057613c0f6138b6565b5b6000613c1e84828501613ba5565b91505092915050565b613c30816139f9565b82525050565b6000602082019050613c4b6000830184613c27565b92915050565b60008060408385031215613c6857613c676138b6565b5b6000613c7685828601613a22565b9250506020613c8785828601613a22565b9150509250929050565b6000613c9c826139d9565b9050919050565b613cac81613c91565b8114613cb757600080fd5b50565b600081359050613cc981613ca3565b92915050565b600060208284031215613ce557613ce46138b6565b5b6000613cf384828501613cba565b91505092915050565b60008060408385031215613d1357613d126138b6565b5b6000613d2185828601613a22565b9250506020613d3285828601613ba5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d72602083613929565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613def57607f821691505b60208210811415613e0357613e02613da8565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000613e65602a83613929565b9150613e7082613e09565b604082019050919050565b60006020820190508181036000830152613e9481613e58565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000613ed1601b83613929565b9150613edc82613e9b565b602082019050919050565b60006020820190508181036000830152613f0081613ec4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f70826138bb565b9150613f7b836138bb565b925082821015613f8e57613f8d613f36565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613fd3826138bb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561400657614005613f36565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061406d602c83613929565b915061407882614011565b604082019050919050565b6000602082019050818103600083015261409c81614060565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006140d9601f83613929565b91506140e4826140a3565b602082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061416b602383613929565b91506141768261410f565b604082019050919050565b6000602082019050818103600083015261419a8161415e565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c20646566696e656460008201527f2064617973000000000000000000000000000000000000000000000000000000602082015250565b60006141fd602583613929565b9150614208826141a1565b604082019050919050565b6000602082019050818103600083015261422c816141f0565b9050919050565b600061423e826138bb565b9150614249836138bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427e5761427d613f36565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142e5602683613929565b91506142f082614289565b604082019050919050565b60006020820190508181036000830152614314816142d8565b9050919050565b7f536865706172643a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614377602683613929565b91506143828261431b565b604082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b7f536865706172643a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614409602483613929565b9150614414826143ad565b604082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f536865706172643a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b600061449b602783613929565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f536865706172643a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452d602583613929565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b7f536865706172643a205472616e7366657220616d6f756e74206d75737420626560008201527f2067726561746572207468616e207a65726f0000000000000000000000000000602082015250565b60006145bf603283613929565b91506145ca82614563565b604082019050919050565b600060208201905081810360008301526145ee816145b2565b9050919050565b6000614600826138bb565b915061460b836138bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464457614643613f36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614689826138bb565b9150614694836138bb565b9250826146a4576146a361464f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061470b602183613929565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614777601b83613929565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b905091905056fe536865706172643a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f536865706172643a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a8bd99fe9d1efa10904c296362b9e706f7cd957d634bf237f6765991098a635764736f6c634300080a0033