ETH Price: $3,342.48 (-0.96%)

Token

FLOKI (FLOKI)
 

Overview

Max Total Supply

10,000,000,000,000 FLOKI

Holders

13,313 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,866,957.509680077 FLOKI

Value
$0.00
0x9a290bb7b79aac41e33d825b1f00b24a6790ec79
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FLOKI

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at BscScan.com on 2021-06-12
*/

/*

FLOKI is built upon the fundamentals of Buyback and increasing the investor's value
    
Main features are
    
1) 2% tax is collected and distributed to holders for HODLing
2) 6% buyback and marketing tax is collected and 3% of it is sent for marketing fund and other 3% is used to buyback the tokens                                                  

*/

// 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 private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    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 removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    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 swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(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);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract FLOKI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x2b9d5c7f2EAD1A221d771Fb6bb5E35Df04D60AB0); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000 * 10**3 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "FLOKI";
    string private _symbol = "FLOKI";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 6;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public marketingDivisor = 3;
    
    uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 1 * 10**9; 
    uint256 private buyBackUpperLimit = 1000000000 * 10**9;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

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

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

    function excludeFromReward(address account) public onlyOwner() {

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        
            uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _maxTxAmount = 1000000000 * 10**6 * 10**9;
    }
    
    function afterPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 2;
        _liquidityFee = 6;
        _maxTxAmount = 3000000 * 10**6 * 10**9;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052732b9d5c7f2ead1a221d771fb6bb5e35df04d60ab0600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525069021e19e0c9bab2400000600a55600a54600019620000b191906200089f565b600019620000c09190620007f0565b600b556040518060400160405280600581526020017f464c4f4b49000000000000000000000000000000000000000000000000000000815250600d9080519060200190620001109291906200068b565b506040518060400160405280600581526020017f464c4f4b49000000000000000000000000000000000000000000000000000000815250600e90805190602001906200015e9291906200068b565b506009600f60006101000a81548160ff021916908360ff16021790555060026010556010546011556006601255601254601355600360145568a2a15d09519be00000601555633b9aca00601655670de0b6b3a76400006017556001601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff021916908315150217905550348015620001fa57600080fd5b5060006200020d6200065a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460046000620002c26200065a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000752565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003fe57600080fd5b505afa15801562000413573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000439919062000752565b6040518363ffffffff1660e01b815260040162000458929190620007a6565b602060405180830381600087803b1580156200047357600080fd5b505af115801562000488573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ae919062000752565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160076000620005316200066260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ea6200065a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040516200064b9190620007d3565b60405180910390a35062000983565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006999062000869565b90600052602060002090601f016020900481019282620006bd576000855562000709565b82601f10620006d857805160ff191683800117855562000709565b8280016001018555821562000709579182015b8281111562000708578251825591602001919060010190620006eb565b5b5090506200071891906200071c565b5090565b5b80821115620007375760008160009055506001016200071d565b5090565b6000815190506200074c8162000969565b92915050565b6000602082840312156200076b576200076a62000964565b5b60006200077b848285016200073b565b91505092915050565b6200078f816200082b565b82525050565b620007a0816200085f565b82525050565b6000604082019050620007bd600083018562000784565b620007cc602083018462000784565b9392505050565b6000602082019050620007ea600083018462000795565b92915050565b6000620007fd826200085f565b91506200080a836200085f565b92508282101562000820576200081f620008d7565b5b828203905092915050565b600062000838826200083f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200088257607f821691505b6020821081141562000899576200089862000935565b5b50919050565b6000620008ac826200085f565b9150620008b9836200085f565b925082620008cc57620008cb62000906565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b62000974816200082b565b81146200098057600080fd5b50565b60805160601c60a05160601c60c05160601c615e31620009e66000396000611787015260008181610df701528181613af501528181613be501528181613c0c01528181613df10152613f2c015260008181610efe0152613f6c0152615e316000f3fe6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610b37578063ec28438a14610b60578063f0f165af14610b89578063f2fde38b14610bb2576102ef565b8063d6b513cf14610aa6578063dd46706414610ad1578063dd62ed3e14610afa576102ef565b8063a5ece941146109aa578063a69df4b5146109d5578063a9059cbb146109ec578063b0cb81f114610a29578063bdc653ef14610a52578063c49b9a8014610a7d576102ef565b806388f8202011610149578063906e9dd011610123578063906e9dd0146108ee57806395d89b4114610917578063a073d37f14610942578063a457c2d71461096d576102ef565b806388f820201461085d5780638da5cb5b1461089a5780638ee88c53146108c5576102ef565b80636053a0e31461075f5780636bc87c3a1461078a57806370a08231146107b5578063715018a6146107f25780637d1db4a51461080957806382d2a4bb14610834576102ef565b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146106a35780635342acb4146106cc578063557ed1ba14610709578063602bc62b14610734576102ef565b806349bd5a5e146106365780634a74bb02146106615780635134f6ab1461068c576102ef565b80633685d41914610516578063395093511461053f5780633b124fe71461057c5780633bd5d173146105a7578063437823ec146105d05780634549b039146105f9576102ef565b806318160ddd116102a157806318160ddd146103f257806323b872dd1461041d57806327c8f8351461045a57806329370cc6146104855780632d838119146104ae578063313ce567146104eb576102ef565b8063061c82d0146102f457806306fdde031461031d57806307efbfdc14610348578063095ea7b31461035f57806313114a9d1461039c5780631694505e146103c7576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190614df4565b610bdb565b005b34801561032957600080fd5b50610332610c7a565b60405161033f9190615270565b60405180910390f35b34801561035457600080fd5b5061035d610d0c565b005b34801561036b57600080fd5b5061038660048036038101906103819190614d87565b610dcd565b60405161039391906151ee565b60405180910390f35b3480156103a857600080fd5b506103b1610deb565b6040516103be9190615492565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190615209565b60405180910390f35b3480156103fe57600080fd5b50610407610e19565b6040516104149190615492565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190614d34565b610e23565b60405161045191906151ee565b60405180910390f35b34801561046657600080fd5b5061046f610efc565b60405161047c91906151b8565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190614dc7565b610f20565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190614df4565b611009565b6040516104e29190615492565b60405180910390f35b3480156104f757600080fd5b50610500611077565b60405161050d9190615537565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614c9a565b61108e565b005b34801561054b57600080fd5b5061056660048036038101906105619190614d87565b6113dd565b60405161057391906151ee565b60405180910390f35b34801561058857600080fd5b50610591611490565b60405161059e9190615492565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190614df4565b611496565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614c9a565b611611565b005b34801561060557600080fd5b50610620600480360381019061061b9190614e21565b611701565b60405161062d9190615492565b60405180910390f35b34801561064257600080fd5b5061064b611785565b60405161065891906151b8565b60405180910390f35b34801561066d57600080fd5b506106766117a9565b60405161068391906151ee565b60405180910390f35b34801561069857600080fd5b506106a16117bc565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190614c9a565b61187e565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614c9a565b611b32565b60405161070091906151ee565b60405180910390f35b34801561071557600080fd5b5061071e611b88565b60405161072b9190615492565b60405180910390f35b34801561074057600080fd5b50610749611b90565b6040516107569190615492565b60405180910390f35b34801561076b57600080fd5b50610774611b9a565b60405161078191906151ee565b60405180910390f35b34801561079657600080fd5b5061079f611bad565b6040516107ac9190615492565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614c9a565b611bb3565b6040516107e99190615492565b60405180910390f35b3480156107fe57600080fd5b50610807611c9e565b005b34801561081557600080fd5b5061081e611df1565b60405161082b9190615492565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190614df4565b611df7565b005b34801561086957600080fd5b50610884600480360381019061087f9190614c9a565b611ea9565b60405161089191906151ee565b60405180910390f35b3480156108a657600080fd5b506108af611eff565b6040516108bc91906151b8565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190614df4565b611f28565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614c9a565b611fc7565b005b34801561092357600080fd5b5061092c6120a0565b6040516109399190615270565b60405180910390f35b34801561094e57600080fd5b50610957612132565b6040516109649190615492565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614d87565b61213c565b6040516109a191906151ee565b60405180910390f35b3480156109b657600080fd5b506109bf612209565b6040516109cc91906151d3565b60405180910390f35b3480156109e157600080fd5b506109ea61222f565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614d87565b612403565b604051610a2091906151ee565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190614df4565b612421565b005b348015610a5e57600080fd5b50610a676124c0565b604051610a749190615492565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190614dc7565b6124ca565b005b348015610ab257600080fd5b50610abb6125b3565b604051610ac89190615492565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190614df4565b6125b9565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190614cf4565b612780565b604051610b2e9190615492565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614c9a565b612807565b005b348015610b6c57600080fd5b50610b876004803603810190610b829190614df4565b6128f7565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190614df4565b612996565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614c9a565b612a35565b005b610be3612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906153b2565b60405180910390fd5b8060108190555050565b6060600d8054610c899061578c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb59061578c565b8015610d025780601f10610cd757610100808354040283529160200191610d02565b820191906000526020600020905b815481529060010190602001808311610ce557829003601f168201915b5050505050905090565b610d14612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906153b2565b60405180910390fd5b610dab60016124ca565b6002601081905550600660128190555068a2a15d09519be00000601581905550565b6000610de1610dda612bf7565b8484612bff565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610e30848484612dca565b610ef184610e3c612bf7565b610eec85604051806060016040528060288152602001615daf60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea2612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131299092919063ffffffff16565b612bff565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f28612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906153b2565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ffe91906151ee565b60405180910390a150565b6000600b54821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906152b2565b60405180910390fd5b600061105a61318d565b905061106f81846131b890919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b611096612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906153b2565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690615332565b60405180910390fd5b60005b6009805490508110156113d9578173ffffffffffffffffffffffffffffffffffffffff16600982815481106111ea576111e96158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113c657600960016009805490506112459190615688565b81548110611256576112556158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611295576112946158c3565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600980548061138c5761138b615894565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556113d9565b80806113d1906157be565b9150506111b2565b5050565b60006114866113ea612bf7565b8461148185600660006113fb612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b612bff565b6001905092915050565b60105481565b60006114a0612bf7565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690615452565b60405180910390fd5b600061153a83613260565b5050505050905061159381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115eb81600b546132bc90919063ffffffff16565b600b8190555061160683600c5461320290919063ffffffff16565b600c81905550505050565b611619612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906153b2565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90615352565b60405180910390fd5b8161176857600061175884613260565b505050505090508091505061177f565b600061177384613260565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b6117c4612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611848906153b2565b60405180910390fd5b61185b60006124ca565b6000601081905550600060128190555069d3c21bcecceda1000000601581905550565b611886612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906153b2565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790615332565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a7457611a30600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c4e57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c99565b611c96600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b90505b919050565b611ca6612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a906153b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611dff612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e83906153b2565b60405180910390fd5b670de0b6b3a764000081611ea0919061562e565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f30612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb4906153b2565b60405180910390fd5b8060128190555050565b611fcf612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906153b2565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e80546120af9061578c565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061578c565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000601654905090565b60006121ff612149612bf7565b846121fa85604051806060016040528060258152602001615dd76025913960066000612173612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131299092919063ffffffff16565b612bff565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690615472565b60405180910390fd5b6002544211612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90615432565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612417612410612bf7565b8484612dca565b6001905092915050565b612429612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad906153b2565b60405180910390fd5b8060148190555050565b6000601754905090565b6124d2612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612556906153b2565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125a891906151ee565b60405180910390a150565b60145481565b6125c1612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906153b2565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426126fc91906155a7565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61280f612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612893906153b2565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6128ff612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461298c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612983906153b2565b60405180910390fd5b8060158190555050565b61299e612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a22906153b2565b60405180910390fd5b8060168190555050565b612a3d612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac1906153b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b31906152d2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6690615412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd6906152f2565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dbd9190615492565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e31906153f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190615292565b60405180910390fd5b60008111612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee4906153d2565b60405180910390fd5b612ef5611eff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f635750612f33611eff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fae57601554811115612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490615372565b60405180910390fd5b5b6000612fb930611bb3565b905060006016548210159050601860009054906101000a900460ff16158015612fee5750601860019054906101000a900460ff165b1561306457801561300857601654915061300782613306565b5b6000479050601860029054906101000a900460ff1680156130305750670de0b6b3a764000081115b15613062576017548111156130455760175490505b61306161305c6064836131b890919063ffffffff16565b6133ba565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310b5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311557600090505b61312186868684613406565b505050505050565b6000838311158290613171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131689190615270565b60405180910390fd5b50600083856131809190615688565b9050809150509392505050565b600080600061319a61365d565b915091506131b181836131b890919063ffffffff16565b9250505090565b60006131fa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613910565b905092915050565b600080828461321191906155a7565b905083811015613256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324d90615312565b60405180910390fd5b8091505092915050565b60008060008060008060008060006132778a613973565b92509250925060008060006132958d868661329061318d565b6139cd565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006132fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613129565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061332f82613a56565b600061334482476132bc90919063ffffffff16565b905061339a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613395601454613387601254866131b890919063ffffffff16565b613cdb90919063ffffffff16565b613d56565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156133e8576133e781613da1565b5b6000601860006101000a81548160ff02191690831515021790555050565b806134145761341361402e565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134cc576134c7848484614071565b613649565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356f5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135845761357f8484846142d1565b613648565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136265750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561363b57613636848484614531565b613647565b613646848484614826565b5b5b5b80613657576136566149f1565b5b50505050565b6000806000600b5490506000600a54905060005b6009805490508110156138d357826004600060098481548110613697576136966158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613785575081600560006009848154811061371d5761371c6158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561379c57600b54600a549450945050505061390c565b61382c60046000600984815481106137b7576137b66158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132bc90919063ffffffff16565b92506138be6005600060098481548110613849576138486158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132bc90919063ffffffff16565b915080806138cb906157be565b915050613671565b506138eb600a54600b546131b890919063ffffffff16565b82101561390357600b54600a5493509350505061390c565b81819350935050505b9091565b60008083118290613957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394e9190615270565b60405180910390fd5b506000838561396691906155fd565b9050809150509392505050565b60008060008061398285614a05565b9050600061398f86614a36565b905060006139b8826139aa858a6132bc90919063ffffffff16565b6132bc90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139e68589613cdb90919063ffffffff16565b905060006139fd8689613cdb90919063ffffffff16565b90506000613a148789613cdb90919063ffffffff16565b90506000613a3d82613a2f85876132bc90919063ffffffff16565b6132bc90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613a7357613a726158f2565b5b604051908082528060200260200182016040528015613aa15781602001602082028036833780820191505090505b5090503081600081518110613ab957613ab86158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b5957600080fd5b505afa158015613b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b919190614cc7565b81600181518110613ba557613ba46158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c0a307f000000000000000000000000000000000000000000000000000000000000000084612bff565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c6c9594939291906154dd565b600060405180830381600087803b158015613c8657600080fd5b505af1158015613c9a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ccf9291906154ad565b60405180910390a15050565b600080831415613cee5760009050613d50565b60008284613cfc919061562e565b9050828482613d0b91906155fd565b14613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4290615392565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d9c573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613dbe57613dbd6158f2565b5b604051908082528060200260200182016040528015613dec5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e5557600080fd5b505afa158015613e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e8d9190614cc7565b81600081518110613ea157613ea06158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613ef057613eef6158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000613fa061012c4261320290919063ffffffff16565b6040518663ffffffff1660e01b8152600401613fbf9493929190615224565b6000604051808303818588803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516140229291906154ad565b60405180910390a15050565b600060105414801561404257506000601254145b1561404c5761406f565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061408387613260565b9550955095509550955095506140e187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061417686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425781614a67565b6142618483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142be9190615492565b60405180910390a3505050505050505050565b6000806000806000806142e387613260565b95509550955095509550955061434186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143d683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061446b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b781614a67565b6144c18483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161451e9190615492565b60405180910390a3505050505050505050565b60008060008060008061454387613260565b9550955095509550955095506145a187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061463686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146cb83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061476085600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ac81614a67565b6147b68483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516148139190615492565b60405180910390a3505050505050505050565b60008060008060008061483887613260565b95509550955095509550955061489686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497781614a67565b6149818483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516149de9190615492565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614a2f6064614a2160105485613cdb90919063ffffffff16565b6131b890919063ffffffff16565b9050919050565b6000614a606064614a5260125485613cdb90919063ffffffff16565b6131b890919063ffffffff16565b9050919050565b6000614a7161318d565b90506000614a888284613cdb90919063ffffffff16565b9050614adc81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c0757614bc383600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614c2182600b546132bc90919063ffffffff16565b600b81905550614c3c81600c5461320290919063ffffffff16565b600c819055505050565b600081359050614c5581615d69565b92915050565b600081519050614c6a81615d69565b92915050565b600081359050614c7f81615d80565b92915050565b600081359050614c9481615d97565b92915050565b600060208284031215614cb057614caf615921565b5b6000614cbe84828501614c46565b91505092915050565b600060208284031215614cdd57614cdc615921565b5b6000614ceb84828501614c5b565b91505092915050565b60008060408385031215614d0b57614d0a615921565b5b6000614d1985828601614c46565b9250506020614d2a85828601614c46565b9150509250929050565b600080600060608486031215614d4d57614d4c615921565b5b6000614d5b86828701614c46565b9350506020614d6c86828701614c46565b9250506040614d7d86828701614c85565b9150509250925092565b60008060408385031215614d9e57614d9d615921565b5b6000614dac85828601614c46565b9250506020614dbd85828601614c85565b9150509250929050565b600060208284031215614ddd57614ddc615921565b5b6000614deb84828501614c70565b91505092915050565b600060208284031215614e0a57614e09615921565b5b6000614e1884828501614c85565b91505092915050565b60008060408385031215614e3857614e37615921565b5b6000614e4685828601614c85565b9250506020614e5785828601614c70565b9150509250929050565b6000614e6d8383614e88565b60208301905092915050565b614e82816156ce565b82525050565b614e91816156bc565b82525050565b614ea0816156bc565b82525050565b6000614eb182615562565b614ebb8185615585565b9350614ec683615552565b8060005b83811015614ef7578151614ede8882614e61565b9750614ee983615578565b925050600181019050614eca565b5085935050505092915050565b614f0d816156e0565b82525050565b614f1c81615723565b82525050565b614f2b81615747565b82525050565b6000614f3c8261556d565b614f468185615596565b9350614f56818560208601615759565b614f5f81615926565b840191505092915050565b6000614f77602383615596565b9150614f8282615937565b604082019050919050565b6000614f9a602a83615596565b9150614fa582615986565b604082019050919050565b6000614fbd602683615596565b9150614fc8826159d5565b604082019050919050565b6000614fe0602283615596565b9150614feb82615a24565b604082019050919050565b6000615003601b83615596565b915061500e82615a73565b602082019050919050565b6000615026601b83615596565b915061503182615a9c565b602082019050919050565b6000615049601f83615596565b915061505482615ac5565b602082019050919050565b600061506c602883615596565b915061507782615aee565b604082019050919050565b600061508f602183615596565b915061509a82615b3d565b604082019050919050565b60006150b2602083615596565b91506150bd82615b8c565b602082019050919050565b60006150d5602983615596565b91506150e082615bb5565b604082019050919050565b60006150f8602583615596565b915061510382615c04565b604082019050919050565b600061511b602483615596565b915061512682615c53565b604082019050919050565b600061513e601f83615596565b915061514982615ca2565b602082019050919050565b6000615161602c83615596565b915061516c82615ccb565b604082019050919050565b6000615184602383615596565b915061518f82615d1a565b604082019050919050565b6151a38161570c565b82525050565b6151b281615716565b82525050565b60006020820190506151cd6000830184614e97565b92915050565b60006020820190506151e86000830184614e79565b92915050565b60006020820190506152036000830184614f04565b92915050565b600060208201905061521e6000830184614f13565b92915050565b60006080820190506152396000830187614f22565b818103602083015261524b8186614ea6565b905061525a6040830185614e97565b615267606083018461519a565b95945050505050565b6000602082019050818103600083015261528a8184614f31565b905092915050565b600060208201905081810360008301526152ab81614f6a565b9050919050565b600060208201905081810360008301526152cb81614f8d565b9050919050565b600060208201905081810360008301526152eb81614fb0565b9050919050565b6000602082019050818103600083015261530b81614fd3565b9050919050565b6000602082019050818103600083015261532b81614ff6565b9050919050565b6000602082019050818103600083015261534b81615019565b9050919050565b6000602082019050818103600083015261536b8161503c565b9050919050565b6000602082019050818103600083015261538b8161505f565b9050919050565b600060208201905081810360008301526153ab81615082565b9050919050565b600060208201905081810360008301526153cb816150a5565b9050919050565b600060208201905081810360008301526153eb816150c8565b9050919050565b6000602082019050818103600083015261540b816150eb565b9050919050565b6000602082019050818103600083015261542b8161510e565b9050919050565b6000602082019050818103600083015261544b81615131565b9050919050565b6000602082019050818103600083015261546b81615154565b9050919050565b6000602082019050818103600083015261548b81615177565b9050919050565b60006020820190506154a7600083018461519a565b92915050565b60006040820190506154c2600083018561519a565b81810360208301526154d48184614ea6565b90509392505050565b600060a0820190506154f2600083018861519a565b6154ff6020830187614f22565b81810360408301526155118186614ea6565b90506155206060830185614e97565b61552d608083018461519a565b9695505050505050565b600060208201905061554c60008301846151a9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006155b28261570c565b91506155bd8361570c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155f2576155f1615807565b5b828201905092915050565b60006156088261570c565b91506156138361570c565b92508261562357615622615836565b5b828204905092915050565b60006156398261570c565b91506156448361570c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561567d5761567c615807565b5b828202905092915050565b60006156938261570c565b915061569e8361570c565b9250828210156156b1576156b0615807565b5b828203905092915050565b60006156c7826156ec565b9050919050565b60006156d9826156ec565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061572e82615735565b9050919050565b6000615740826156ec565b9050919050565b60006157528261570c565b9050919050565b60005b8381101561577757808201518184015260208101905061575c565b83811115615786576000848401525b50505050565b600060028204905060018216806157a457607f821691505b602082108114156157b8576157b7615865565b5b50919050565b60006157c98261570c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157fc576157fb615807565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615d72816156bc565b8114615d7d57600080fd5b50565b615d89816156e0565b8114615d9457600080fd5b50565b615da08161570c565b8114615dab57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208cbd457e09a5167ab6028a4717ebdeace3a124a335bac2bc275325619292b31264736f6c63430008060033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610b37578063ec28438a14610b60578063f0f165af14610b89578063f2fde38b14610bb2576102ef565b8063d6b513cf14610aa6578063dd46706414610ad1578063dd62ed3e14610afa576102ef565b8063a5ece941146109aa578063a69df4b5146109d5578063a9059cbb146109ec578063b0cb81f114610a29578063bdc653ef14610a52578063c49b9a8014610a7d576102ef565b806388f8202011610149578063906e9dd011610123578063906e9dd0146108ee57806395d89b4114610917578063a073d37f14610942578063a457c2d71461096d576102ef565b806388f820201461085d5780638da5cb5b1461089a5780638ee88c53146108c5576102ef565b80636053a0e31461075f5780636bc87c3a1461078a57806370a08231146107b5578063715018a6146107f25780637d1db4a51461080957806382d2a4bb14610834576102ef565b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146106a35780635342acb4146106cc578063557ed1ba14610709578063602bc62b14610734576102ef565b806349bd5a5e146106365780634a74bb02146106615780635134f6ab1461068c576102ef565b80633685d41914610516578063395093511461053f5780633b124fe71461057c5780633bd5d173146105a7578063437823ec146105d05780634549b039146105f9576102ef565b806318160ddd116102a157806318160ddd146103f257806323b872dd1461041d57806327c8f8351461045a57806329370cc6146104855780632d838119146104ae578063313ce567146104eb576102ef565b8063061c82d0146102f457806306fdde031461031d57806307efbfdc14610348578063095ea7b31461035f57806313114a9d1461039c5780631694505e146103c7576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190614df4565b610bdb565b005b34801561032957600080fd5b50610332610c7a565b60405161033f9190615270565b60405180910390f35b34801561035457600080fd5b5061035d610d0c565b005b34801561036b57600080fd5b5061038660048036038101906103819190614d87565b610dcd565b60405161039391906151ee565b60405180910390f35b3480156103a857600080fd5b506103b1610deb565b6040516103be9190615492565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190615209565b60405180910390f35b3480156103fe57600080fd5b50610407610e19565b6040516104149190615492565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190614d34565b610e23565b60405161045191906151ee565b60405180910390f35b34801561046657600080fd5b5061046f610efc565b60405161047c91906151b8565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190614dc7565b610f20565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190614df4565b611009565b6040516104e29190615492565b60405180910390f35b3480156104f757600080fd5b50610500611077565b60405161050d9190615537565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614c9a565b61108e565b005b34801561054b57600080fd5b5061056660048036038101906105619190614d87565b6113dd565b60405161057391906151ee565b60405180910390f35b34801561058857600080fd5b50610591611490565b60405161059e9190615492565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190614df4565b611496565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614c9a565b611611565b005b34801561060557600080fd5b50610620600480360381019061061b9190614e21565b611701565b60405161062d9190615492565b60405180910390f35b34801561064257600080fd5b5061064b611785565b60405161065891906151b8565b60405180910390f35b34801561066d57600080fd5b506106766117a9565b60405161068391906151ee565b60405180910390f35b34801561069857600080fd5b506106a16117bc565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190614c9a565b61187e565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614c9a565b611b32565b60405161070091906151ee565b60405180910390f35b34801561071557600080fd5b5061071e611b88565b60405161072b9190615492565b60405180910390f35b34801561074057600080fd5b50610749611b90565b6040516107569190615492565b60405180910390f35b34801561076b57600080fd5b50610774611b9a565b60405161078191906151ee565b60405180910390f35b34801561079657600080fd5b5061079f611bad565b6040516107ac9190615492565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614c9a565b611bb3565b6040516107e99190615492565b60405180910390f35b3480156107fe57600080fd5b50610807611c9e565b005b34801561081557600080fd5b5061081e611df1565b60405161082b9190615492565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190614df4565b611df7565b005b34801561086957600080fd5b50610884600480360381019061087f9190614c9a565b611ea9565b60405161089191906151ee565b60405180910390f35b3480156108a657600080fd5b506108af611eff565b6040516108bc91906151b8565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190614df4565b611f28565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614c9a565b611fc7565b005b34801561092357600080fd5b5061092c6120a0565b6040516109399190615270565b60405180910390f35b34801561094e57600080fd5b50610957612132565b6040516109649190615492565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614d87565b61213c565b6040516109a191906151ee565b60405180910390f35b3480156109b657600080fd5b506109bf612209565b6040516109cc91906151d3565b60405180910390f35b3480156109e157600080fd5b506109ea61222f565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614d87565b612403565b604051610a2091906151ee565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190614df4565b612421565b005b348015610a5e57600080fd5b50610a676124c0565b604051610a749190615492565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190614dc7565b6124ca565b005b348015610ab257600080fd5b50610abb6125b3565b604051610ac89190615492565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190614df4565b6125b9565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190614cf4565b612780565b604051610b2e9190615492565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614c9a565b612807565b005b348015610b6c57600080fd5b50610b876004803603810190610b829190614df4565b6128f7565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190614df4565b612996565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614c9a565b612a35565b005b610be3612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906153b2565b60405180910390fd5b8060108190555050565b6060600d8054610c899061578c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb59061578c565b8015610d025780601f10610cd757610100808354040283529160200191610d02565b820191906000526020600020905b815481529060010190602001808311610ce557829003601f168201915b5050505050905090565b610d14612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906153b2565b60405180910390fd5b610dab60016124ca565b6002601081905550600660128190555068a2a15d09519be00000601581905550565b6000610de1610dda612bf7565b8484612bff565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610e30848484612dca565b610ef184610e3c612bf7565b610eec85604051806060016040528060288152602001615daf60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea2612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131299092919063ffffffff16565b612bff565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610f28612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906153b2565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ffe91906151ee565b60405180910390a150565b6000600b54821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906152b2565b60405180910390fd5b600061105a61318d565b905061106f81846131b890919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b611096612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906153b2565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690615332565b60405180910390fd5b60005b6009805490508110156113d9578173ffffffffffffffffffffffffffffffffffffffff16600982815481106111ea576111e96158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113c657600960016009805490506112459190615688565b81548110611256576112556158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611295576112946158c3565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600980548061138c5761138b615894565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556113d9565b80806113d1906157be565b9150506111b2565b5050565b60006114866113ea612bf7565b8461148185600660006113fb612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b612bff565b6001905092915050565b60105481565b60006114a0612bf7565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690615452565b60405180910390fd5b600061153a83613260565b5050505050905061159381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115eb81600b546132bc90919063ffffffff16565b600b8190555061160683600c5461320290919063ffffffff16565b600c81905550505050565b611619612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906153b2565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a54831115611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90615352565b60405180910390fd5b8161176857600061175884613260565b505050505090508091505061177f565b600061177384613260565b50505050915050809150505b92915050565b7f000000000000000000000000e571b939062474bfeb593a3f80fee9d2265b3b1881565b601860019054906101000a900460ff1681565b6117c4612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611848906153b2565b60405180910390fd5b61185b60006124ca565b6000601081905550600060128190555069d3c21bcecceda1000000601581905550565b611886612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906153b2565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790615332565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a7457611a30600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c4e57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c99565b611c96600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b90505b919050565b611ca6612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a906153b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611dff612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e83906153b2565b60405180910390fd5b670de0b6b3a764000081611ea0919061562e565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f30612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb4906153b2565b60405180910390fd5b8060128190555050565b611fcf612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612053906153b2565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e80546120af9061578c565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061578c565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000601654905090565b60006121ff612149612bf7565b846121fa85604051806060016040528060258152602001615dd76025913960066000612173612bf7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131299092919063ffffffff16565b612bff565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690615472565b60405180910390fd5b6002544211612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90615432565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612417612410612bf7565b8484612dca565b6001905092915050565b612429612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad906153b2565b60405180910390fd5b8060148190555050565b6000601754905090565b6124d2612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612556906153b2565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125a891906151ee565b60405180910390a150565b60145481565b6125c1612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645906153b2565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426126fc91906155a7565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61280f612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461289c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612893906153b2565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6128ff612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461298c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612983906153b2565b60405180910390fd5b8060158190555050565b61299e612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a22906153b2565b60405180910390fd5b8060168190555050565b612a3d612bf7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac1906153b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b31906152d2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6690615412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd6906152f2565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dbd9190615492565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e31906153f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190615292565b60405180910390fd5b60008111612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee4906153d2565b60405180910390fd5b612ef5611eff565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f635750612f33611eff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fae57601554811115612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490615372565b60405180910390fd5b5b6000612fb930611bb3565b905060006016548210159050601860009054906101000a900460ff16158015612fee5750601860019054906101000a900460ff165b1561306457801561300857601654915061300782613306565b5b6000479050601860029054906101000a900460ff1680156130305750670de0b6b3a764000081115b15613062576017548111156130455760175490505b61306161305c6064836131b890919063ffffffff16565b6133ba565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310b5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311557600090505b61312186868684613406565b505050505050565b6000838311158290613171576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131689190615270565b60405180910390fd5b50600083856131809190615688565b9050809150509392505050565b600080600061319a61365d565b915091506131b181836131b890919063ffffffff16565b9250505090565b60006131fa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613910565b905092915050565b600080828461321191906155a7565b905083811015613256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324d90615312565b60405180910390fd5b8091505092915050565b60008060008060008060008060006132778a613973565b92509250925060008060006132958d868661329061318d565b6139cd565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006132fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613129565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061332f82613a56565b600061334482476132bc90919063ffffffff16565b905061339a600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613395601454613387601254866131b890919063ffffffff16565b613cdb90919063ffffffff16565b613d56565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156133e8576133e781613da1565b5b6000601860006101000a81548160ff02191690831515021790555050565b806134145761341361402e565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134cc576134c7848484614071565b613649565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356f5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135845761357f8484846142d1565b613648565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136265750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561363b57613636848484614531565b613647565b613646848484614826565b5b5b5b80613657576136566149f1565b5b50505050565b6000806000600b5490506000600a54905060005b6009805490508110156138d357826004600060098481548110613697576136966158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613785575081600560006009848154811061371d5761371c6158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561379c57600b54600a549450945050505061390c565b61382c60046000600984815481106137b7576137b66158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132bc90919063ffffffff16565b92506138be6005600060098481548110613849576138486158c3565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132bc90919063ffffffff16565b915080806138cb906157be565b915050613671565b506138eb600a54600b546131b890919063ffffffff16565b82101561390357600b54600a5493509350505061390c565b81819350935050505b9091565b60008083118290613957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394e9190615270565b60405180910390fd5b506000838561396691906155fd565b9050809150509392505050565b60008060008061398285614a05565b9050600061398f86614a36565b905060006139b8826139aa858a6132bc90919063ffffffff16565b6132bc90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139e68589613cdb90919063ffffffff16565b905060006139fd8689613cdb90919063ffffffff16565b90506000613a148789613cdb90919063ffffffff16565b90506000613a3d82613a2f85876132bc90919063ffffffff16565b6132bc90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613a7357613a726158f2565b5b604051908082528060200260200182016040528015613aa15781602001602082028036833780820191505090505b5090503081600081518110613ab957613ab86158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b5957600080fd5b505afa158015613b6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b919190614cc7565b81600181518110613ba557613ba46158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c0a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612bff565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c6c9594939291906154dd565b600060405180830381600087803b158015613c8657600080fd5b505af1158015613c9a573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ccf9291906154ad565b60405180910390a15050565b600080831415613cee5760009050613d50565b60008284613cfc919061562e565b9050828482613d0b91906155fd565b14613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4290615392565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d9c573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613dbe57613dbd6158f2565b5b604051908082528060200260200182016040528015613dec5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e5557600080fd5b505afa158015613e69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e8d9190614cc7565b81600081518110613ea157613ea06158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613ef057613eef6158c3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead613fa061012c4261320290919063ffffffff16565b6040518663ffffffff1660e01b8152600401613fbf9493929190615224565b6000604051808303818588803b158015613fd857600080fd5b505af1158015613fec573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516140229291906154ad565b60405180910390a15050565b600060105414801561404257506000601254145b1561404c5761406f565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061408387613260565b9550955095509550955095506140e187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061417686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061425781614a67565b6142618483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142be9190615492565b60405180910390a3505050505050505050565b6000806000806000806142e387613260565b95509550955095509550955061434186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143d683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061446b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b781614a67565b6144c18483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161451e9190615492565b60405180910390a3505050505050505050565b60008060008060008061454387613260565b9550955095509550955095506145a187600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061463686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146cb83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061476085600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147ac81614a67565b6147b68483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516148139190615492565b60405180910390a3505050505050505050565b60008060008060008061483887613260565b95509550955095509550955061489686600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bc90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492b85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497781614a67565b6149818483614c0c565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516149de9190615492565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614a2f6064614a2160105485613cdb90919063ffffffff16565b6131b890919063ffffffff16565b9050919050565b6000614a606064614a5260125485613cdb90919063ffffffff16565b6131b890919063ffffffff16565b9050919050565b6000614a7161318d565b90506000614a888284613cdb90919063ffffffff16565b9050614adc81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c0757614bc383600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461320290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614c2182600b546132bc90919063ffffffff16565b600b81905550614c3c81600c5461320290919063ffffffff16565b600c819055505050565b600081359050614c5581615d69565b92915050565b600081519050614c6a81615d69565b92915050565b600081359050614c7f81615d80565b92915050565b600081359050614c9481615d97565b92915050565b600060208284031215614cb057614caf615921565b5b6000614cbe84828501614c46565b91505092915050565b600060208284031215614cdd57614cdc615921565b5b6000614ceb84828501614c5b565b91505092915050565b60008060408385031215614d0b57614d0a615921565b5b6000614d1985828601614c46565b9250506020614d2a85828601614c46565b9150509250929050565b600080600060608486031215614d4d57614d4c615921565b5b6000614d5b86828701614c46565b9350506020614d6c86828701614c46565b9250506040614d7d86828701614c85565b9150509250925092565b60008060408385031215614d9e57614d9d615921565b5b6000614dac85828601614c46565b9250506020614dbd85828601614c85565b9150509250929050565b600060208284031215614ddd57614ddc615921565b5b6000614deb84828501614c70565b91505092915050565b600060208284031215614e0a57614e09615921565b5b6000614e1884828501614c85565b91505092915050565b60008060408385031215614e3857614e37615921565b5b6000614e4685828601614c85565b9250506020614e5785828601614c70565b9150509250929050565b6000614e6d8383614e88565b60208301905092915050565b614e82816156ce565b82525050565b614e91816156bc565b82525050565b614ea0816156bc565b82525050565b6000614eb182615562565b614ebb8185615585565b9350614ec683615552565b8060005b83811015614ef7578151614ede8882614e61565b9750614ee983615578565b925050600181019050614eca565b5085935050505092915050565b614f0d816156e0565b82525050565b614f1c81615723565b82525050565b614f2b81615747565b82525050565b6000614f3c8261556d565b614f468185615596565b9350614f56818560208601615759565b614f5f81615926565b840191505092915050565b6000614f77602383615596565b9150614f8282615937565b604082019050919050565b6000614f9a602a83615596565b9150614fa582615986565b604082019050919050565b6000614fbd602683615596565b9150614fc8826159d5565b604082019050919050565b6000614fe0602283615596565b9150614feb82615a24565b604082019050919050565b6000615003601b83615596565b915061500e82615a73565b602082019050919050565b6000615026601b83615596565b915061503182615a9c565b602082019050919050565b6000615049601f83615596565b915061505482615ac5565b602082019050919050565b600061506c602883615596565b915061507782615aee565b604082019050919050565b600061508f602183615596565b915061509a82615b3d565b604082019050919050565b60006150b2602083615596565b91506150bd82615b8c565b602082019050919050565b60006150d5602983615596565b91506150e082615bb5565b604082019050919050565b60006150f8602583615596565b915061510382615c04565b604082019050919050565b600061511b602483615596565b915061512682615c53565b604082019050919050565b600061513e601f83615596565b915061514982615ca2565b602082019050919050565b6000615161602c83615596565b915061516c82615ccb565b604082019050919050565b6000615184602383615596565b915061518f82615d1a565b604082019050919050565b6151a38161570c565b82525050565b6151b281615716565b82525050565b60006020820190506151cd6000830184614e97565b92915050565b60006020820190506151e86000830184614e79565b92915050565b60006020820190506152036000830184614f04565b92915050565b600060208201905061521e6000830184614f13565b92915050565b60006080820190506152396000830187614f22565b818103602083015261524b8186614ea6565b905061525a6040830185614e97565b615267606083018461519a565b95945050505050565b6000602082019050818103600083015261528a8184614f31565b905092915050565b600060208201905081810360008301526152ab81614f6a565b9050919050565b600060208201905081810360008301526152cb81614f8d565b9050919050565b600060208201905081810360008301526152eb81614fb0565b9050919050565b6000602082019050818103600083015261530b81614fd3565b9050919050565b6000602082019050818103600083015261532b81614ff6565b9050919050565b6000602082019050818103600083015261534b81615019565b9050919050565b6000602082019050818103600083015261536b8161503c565b9050919050565b6000602082019050818103600083015261538b8161505f565b9050919050565b600060208201905081810360008301526153ab81615082565b9050919050565b600060208201905081810360008301526153cb816150a5565b9050919050565b600060208201905081810360008301526153eb816150c8565b9050919050565b6000602082019050818103600083015261540b816150eb565b9050919050565b6000602082019050818103600083015261542b8161510e565b9050919050565b6000602082019050818103600083015261544b81615131565b9050919050565b6000602082019050818103600083015261546b81615154565b9050919050565b6000602082019050818103600083015261548b81615177565b9050919050565b60006020820190506154a7600083018461519a565b92915050565b60006040820190506154c2600083018561519a565b81810360208301526154d48184614ea6565b90509392505050565b600060a0820190506154f2600083018861519a565b6154ff6020830187614f22565b81810360408301526155118186614ea6565b90506155206060830185614e97565b61552d608083018461519a565b9695505050505050565b600060208201905061554c60008301846151a9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006155b28261570c565b91506155bd8361570c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156155f2576155f1615807565b5b828201905092915050565b60006156088261570c565b91506156138361570c565b92508261562357615622615836565b5b828204905092915050565b60006156398261570c565b91506156448361570c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561567d5761567c615807565b5b828202905092915050565b60006156938261570c565b915061569e8361570c565b9250828210156156b1576156b0615807565b5b828203905092915050565b60006156c7826156ec565b9050919050565b60006156d9826156ec565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061572e82615735565b9050919050565b6000615740826156ec565b9050919050565b60006157528261570c565b9050919050565b60005b8381101561577757808201518184015260208101905061575c565b83811115615786576000848401525b50505050565b600060028204905060018216806157a457607f821691505b602082108114156157b8576157b7615865565b5b50919050565b60006157c98261570c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156157fc576157fb615807565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615d72816156bc565b8114615d7d57600080fd5b50565b615d89816156e0565b8114615d9457600080fd5b50565b615da08161570c565b8114615dab57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208cbd457e09a5167ab6028a4717ebdeace3a124a335bac2bc275325619292b31264736f6c63430008060033

