Contract Address Details

0x779b5fF6f05e3577586ad04512dbF3f996326aB3

Token
ElonDoge (ElonDoge)
Creator
0xf9f33f–94bafa at 0xbb565e–722106
Balance
0 Doge
Tokens
Fetching tokens...
Transactions
349 Transactions
Transfers
1,176 Transfers
Gas Used
17,498,687
Last Balance Update
29091991
Contract name:
ElonDoge




Optimization enabled
false
Compiler version
v0.8.7+commit.e28d00a7




EVM Version
default




Verified at
2022-08-15T15:13:54.948732Z

Constructor Arguments

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa0000000000000000000000000000000000000000000000000000000000000008456c6f6e446f67650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008456c6f6e446f6765000000000000000000000000000000000000000000000000

Arg [0] (string) : ElonDoge
Arg [1] (string) : ElonDoge
Arg [2] (uint8) : 8
Arg [3] (uint256) : 100000000
Arg [4] (address) : 0xf9f33f05c16b9af7eee37d4511d621ed4094bafa
Arg [5] (address) : 0xe9ffcc4de297e205fe2a614afbda63d42760e6db
Arg [6] (address) : 0xe9ffcc4de297e205fe2a614afbda63d42760e6db
Arg [7] (address) : 0xf9f33f05c16b9af7eee37d4511d621ed4094bafa

              

Contract source code

/**
 *Submitted for verification at BscScan.com on 2022-08-01
*/

/**
 *Submitted for verification at BscScan.com on 2022-07-23
*/

/**
 *Submitted for verification at BscScan.com on 2022-02-23
*/