Deployed Bytecode Sourcemap

15601:19938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33596:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18396:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35109:191;;;;;;;;;;;;;:::i;:::-;;19308:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20429:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16999:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18673:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19477:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15843:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34735:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21613:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18582:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19798:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16577:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20780:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33351:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21169:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17057:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17136:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34897:200;;;;;;;;;;;;;:::i;:::-;;21874:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33216:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6991:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6889;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17183:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16664:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18776:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6481:148;;;;;;;;;;;;;:::i;:::-;;16817:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34262:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20301:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6256:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33706:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34403:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18487:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20528:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20024:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15722:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7327:305;;;;;;;;;;;;;:::i;:::-;;18982:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33963:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20660:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34552:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16769:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7089:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19157:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33474:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33840:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34083:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6637:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33596:98;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33680:6:::1;33670:7;:16;;;;33596:98:::0;:::o;18396:83::-;18433:13;18466:5;18459:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18396:83;:::o;35109:191::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35163:30:::1;35188:4;35163:24;:30::i;:::-;35214:1;35204:7;:11;;;;35242:1;35226:13;:17;;;;35269:23;35254:12;:38;;;;35109:191::o:0;19308:161::-;19383:4;19400:39;19409:12;:10;:12::i;:::-;19423:7;19432:6;19400:8;:39::i;:::-;19457:4;19450:11;;19308:161;;;;:::o;20429:87::-;20471:7;20498:10;;20491:17;;20429:87;:::o;16999:51::-;;;:::o;18673:95::-;18726:7;18753;;18746:14;;18673:95;:::o;19477:313::-;19575:4;19592:36;19602:6;19610:9;19621:6;19592:9;:36::i;:::-;19639:121;19648:6;19656:12;:10;:12::i;:::-;19670:89;19708:6;19670:89;;;;;;;;;;;;;;;;;:11;:19;19682:6;19670:19;;;;;;;;;;;;;;;:33;19690:12;:10;:12::i;:::-;19670:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19639:8;:121::i;:::-;19778:4;19771:11;;19477:313;;;;;:::o;15843:81::-;;;:::o;34735:150::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34822:8:::1;34805:14;;:25;;;;;;;;;;;;;;;;;;34846:31;34868:8;34846:31;;;;;;:::i;:::-;;;;;;;;34735:150:::0;:::o;21613:253::-;21679:7;21718;;21707;:18;;21699:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21783:19;21806:10;:8;:10::i;:::-;21783:33;;21834:24;21846:11;21834:7;:11;;:24;;;;:::i;:::-;21827:31;;;21613:253;;;:::o;18582:83::-;18623:5;18648:9;;;;;;;;;;;18641:16;;18582:83;:::o;22217:479::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22299:11:::1;:20;22311:7;22299:20;;;;;;;;;;;;;;;;;;;;;;;;;22291:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22367:9;22362:327;22386:9;:16;;;;22382:1;:20;22362:327;;;22444:7;22428:23;;:9;22438:1;22428:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;22424:254;;;22487:9;22516:1;22497:9;:16;;;;:20;;;;:::i;:::-;22487:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22472:9;22482:1;22472:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22556:1;22537:7;:16;22545:7;22537:16;;;;;;;;;;;;;;;:20;;;;22599:5;22576:11;:20;22588:7;22576:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22623:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22657:5;;22424:254;22404:3;;;;;:::i;:::-;;;;22362:327;;;;22217:479:::0;:::o;19798:218::-;19886:4;19903:83;19912:12;:10;:12::i;:::-;19926:7;19935:50;19974:10;19935:11;:25;19947:12;:10;:12::i;:::-;19935:25;;;;;;;;;;;;;;;:34;19961:7;19935:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19903:8;:83::i;:::-;20004:4;19997:11;;19798:218;;;;:::o;16577:26::-;;;;:::o;20780:377::-;20832:14;20849:12;:10;:12::i;:::-;20832:29;;20881:11;:19;20893:6;20881:19;;;;;;;;;;;;;;;;;;;;;;;;;20880:20;20872:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20961:15;20985:19;20996:7;20985:10;:19::i;:::-;20960:44;;;;;;;21033:28;21053:7;21033;:15;21041:6;21033:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21015:7;:15;21023:6;21015:15;;;;;;;;;;;;;;;:46;;;;21082:20;21094:7;21082;;:11;;:20;;;;:::i;:::-;21072:7;:30;;;;21126:23;21141:7;21126:10;;:14;;:23;;;;:::i;:::-;21113:10;:36;;;;20821:336;;20780:377;:::o;33351:111::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33450:4:::1;33420:18;:27;33439:7;33420:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33351:111:::0;:::o;21169:436::-;21259:7;21298;;21287;:18;;21279:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21357:17;21352:246;;21392:15;21416:19;21427:7;21416:10;:19::i;:::-;21391:44;;;;;;;21457:7;21450:14;;;;;21352:246;21499:23;21530:19;21541:7;21530:10;:19::i;:::-;21497:52;;;;;;;21571:15;21564:22;;;21169:436;;;;;:::o;17057:38::-;;;:::o;17136:40::-;;;;;;;;;;;;;:::o;34897:200::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34956:31:::1;34981:5;34956:24;:31::i;:::-;35008:1;34998:7;:11;;;;35036:1;35020:13;:17;;;;35063:26;35048:12;:41;;;;34897:200::o:0;21874:335::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21959:11:::1;:20;21971:7;21959:20;;;;;;;;;;;;;;;;;;;;;;;;;21958:21;21950:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22044:1;22025:7;:16;22033:7;22025:16;;;;;;;;;;;;;;;;:20;22022:108;;;22081:37;22101:7;:16;22109:7;22101:16;;;;;;;;;;;;;;;;22081:19;:37::i;:::-;22062:7;:16;22070:7;22062:16;;;;;;;;;;;;;;;:56;;;;22022:108;22163:4;22140:11;:20;22152:7;22140:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22178:9;22193:7;22178:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21874:335:::0;:::o;33216:123::-;33280:4;33304:18;:27;33323:7;33304:27;;;;;;;;;;;;;;;;;;;;;;;;;33297:34;;33216:123;;;:::o;6991:90::-;7031:7;7058:15;7051:22;;6991:90;:::o;6889:::-;6935:7;6962:9;;6955:16;;6889:90;:::o;17183:33::-;;;;;;;;;;;;;:::o;16664:32::-;;;;:::o;18776:198::-;18842:7;18866:11;:20;18878:7;18866:20;;;;;;;;;;;;;;;;;;;;;;;;;18862:49;;;18895:7;:16;18903:7;18895:16;;;;;;;;;;;;;;;;18888:23;;;;18862:49;18929:37;18949:7;:16;18957:7;18949:16;;;;;;;;;;;;;;;;18929:19;:37::i;:::-;18922:44;;18776:198;;;;:::o;6481:148::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6588:1:::1;6551:40;;6572:6;::::0;::::1;;;;;;;;6551:40;;;;;;;;;;;;6619:1;6602:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6481:148::o:0;16817:53::-;;;;:::o;34262:133::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34381:6:::1;34366:12;:21;;;;:::i;:::-;34346:17;:41;;;;34262:133:::0;:::o;20301:120::-;20369:4;20393:11;:20;20405:7;20393:20;;;;;;;;;;;;;;;;;;;;;;;;;20386:27;;20301:120;;;:::o;6256:79::-;6294:7;6321:6;;;;;;;;;;;6314:13;;6256:79;:::o;33706:122::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33808:12:::1;33792:13;:28;;;;33706:122:::0;:::o;34403:141::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34518:17:::1;34491:16;;:45;;;;;;;;;;;;;;;;;;34403:141:::0;:::o;18487:87::-;18526:13;18559:7;18552:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18487:87;:::o;20528:120::-;20590:7;20617:23;;20610:30;;20528:120;:::o;20024:269::-;20117:4;20134:129;20143:12;:10;:12::i;:::-;20157:7;20166:96;20205:15;20166:96;;;;;;;;;;;;;;;;;:11;:25;20178:12;:10;:12::i;:::-;20166:25;;;;;;;;;;;;;;;:34;20192:7;20166:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20134:8;:129::i;:::-;20281:4;20274:11;;20024:269;;;;:::o;15722:93::-;;;;;;;;;;;;;:::o;7327:305::-;7397:10;7379:28;;:14;;;;;;;;;;;:28;;;7371:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7484:9;;7466:15;:27;7458:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7575:14;;;;;;;;;;;7546:44;;7567:6;;;;;;;;;;7546:44;;;;;;;;;;;;7610:14;;;;;;;;;;;7601:6;;:23;;;;;;;;;;;;;;;;;;7327:305::o;18982:167::-;19060:4;19077:42;19087:12;:10;:12::i;:::-;19101:9;19112:6;19077:9;:42::i;:::-;19137:4;19130:11;;18982:167;;;;:::o;33963:112::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34060:7:::1;34041:16;:26;;;;33963:112:::0;:::o;20660:108::-;20716:7;20743:17;;20736:24;;20660:108;:::o;34552:171::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34653:8:::1;34629:21;;:32;;;;;;;;;;;;;;;;;;34677:38;34706:8;34677:38;;;;;;:::i;:::-;;;;;;;;34552:171:::0;:::o;16769:35::-;;;;:::o;7089:226::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7170:6:::1;::::0;::::1;;;;;;;;7153:14;;:23;;;;;;;;;;;;;;;;;;7204:1;7187:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7247:4;7229:15;:22;;;;:::i;:::-;7217:9;:34;;;;7304:1;7267:40;;7288:6;::::0;::::1;;;;;;;;7267:40;;;;;;;;;;;;7089:226:::0;:::o;19157:143::-;19238:7;19265:11;:18;19277:5;19265:18;;;;;;;;;;;;;;;:27;19284:7;19265:27;;;;;;;;;;;;;;;;19258:34;;19157:143;;;;:::o;33474:110::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33571:5:::1;33541:18;:27;33560:7;33541:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33474:110:::0;:::o;33840:111::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33932:11:::1;33917:12;:26;;;;33840:111:::0;:::o;34083:166::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34217:24:::1;34191:23;:50;;;;34083:166:::0;:::o;6637:244::-;6400:12;:10;:12::i;:::-;6390:22;;:6;;;;;;;;;;:22;;;6382:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6746:1:::1;6726:22;;:8;:22;;;;6718:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6836:8;6807:38;;6828:6;::::0;::::1;;;;;;;;6807:38;;;;;;;;;;;;6865:8;6856:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6637:244:::0;:::o;544:115::-;597:15;640:10;625:26;;544:115;:::o;22704:337::-;22814:1;22797:19;;:5;:19;;;;22789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22895:1;22876:21;;:7;:21;;;;22868:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22979:6;22949:11;:18;22961:5;22949:18;;;;;;;;;;;;;;;:27;22968:7;22949:27;;;;;;;;;;;;;;;:36;;;;23017:7;23001:32;;23010:5;23001:32;;;23026:6;23001:32;;;;;;:::i;:::-;;;;;;;;22704:337;;;:::o;23049:1538::-;23187:1;23171:18;;:4;:18;;;;23163:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23264:1;23250:16;;:2;:16;;;;23242:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23334:1;23325:6;:10;23317:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23403:7;:5;:7::i;:::-;23395:15;;:4;:15;;;;:32;;;;;23420:7;:5;:7::i;:::-;23414:13;;:2;:13;;;;23395:32;23392:139;;;23462:12;;23452:6;:22;;23444:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23392:139;23543:28;23574:24;23592:4;23574:9;:24::i;:::-;23543:55;;23609:28;23664:23;;23640:20;:47;;23609:78;;23713:16;;;;;;;;;;;23712:17;:42;;;;;23733:21;;;;;;;;;;;23712:42;23708:573;;;23775:23;23771:165;;;23842:23;;23819:46;;23884:32;23895:20;23884:10;:32::i;:::-;23771:165;23961:15;23979:21;23961:39;;24019:14;;;;;;;;;;;:47;;;;;24055:10;24037:7;:29;24019:47;24015:255;;;24119:17;;24109:7;:27;24105:81;;;24169:17;;24159:27;;24105:81;24223:31;24237:16;24249:3;24237:7;:11;;:16;;;;:::i;:::-;24223:13;:31::i;:::-;24015:255;23756:525;23708:573;24301:12;24316:4;24301:19;;24428:18;:24;24447:4;24428:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24456:18;:22;24475:2;24456:22;;;;;;;;;;;;;;;;;;;;;;;;;24428:50;24425:96;;;24504:5;24494:15;;24425:96;24541:38;24556:4;24561:2;24564:6;24571:7;24541:14;:38::i;:::-;23152:1435;;;23049:1538;;;:::o;1955:192::-;2041:7;2074:1;2069;:6;;2077:12;2061:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2101:9;2117:1;2113;:5;;;;:::i;:::-;2101:17;;2138:1;2131:8;;;1955:192;;;;;:::o;31366:163::-;31407:7;31428:15;31445;31464:19;:17;:19::i;:::-;31427:56;;;;31501:20;31513:7;31501;:11;;:20;;;;:::i;:::-;31494:27;;;;31366:163;:::o;2415:132::-;2473:7;2500:39;2504:1;2507;2500:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2493:46;;2415:132;;;;:::o;1622:181::-;1680:7;1700:9;1716:1;1712;:5;;;;:::i;:::-;1700:17;;1741:1;1736;:6;;1728:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1794:1;1787:8;;;1622:181;;;;:::o;30164:419::-;30223:7;30232;30241;30250;30259;30268;30289:23;30314:12;30328:18;30350:20;30362:7;30350:11;:20::i;:::-;30288:82;;;;;;30382:15;30399:23;30424:12;30440:50;30452:7;30461:4;30467:10;30479;:8;:10::i;:::-;30440:11;:50::i;:::-;30381:109;;;;;;30509:7;30518:15;30535:4;30541:15;30558:4;30564:10;30501:74;;;;;;;;;;;;;;;;;;30164:419;;;;;;;:::o;1811:136::-;1869:7;1896:43;1900:1;1903;1896:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1889:50;;1811:136;;;;:::o;24595:433::-;17770:4;17751:16;;:23;;;;;;;;;;;;;;;;;;24685:22:::1;24710:21;24685:46;;24742:38;24759:20;24742:16;:38::i;:::-;24791:26;24820:41;24846:14;24820:21;:25;;:41;;;;:::i;:::-;24791:70;;24911:99;24932:16;;;;;;;;;;;24950:59;24992:16;;24950:37;24973:13;;24950:18;:22;;:37;;;;:::i;:::-;:41;;:59;;;;:::i;:::-;24911:20;:99::i;:::-;24665:363;;17816:5:::0;17797:16;;:24;;;;;;;;;;;;;;;;;;24595:433;:::o;25042:135::-;17770:4;17751:16;;:23;;;;;;;;;;;;;;;;;;25122:1:::1;25113:6;:10;25109:61;;;25137:24;25154:6;25137:16;:24::i;:::-;25109:61;17816:5:::0;17797:16;;:24;;;;;;;;;;;;;;;;;;25042:135;:::o;26978:704::-;27089:7;27085:40;;27111:14;:12;:14::i;:::-;27085:40;27150:11;:19;27162:6;27150:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27174:11;:22;27186:9;27174:22;;;;;;;;;;;;;;;;;;;;;;;;;27173:23;27150:46;27146:467;;;27213:48;27235:6;27243:9;27254:6;27213:21;:48::i;:::-;27146:467;;;27284:11;:19;27296:6;27284:19;;;;;;;;;;;;;;;;;;;;;;;;;27283:20;:46;;;;;27307:11;:22;27319:9;27307:22;;;;;;;;;;;;;;;;;;;;;;;;;27283:46;27279:334;;;27346:46;27366:6;27374:9;27385:6;27346:19;:46::i;:::-;27279:334;;;27414:11;:19;27426:6;27414:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27437:11;:22;27449:9;27437:22;;;;;;;;;;;;;;;;;;;;;;;;;27414:45;27410:203;;;27476:48;27498:6;27506:9;27517:6;27476:21;:48::i;:::-;27410:203;;;27557:44;27575:6;27583:9;27594:6;27557:17;:44::i;:::-;27410:203;27279:334;27146:467;27637:7;27633:41;;27659:15;:13;:15::i;:::-;27633:41;26978:704;;;;:::o;31537:561::-;31587:7;31596;31616:15;31634:7;;31616:25;;31652:15;31670:7;;31652:25;;31699:9;31694:289;31718:9;:16;;;;31714:1;:20;31694:289;;;31784:7;31760;:21;31768:9;31778:1;31768:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31760:21;;;;;;;;;;;;;;;;:31;:66;;;;31819:7;31795;:21;31803:9;31813:1;31803:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31795:21;;;;;;;;;;;;;;;;:31;31760:66;31756:97;;;31836:7;;31845;;31828:25;;;;;;;;;31756:97;31878:34;31890:7;:21;31898:9;31908:1;31898:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31890:21;;;;;;;;;;;;;;;;31878:7;:11;;:34;;;;:::i;:::-;31868:44;;31937:34;31949:7;:21;31957:9;31967:1;31957:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31949:21;;;;;;;;;;;;;;;;31937:7;:11;;:34;;;;:::i;:::-;31927:44;;31736:3;;;;;:::i;:::-;;;;31694:289;;;;32007:20;32019:7;;32007;;:11;;:20;;;;:::i;:::-;31997:7;:30;31993:61;;;32037:7;;32046;;32029:25;;;;;;;;31993:61;32073:7;32082;32065:25;;;;;;31537:561;;;:::o;2555:278::-;2641:7;2673:1;2669;:5;2676:12;2661:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2700:9;2716:1;2712;:5;;;;:::i;:::-;2700:17;;2824:1;2817:8;;;2555:278;;;;;:::o;30591:330::-;30651:7;30660;30669;30689:12;30704:24;30720:7;30704:15;:24::i;:::-;30689:39;;30739:18;30760:30;30782:7;30760:21;:30::i;:::-;30739:51;;30801:23;30827:33;30849:10;30827:17;30839:4;30827:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;30801:59;;30879:15;30896:4;30902:10;30871:42;;;;;;;;;30591:330;;;;;:::o;30929:429::-;31044:7;31053;31062;31082:15;31100:24;31112:11;31100:7;:11;;:24;;;;:::i;:::-;31082:42;;31135:12;31150:21;31159:11;31150:4;:8;;:21;;;;:::i;:::-;31135:36;;31182:18;31203:27;31218:11;31203:10;:14;;:27;;;;:::i;:::-;31182:48;;31241:23;31267:33;31289:10;31267:17;31279:4;31267:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;31241:59;;31319:7;31328:15;31345:4;31311:39;;;;;;;;;;30929:429;;;;;;;;:::o;25189:666::-;25315:21;25353:1;25339:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25315:40;;25384:4;25366;25371:1;25366:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25410:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25400:4;25405:1;25400:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25445:62;25462:4;25477:15;25495:11;25445:8;:62::i;:::-;25546:15;:66;;;25627:11;25653:1;25697:4;25724;25760:15;25546:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25812:35;25829:11;25842:4;25812:35;;;;;;;:::i;:::-;;;;;;;;25244:611;25189:666;:::o;2155:250::-;2213:7;2242:1;2237;:6;2233:47;;;2267:1;2260:8;;;;2233:47;2292:9;2308:1;2304;:5;;;;:::i;:::-;2292:17;;2337:1;2332;2328;:5;;;;:::i;:::-;:10;2320:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2396:1;2389:8;;;2155:250;;;;;:::o;35312:126::-;35404:9;:18;;:26;35423:6;35404:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35312:126;;:::o;25867:578::-;25988:21;26026:1;26012:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25988:40;;26049:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26039:4;26044:1;26039:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26100:4;26082;26087:1;26082:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26142:15;:66;;;26216:6;26238:1;26285:4;26304:11;26346:24;26366:3;26346:15;:19;;:24;;;;:::i;:::-;26142:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26407:30;26424:6;26432:4;26407:30;;;;;;;:::i;:::-;;;;;;;;25917:528;25867:578;:::o;32821:250::-;32878:1;32867:7;;:12;:34;;;;;32900:1;32883:13;;:18;32867:34;32864:46;;;32903:7;;32864:46;32948:7;;32930:15;:25;;;;32990:13;;32966:21;:37;;;;33034:1;33024:7;:11;;;;33062:1;33046:13;:17;;;;32821:250;:::o;28791:563::-;28894:15;28911:23;28936:12;28950:23;28975:12;28989:18;29011:19;29022:7;29011:10;:19::i;:::-;28893:137;;;;;;;;;;;;29056:28;29076:7;29056;:15;29064:6;29056:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29038:7;:15;29046:6;29038:15;;;;;;;;;;;;;;;:46;;;;29113:28;29133:7;29113;:15;29121:6;29113:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29095:7;:15;29103:6;29095:15;;;;;;;;;;;;;;;:46;;;;29173:39;29196:15;29173:7;:18;29181:9;29173:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29152:7;:18;29160:9;29152:18;;;;;;;;;;;;;;;:60;;;;29226:26;29241:10;29226:14;:26::i;:::-;29263:23;29275:4;29281;29263:11;:23::i;:::-;29319:9;29302:44;;29311:6;29302:44;;;29330:15;29302:44;;;;;;:::i;:::-;;;;;;;;28882:472;;;;;;28791:563;;;:::o;28200:583::-;28301:15;28318:23;28343:12;28357:23;28382:12;28396:18;28418:19;28429:7;28418:10;:19::i;:::-;28300:137;;;;;;;;;;;;28463:28;28483:7;28463;:15;28471:6;28463:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28445:7;:15;28453:6;28445:15;;;;;;;;;;;;;;;:46;;;;28523:39;28546:15;28523:7;:18;28531:9;28523:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28502:7;:18;28510:9;28502:18;;;;;;;;;;;;;;;:60;;;;28594:39;28617:15;28594:7;:18;28602:9;28594:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28573:7;:18;28581:9;28573:18;;;;;;;;;;;;;;;:60;;;;28655:26;28670:10;28655:14;:26::i;:::-;28692:23;28704:4;28710;28692:11;:23::i;:::-;28748:9;28731:44;;28740:6;28731:44;;;28759:15;28731:44;;;;;;:::i;:::-;;;;;;;;28289:494;;;;;;28200:583;;;:::o;29362:639::-;29465:15;29482:23;29507:12;29521:23;29546:12;29560:18;29582:19;29593:7;29582:10;:19::i;:::-;29464:137;;;;;;;;;;;;29627:28;29647:7;29627;:15;29635:6;29627:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29609:7;:15;29617:6;29609:15;;;;;;;;;;;;;;;:46;;;;29684:28;29704:7;29684;:15;29692:6;29684:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29666:7;:15;29674:6;29666:15;;;;;;;;;;;;;;;:46;;;;29744:39;29767:15;29744:7;:18;29752:9;29744:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29723:7;:18;29731:9;29723:18;;;;;;;;;;;;;;;:60;;;;29815:39;29838:15;29815:7;:18;29823:9;29815:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29794:7;:18;29802:9;29794:18;;;;;;;;;;;;;;;:60;;;;29873:26;29888:10;29873:14;:26::i;:::-;29910:23;29922:4;29928;29910:11;:23::i;:::-;29966:9;29949:44;;29958:6;29949:44;;;29977:15;29949:44;;;;;;:::i;:::-;;;;;;;;29453:548;;;;;;29362:639;;;:::o;27690:502::-;27789:15;27806:23;27831:12;27845:23;27870:12;27884:18;27906:19;27917:7;27906:10;:19::i;:::-;27788:137;;;;;;;;;;;;27954:28;27974:7;27954;:15;27962:6;27954:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27936:7;:15;27944:6;27936:15;;;;;;;;;;;;;;;:46;;;;28014:39;28037:15;28014:7;:18;28022:9;28014:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27993:7;:18;28001:9;27993:18;;;;;;;;;;;;;;;:60;;;;28064:26;28079:10;28064:14;:26::i;:::-;28101:23;28113:4;28119;28101:11;:23::i;:::-;28157:9;28140:44;;28149:6;28140:44;;;28168:15;28140:44;;;;;;:::i;:::-;;;;;;;;27777:415;;;;;;27690:502;;;:::o;33083:125::-;33137:15;;33127:7;:25;;;;33179:21;;33163:13;:37;;;;33083:125::o;32477:154::-;32541:7;32568:55;32607:5;32568:20;32580:7;;32568;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;32561:62;;32477:154;;;:::o;32643:166::-;32713:7;32740:61;32785:5;32740:26;32752:13;;32740:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;32733:68;;32643:166;;;:::o;32110:355::-;32173:19;32196:10;:8;:10::i;:::-;32173:33;;32217:18;32238:27;32253:11;32238:10;:14;;:27;;;;:::i;:::-;32217:48;;32301:38;32328:10;32301:7;:22;32317:4;32301:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;32276:7;:22;32292:4;32276:22;;;;;;;;;;;;;;;:63;;;;32353:11;:26;32373:4;32353:26;;;;;;;;;;;;;;;;;;;;;;;;;32350:107;;;32419:38;32446:10;32419:7;:22;32435:4;32419:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;32394:7;:22;32410:4;32394:22;;;;;;;;;;;;;;;:63;;;;32350:107;32162:303;;32110:355;:::o;30009:147::-;30087:17;30099:4;30087:7;;:11;;:17;;;;:::i;:::-;30077:7;:27;;;;30128:20;30143:4;30128:10;;:14;;:20;;;;:::i;:::-;30115:10;:33;;;;30009:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;699:79;;:::i;:::-;661:2;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;651:263;;;;:::o;920:351::-;990:6;1039:2;1027:9;1018:7;1014:23;1010:32;1007:2;;;1045:79;;:::i;:::-;1007:2;1165:1;1190:64;1246:7;1237:6;1226:9;1222:22;1190:64;:::i;:::-;1180:74;;1136:128;997:274;;;;:::o;1277:474::-;1345:6;1353;1402:2;1390:9;1381:7;1377:23;1373:32;1370:2;;;1408:79;;:::i;:::-;1370:2;1528:1;1553:53;1598:7;1589:6;1578:9;1574:22;1553:53;:::i;:::-;1543:63;;1499:117;1655:2;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1626:118;1360:391;;;;;:::o;1757:619::-;1834:6;1842;1850;1899:2;1887:9;1878:7;1874:23;1870:32;1867:2;;;1905:79;;:::i;:::-;1867:2;2025:1;2050:53;2095:7;2086:6;2075:9;2071:22;2050:53;:::i;:::-;2040:63;;1996:117;2152:2;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2123:118;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;1857:519;;;;;:::o;2382:474::-;2450:6;2458;2507:2;2495:9;2486:7;2482:23;2478:32;2475:2;;;2513:79;;:::i;:::-;2475:2;2633:1;2658:53;2703:7;2694:6;2683:9;2679:22;2658:53;:::i;:::-;2648:63;;2604:117;2760:2;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2731:118;2465:391;;;;;:::o;2862:323::-;2918:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:2;;;2973:79;;:::i;:::-;2935:2;3093:1;3118:50;3160:7;3151:6;3140:9;3136:22;3118:50;:::i;:::-;3108:60;;3064:114;2925:260;;;;:::o;3191:329::-;3250:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:2;;;3305:79;;:::i;:::-;3267:2;3425:1;3450:53;3495:7;3486:6;3475:9;3471:22;3450:53;:::i;:::-;3440:63;;3396:117;3257:263;;;;:::o;3526:468::-;3591:6;3599;3648:2;3636:9;3627:7;3623:23;3619:32;3616:2;;;3654:79;;:::i;:::-;3616:2;3774:1;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3745:117;3901:2;3927:50;3969:7;3960:6;3949:9;3945:22;3927:50;:::i;:::-;3917:60;;3872:115;3606:388;;;;;:::o;4000:179::-;4069:10;4090:46;4132:3;4124:6;4090:46;:::i;:::-;4168:4;4163:3;4159:14;4145:28;;4080:99;;;;:::o;4185:142::-;4288:32;4314:5;4288:32;:::i;:::-;4283:3;4276:45;4266:61;;:::o;4333:108::-;4410:24;4428:5;4410:24;:::i;:::-;4405:3;4398:37;4388:53;;:::o;4447:118::-;4534:24;4552:5;4534:24;:::i;:::-;4529:3;4522:37;4512:53;;:::o;4601:732::-;4720:3;4749:54;4797:5;4749:54;:::i;:::-;4819:86;4898:6;4893:3;4819:86;:::i;:::-;4812:93;;4929:56;4979:5;4929:56;:::i;:::-;5008:7;5039:1;5024:284;5049:6;5046:1;5043:13;5024:284;;;5125:6;5119:13;5152:63;5211:3;5196:13;5152:63;:::i;:::-;5145:70;;5238:60;5291:6;5238:60;:::i;:::-;5228:70;;5084:224;5071:1;5068;5064:9;5059:14;;5024:284;;;5028:14;5324:3;5317:10;;4725:608;;;;;;;:::o;5339:109::-;5420:21;5435:5;5420:21;:::i;:::-;5415:3;5408:34;5398:50;;:::o;5454:185::-;5568:64;5626:5;5568:64;:::i;:::-;5563:3;5556:77;5546:93;;:::o;5645:147::-;5740:45;5779:5;5740:45;:::i;:::-;5735:3;5728:58;5718:74;;:::o;5798:364::-;5886:3;5914:39;5947:5;5914:39;:::i;:::-;5969:71;6033:6;6028:3;5969:71;:::i;:::-;5962:78;;6049:52;6094:6;6089:3;6082:4;6075:5;6071:16;6049:52;:::i;:::-;6126:29;6148:6;6126:29;:::i;:::-;6121:3;6117:39;6110:46;;5890:272;;;;;:::o;6168:366::-;6310:3;6331:67;6395:2;6390:3;6331:67;:::i;:::-;6324:74;;6407:93;6496:3;6407:93;:::i;:::-;6525:2;6520:3;6516:12;6509:19;;6314:220;;;:::o;6540:366::-;6682:3;6703:67;6767:2;6762:3;6703:67;:::i;:::-;6696:74;;6779:93;6868:3;6779:93;:::i;:::-;6897:2;6892:3;6888:12;6881:19;;6686:220;;;:::o;6912:366::-;7054:3;7075:67;7139:2;7134:3;7075:67;:::i;:::-;7068:74;;7151:93;7240:3;7151:93;:::i;:::-;7269:2;7264:3;7260:12;7253:19;;7058:220;;;:::o;7284:366::-;7426:3;7447:67;7511:2;7506:3;7447:67;:::i;:::-;7440:74;;7523:93;7612:3;7523:93;:::i;:::-;7641:2;7636:3;7632:12;7625:19;;7430:220;;;:::o;7656:366::-;7798:3;7819:67;7883:2;7878:3;7819:67;:::i;:::-;7812:74;;7895:93;7984:3;7895:93;:::i;:::-;8013:2;8008:3;8004:12;7997:19;;7802:220;;;:::o;8028:366::-;8170:3;8191:67;8255:2;8250:3;8191:67;:::i;:::-;8184:74;;8267:93;8356:3;8267:93;:::i;:::-;8385:2;8380:3;8376:12;8369:19;;8174:220;;;:::o;8400:366::-;8542:3;8563:67;8627:2;8622:3;8563:67;:::i;:::-;8556:74;;8639:93;8728:3;8639:93;:::i;:::-;8757:2;8752:3;8748:12;8741:19;;8546:220;;;:::o;8772:366::-;8914:3;8935:67;8999:2;8994:3;8935:67;:::i;:::-;8928:74;;9011:93;9100:3;9011:93;:::i;:::-;9129:2;9124:3;9120:12;9113:19;;8918:220;;;:::o;9144:366::-;9286:3;9307:67;9371:2;9366:3;9307:67;:::i;:::-;9300:74;;9383:93;9472:3;9383:93;:::i;:::-;9501:2;9496:3;9492:12;9485:19;;9290:220;;;:::o;9516:366::-;9658:3;9679:67;9743:2;9738:3;9679:67;:::i;:::-;9672:74;;9755:93;9844:3;9755:93;:::i;:::-;9873:2;9868:3;9864:12;9857:19;;9662:220;;;:::o;9888:366::-;10030:3;10051:67;10115:2;10110:3;10051:67;:::i;:::-;10044:74;;10127:93;10216:3;10127:93;:::i;:::-;10245:2;10240:3;10236:12;10229:19;;10034:220;;;:::o;10260:366::-;10402:3;10423:67;10487:2;10482:3;10423:67;:::i;:::-;10416:74;;10499:93;10588:3;10499:93;:::i;:::-;10617:2;10612:3;10608:12;10601:19;;10406:220;;;:::o;10632:366::-;10774:3;10795:67;10859:2;10854:3;10795:67;:::i;:::-;10788:74;;10871:93;10960:3;10871:93;:::i;:::-;10989:2;10984:3;10980:12;10973:19;;10778:220;;;:::o;11004:366::-;11146:3;11167:67;11231:2;11226:3;11167:67;:::i;:::-;11160:74;;11243:93;11332:3;11243:93;:::i;:::-;11361:2;11356:3;11352:12;11345:19;;11150:220;;;:::o;11376:366::-;11518:3;11539:67;11603:2;11598:3;11539:67;:::i;:::-;11532:74;;11615:93;11704:3;11615:93;:::i;:::-;11733:2;11728:3;11724:12;11717:19;;11522:220;;;:::o;11748:366::-;11890:3;11911:67;11975:2;11970:3;11911:67;:::i;:::-;11904:74;;11987:93;12076:3;11987:93;:::i;:::-;12105:2;12100:3;12096:12;12089:19;;11894:220;;;:::o;12120:118::-;12207:24;12225:5;12207:24;:::i;:::-;12202:3;12195:37;12185:53;;:::o;12244:112::-;12327:22;12343:5;12327:22;:::i;:::-;12322:3;12315:35;12305:51;;:::o;12362:222::-;12455:4;12493:2;12482:9;12478:18;12470:26;;12506:71;12574:1;12563:9;12559:17;12550:6;12506:71;:::i;:::-;12460:124;;;;:::o;12590:254::-;12699:4;12737:2;12726:9;12722:18;12714:26;;12750:87;12834:1;12823:9;12819:17;12810:6;12750:87;:::i;:::-;12704:140;;;;:::o;12850:210::-;12937:4;12975:2;12964:9;12960:18;12952:26;;12988:65;13050:1;13039:9;13035:17;13026:6;12988:65;:::i;:::-;12942:118;;;;:::o;13066:276::-;13186:4;13224:2;13213:9;13209:18;13201:26;;13237:98;13332:1;13321:9;13317:17;13308:6;13237:98;:::i;:::-;13191:151;;;;:::o;13348:720::-;13583:4;13621:3;13610:9;13606:19;13598:27;;13635:79;13711:1;13700:9;13696:17;13687:6;13635:79;:::i;:::-;13761:9;13755:4;13751:20;13746:2;13735:9;13731:18;13724:48;13789:108;13892:4;13883:6;13789:108;:::i;:::-;13781:116;;13907:72;13975:2;13964:9;13960:18;13951:6;13907:72;:::i;:::-;13989;14057:2;14046:9;14042:18;14033:6;13989:72;:::i;:::-;13588:480;;;;;;;:::o;14074:313::-;14187:4;14225:2;14214:9;14210:18;14202:26;;14274:9;14268:4;14264:20;14260:1;14249:9;14245:17;14238:47;14302:78;14375:4;14366:6;14302:78;:::i;:::-;14294:86;;14192:195;;;;:::o;14393:419::-;14559:4;14597:2;14586:9;14582:18;14574:26;;14646:9;14640:4;14636:20;14632:1;14621:9;14617:17;14610:47;14674:131;14800:4;14674:131;:::i;:::-;14666:139;;14564:248;;;:::o;14818:419::-;14984:4;15022:2;15011:9;15007:18;14999:26;;15071:9;15065:4;15061:20;15057:1;15046:9;15042:17;15035:47;15099:131;15225:4;15099:131;:::i;:::-;15091:139;;14989:248;;;:::o;15243:419::-;15409:4;15447:2;15436:9;15432:18;15424:26;;15496:9;15490:4;15486:20;15482:1;15471:9;15467:17;15460:47;15524:131;15650:4;15524:131;:::i;:::-;15516:139;;15414:248;;;:::o;15668:419::-;15834:4;15872:2;15861:9;15857:18;15849:26;;15921:9;15915:4;15911:20;15907:1;15896:9;15892:17;15885:47;15949:131;16075:4;15949:131;:::i;:::-;15941:139;;15839:248;;;:::o;16093:419::-;16259:4;16297:2;16286:9;16282:18;16274:26;;16346:9;16340:4;16336:20;16332:1;16321:9;16317:17;16310:47;16374:131;16500:4;16374:131;:::i;:::-;16366:139;;16264:248;;;:::o;16518:419::-;16684:4;16722:2;16711:9;16707:18;16699:26;;16771:9;16765:4;16761:20;16757:1;16746:9;16742:17;16735:47;16799:131;16925:4;16799:131;:::i;:::-;16791:139;;16689:248;;;:::o;16943:419::-;17109:4;17147:2;17136:9;17132:18;17124:26;;17196:9;17190:4;17186:20;17182:1;17171:9;17167:17;17160:47;17224:131;17350:4;17224:131;:::i;:::-;17216:139;;17114:248;;;:::o;17368:419::-;17534:4;17572:2;17561:9;17557:18;17549:26;;17621:9;17615:4;17611:20;17607:1;17596:9;17592:17;17585:47;17649:131;17775:4;17649:131;:::i;:::-;17641:139;;17539:248;;;:::o;17793:419::-;17959:4;17997:2;17986:9;17982:18;17974:26;;18046:9;18040:4;18036:20;18032:1;18021:9;18017:17;18010:47;18074:131;18200:4;18074:131;:::i;:::-;18066:139;;17964:248;;;:::o;18218:419::-;18384:4;18422:2;18411:9;18407:18;18399:26;;18471:9;18465:4;18461:20;18457:1;18446:9;18442:17;18435:47;18499:131;18625:4;18499:131;:::i;:::-;18491:139;;18389:248;;;:::o;18643:419::-;18809:4;18847:2;18836:9;18832:18;18824:26;;18896:9;18890:4;18886:20;18882:1;18871:9;18867:17;18860:47;18924:131;19050:4;18924:131;:::i;:::-;18916:139;;18814:248;;;:::o;19068:419::-;19234:4;19272:2;19261:9;19257:18;19249:26;;19321:9;19315:4;19311:20;19307:1;19296:9;19292:17;19285:47;19349:131;19475:4;19349:131;:::i;:::-;19341:139;;19239:248;;;:::o;19493:419::-;19659:4;19697:2;19686:9;19682:18;19674:26;;19746:9;19740:4;19736:20;19732:1;19721:9;19717:17;19710:47;19774:131;19900:4;19774:131;:::i;:::-;19766:139;;19664:248;;;:::o;19918:419::-;20084:4;20122:2;20111:9;20107:18;20099:26;;20171:9;20165:4;20161:20;20157:1;20146:9;20142:17;20135:47;20199:131;20325:4;20199:131;:::i;:::-;20191:139;;20089:248;;;:::o;20343:419::-;20509:4;20547:2;20536:9;20532:18;20524:26;;20596:9;20590:4;20586:20;20582:1;20571:9;20567:17;20560:47;20624:131;20750:4;20624:131;:::i;:::-;20616:139;;20514:248;;;:::o;20768:419::-;20934:4;20972:2;20961:9;20957:18;20949:26;;21021:9;21015:4;21011:20;21007:1;20996:9;20992:17;20985:47;21049:131;21175:4;21049:131;:::i;:::-;21041:139;;20939:248;;;:::o;21193:222::-;21286:4;21324:2;21313:9;21309:18;21301:26;;21337:71;21405:1;21394:9;21390:17;21381:6;21337:71;:::i;:::-;21291:124;;;;:::o;21421:483::-;21592:4;21630:2;21619:9;21615:18;21607:26;;21643:71;21711:1;21700:9;21696:17;21687:6;21643:71;:::i;:::-;21761:9;21755:4;21751:20;21746:2;21735:9;21731:18;21724:48;21789:108;21892:4;21883:6;21789:108;:::i;:::-;21781:116;;21597:307;;;;;:::o;21910:831::-;22173:4;22211:3;22200:9;22196:19;22188:27;;22225:71;22293:1;22282:9;22278:17;22269:6;22225:71;:::i;:::-;22306:80;22382:2;22371:9;22367:18;22358:6;22306:80;:::i;:::-;22433:9;22427:4;22423:20;22418:2;22407:9;22403:18;22396:48;22461:108;22564:4;22555:6;22461:108;:::i;:::-;22453:116;;22579:72;22647:2;22636:9;22632:18;22623:6;22579:72;:::i;:::-;22661:73;22729:3;22718:9;22714:19;22705:6;22661:73;:::i;:::-;22178:563;;;;;;;;:::o;22747:214::-;22836:4;22874:2;22863:9;22859:18;22851:26;;22887:67;22951:1;22940:9;22936:17;22927:6;22887:67;:::i;:::-;22841:120;;;;:::o;23048:132::-;23115:4;23138:3;23130:11;;23168:4;23163:3;23159:14;23151:22;;23120:60;;;:::o;23186:114::-;23253:6;23287:5;23281:12;23271:22;;23260:40;;;:::o;23306:99::-;23358:6;23392:5;23386:12;23376:22;;23365:40;;;:::o;23411:113::-;23481:4;23513;23508:3;23504:14;23496:22;;23486:38;;;:::o;23530:184::-;23629:11;23663:6;23658:3;23651:19;23703:4;23698:3;23694:14;23679:29;;23641:73;;;;:::o;23720:169::-;23804:11;23838:6;23833:3;23826:19;23878:4;23873:3;23869:14;23854:29;;23816:73;;;;:::o;23895:305::-;23935:3;23954:20;23972:1;23954:20;:::i;:::-;23949:25;;23988:20;24006:1;23988:20;:::i;:::-;23983:25;;24142:1;24074:66;24070:74;24067:1;24064:81;24061:2;;;24148:18;;:::i;:::-;24061:2;24192:1;24189;24185:9;24178:16;;23939:261;;;;:::o;24206:185::-;24246:1;24263:20;24281:1;24263:20;:::i;:::-;24258:25;;24297:20;24315:1;24297:20;:::i;:::-;24292:25;;24336:1;24326:2;;24341:18;;:::i;:::-;24326:2;24383:1;24380;24376:9;24371:14;;24248:143;;;;:::o;24397:348::-;24437:7;24460:20;24478:1;24460:20;:::i;:::-;24455:25;;24494:20;24512:1;24494:20;:::i;:::-;24489:25;;24682:1;24614:66;24610:74;24607:1;24604:81;24599:1;24592:9;24585:17;24581:105;24578:2;;;24689:18;;:::i;:::-;24578:2;24737:1;24734;24730:9;24719:20;;24445:300;;;;:::o;24751:191::-;24791:4;24811:20;24829:1;24811:20;:::i;:::-;24806:25;;24845:20;24863:1;24845:20;:::i;:::-;24840:25;;24884:1;24881;24878:8;24875:2;;;24889:18;;:::i;:::-;24875:2;24934:1;24931;24927:9;24919:17;;24796:146;;;;:::o;24948:96::-;24985:7;25014:24;25032:5;25014:24;:::i;:::-;25003:35;;24993:51;;;:::o;25050:104::-;25095:7;25124:24;25142:5;25124:24;:::i;:::-;25113:35;;25103:51;;;:::o;25160:90::-;25194:7;25237:5;25230:13;25223:21;25212:32;;25202:48;;;:::o;25256:126::-;25293:7;25333:42;25326:5;25322:54;25311:65;;25301:81;;;:::o;25388:77::-;25425:7;25454:5;25443:16;;25433:32;;;:::o;25471:86::-;25506:7;25546:4;25539:5;25535:16;25524:27;;25514:43;;;:::o;25563:180::-;25640:9;25673:64;25731:5;25673:64;:::i;:::-;25660:77;;25650:93;;;:::o;25749:140::-;25826:9;25859:24;25877:5;25859:24;:::i;:::-;25846:37;;25836:53;;;:::o;25895:121::-;25953:9;25986:24;26004:5;25986:24;:::i;:::-;25973:37;;25963:53;;;:::o;26022:307::-;26090:1;26100:113;26114:6;26111:1;26108:13;26100:113;;;26199:1;26194:3;26190:11;26184:18;26180:1;26175:3;26171:11;26164:39;26136:2;26133:1;26129:10;26124:15;;26100:113;;;26231:6;26228:1;26225:13;26222:2;;;26311:1;26302:6;26297:3;26293:16;26286:27;26222:2;26071:258;;;;:::o;26335:320::-;26379:6;26416:1;26410:4;26406:12;26396:22;;26463:1;26457:4;26453:12;26484:18;26474:2;;26540:4;26532:6;26528:17;26518:27;;26474:2;26602;26594:6;26591:14;26571:18;26568:38;26565:2;;;26621:18;;:::i;:::-;26565:2;26386:269;;;;:::o;26661:233::-;26700:3;26723:24;26741:5;26723:24;:::i;:::-;26714:33;;26769:66;26762:5;26759:77;26756:2;;;26839:18;;:::i;:::-;26756:2;26886:1;26879:5;26875:13;26868:20;;26704:190;;;:::o;26900:180::-;26948:77;26945:1;26938:88;27045:4;27042:1;27035:15;27069:4;27066:1;27059:15;27086:180;27134:77;27131:1;27124:88;27231:4;27228:1;27221:15;27255:4;27252:1;27245:15;27272:180;27320:77;27317:1;27310:88;27417:4;27414:1;27407:15;27441:4;27438:1;27431:15;27458:180;27506:77;27503:1;27496:88;27603:4;27600:1;27593:15;27627:4;27624:1;27617:15;27644:180;27692:77;27689:1;27682:88;27789:4;27786:1;27779:15;27813:4;27810:1;27803:15;27830:180;27878:77;27875:1;27868:88;27975:4;27972:1;27965:15;27999:4;27996:1;27989:15;28139:117;28248:1;28245;28238:12;28262:102;28303:6;28354:2;28350:7;28345:2;28338:5;28334:14;28330:28;28320:38;;28310:54;;;:::o;28370:222::-;28510:34;28506:1;28498:6;28494:14;28487:58;28579:5;28574:2;28566:6;28562:15;28555:30;28476:116;:::o;28598:229::-;28738:34;28734:1;28726:6;28722:14;28715:58;28807:12;28802:2;28794:6;28790:15;28783:37;28704:123;:::o;28833:225::-;28973:34;28969:1;28961:6;28957:14;28950:58;29042:8;29037:2;29029:6;29025:15;29018:33;28939:119;:::o;29064:221::-;29204:34;29200:1;29192:6;29188:14;29181:58;29273:4;29268:2;29260:6;29256:15;29249:29;29170:115;:::o;29291:177::-;29431:29;29427:1;29419:6;29415:14;29408:53;29397:71;:::o;29474:177::-;29614:29;29610:1;29602:6;29598:14;29591:53;29580:71;:::o;29657:181::-;29797:33;29793:1;29785:6;29781:14;29774:57;29763:75;:::o;29844:227::-;29984:34;29980:1;29972:6;29968:14;29961:58;30053:10;30048:2;30040:6;30036:15;30029:35;29950:121;:::o;30077:220::-;30217:34;30213:1;30205:6;30201:14;30194:58;30286:3;30281:2;30273:6;30269:15;30262:28;30183:114;:::o;30303:182::-;30443:34;30439:1;30431:6;30427:14;30420:58;30409:76;:::o;30491:228::-;30631:34;30627:1;30619:6;30615:14;30608:58;30700:11;30695:2;30687:6;30683:15;30676:36;30597:122;:::o;30725:224::-;30865:34;30861:1;30853:6;30849:14;30842:58;30934:7;30929:2;30921:6;30917:15;30910:32;30831:118;:::o;30955:223::-;31095:34;31091:1;31083:6;31079:14;31072:58;31164:6;31159:2;31151:6;31147:15;31140:31;31061:117;:::o;31184:181::-;31324:33;31320:1;31312:6;31308:14;31301:57;31290:75;:::o;31371:231::-;31511:34;31507:1;31499:6;31495:14;31488:58;31580:14;31575:2;31567:6;31563:15;31556:39;31477:125;:::o;31608:222::-;31748:34;31744:1;31736:6;31732:14;31725:58;31817:5;31812:2;31804:6;31800:15;31793:30;31714:116;:::o;31836:122::-;31909:24;31927:5;31909:24;:::i;:::-;31902:5;31899:35;31889:2;;31948:1;31945;31938:12;31889:2;31879:79;:::o;31964:116::-;32034:21;32049:5;32034:21;:::i;:::-;32027:5;32024:32;32014:2;;32070:1;32067;32060:12;32014:2;32004:76;:::o;32086:122::-;32159:24;32177:5;32159:24;:::i;:::-;32152:5;32149:35;32139:2;;32198:1;32195;32188:12;32139:2;32129:79;:::o

Swarm Source

ipfs://8cbd457e09a5167ab6028a4717ebdeace3a124a335bac2bc275325619292b312
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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