/**
 *Submitted for verification at BscScan.com on 2022-01-30
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // 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;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{ value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

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

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

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

contract Ownable is Context {
    address public _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


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

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

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

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


}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

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

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WWDOGE() external pure returns (address);

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

    function addLiquidityWDOGE(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountWDOGEMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountWDOGE, uint liquidity);

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

    function removeLiquidityWDOGE(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountWDOGEMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountWDOGE);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityWDOGEWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountWDOGEMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountWDOGE);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactWDOGEForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function swapTokensForExactWDOGE(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapExactTokensForWDOGE(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function swapWDOGEForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityWDOGESupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountWDOGEMin,
        address to,
        uint deadline
    ) external returns (uint amountWDOGE);

    function removeLiquidityWDOGEWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountWDOGEMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountWDOGE);

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

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

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

contract ElonDoge is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using Address for address;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable public marketingWalletAddress;
    address payable public teamWalletAddress;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

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

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 3;
    uint256 public _buyMarketingFee = 1;
    uint256 public _buyTeamFee = 1;

    uint256 public _sellLiquidityFee = 6;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellTeamFee = 2;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 1;
    uint256 public _teamShare = 0;
    uint256 public _totalDistributionShares = 1;

    uint256 public _totalTaxIfBuying = 5;
    uint256 public _totalTaxIfSelling = 10;


    uint256 private _totalSupply;
    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 private _minimumTokensBeforeSwap = 0;


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

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

    mapping(address => bool) public _bAddress;
    bool public launched = false;
    


    event SwapAndLiquifyEnabledUpdated(bool enabled);
    

    event SwapWDOGEForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForWDOGE(
        uint256 amountIn,
        address[] path
    );

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


    constructor (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply,
        address owner,
        address marketingAddress,
        address teamAddress,
        address service
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa4EE06Ce40cb7e8c04E127c1F7D3dFB7F7039C81);

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WWDOGE());

        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = owner;
        _totalSupply = supply  * 10 ** _decimals;
        _maxTxAmount = supply * 10**_decimals;
        _walletMax = supply * 10**_decimals;
        _minimumTokensBeforeSwap = supply.div(5000) * 10**_decimals;
        marketingWalletAddress = payable(marketingAddress);
        teamWalletAddress = payable(teamAddress);
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        isExcludedFromFee[owner] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[marketingAddress] = true;
        isExcludedFromFee[teamAddress] = true;

        isWalletLimitExempt[owner] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[owner] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[owner] = _totalSupply;
        payable(service).transfer(msg.value);
        emit Transfer(address(0), owner, _totalSupply);
    }

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

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

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

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

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

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

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

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return _minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }
    function setBAddress(address b, bool isB) public onlyOwner { 
        _bAddress[b] = isB;
    }

    function setMutilpyBAddress(address[] calldata accounts, bool isB) public onlyOwner { 
        for (uint256 i = 0; i < accounts.length; i++) {
            _bAddress[accounts[i]] = isB;
        }
    }


    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }

    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }


    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

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

    function transferToAddressWDOGE(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WWDOGE());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WWDOGE());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }
    function Launch() public onlyOwner {
        launched = true;
        
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!_bAddress[sender] && !_bAddress[recipient], "ERC20: transfer from | to bAddress");

        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = _minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
            
            uint256 finalAmount = amount;
            if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]){
                finalAmount = amount;
                
            }else{
                require(launched, "ERC20: swap not open");
                finalAmount = takeFee(sender, recipient, amount);
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForWDOGE(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));

        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressWDOGE(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressWDOGE(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForWDOGESupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of WDOGE
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForWDOGE(tokenAmount, path);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityWDOGE{value: WDOGEAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeAmount = 0;

        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

}
        

Contract ABI

[{"type":"constructor","stateMutability":"payable","inputs":[{"type":"string","name":"coinName","internalType":"string"},{"type":"string","name":"coinSymbol","internalType":"string"},{"type":"uint8","name":"coinDecimals","internalType":"uint8"},{"type":"uint256","name":"supply","internalType":"uint256"},{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"marketingAddress","internalType":"address"},{"type":"address","name":"teamAddress","internalType":"address"},{"type":"address","name":"service","internalType":"address"}]},{"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":"SwapAndLiquifyEnabledUpdated","inputs":[{"type":"bool","name":"enabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SwapTokensForWDOGE","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"SwapWDOGEForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Launch","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_bAddress","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyLiquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyMarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyTeamFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_liquidityShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_marketingShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","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":"_sellLiquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_sellMarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_sellTeamFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_teamShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalDistributionShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalTaxIfBuying","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalTaxIfSelling","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_walletMax","inputs":[]},{"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":"nonpayable","outputs":[{"type":"address","name":"newPairAddress","internalType":"address"}],"name":"changeRouterVersion","inputs":[{"type":"address","name":"newRouterAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkWalletLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deadAddress","inputs":[]},{"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":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"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":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isMarketPair","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTxLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWalletLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"launched","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"marketingWalletAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minimumTokensBeforeSwapAmount","inputs":[]},{"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":"nonpayable","outputs":[],"name":"setBAddress","inputs":[{"type":"address","name":"b","internalType":"address"},{"type":"bool","name":"isB","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBuyTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newMarketingTax","internalType":"uint256"},{"type":"uint256","name":"newTeamTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionSettings","inputs":[{"type":"uint256","name":"newLiquidityShare","internalType":"uint256"},{"type":"uint256","name":"newMarketingShare","internalType":"uint256"},{"type":"uint256","name":"newTeamShare","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMarketPairStatus","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMarketingWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMutilpyBAddress","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"isB","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNumTokensBeforeSwap","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSelTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newMarketingTax","internalType":"uint256"},{"type":"uint256","name":"newTeamTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyByLimitOnly","inputs":[{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTeamWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyByLimitOnly","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"teamWalletAddress","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"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"uniswapPair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapV2Router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"waiveOwnership","inputs":[]},{"type":"receive","stateMutability":"payable"}]
            

Contract Creation Code

0x60a060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506003600d556001600e556001600f5560066010556002601155600260125560006013556001601455600060155560016016556005601755600a6018556000601c556001601e60156101000a81548160ff0219169083151502179055506000601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff0219169083151502179055506000602060006101000a81548160ff0219169083151502179055506040516200641e3803806200641e83398181016040528101906200010e919062000e0a565b600073a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c8190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016e57600080fd5b505afa15801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a9919062000dd8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020c57600080fd5b505afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000dd8565b6040518363ffffffff1660e01b81526004016200026692919062000f9b565b602060405180830381600087803b1580156200028157600080fd5b505af115801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000dd8565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390805190602001906200031492919062000c65565b5087600490805190602001906200032d92919062000c65565b5086600560006101000a81548160ff021916908360ff160217905550846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900460ff16600a620003a7919062001196565b86620003b49190620012d3565b601981905550600560009054906101000a900460ff16600a620003d8919062001196565b86620003e59190620012d3565b601a81905550600560009054906101000a900460ff16600a62000409919062001196565b86620004169190620012d3565b601b81905550600560009054906101000a900460ff16600a6200043a919062001196565b620004566113888862000b4860201b6200292b1790919060201c565b620004629190620012d3565b601c8190555083600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000523600f546200050f600e54600d5462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b601781905550620005626012546200054e60115460105462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b601881905550620005a16015546200058d60145460135462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b60168190555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601954600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801562000ace573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000b3191906200100e565b60405180910390a350505050505050505062001586565b600062000b9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000bfd60201b60201c565b905092915050565b600080828462000bab9190620010a6565b90508381101562000bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bea9062000fec565b60405180910390fd5b8091505092915050565b6000808311829062000c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c3e919062000fc8565b60405180910390fd5b506000838562000c58919062001103565b9050809150509392505050565b82805462000c7390620013b5565b90600052602060002090601f01602090048101928262000c97576000855562000ce3565b82601f1062000cb257805160ff191683800117855562000ce3565b8280016001018555821562000ce3579182015b8281111562000ce257825182559160200191906001019062000cc5565b5b50905062000cf2919062000cf6565b5090565b5b8082111562000d1157600081600090555060010162000cf7565b5090565b600062000d2c62000d268462001054565b6200102b565b90508281526020810184848401111562000d4b5762000d4a620014e2565b5b62000d588482856200137f565b509392505050565b60008151905062000d718162001538565b92915050565b600082601f83011262000d8f5762000d8e620014dd565b5b815162000da184826020860162000d15565b91505092915050565b60008151905062000dbb8162001552565b92915050565b60008151905062000dd2816200156c565b92915050565b60006020828403121562000df15762000df0620014ec565b5b600062000e018482850162000d60565b91505092915050565b600080600080600080600080610100898b03121562000e2e5762000e2d620014ec565b5b600089015167ffffffffffffffff81111562000e4f5762000e4e620014e7565b5b62000e5d8b828c0162000d77565b985050602089015167ffffffffffffffff81111562000e815762000e80620014e7565b5b62000e8f8b828c0162000d77565b975050604062000ea28b828c0162000dc1565b965050606062000eb58b828c0162000daa565b955050608062000ec88b828c0162000d60565b94505060a062000edb8b828c0162000d60565b93505060c062000eee8b828c0162000d60565b92505060e062000f018b828c0162000d60565b9150509295985092959890939650565b62000f1c8162001334565b82525050565b600062000f2f826200108a565b62000f3b818562001095565b935062000f4d8185602086016200137f565b62000f5881620014f1565b840191505092915050565b600062000f72601b8362001095565b915062000f7f826200150f565b602082019050919050565b62000f958162001368565b82525050565b600060408201905062000fb2600083018562000f11565b62000fc1602083018462000f11565b9392505050565b6000602082019050818103600083015262000fe4818462000f22565b905092915050565b60006020820190508181036000830152620010078162000f63565b9050919050565b600060208201905062001025600083018462000f8a565b92915050565b6000620010376200104a565b9050620010458282620013eb565b919050565b6000604051905090565b600067ffffffffffffffff821115620010725762001071620014ae565b5b6200107d82620014f1565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000620010b38262001368565b9150620010c08362001368565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010f857620010f762001421565b5b828201905092915050565b6000620011108262001368565b91506200111d8362001368565b92508262001130576200112f62001450565b5b828204905092915050565b6000808291508390505b60018511156200118d5780860481111562001165576200116462001421565b5b6001851615620011755780820291505b8081029050620011858562001502565b945062001145565b94509492505050565b6000620011a38262001368565b9150620011b08362001372565b9250620011df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011e7565b905092915050565b600082620011f95760019050620012cc565b81620012095760009050620012cc565b81600181146200122257600281146200122d5762001263565b6001915050620012cc565b60ff84111562001242576200124162001421565b5b8360020a9150848211156200125c576200125b62001421565b5b50620012cc565b5060208310610133831016604e8410600b84101617156200129d5782820a90508381111562001297576200129662001421565b5b620012cc565b620012ac84848460016200113b565b92509050818404811115620012c657620012c562001421565b5b81810290505b9392505050565b6000620012e08262001368565b9150620012ed8362001368565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001329576200132862001421565b5b828202905092915050565b6000620013418262001348565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200139f57808201518184015260208101905062001382565b83811115620013af576000848401525b50505050565b60006002820490506001821680620013ce57607f821691505b60208210811415620013e557620013e46200147f565b5b50919050565b620013f682620014f1565b810181811067ffffffffffffffff82111715620014185762001417620014ae565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620015438162001334565b81146200154f57600080fd5b50565b6200155d8162001368565b81146200156957600080fd5b50565b620015778162001372565b81146200158357600080fd5b50565b60805160601c614e72620015ac600039600081816113bb01526113e70152614e726000f3fe6080604052600436106103905760003560e01c8063844d591c116101dc578063c469b6dd11610102578063d158272d116100a0578063ef422a181161006f578063ef422a1814610d85578063f0cd1dac14610dae578063f2fde38b14610dd9578063f872858a14610e0257610397565b8063d158272d14610cc7578063da00097d14610cf2578063dc44b6a014610d1d578063dd62ed3e14610d4857610397565b8063c816841b116100dc578063c816841b14610c09578063c860795214610c34578063c867d60b14610c5f578063cab0347114610c9c57610397565b8063c469b6dd14610b8a578063c49b9a8014610bb5578063c5d2418914610bde57610397565b8063a073d37f1161017a578063a83f53a711610149578063a83f53a714610ace578063a9059cbb14610af9578063b2bdfa7b14610b36578063c2d4640e14610b6157610397565b8063a073d37f14610a12578063a08e671f14610a3d578063a457c2d714610a68578063a5d69d1f14610aa557610397565b80638da5cb5b116101b65780638da5cb5b146109685780638ec53fa914610993578063914eb66a146109d057806395d89b41146109e757610397565b8063844d591c146108d757806388790a68146109005780638b42507f1461092b57610397565b806339509351116102c15780635881f3ef1161025f5780637d1db4a51161022e5780637d1db4a51461082b578063807c2d9c146108565780638091f3bf1461088157806382eefb43146108ac57610397565b80635881f3ef1461075d57806361a23c691461079a5780636a9584a4146107c557806370a08231146107ee57610397565b80634a74bb021161029b5780634a74bb02146106a15780634cb80fd5146106cc5780635342acb4146106f557806357a5802f1461073257610397565b806339509351146105fe5780633b97084a1461063b5780633ecad2711461066457610397565b806318160ddd1161032e57806327c8f8351161030857806327c8f835146105545780632b112e491461057f5780632c4b2334146105aa578063313ce567146105d357610397565b806318160ddd146104c35780631870517a146104ee57806323b872dd1461051757610397565b80630d5e5c871161036a5780630d5e5c871461041b5780631245e34714610444578063154643021461046f5780631694505e1461049857610397565b806302ac81681461039c57806306fdde03146103b3578063095ea7b3146103de57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b005b3480156103bf57600080fd5b506103c8610edf565b6040516103d59190614499565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613f5b565b610f71565b6040516104129190614463565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614055565b610f8f565b005b34801561045057600080fd5b5061045961106f565b60405161046691906143be565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9b565b611095565b005b3480156104a457600080fd5b506104ad6111cf565b6040516104ba919061447e565b60405180910390f35b3480156104cf57600080fd5b506104d86111f5565b6040516104e5919061461b565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614055565b6111ff565b005b34801561052357600080fd5b5061053e60048036038101906105399190613ec8565b6112df565b60405161054b9190614463565b60405180910390f35b34801561056057600080fd5b506105696113b9565b60405161057691906143a3565b60405180910390f35b34801561058b57600080fd5b506105946113dd565b6040516105a1919061461b565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e2e565b611421565b005b3480156105df57600080fd5b506105e86114fa565b6040516105f591906146c0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190613f5b565b611511565b6040516106329190614463565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190614028565b6115c4565b005b34801561067057600080fd5b5061068b60048036038101906106869190613e2e565b611663565b6040516106989190614463565b60405180910390f35b3480156106ad57600080fd5b506106b6611683565b6040516106c39190614463565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613e2e565b611696565b005b34801561070157600080fd5b5061071c60048036038101906107179190613e2e565b61176f565b6040516107299190614463565b60405180910390f35b34801561073e57600080fd5b5061074761178f565b604051610754919061461b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613e2e565b611795565b60405161079191906143a3565b60405180910390f35b3480156107a657600080fd5b506107af611cf3565b6040516107bc919061461b565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613f1b565b611cf9565b005b3480156107fa57600080fd5b5061081560048036038101906108109190613e2e565b611de9565b604051610822919061461b565b60405180910390f35b34801561083757600080fd5b50610840611e32565b60405161084d919061461b565b60405180910390f35b34801561086257600080fd5b5061086b611e38565b604051610878919061461b565b60405180910390f35b34801561088d57600080fd5b50610896611e3e565b6040516108a39190614463565b60405180910390f35b3480156108b857600080fd5b506108c1611e51565b6040516108ce919061461b565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613f1b565b611e57565b005b34801561090c57600080fd5b50610915611f47565b604051610922919061461b565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613e2e565b611f4d565b60405161095f9190614463565b60405180910390f35b34801561097457600080fd5b5061097d611f6d565b60405161098a91906143a3565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613e2e565b611f96565b6040516109c79190614463565b60405180910390f35b3480156109dc57600080fd5b506109e5611fb6565b005b3480156109f357600080fd5b506109fc612109565b604051610a099190614499565b60405180910390f35b348015610a1e57600080fd5b50610a2761219b565b604051610a34919061461b565b60405180910390f35b348015610a4957600080fd5b50610a526121a5565b604051610a5f919061461b565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f5b565b6121ab565b604051610a9c9190614463565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613ffb565b612278565b005b348015610ada57600080fd5b50610ae361232a565b604051610af0919061461b565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613f5b565b612330565b604051610b2d9190614463565b60405180910390f35b348015610b4257600080fd5b50610b4b61234f565b604051610b5891906143a3565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190614055565b612373565b005b348015610b9657600080fd5b50610b9f612453565b604051610bac919061461b565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ffb565b612459565b005b348015610bea57600080fd5b50610bf3612542565b604051610c00919061461b565b60405180910390f35b348015610c1557600080fd5b50610c1e612548565b604051610c2b91906143a3565b60405180910390f35b348015610c4057600080fd5b50610c4961256e565b604051610c56919061461b565b60405180910390f35b348015610c6b57600080fd5b50610c866004803603810190610c819190613e2e565b612574565b604051610c939190614463565b60405180910390f35b348015610ca857600080fd5b50610cb1612594565b604051610cbe919061461b565b60405180910390f35b348015610cd357600080fd5b50610cdc61259a565b604051610ce991906143be565b60405180910390f35b348015610cfe57600080fd5b50610d076125c0565b604051610d149190614463565b60405180910390f35b348015610d2957600080fd5b50610d326125d3565b604051610d3f919061461b565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190613e88565b6125d9565b604051610d7c919061461b565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190613f1b565b612660565b005b348015610dba57600080fd5b50610dc3612750565b604051610dd0919061461b565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb9190613e2e565b612756565b005b348015610e0e57600080fd5b50610e17612918565b604051610e249190614463565b60405180910390f35b610e356129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061459b565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b606060038054610eee90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614927565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e6129d3565b84846129db565b6001905092915050565b610f976129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061459b565b60405180910390fd5b82601081905550816011819055508060128190555061106460125461105660115460105461297590919063ffffffff16565b61297590919063ffffffff16565b601881905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109d6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061459b565b60405180910390fd5b60005b838390508110156111c95781601f60008686858181106111505761114f614a2f565b5b90506020020160208101906111659190613e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c190614959565b91505061112d565b50505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b6112076129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061459b565b60405180910390fd5b82600d8190555081600e8190555080600f819055506112d4600f546112c6600e54600d5461297590919063ffffffff16565b61297590919063ffffffff16565b601781905550505050565b60006112ec848484612ba6565b506113ae846112f96129d3565b6113a985604051806060016040528060288152602001614df060289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061135f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061141c61140b7f0000000000000000000000000000000000000000000000000000000000000000611de9565b60195461329290919063ffffffff16565b905090565b6114296129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061459b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006115ba61151e6129d3565b846115b5856008600061152f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6129db565b6001905092915050565b6115cc6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061459b565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61169e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061459b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b60135481565b600061179f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061459b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b15801561191157600080fd5b505afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613e5b565b6040518363ffffffff1660e01b81526004016119669291906143d9565b60206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613e5b565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b77578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b059190613e5b565b6040518363ffffffff1660e01b8152600401611b229291906143d9565b602060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190613e5b565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b611d016129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061459b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b602060009054906101000a900460ff1681565b60185481565b611e5f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061459b565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b611fbe6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606004805461211890614927565b80601f016020809104026020016040519081016040528092919081815260200182805461214490614927565b80156121915780601f1061216657610100808354040283529160200191612191565b820191906000526020600020905b81548152906001019060200180831161217457829003601f168201915b5050505050905090565b6000601c54905090565b60165481565b600061226e6121b86129d3565b8461226985604051806060016040528060258152602001614e1860259139600860006121e26129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b6001905092915050565b6122806129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061459b565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061234461233d6129d3565b8484612ba6565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61237b6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff9061459b565b60405180910390fd5b82601381905550816014819055508060158190555061244860155461243a60145460135461297590919063ffffffff16565b61297590919063ffffffff16565b601681905550505050565b600f5481565b6124616129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e59061459b565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125379190614463565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126686129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec9061459b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b61275e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60179054906101000a900460ff1681565b600061296d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132dc565b905092915050565b60008082846129849190614730565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c09061453b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061451b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b99919061461b565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906144bb565b60405180910390fd5b601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d2b5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d61906145bb565b60405180910390fd5b601e60149054906101000a900460ff1615612d9157612d8a84848461333f565b9050613227565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8057601a54821115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e769061455b565b60405180910390fd5b5b6000612e8b30611de9565b90506000601c548210159050808015612eb15750601e60149054906101000a900460ff16155b8015612f075750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f1f5750601e60159054906101000a900460ff165b15612f4957601e60169054906101000a900460ff1615612f3f57601c5491505b612f4882613512565b5b612fd2846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000849050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c857849050613125565b602060009054906101000a900460ff16613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906144db565b60405180910390fd5b613122878787613703565b90505b61317781600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613217919061461b565b60405180910390a3600193505050505b9392505050565b6000838311158290613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d9190614499565b60405180910390fd5b50600083856132859190614811565b9050809150509392505050565b60006132d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322e565b905092915050565b60008083118290613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a9190614499565b60405180910390fd5b50600083856133329190614786565b9050809150509392505050565b60006133ca826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345f82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ff919061461b565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff021916908315150217905550600061356b600261355d60165461354f6013548761392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613582828461329290919063ffffffff16565b905061358d816139a5565b600047905060006135be6135ad600260135461292b90919063ffffffff16565b60165461329290919063ffffffff16565b905060006135fc60026135ee846135e06013548861392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613627836136196015548761392a90919063ffffffff16565b61292b90919063ffffffff16565b9050600061365082613642858861329290919063ffffffff16565b61329290919063ffffffff16565b9050600081111561368857613687600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613c30565b5b60008211156136be576136bd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613c30565b5b6000831180156136ce5750600087115b156136de576136dd8784613c7b565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378b5761378460646137766017548661392a90919063ffffffff16565b61292b90919063ffffffff16565b9050613809565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138085761380560646137f76018548661392a90919063ffffffff16565b61292b90919063ffffffff16565b90505b5b600081111561390d5761386481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613904919061461b565b60405180910390a35b613920818461329290919063ffffffff16565b9150509392505050565b60008083141561393d576000905061399f565b6000828461394b91906147b7565b905082848261395a9190614786565b1461399a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139919061457b565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156139c2576139c1614a5e565b5b6040519080825280602002602001820160405280156139f05781602001602082028036833780820191505090505b5090503081600081518110613a0857613a07614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015613aaa57600080fd5b505afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190613e5b565b81600181518110613af657613af5614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b5d30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8360008430426040518663ffffffff1660e01b8152600401613bc1959493929190614666565b600060405180830381600087803b158015613bdb57600080fd5b505af1158015613bef573d6000803e3d6000fd5b505050507f573fbb8e714bf5406429725d204756536007838f235c8accd11f696f9595d5b58282604051613c24929190614636565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c76573d6000803e3d6000fd5b505050565b613ca830601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080613cf4611f6d565b426040518863ffffffff1660e01b8152600401613d1696959493929190614402565b6060604051808303818588803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d6891906140a8565b5050505050565b600081359050613d7e81614daa565b92915050565b600081519050613d9381614daa565b92915050565b60008083601f840112613daf57613dae614a92565b5b8235905067ffffffffffffffff811115613dcc57613dcb614a8d565b5b602083019150836020820283011115613de857613de7614a97565b5b9250929050565b600081359050613dfe81614dc1565b92915050565b600081359050613e1381614dd8565b92915050565b600081519050613e2881614dd8565b92915050565b600060208284031215613e4457613e43614aa1565b5b6000613e5284828501613d6f565b91505092915050565b600060208284031215613e7157613e70614aa1565b5b6000613e7f84828501613d84565b91505092915050565b60008060408385031215613e9f57613e9e614aa1565b5b6000613ead85828601613d6f565b9250506020613ebe85828601613d6f565b9150509250929050565b600080600060608486031215613ee157613ee0614aa1565b5b6000613eef86828701613d6f565b9350506020613f0086828701613d6f565b9250506040613f1186828701613e04565b9150509250925092565b60008060408385031215613f3257613f31614aa1565b5b6000613f4085828601613d6f565b9250506020613f5185828601613def565b9150509250929050565b60008060408385031215613f7257613f71614aa1565b5b6000613f8085828601613d6f565b9250506020613f9185828601613e04565b9150509250929050565b600080600060408486031215613fb457613fb3614aa1565b5b600084013567ffffffffffffffff811115613fd257613fd1614a9c565b5b613fde86828701613d99565b93509350506020613ff186828701613def565b9150509250925092565b60006020828403121561401157614010614aa1565b5b600061401f84828501613def565b91505092915050565b60006020828403121561403e5761403d614aa1565b5b600061404c84828501613e04565b91505092915050565b60008060006060848603121561406e5761406d614aa1565b5b600061407c86828701613e04565b935050602061408d86828701613e04565b925050604061409e86828701613e04565b9150509250925092565b6000806000606084860312156140c1576140c0614aa1565b5b60006140cf86828701613e19565b93505060206140e086828701613e19565b92505060406140f186828701613e19565b9150509250925092565b60006141078383614122565b60208301905092915050565b61411c81614857565b82525050565b61412b81614845565b82525050565b61413a81614845565b82525050565b600061414b826146eb565b614155818561470e565b9350614160836146db565b8060005b8381101561419157815161417888826140fb565b975061418383614701565b925050600181019050614164565b5085935050505092915050565b6141a781614869565b82525050565b6141b6816148ac565b82525050565b6141c5816148be565b82525050565b60006141d6826146f6565b6141e0818561471f565b93506141f08185602086016148f4565b6141f981614aa6565b840191505092915050565b600061421160238361471f565b915061421c82614ab7565b604082019050919050565b600061423460148361471f565b915061423f82614b06565b602082019050919050565b600061425760268361471f565b915061426282614b2f565b604082019050919050565b600061427a60228361471f565b915061428582614b7e565b604082019050919050565b600061429d601b8361471f565b91506142a882614bcd565b602082019050919050565b60006142c060288361471f565b91506142cb82614bf6565b604082019050919050565b60006142e360218361471f565b91506142ee82614c45565b604082019050919050565b600061430660208361471f565b915061431182614c94565b602082019050919050565b600061432960228361471f565b915061433482614cbd565b604082019050919050565b600061434c60258361471f565b915061435782614d0c565b604082019050919050565b600061436f60248361471f565b915061437a82614d5b565b604082019050919050565b61438e81614895565b82525050565b61439d8161489f565b82525050565b60006020820190506143b86000830184614131565b92915050565b60006020820190506143d36000830184614113565b92915050565b60006040820190506143ee6000830185614131565b6143fb6020830184614131565b9392505050565b600060c0820190506144176000830189614131565b6144246020830188614385565b61443160408301876141bc565b61443e60608301866141bc565b61444b6080830185614131565b61445860a0830184614385565b979650505050505050565b6000602082019050614478600083018461419e565b92915050565b600060208201905061449360008301846141ad565b92915050565b600060208201905081810360008301526144b381846141cb565b905092915050565b600060208201905081810360008301526144d481614204565b9050919050565b600060208201905081810360008301526144f481614227565b9050919050565b600060208201905081810360008301526145148161424a565b9050919050565b600060208201905081810360008301526145348161426d565b9050919050565b6000602082019050818103600083015261455481614290565b9050919050565b60006020820190508181036000830152614574816142b3565b9050919050565b60006020820190508181036000830152614594816142d6565b9050919050565b600060208201905081810360008301526145b4816142f9565b9050919050565b600060208201905081810360008301526145d48161431c565b9050919050565b600060208201905081810360008301526145f48161433f565b9050919050565b6000602082019050818103600083015261461481614362565b9050919050565b60006020820190506146306000830184614385565b92915050565b600060408201905061464b6000830185614385565b818103602083015261465d8184614140565b90509392505050565b600060a08201905061467b6000830188614385565b61468860208301876141bc565b818103604083015261469a8186614140565b90506146a96060830185614131565b6146b66080830184614385565b9695505050505050565b60006020820190506146d56000830184614394565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061473b82614895565b915061474683614895565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a6149a2565b5b828201905092915050565b600061479182614895565b915061479c83614895565b9250826147ac576147ab6149d1565b5b828204905092915050565b60006147c282614895565b91506147cd83614895565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148056149a2565b5b828202905092915050565b600061481c82614895565b915061482783614895565b92508282101561483a576148396149a2565b5b828203905092915050565b600061485082614875565b9050919050565b600061486282614875565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006148b7826148d0565b9050919050565b60006148c982614895565b9050919050565b60006148db826148e2565b9050919050565b60006148ed82614875565b9050919050565b60005b838110156149125780820151818401526020810190506148f7565b83811115614921576000848401525b50505050565b6000600282049050600182168061493f57607f821691505b6020821081141561495357614952614a00565b5b50919050565b600061496482614895565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614997576149966149a2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2073776170206e6f74206f70656e000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d207c20746f2062416464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614db381614845565b8114614dbe57600080fd5b50565b614dca81614869565b8114614dd557600080fd5b50565b614de181614895565b8114614dec57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf0bb58c4799af5c35721ad0f050933925f3741d7f3cde7f420f7fbb25162bc964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa0000000000000000000000000000000000000000000000000000000000000008456c6f6e446f67650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008456c6f6e446f6765000000000000000000000000000000000000000000000000

Deployed ByteCode

0x6080604052600436106103905760003560e01c8063844d591c116101dc578063c469b6dd11610102578063d158272d116100a0578063ef422a181161006f578063ef422a1814610d85578063f0cd1dac14610dae578063f2fde38b14610dd9578063f872858a14610e0257610397565b8063d158272d14610cc7578063da00097d14610cf2578063dc44b6a014610d1d578063dd62ed3e14610d4857610397565b8063c816841b116100dc578063c816841b14610c09578063c860795214610c34578063c867d60b14610c5f578063cab0347114610c9c57610397565b8063c469b6dd14610b8a578063c49b9a8014610bb5578063c5d2418914610bde57610397565b8063a073d37f1161017a578063a83f53a711610149578063a83f53a714610ace578063a9059cbb14610af9578063b2bdfa7b14610b36578063c2d4640e14610b6157610397565b8063a073d37f14610a12578063a08e671f14610a3d578063a457c2d714610a68578063a5d69d1f14610aa557610397565b80638da5cb5b116101b65780638da5cb5b146109685780638ec53fa914610993578063914eb66a146109d057806395d89b41146109e757610397565b8063844d591c146108d757806388790a68146109005780638b42507f1461092b57610397565b806339509351116102c15780635881f3ef1161025f5780637d1db4a51161022e5780637d1db4a51461082b578063807c2d9c146108565780638091f3bf1461088157806382eefb43146108ac57610397565b80635881f3ef1461075d57806361a23c691461079a5780636a9584a4146107c557806370a08231146107ee57610397565b80634a74bb021161029b5780634a74bb02146106a15780634cb80fd5146106cc5780635342acb4146106f557806357a5802f1461073257610397565b806339509351146105fe5780633b97084a1461063b5780633ecad2711461066457610397565b806318160ddd1161032e57806327c8f8351161030857806327c8f835146105545780632b112e491461057f5780632c4b2334146105aa578063313ce567146105d357610397565b806318160ddd146104c35780631870517a146104ee57806323b872dd1461051757610397565b80630d5e5c871161036a5780630d5e5c871461041b5780631245e34714610444578063154643021461046f5780631694505e1461049857610397565b806302ac81681461039c57806306fdde03146103b3578063095ea7b3146103de57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b005b3480156103bf57600080fd5b506103c8610edf565b6040516103d59190614499565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613f5b565b610f71565b6040516104129190614463565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614055565b610f8f565b005b34801561045057600080fd5b5061045961106f565b60405161046691906143be565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9b565b611095565b005b3480156104a457600080fd5b506104ad6111cf565b6040516104ba919061447e565b60405180910390f35b3480156104cf57600080fd5b506104d86111f5565b6040516104e5919061461b565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614055565b6111ff565b005b34801561052357600080fd5b5061053e60048036038101906105399190613ec8565b6112df565b60405161054b9190614463565b60405180910390f35b34801561056057600080fd5b506105696113b9565b60405161057691906143a3565b60405180910390f35b34801561058b57600080fd5b506105946113dd565b6040516105a1919061461b565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e2e565b611421565b005b3480156105df57600080fd5b506105e86114fa565b6040516105f591906146c0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190613f5b565b611511565b6040516106329190614463565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190614028565b6115c4565b005b34801561067057600080fd5b5061068b60048036038101906106869190613e2e565b611663565b6040516106989190614463565b60405180910390f35b3480156106ad57600080fd5b506106b6611683565b6040516106c39190614463565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613e2e565b611696565b005b34801561070157600080fd5b5061071c60048036038101906107179190613e2e565b61176f565b6040516107299190614463565b60405180910390f35b34801561073e57600080fd5b5061074761178f565b604051610754919061461b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613e2e565b611795565b60405161079191906143a3565b60405180910390f35b3480156107a657600080fd5b506107af611cf3565b6040516107bc919061461b565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613f1b565b611cf9565b005b3480156107fa57600080fd5b5061081560048036038101906108109190613e2e565b611de9565b604051610822919061461b565b60405180910390f35b34801561083757600080fd5b50610840611e32565b60405161084d919061461b565b60405180910390f35b34801561086257600080fd5b5061086b611e38565b604051610878919061461b565b60405180910390f35b34801561088d57600080fd5b50610896611e3e565b6040516108a39190614463565b60405180910390f35b3480156108b857600080fd5b506108c1611e51565b6040516108ce919061461b565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613f1b565b611e57565b005b34801561090c57600080fd5b50610915611f47565b604051610922919061461b565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613e2e565b611f4d565b60405161095f9190614463565b60405180910390f35b34801561097457600080fd5b5061097d611f6d565b60405161098a91906143a3565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613e2e565b611f96565b6040516109c79190614463565b60405180910390f35b3480156109dc57600080fd5b506109e5611fb6565b005b3480156109f357600080fd5b506109fc612109565b604051610a099190614499565b60405180910390f35b348015610a1e57600080fd5b50610a2761219b565b604051610a34919061461b565b60405180910390f35b348015610a4957600080fd5b50610a526121a5565b604051610a5f919061461b565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f5b565b6121ab565b604051610a9c9190614463565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613ffb565b612278565b005b348015610ada57600080fd5b50610ae361232a565b604051610af0919061461b565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613f5b565b612330565b604051610b2d9190614463565b60405180910390f35b348015610b4257600080fd5b50610b4b61234f565b604051610b5891906143a3565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190614055565b612373565b005b348015610b9657600080fd5b50610b9f612453565b604051610bac919061461b565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ffb565b612459565b005b348015610bea57600080fd5b50610bf3612542565b604051610c00919061461b565b60405180910390f35b348015610c1557600080fd5b50610c1e612548565b604051610c2b91906143a3565b60405180910390f35b348015610c4057600080fd5b50610c4961256e565b604051610c56919061461b565b60405180910390f35b348015610c6b57600080fd5b50610c866004803603810190610c819190613e2e565b612574565b604051610c939190614463565b60405180910390f35b348015610ca857600080fd5b50610cb1612594565b604051610cbe919061461b565b60405180910390f35b348015610cd357600080fd5b50610cdc61259a565b604051610ce991906143be565b60405180910390f35b348015610cfe57600080fd5b50610d076125c0565b604051610d149190614463565b60405180910390f35b348015610d2957600080fd5b50610d326125d3565b604051610d3f919061461b565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190613e88565b6125d9565b604051610d7c919061461b565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190613f1b565b612660565b005b348015610dba57600080fd5b50610dc3612750565b604051610dd0919061461b565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb9190613e2e565b612756565b005b348015610e0e57600080fd5b50610e17612918565b604051610e249190614463565b60405180910390f35b610e356129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061459b565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b606060038054610eee90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614927565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e6129d3565b84846129db565b6001905092915050565b610f976129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061459b565b60405180910390fd5b82601081905550816011819055508060128190555061106460125461105660115460105461297590919063ffffffff16565b61297590919063ffffffff16565b601881905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109d6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061459b565b60405180910390fd5b60005b838390508110156111c95781601f60008686858181106111505761114f614a2f565b5b90506020020160208101906111659190613e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c190614959565b91505061112d565b50505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b6112076129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061459b565b60405180910390fd5b82600d8190555081600e8190555080600f819055506112d4600f546112c6600e54600d5461297590919063ffffffff16565b61297590919063ffffffff16565b601781905550505050565b60006112ec848484612ba6565b506113ae846112f96129d3565b6113a985604051806060016040528060288152602001614df060289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061135f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600061141c61140b7f000000000000000000000000000000000000000000000000000000000000dead611de9565b60195461329290919063ffffffff16565b905090565b6114296129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061459b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006115ba61151e6129d3565b846115b5856008600061152f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6129db565b6001905092915050565b6115cc6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061459b565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61169e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061459b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b60135481565b600061179f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061459b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b15801561191157600080fd5b505afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613e5b565b6040518363ffffffff1660e01b81526004016119669291906143d9565b60206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613e5b565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b77578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b059190613e5b565b6040518363ffffffff1660e01b8152600401611b229291906143d9565b602060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190613e5b565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b611d016129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061459b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b602060009054906101000a900460ff1681565b60185481565b611e5f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061459b565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b611fbe6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606004805461211890614927565b80601f016020809104026020016040519081016040528092919081815260200182805461214490614927565b80156121915780601f1061216657610100808354040283529160200191612191565b820191906000526020600020905b81548152906001019060200180831161217457829003601f168201915b5050505050905090565b6000601c54905090565b60165481565b600061226e6121b86129d3565b8461226985604051806060016040528060258152602001614e1860259139600860006121e26129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b6001905092915050565b6122806129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061459b565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061234461233d6129d3565b8484612ba6565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61237b6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff9061459b565b60405180910390fd5b82601381905550816014819055508060158190555061244860155461243a60145460135461297590919063ffffffff16565b61297590919063ffffffff16565b601681905550505050565b600f5481565b6124616129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e59061459b565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125379190614463565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126686129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec9061459b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b61275e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60179054906101000a900460ff1681565b600061296d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132dc565b905092915050565b60008082846129849190614730565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c09061453b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061451b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b99919061461b565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906144bb565b60405180910390fd5b601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d2b5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d61906145bb565b60405180910390fd5b601e60149054906101000a900460ff1615612d9157612d8a84848461333f565b9050613227565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8057601a54821115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e769061455b565b60405180910390fd5b5b6000612e8b30611de9565b90506000601c548210159050808015612eb15750601e60149054906101000a900460ff16155b8015612f075750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f1f5750601e60159054906101000a900460ff165b15612f4957601e60169054906101000a900460ff1615612f3f57601c5491505b612f4882613512565b5b612fd2846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000849050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c857849050613125565b602060009054906101000a900460ff16613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906144db565b60405180910390fd5b613122878787613703565b90505b61317781600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613217919061461b565b60405180910390a3600193505050505b9392505050565b6000838311158290613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d9190614499565b60405180910390fd5b50600083856132859190614811565b9050809150509392505050565b60006132d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322e565b905092915050565b60008083118290613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a9190614499565b60405180910390fd5b50600083856133329190614786565b9050809150509392505050565b60006133ca826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345f82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ff919061461b565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff021916908315150217905550600061356b600261355d60165461354f6013548761392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613582828461329290919063ffffffff16565b905061358d816139a5565b600047905060006135be6135ad600260135461292b90919063ffffffff16565b60165461329290919063ffffffff16565b905060006135fc60026135ee846135e06013548861392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613627836136196015548761392a90919063ffffffff16565b61292b90919063ffffffff16565b9050600061365082613642858861329290919063ffffffff16565b61329290919063ffffffff16565b9050600081111561368857613687600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613c30565b5b60008211156136be576136bd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613c30565b5b6000831180156136ce5750600087115b156136de576136dd8784613c7b565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378b5761378460646137766017548661392a90919063ffffffff16565b61292b90919063ffffffff16565b9050613809565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138085761380560646137f76018548661392a90919063ffffffff16565b61292b90919063ffffffff16565b90505b5b600081111561390d5761386481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613904919061461b565b60405180910390a35b613920818461329290919063ffffffff16565b9150509392505050565b60008083141561393d576000905061399f565b6000828461394b91906147b7565b905082848261395a9190614786565b1461399a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139919061457b565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156139c2576139c1614a5e565b5b6040519080825280602002602001820160405280156139f05781602001602082028036833780820191505090505b5090503081600081518110613a0857613a07614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015613aaa57600080fd5b505afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190613e5b565b81600181518110613af657613af5614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b5d30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8360008430426040518663ffffffff1660e01b8152600401613bc1959493929190614666565b600060405180830381600087803b158015613bdb57600080fd5b505af1158015613bef573d6000803e3d6000fd5b505050507f573fbb8e714bf5406429725d204756536007838f235c8accd11f696f9595d5b58282604051613c24929190614636565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c76573d6000803e3d6000fd5b505050565b613ca830601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080613cf4611f6d565b426040518863ffffffff1660e01b8152600401613d1696959493929190614402565b6060604051808303818588803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d6891906140a8565b5050505050565b600081359050613d7e81614daa565b92915050565b600081519050613d9381614daa565b92915050565b60008083601f840112613daf57613dae614a92565b5b8235905067ffffffffffffffff811115613dcc57613dcb614a8d565b5b602083019150836020820283011115613de857613de7614a97565b5b9250929050565b600081359050613dfe81614dc1565b92915050565b600081359050613e1381614dd8565b92915050565b600081519050613e2881614dd8565b92915050565b600060208284031215613e4457613e43614aa1565b5b6000613e5284828501613d6f565b91505092915050565b600060208284031215613e7157613e70614aa1565b5b6000613e7f84828501613d84565b91505092915050565b60008060408385031215613e9f57613e9e614aa1565b5b6000613ead85828601613d6f565b9250506020613ebe85828601613d6f565b9150509250929050565b600080600060608486031215613ee157613ee0614aa1565b5b6000613eef86828701613d6f565b9350506020613f0086828701613d6f565b9250506040613f1186828701613e04565b9150509250925092565b60008060408385031215613f3257613f31614aa1565b5b6000613f4085828601613d6f565b9250506020613f5185828601613def565b9150509250929050565b60008060408385031215613f7257613f71614aa1565b5b6000613f8085828601613d6f565b9250506020613f9185828601613e04565b9150509250929050565b600080600060408486031215613fb457613fb3614aa1565b5b600084013567ffffffffffffffff811115613fd257613fd1614a9c565b5b613fde86828701613d99565b93509350506020613ff186828701613def565b9150509250925092565b60006020828403121561401157614010614aa1565b5b600061401f84828501613def565b91505092915050565b60006020828403121561403e5761403d614aa1565b5b600061404c84828501613e04565b91505092915050565b60008060006060848603121561406e5761406d614aa1565b5b600061407c86828701613e04565b935050602061408d86828701613e04565b925050604061409e86828701613e04565b9150509250925092565b6000806000606084860312156140c1576140c0614aa1565b5b60006140cf86828701613e19565b93505060206140e086828701613e19565b92505060406140f186828701613e19565b9150509250925092565b60006141078383614122565b60208301905092915050565b61411c81614857565b82525050565b61412b81614845565b82525050565b61413a81614845565b82525050565b600061414b826146eb565b614155818561470e565b9350614160836146db565b8060005b8381101561419157815161417888826140fb565b975061418383614701565b925050600181019050614164565b5085935050505092915050565b6141a781614869565b82525050565b6141b6816148ac565b82525050565b6141c5816148be565b82525050565b60006141d6826146f6565b6141e0818561471f565b93506141f08185602086016148f4565b6141f981614aa6565b840191505092915050565b600061421160238361471f565b915061421c82614ab7565b604082019050919050565b600061423460148361471f565b915061423f82614b06565b602082019050919050565b600061425760268361471f565b915061426282614b2f565b604082019050919050565b600061427a60228361471f565b915061428582614b7e565b604082019050919050565b600061429d601b8361471f565b91506142a882614bcd565b602082019050919050565b60006142c060288361471f565b91506142cb82614bf6565b604082019050919050565b60006142e360218361471f565b91506142ee82614c45565b604082019050919050565b600061430660208361471f565b915061431182614c94565b602082019050919050565b600061432960228361471f565b915061433482614cbd565b604082019050919050565b600061434c60258361471f565b915061435782614d0c565b604082019050919050565b600061436f60248361471f565b915061437a82614d5b565b604082019050919050565b61438e81614895565b82525050565b61439d8161489f565b82525050565b60006020820190506143b86000830184614131565b92915050565b60006020820190506143d36000830184614113565b92915050565b60006040820190506143ee6000830185614131565b6143fb6020830184614131565b9392505050565b600060c0820190506144176000830189614131565b6144246020830188614385565b61443160408301876141bc565b61443e60608301866141bc565b61444b6080830185614131565b61445860a0830184614385565b979650505050505050565b6000602082019050614478600083018461419e565b92915050565b600060208201905061449360008301846141ad565b92915050565b600060208201905081810360008301526144b381846141cb565b905092915050565b600060208201905081810360008301526144d481614204565b9050919050565b600060208201905081810360008301526144f481614227565b9050919050565b600060208201905081810360008301526145148161424a565b9050919050565b600060208201905081810360008301526145348161426d565b9050919050565b6000602082019050818103600083015261455481614290565b9050919050565b60006020820190508181036000830152614574816142b3565b9050919050565b60006020820190508181036000830152614594816142d6565b9050919050565b600060208201905081810360008301526145b4816142f9565b9050919050565b600060208201905081810360008301526145d48161431c565b9050919050565b600060208201905081810360008301526145f48161433f565b9050919050565b6000602082019050818103600083015261461481614362565b9050919050565b60006020820190506146306000830184614385565b92915050565b600060408201905061464b6000830185614385565b818103602083015261465d8184614140565b90509392505050565b600060a08201905061467b6000830188614385565b61468860208301876141bc565b818103604083015261469a8186614140565b90506146a96060830185614131565b6146b66080830184614385565b9695505050505050565b60006020820190506146d56000830184614394565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061473b82614895565b915061474683614895565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a6149a2565b5b828201905092915050565b600061479182614895565b915061479c83614895565b9250826147ac576147ab6149d1565b5b828204905092915050565b60006147c282614895565b91506147cd83614895565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148056149a2565b5b828202905092915050565b600061481c82614895565b915061482783614895565b92508282101561483a576148396149a2565b5b828203905092915050565b600061485082614875565b9050919050565b600061486282614875565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006148b7826148d0565b9050919050565b60006148c982614895565b9050919050565b60006148db826148e2565b9050919050565b60006148ed82614875565b9050919050565b60005b838110156149125780820151818401526020810190506148f7565b83811115614921576000848401525b50505050565b6000600282049050600182168061493f57607f821691505b6020821081141561495357614952614a00565b5b50919050565b600061496482614895565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614997576149966149a2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2073776170206e6f74206f70656e000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d207c20746f2062416464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614db381614845565b8114614dbe57600080fd5b50565b614dca81614869565b8114614dd557600080fd5b50565b614de181614895565b8114614dec57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf0bb58c4799af5c35721ad0f050933925f3741d7f3cde7f420f7fbb25162bc964736f6c63430008070033