ETH Price: $2,649.29 (+0.49%)
Gas: 6.81 Gwei

Token

FLOKI2.0 (FLOKI2.0)
 

Overview

Max Total Supply

100,000,000,000,000 FLOKI2.0

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
185,846,538,705.146170148 FLOKI2.0

Value
$0.00
0xecc60c63f1f606b8a3af6a34c966ce76e723888a
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:
FLOKI2

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

abstract contract Ownable is Context {
    address private _owner;

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

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 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 returns(bool){
        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 }("");
        return success;
    }

    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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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 FLOKI2 is Context, IERC20, Ownable {
    using Address for address;
    using Address for address payable;

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    string private _name     = "FLOKI2.0";
    string private _symbol   = "FLOKI2.0";
    uint8  private _decimals = 9;
   
    uint256 private constant MAX = type(uint256).max;
    uint256 private _tTotal = 100_000_000_000_000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 public taxFeeonBuy;
    uint256 public taxFeeonSell;

    uint256 private liquidityFeeonBuy;
    uint256 private liquidityFeeonSell;

    uint256 public marketingFeeonBuy;
    uint256 public marketingFeeonSell;

    uint256 public _taxFee;
    uint256 public _liquidityFee;
    uint256 public _marketingFee;

    uint256 public totalBuyFees;
    uint256 public totalSellFees;

    address public marketingWallet;
    
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapEnabled;
    bool public tradingEnabled;
    uint256 public swapTokensAtAmount;
    
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event SwapEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 amount);
    event BuyFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event SellFeesChanged(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee);
    event WalletToWalletTransferWithoutFeeEnabled(bool enabled);
    
    constructor() 
    {        
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; 
        } else if (block.chainid == 97) {
            router =  0xD99D1c33F9fC3444f8101754aBC46c52416550D1; 
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
        } else {
            revert();
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

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

        taxFeeonBuy = 0;
        taxFeeonSell = 0;

        liquidityFeeonBuy = 0;
        liquidityFeeonSell = 0;

        marketingFeeonBuy = 1;
        marketingFeeonSell = 1;

        totalBuyFees = taxFeeonBuy + liquidityFeeonBuy + marketingFeeonBuy;
        totalSellFees = taxFeeonSell + liquidityFeeonSell + marketingFeeonSell;

        marketingWallet = 0x0347beC22ac8073A77cAb8450155555811c52fff;
        
        swapEnabled = true;
        swapTokensAtAmount = _tTotal / 5000;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcluded[address(this)] = true;
        _isExcluded[address(0x0347beC22ac8073A77cAb8450155555811c52fff)] = true; //pinklock
        _isExcluded[address(0xdead)] = true;
        _isExcluded[address(uniswapV2Pair)] = true;

        _rOwned[owner()] = _rTotal;
        _tOwned[owner()] = _tTotal;

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

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

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + 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 / 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 included");
        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;
            }
        }
    }

    receive() external payable {}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

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

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

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rMarketing = tMarketing * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rLiquidity - rMarketing;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        if (tLiquidity > 0) {
            uint256 currentRate =  _getRate();
            uint256 rLiquidity = tLiquidity * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        }
    }

    function _takeMarketing(uint256 tMarketing) private {
        if (tMarketing > 0) {
            uint256 currentRate =  _getRate();
            uint256 rMarketing = tMarketing * currentRate;
            _rOwned[address(this)] = _rOwned[address(this)] + rMarketing;
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)] + tMarketing;
        }
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 100;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount * _liquidityFee / 100;
    }
    
    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount * _marketingFee / 100;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0) return;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function setBuyFee() private{
        if(_taxFee == taxFeeonBuy && _liquidityFee == liquidityFeeonBuy && _marketingFee == marketingFeeonBuy) return;

        _taxFee = taxFeeonBuy;
        _marketingFee = marketingFeeonBuy;
        _liquidityFee = liquidityFeeonBuy;
    }

    function setSellFee() private{
        if(_taxFee == taxFeeonSell && _liquidityFee == liquidityFeeonSell && _marketingFee == marketingFeeonSell) return;

        _taxFee = taxFeeonSell;
        _marketingFee = marketingFeeonSell;
        _liquidityFee = liquidityFeeonSell;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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 enableTrading() external onlyOwner{
        require(tradingEnabled == false, "Trading is already enabled");
        tradingEnabled = true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(tradingEnabled, "Trading is not enabled yet");
        }

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapEnabled
        ) {
            inSwapAndLiquify = true;
            
            uint256 marketingShare = marketingFeeonBuy + marketingFeeonSell;
            uint256 liquidityShare = liquidityFeeonBuy + liquidityFeeonSell;
            uint256 totalShare = marketingShare + liquidityShare;
            if(totalShare > 0) {
                if(liquidityShare > 0) {
                    uint256 liquidityTokens = (contractTokenBalance * liquidityShare) / totalShare;
                    swapAndLiquify(liquidityTokens);
                }
                
                if(marketingShare > 0) {
                    uint256 marketingTokens = (contractTokenBalance * marketingShare) / totalShare;
                    swapAndSendMarketing(marketingTokens);
                } 
            }
            inSwapAndLiquify = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner() {
        require(newAmount > totalSupply() / 1e5, "SwapTokensAtAmount must be greater than 0.001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount);
    }
    
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
         if (_isExcludedFromFees[sender] || 
            _isExcludedFromFees[recipient] 
            ) {
            removeAllFee();
        }else if(recipient == uniswapV2Pair){
            setSellFee();
        }else if(sender == uniswapV2Pair){
            setBuyFee();
        }else {
            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]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);
        _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, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);           
        _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, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; 
        _takeMarketing(tMarketing);  
        _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, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeMarketing(tMarketing);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "Marketing wallet is already that address");
        require(_marketingWallet!=address(0), "Marketing wallet is the zero address");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","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":"taxFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"WalletToWalletTransferWithoutFeeEnabled","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","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":[],"name":"marketingFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFeeonSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600881526020017f464c4f4b49322e30000000000000000000000000000000000000000000000000815250600790816200004a919062000e68565b506040518060400160405280600881526020017f464c4f4b49322e300000000000000000000000000000000000000000000000008152506008908162000091919062000e68565b5060098060006101000a81548160ff021916908360ff160217905550600960009054906101000a900460ff16600a620000cb9190620010df565b655af3107a4000620000de919062001130565b600a55600a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620001119190620011aa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200013e9190620011e2565b600b5561dead601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019157600080fd5b506000620001a4620009ec60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200026a577310ed43c718714eb63d5aa57b78b54704e256024e9050620002ca565b60614603620002905773d99d1c33f9fc3444f8101754abc46c52416550d19050620002c9565b6001461480620002a05750600546145b15620002c357737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002c8565b600080fd5b5b5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000341919062001287565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cf919062001287565b6040518363ffffffff1660e01b8152600401620003ee929190620012ca565b6020604051808303816000875af11580156200040e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000434919062001287565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050a30601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620009f460201b60201c565b6000600d819055506000600e819055506000600f81905550600060108190555060016011819055506001601281905550601154600f54600d546200054f9190620012f7565b6200055b9190620012f7565b601681905550601254601054600e54620005769190620012f7565b620005829190620012f7565b601781905550730347bec22ac8073a77cab8450155555811c52fff601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60156101000a81548160ff021916908315150217905550611388600a546200060a919062001332565b601c819055506001600460006200062662000bc560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016004600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000730347bec22ac8073a77cab8450155555811c52fff73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b5460016000620008d862000bc560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a54600260006200092d62000bc560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200097b62000bc560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620009dc91906200137b565b60405180910390a35050620014d9565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5d906200141f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000acf90620014b7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bb891906200137b565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c7057607f821691505b60208210810362000c865762000c8562000c28565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cf07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cb1565b62000cfc868362000cb1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d4962000d4362000d3d8462000d14565b62000d1e565b62000d14565b9050919050565b6000819050919050565b62000d658362000d28565b62000d7d62000d748262000d50565b84845462000cbe565b825550505050565b600090565b62000d9462000d85565b62000da181848462000d5a565b505050565b5b8181101562000dc95762000dbd60008262000d8a565b60018101905062000da7565b5050565b601f82111562000e185762000de28162000c8c565b62000ded8462000ca1565b8101602085101562000dfd578190505b62000e1562000e0c8562000ca1565b83018262000da6565b50505b505050565b600082821c905092915050565b600062000e3d6000198460080262000e1d565b1980831691505092915050565b600062000e58838362000e2a565b9150826002028217905092915050565b62000e738262000bee565b67ffffffffffffffff81111562000e8f5762000e8e62000bf9565b5b62000e9b825462000c57565b62000ea882828562000dcd565b600060209050601f83116001811462000ee0576000841562000ecb578287015190505b62000ed7858262000e4a565b86555062000f47565b601f19841662000ef08662000c8c565b60005b8281101562000f1a5784890151825560018201915060208501945060208101905062000ef3565b8683101562000f3a578489015162000f36601f89168262000e2a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fdd5780860481111562000fb55762000fb462000f4f565b5b600185161562000fc55780820291505b808102905062000fd58562000f7e565b945062000f95565b94509492505050565b60008262000ff85760019050620010cb565b81620010085760009050620010cb565b81600181146200102157600281146200102c5762001062565b6001915050620010cb565b60ff84111562001041576200104062000f4f565b5b8360020a9150848211156200105b576200105a62000f4f565b5b50620010cb565b5060208310610133831016604e8410600b84101617156200109c5782820a90508381111562001096576200109562000f4f565b5b620010cb565b620010ab848484600162000f8b565b92509050818404811115620010c557620010c462000f4f565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010ec8262000d14565b9150620010f983620010d2565b9250620011287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fe6565b905092915050565b60006200113d8262000d14565b91506200114a8362000d14565b92508282026200115a8162000d14565b9150828204841483151762001174576200117362000f4f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011b78262000d14565b9150620011c48362000d14565b925082620011d757620011d66200117b565b5b828206905092915050565b6000620011ef8262000d14565b9150620011fc8362000d14565b925082820390508181111562001217576200121662000f4f565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200124f8262001222565b9050919050565b620012618162001242565b81146200126d57600080fd5b50565b600081519050620012818162001256565b92915050565b600060208284031215620012a0576200129f6200121d565b5b6000620012b08482850162001270565b91505092915050565b620012c48162001242565b82525050565b6000604082019050620012e16000830185620012b9565b620012f06020830184620012b9565b9392505050565b6000620013048262000d14565b9150620013118362000d14565b92508282019050808211156200132c576200132b62000f4f565b5b92915050565b60006200133f8262000d14565b91506200134c8362000d14565b9250826200135f576200135e6200117b565b5b828204905092915050565b620013758162000d14565b82525050565b60006020820190506200139260008301846200136a565b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200140760248362001398565b91506200141482620013a9565b604082019050919050565b600060208201905081810360008301526200143a81620013f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200149f60228362001398565b9150620014ac8262001441565b604082019050919050565b60006020820190508181036000830152620014d28162001490565b9050919050565b615caf80620014e96000396000f3fe6080604052600436106102605760003560e01c80636ddd171311610144578063afa4f3b2116100b6578063d0a398141161007a578063d0a3981414610923578063dd62ed3e1461094e578063e01af92c1461098b578063e2f45605146109b4578063f2fde38b146109df578063f9d0831a14610a0857610267565b8063afa4f3b214610852578063b577554a1461087b578063b9e93700146108a6578063bb85c6d1146108d1578063c0246668146108fa57610267565b80638a8c523c116101085780638a8c523c146107405780638da5cb5b1461075757806393a7781f1461078257806395d89b41146107ad578063a457c2d7146107d8578063a9059cbb1461081557610267565b80636ddd17131461065957806370a0823114610684578063715018a6146106c157806375f0a874146106d857806388f820201461070357610267565b80633b124fe7116101dd57806352390c02116101a157806352390c02146105475780635342acb4146105705780635a04e035146105ad5780635f35bc5c146105d857806365a8ee4f146106035780636bc87c3a1461062e57610267565b80633b124fe7146104605780633bd5d1731461048b5780634549b039146104b457806349bd5a5e146104f15780634ada218b1461051c57610267565b806323b872dd1161022457806323b872dd146103555780632d83811914610392578063313ce567146103cf5780633685d419146103fa578063395093511461042357610267565b806306fdde031461026c578063095ea7b3146102975780631694505e146102d457806318160ddd146102ff57806322976e0d1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a31565b60405161028e91906148cd565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614988565b610ac3565b6040516102cb91906149e3565b60405180910390f35b3480156102e057600080fd5b506102e9610ae1565b6040516102f69190614a5d565b60405180910390f35b34801561030b57600080fd5b50610314610b07565b6040516103219190614a87565b60405180910390f35b34801561033657600080fd5b5061033f610b11565b60405161034c9190614a87565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614aa2565b610b17565b60405161038991906149e3565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614af5565b610bcf565b6040516103c69190614a87565b60405180910390f35b3480156103db57600080fd5b506103e4610c36565b6040516103f19190614b3e565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614b59565b610c4d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614988565b610f9b565b60405161045791906149e3565b60405180910390f35b34801561046c57600080fd5b50610475611047565b6040516104829190614a87565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614af5565b61104d565b005b3480156104c057600080fd5b506104db60048036038101906104d69190614bb2565b6111b4565b6040516104e89190614a87565b60405180910390f35b3480156104fd57600080fd5b5061050661123a565b6040516105139190614c01565b60405180910390f35b34801561052857600080fd5b50610531611260565b60405161053e91906149e3565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190614b59565b611273565b005b34801561057c57600080fd5b5061059760048036038101906105929190614b59565b611527565b6040516105a491906149e3565b60405180910390f35b3480156105b957600080fd5b506105c261157d565b6040516105cf9190614a87565b60405180910390f35b3480156105e457600080fd5b506105ed611583565b6040516105fa9190614a87565b60405180910390f35b34801561060f57600080fd5b50610618611589565b6040516106259190614a87565b60405180910390f35b34801561063a57600080fd5b5061064361158f565b6040516106509190614a87565b60405180910390f35b34801561066557600080fd5b5061066e611595565b60405161067b91906149e3565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190614b59565b6115a8565b6040516106b89190614a87565b60405180910390f35b3480156106cd57600080fd5b506106d6611693565b005b3480156106e457600080fd5b506106ed6117e6565b6040516106fa9190614c01565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614b59565b61180c565b60405161073791906149e3565b60405180910390f35b34801561074c57600080fd5b50610755611862565b005b34801561076357600080fd5b5061076c61196a565b6040516107799190614c01565b60405180910390f35b34801561078e57600080fd5b50610797611993565b6040516107a49190614a87565b60405180910390f35b3480156107b957600080fd5b506107c2611999565b6040516107cf91906148cd565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa9190614988565b611a2b565b60405161080c91906149e3565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190614988565b611ad7565b60405161084991906149e3565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190614af5565b611af5565b005b34801561088757600080fd5b50610890611c22565b60405161089d9190614a87565b60405180910390f35b3480156108b257600080fd5b506108bb611c2c565b6040516108c89190614a87565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190614b59565b611c32565b005b34801561090657600080fd5b50610921600480360381019061091c9190614c1c565b611e63565b005b34801561092f57600080fd5b50610938612033565b6040516109459190614a87565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614c5c565b612039565b6040516109829190614a87565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614c9c565b6120c0565b005b3480156109c057600080fd5b506109c96121a9565b6040516109d69190614a87565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a019190614b59565b6121af565b005b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614b59565b612370565b005b606060078054610a4090614cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90614cf8565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad7610ad06125de565b84846125e6565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60155481565b6000610b248484846127af565b610bc484610b306125de565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a6125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbf9190614d58565b6125e6565b600190509392505050565b6000600b54821115610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90614dfe565b60405180910390fd5b6000610c20612aed565b90508083610c2e9190614e4d565b915050919050565b6000600960009054906101000a900460ff16905090565b610c556125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990614eca565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590614f36565b60405180910390fd5b60005b600680549050811015610f97578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610da957610da8614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f845760066001600680549050610e039190614d58565b81548110610e1457610e13614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e5357610e52614f56565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f4a57610f49614f85565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f97565b8080610f8f90614fb4565b915050610d71565b5050565b600061103d610fa86125de565b848460036000610fb66125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110389190614ffc565b6125e6565b6001905092915050565b60135481565b60006110576125de565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd906150a2565b60405180910390fd5b60006110f183612b11565b505050505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111449190614d58565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600b546111959190614d58565b600b8190555082600c546111a99190614ffc565b600c81905550505050565b6000600a548311156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061510e565b60405180910390fd5b8161121c57600061120b84612b11565b505050505050905080915050611234565b600061122784612b11565b5050505050915050809150505b92915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60169054906101000a900460ff1681565b61127b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90614eca565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061517a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146957611425600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bcf565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600e5481565b60125481565b60145481565b601b60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561164357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061168e565b61168b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bcf565b90505b919050565b61169b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90614eca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61186a6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614eca565b60405180910390fd5b60001515601b60169054906101000a900460ff1615151461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906151e6565b60405180910390fd5b6001601b60166101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600880546119a890614cf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119d490614cf8565b8015611a215780601f106119f657610100808354040283529160200191611a21565b820191906000526020600020905b815481529060010190602001808311611a0457829003601f168201915b5050505050905090565b6000611acd611a386125de565b848460036000611a466125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ac89190614d58565b6125e6565b6001905092915050565b6000611aeb611ae46125de565b84846127af565b6001905092915050565b611afd6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614eca565b60405180910390fd5b620186a0611b96610b07565b611ba09190614e4d565b8111611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890615278565b60405180910390fd5b80601c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14581604051611c179190614a87565b60405180910390a150565b6000600c54905090565b60165481565b611c3a6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614eca565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e9061530a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd9061539c565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e589190614c01565b60405180910390a150565b611e6b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90614eca565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061542e565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202791906149e3565b60405180910390a25050565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120c86125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614eca565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a128160405161219e91906149e3565b60405180910390a150565b601c5481565b6121b76125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614eca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa906154c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123786125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614eca565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a9061552c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124d6576124d0473373ffffffffffffffffffffffffffffffffffffffff16612b7990919063ffffffff16565b506125db565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125169190614c01565b602060405180830381865afa158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190615561565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161259492919061558e565b6020604051808303816000875af11580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d791906155cc565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c9061566b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb906156fd565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a29190614a87565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128159061578f565b60405180910390fd5b60008111612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890615821565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129055750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295a57601b60169054906101000a900460ff16612959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129509061588d565b60405180910390fd5b5b6000612965306115a8565b90506000601c54821015905080801561298b5750601b60149054906101000a900460ff16155b80156129e45750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156129fc5750601b60159054906101000a900460ff165b15612adb576001601b60146101000a81548160ff0219169083151502179055506000601254601154612a2e9190614ffc565b90506000601054600f54612a429190614ffc565b905060008183612a529190614ffc565b90506000811115612abc576000821115612a8c576000818387612a7591906158ad565b612a7f9190614e4d565b9050612a8a81612c34565b505b6000831115612abb576000818487612aa491906158ad565b612aae9190614e4d565b9050612ab981612f8e565b505b5b6000601b60146101000a81548160ff0219169083151502179055505050505b612ae6858585613240565b5050505050565b6000806000612afa6136b6565b915091508082612b0a9190614e4d565b9250505090565b6000806000806000806000806000806000612b2b8c613954565b93509350935093506000806000612b4c8f878787612b47612aed565b6139be565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081471015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb59061593b565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612be49061598c565b60006040518083038185875af1925050503d8060008114612c21576040519150601f19603f3d011682016040523d82523d6000602084013e612c26565b606091505b505090508091505092915050565b6000600282612c439190614e4d565b905060008183612c539190614d58565b905060004790506000600267ffffffffffffffff811115612c7757612c766159a1565b5b604051908082528060200260200182016040528015612ca55781602001602082028036833780820191505090505b5090503081600081518110612cbd57612cbc614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8891906159e5565b81600181518110612d9c57612d9b614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401612e3a959493929190615b0b565b600060405180830381600087803b158015612e5457600080fd5b505af1158015612e68573d6000803e3d6000fd5b5050505060008247612e7a9190614d58565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823087600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612f0596959493929190615b65565b60606040518083038185885af1158015612f23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f489190615bc6565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051612f7e93929190615c19565b60405180910390a1505050505050565b60004790506000600267ffffffffffffffff811115612fb057612faf6159a1565b5b604051908082528060200260200182016040528015612fde5781602001602082028036833780820191505090505b5090503081600081518110612ff657612ff5614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c191906159e5565b816001815181106130d5576130d4614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613173959493929190615b0b565b600060405180830381600087803b15801561318d57600080fd5b505af11580156131a1573d6000803e3d6000fd5b50505050600082476131b39190614d58565b905061320081601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b7990919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613232929190615c50565b60405180910390a150505050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e15750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f3576132ee613a41565b6133c2565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335557613350613a82565b6133c1565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b7576133b2613ac9565b6133c0565b6133bf613a41565b5b5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134655750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347a57613475838383613b10565b6136b1565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351d5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135325761352d838383613d69565b6136b0565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135d65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135eb576135e6838383613fc2565b6136af565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368d5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a25761369d83838361418d565b6136ae565b6136ad838383613fc2565b5b5b5b5b505050565b6000806000600b5490506000600a54905060005b60068054905081101561391e578260016000600684815481106136f0576136ef614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137de575081600260006006848154811061377657613775614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137f557600b54600a5494509450505050613950565b600160006006838154811061380d5761380c614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361387e9190614d58565b9250600260006006838154811061389857613897614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139099190614d58565b9150808061391690614fb4565b9150506136ca565b50600a54600b5461392f9190614e4d565b82101561394757600b54600a54935093505050613950565b81819350935050505b9091565b600080600080600061396586614474565b9050600061397287614497565b9050600061397f886144ba565b905060008183858b6139919190614d58565b61399b9190614d58565b6139a59190614d58565b9050808484849750975097509750505050509193509193565b60008060008084896139d091906158ad565b9050600085896139e091906158ad565b9050600086896139f091906158ad565b905060008789613a0091906158ad565b9050600081838587613a129190614d58565b613a1c9190614d58565b613a269190614d58565b90508481859750975097505050505050955095509592505050565b6000601354148015613a5557506000601454145b8015613a6357506000601554145b613a80576000601381905550600060158190555060006014819055505b565b600e54601354148015613a985750601054601454145b8015613aa75750601254601554145b613ac757600e546013819055506012546015819055506010546014819055505b565b600d54601354148015613adf5750600f54601454145b8015613aee5750601154601554145b613b0e57600d54601381905550601154601581905550600f546014819055505b565b6000806000806000806000613b2488612b11565b965096509650965096509650965087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7d9190614d58565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0b9190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c999190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ce5816144dd565b613cee82614677565b613cf88584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d559190614a87565b60405180910390a350505050505050505050565b6000806000806000806000613d7d88612b11565b965096509650965096509650965086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dd69190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e649190614ffc565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ef29190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3e816144dd565b613f4782614677565b613f518584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613fae9190614a87565b60405180910390a350505050505050505050565b6000806000806000806000613fd688612b11565b965096509650965096509650965086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402f9190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140bd9190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614109816144dd565b61411282614677565b61411c8584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516141799190614a87565b60405180910390a350505050505050505050565b60008060008060008060006141a188612b11565b965096509650965096509650965087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141fa9190614d58565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142889190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143169190614ffc565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143a49190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143f0816144dd565b6143f982614677565b6144038584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516144609190614a87565b60405180910390a350505050505050505050565b600060646013548361448691906158ad565b6144909190614e4d565b9050919050565b60006064601454836144a991906158ad565b6144b39190614e4d565b9050919050565b60006064601554836144cc91906158ad565b6144d69190614e4d565b9050919050565b60008111156146745760006144f0612aed565b90506000818361450091906158ad565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454d9190614ffc565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146715782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461462d9190614ffc565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b600081111561480e57600061468a612aed565b90506000818361469a91906158ad565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546146e79190614ffc565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561480b5782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147c79190614ffc565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b81600b5461481f9190614d58565b600b8190555080600c546148339190614ffc565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487757808201518184015260208101905061485c565b60008484015250505050565b6000601f19601f8301169050919050565b600061489f8261483d565b6148a98185614848565b93506148b9818560208601614859565b6148c281614883565b840191505092915050565b600060208201905081810360008301526148e78184614894565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061491f826148f4565b9050919050565b61492f81614914565b811461493a57600080fd5b50565b60008135905061494c81614926565b92915050565b6000819050919050565b61496581614952565b811461497057600080fd5b50565b6000813590506149828161495c565b92915050565b6000806040838503121561499f5761499e6148ef565b5b60006149ad8582860161493d565b92505060206149be85828601614973565b9150509250929050565b60008115159050919050565b6149dd816149c8565b82525050565b60006020820190506149f860008301846149d4565b92915050565b6000819050919050565b6000614a23614a1e614a19846148f4565b6149fe565b6148f4565b9050919050565b6000614a3582614a08565b9050919050565b6000614a4782614a2a565b9050919050565b614a5781614a3c565b82525050565b6000602082019050614a726000830184614a4e565b92915050565b614a8181614952565b82525050565b6000602082019050614a9c6000830184614a78565b92915050565b600080600060608486031215614abb57614aba6148ef565b5b6000614ac98682870161493d565b9350506020614ada8682870161493d565b9250506040614aeb86828701614973565b9150509250925092565b600060208284031215614b0b57614b0a6148ef565b5b6000614b1984828501614973565b91505092915050565b600060ff82169050919050565b614b3881614b22565b82525050565b6000602082019050614b536000830184614b2f565b92915050565b600060208284031215614b6f57614b6e6148ef565b5b6000614b7d8482850161493d565b91505092915050565b614b8f816149c8565b8114614b9a57600080fd5b50565b600081359050614bac81614b86565b92915050565b60008060408385031215614bc957614bc86148ef565b5b6000614bd785828601614973565b9250506020614be885828601614b9d565b9150509250929050565b614bfb81614914565b82525050565b6000602082019050614c166000830184614bf2565b92915050565b60008060408385031215614c3357614c326148ef565b5b6000614c418582860161493d565b9250506020614c5285828601614b9d565b9150509250929050565b60008060408385031215614c7357614c726148ef565b5b6000614c818582860161493d565b9250506020614c928582860161493d565b9150509250929050565b600060208284031215614cb257614cb16148ef565b5b6000614cc084828501614b9d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d1057607f821691505b602082108103614d2357614d22614cc9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6382614952565b9150614d6e83614952565b9250828203905081811115614d8657614d85614d29565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614de8602a83614848565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e5882614952565b9150614e6383614952565b925082614e7357614e72614e1e565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614eb4602083614848565b9150614ebf82614e7e565b602082019050919050565b60006020820190508181036000830152614ee381614ea7565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614f20601b83614848565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614fbf82614952565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ff157614ff0614d29565b5b600182019050919050565b600061500782614952565b915061501283614952565b925082820190508082111561502a57615029614d29565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061508c602c83614848565b915061509782615030565b604082019050919050565b600060208201905081810360008301526150bb8161507f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006150f8601f83614848565b9150615103826150c2565b602082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615164601b83614848565b915061516f8261512e565b602082019050919050565b6000602082019050818103600083015261519381615157565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006151d0601a83614848565b91506151db8261519a565b602082019050919050565b600060208201905081810360008301526151ff816151c3565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e30303125206f6620746f74616c20737570706c790000602082015250565b6000615262603e83614848565b915061526d82615206565b604082019050919050565b6000602082019050818103600083015261529181615255565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006152f4602883614848565b91506152ff82615298565b604082019050919050565b60006020820190508181036000830152615323816152e7565b9050919050565b7f4d61726b6574696e672077616c6c657420697320746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615386602483614848565b91506153918261532a565b604082019050919050565b600060208201905081810360008301526153b581615379565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000615418602a83614848565b9150615423826153bc565b604082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154aa602683614848565b91506154b58261544e565b604082019050919050565b600060208201905081810360008301526154d98161549d565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000615516602083614848565b9150615521826154e0565b602082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b60008151905061555b8161495c565b92915050565b600060208284031215615577576155766148ef565b5b60006155858482850161554c565b91505092915050565b60006040820190506155a36000830185614bf2565b6155b06020830184614a78565b9392505050565b6000815190506155c681614b86565b92915050565b6000602082840312156155e2576155e16148ef565b5b60006155f0848285016155b7565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615655602483614848565b9150615660826155f9565b604082019050919050565b6000602082019050818103600083015261568481615648565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e7602283614848565b91506156f28261568b565b604082019050919050565b60006020820190508181036000830152615716816156da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615779602583614848565b91506157848261571d565b604082019050919050565b600060208201905081810360008301526157a88161576c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061580b602983614848565b9150615816826157af565b604082019050919050565b6000602082019050818103600083015261583a816157fe565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000615877601a83614848565b915061588282615841565b602082019050919050565b600060208201905081810360008301526158a68161586a565b9050919050565b60006158b882614952565b91506158c383614952565b92508282026158d181614952565b915082820484148315176158e8576158e7614d29565b5b5092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000615925601d83614848565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b600081905092915050565b50565b600061597660008361595b565b915061598182615966565b600082019050919050565b600061599782615969565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159df81614926565b92915050565b6000602082840312156159fb576159fa6148ef565b5b6000615a09848285016159d0565b91505092915050565b6000819050919050565b6000615a37615a32615a2d84615a12565b6149fe565b614952565b9050919050565b615a4781615a1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a8281614914565b82525050565b6000615a948383615a79565b60208301905092915050565b6000602082019050919050565b6000615ab882615a4d565b615ac28185615a58565b9350615acd83615a69565b8060005b83811015615afe578151615ae58882615a88565b9750615af083615aa0565b925050600181019050615ad1565b5085935050505092915050565b600060a082019050615b206000830188614a78565b615b2d6020830187615a3e565b8181036040830152615b3f8186615aad565b9050615b4e6060830185614bf2565b615b5b6080830184614a78565b9695505050505050565b600060c082019050615b7a6000830189614bf2565b615b876020830188614a78565b615b946040830187615a3e565b615ba16060830186615a3e565b615bae6080830185614bf2565b615bbb60a0830184614a78565b979650505050505050565b600080600060608486031215615bdf57615bde6148ef565b5b6000615bed8682870161554c565b9350506020615bfe8682870161554c565b9250506040615c0f8682870161554c565b9150509250925092565b6000606082019050615c2e6000830186614a78565b615c3b6020830185614a78565b615c486040830184614a78565b949350505050565b6000604082019050615c656000830185614a78565b615c726020830184614a78565b939250505056fea264697066735822122054c30072dba3776450f63954c6d1669149abe1fa206dffa7618439314b41172264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80636ddd171311610144578063afa4f3b2116100b6578063d0a398141161007a578063d0a3981414610923578063dd62ed3e1461094e578063e01af92c1461098b578063e2f45605146109b4578063f2fde38b146109df578063f9d0831a14610a0857610267565b8063afa4f3b214610852578063b577554a1461087b578063b9e93700146108a6578063bb85c6d1146108d1578063c0246668146108fa57610267565b80638a8c523c116101085780638a8c523c146107405780638da5cb5b1461075757806393a7781f1461078257806395d89b41146107ad578063a457c2d7146107d8578063a9059cbb1461081557610267565b80636ddd17131461065957806370a0823114610684578063715018a6146106c157806375f0a874146106d857806388f820201461070357610267565b80633b124fe7116101dd57806352390c02116101a157806352390c02146105475780635342acb4146105705780635a04e035146105ad5780635f35bc5c146105d857806365a8ee4f146106035780636bc87c3a1461062e57610267565b80633b124fe7146104605780633bd5d1731461048b5780634549b039146104b457806349bd5a5e146104f15780634ada218b1461051c57610267565b806323b872dd1161022457806323b872dd146103555780632d83811914610392578063313ce567146103cf5780633685d419146103fa578063395093511461042357610267565b806306fdde031461026c578063095ea7b3146102975780631694505e146102d457806318160ddd146102ff57806322976e0d1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a31565b60405161028e91906148cd565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190614988565b610ac3565b6040516102cb91906149e3565b60405180910390f35b3480156102e057600080fd5b506102e9610ae1565b6040516102f69190614a5d565b60405180910390f35b34801561030b57600080fd5b50610314610b07565b6040516103219190614a87565b60405180910390f35b34801561033657600080fd5b5061033f610b11565b60405161034c9190614a87565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614aa2565b610b17565b60405161038991906149e3565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614af5565b610bcf565b6040516103c69190614a87565b60405180910390f35b3480156103db57600080fd5b506103e4610c36565b6040516103f19190614b3e565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614b59565b610c4d565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614988565b610f9b565b60405161045791906149e3565b60405180910390f35b34801561046c57600080fd5b50610475611047565b6040516104829190614a87565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190614af5565b61104d565b005b3480156104c057600080fd5b506104db60048036038101906104d69190614bb2565b6111b4565b6040516104e89190614a87565b60405180910390f35b3480156104fd57600080fd5b5061050661123a565b6040516105139190614c01565b60405180910390f35b34801561052857600080fd5b50610531611260565b60405161053e91906149e3565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190614b59565b611273565b005b34801561057c57600080fd5b5061059760048036038101906105929190614b59565b611527565b6040516105a491906149e3565b60405180910390f35b3480156105b957600080fd5b506105c261157d565b6040516105cf9190614a87565b60405180910390f35b3480156105e457600080fd5b506105ed611583565b6040516105fa9190614a87565b60405180910390f35b34801561060f57600080fd5b50610618611589565b6040516106259190614a87565b60405180910390f35b34801561063a57600080fd5b5061064361158f565b6040516106509190614a87565b60405180910390f35b34801561066557600080fd5b5061066e611595565b60405161067b91906149e3565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190614b59565b6115a8565b6040516106b89190614a87565b60405180910390f35b3480156106cd57600080fd5b506106d6611693565b005b3480156106e457600080fd5b506106ed6117e6565b6040516106fa9190614c01565b60405180910390f35b34801561070f57600080fd5b5061072a60048036038101906107259190614b59565b61180c565b60405161073791906149e3565b60405180910390f35b34801561074c57600080fd5b50610755611862565b005b34801561076357600080fd5b5061076c61196a565b6040516107799190614c01565b60405180910390f35b34801561078e57600080fd5b50610797611993565b6040516107a49190614a87565b60405180910390f35b3480156107b957600080fd5b506107c2611999565b6040516107cf91906148cd565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa9190614988565b611a2b565b60405161080c91906149e3565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190614988565b611ad7565b60405161084991906149e3565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190614af5565b611af5565b005b34801561088757600080fd5b50610890611c22565b60405161089d9190614a87565b60405180910390f35b3480156108b257600080fd5b506108bb611c2c565b6040516108c89190614a87565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190614b59565b611c32565b005b34801561090657600080fd5b50610921600480360381019061091c9190614c1c565b611e63565b005b34801561092f57600080fd5b50610938612033565b6040516109459190614a87565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614c5c565b612039565b6040516109829190614a87565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614c9c565b6120c0565b005b3480156109c057600080fd5b506109c96121a9565b6040516109d69190614a87565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a019190614b59565b6121af565b005b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614b59565b612370565b005b606060078054610a4090614cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90614cf8565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ad7610ad06125de565b84846125e6565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54905090565b60155481565b6000610b248484846127af565b610bc484610b306125de565b84600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7a6125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbf9190614d58565b6125e6565b600190509392505050565b6000600b54821115610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d90614dfe565b60405180910390fd5b6000610c20612aed565b90508083610c2e9190614e4d565b915050919050565b6000600960009054906101000a900460ff16905090565b610c556125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990614eca565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590614f36565b60405180910390fd5b60005b600680549050811015610f97578173ffffffffffffffffffffffffffffffffffffffff1660068281548110610da957610da8614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f845760066001600680549050610e039190614d58565b81548110610e1457610e13614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660068281548110610e5357610e52614f56565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006805480610f4a57610f49614f85565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f97565b8080610f8f90614fb4565b915050610d71565b5050565b600061103d610fa86125de565b848460036000610fb66125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110389190614ffc565b6125e6565b6001905092915050565b60135481565b60006110576125de565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd906150a2565b60405180910390fd5b60006110f183612b11565b505050505050905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111449190614d58565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600b546111959190614d58565b600b8190555082600c546111a99190614ffc565b600c81905550505050565b6000600a548311156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061510e565b60405180910390fd5b8161121c57600061120b84612b11565b505050505050905080915050611234565b600061122784612b11565b5050505050915050809150505b92915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60169054906101000a900460ff1681565b61127b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90614eca565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061517a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146957611425600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bcf565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600e5481565b60125481565b60145481565b601b60159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561164357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061168e565b61168b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bcf565b90505b919050565b61169b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90614eca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61186a6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614eca565b60405180910390fd5b60001515601b60169054906101000a900460ff1615151461194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906151e6565b60405180910390fd5b6001601b60166101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b6060600880546119a890614cf8565b80601f01602080910402602001604051908101604052809291908181526020018280546119d490614cf8565b8015611a215780601f106119f657610100808354040283529160200191611a21565b820191906000526020600020905b815481529060010190602001808311611a0457829003601f168201915b5050505050905090565b6000611acd611a386125de565b848460036000611a466125de565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ac89190614d58565b6125e6565b6001905092915050565b6000611aeb611ae46125de565b84846127af565b6001905092915050565b611afd6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190614eca565b60405180910390fd5b620186a0611b96610b07565b611ba09190614e4d565b8111611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890615278565b60405180910390fd5b80601c819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14581604051611c179190614a87565b60405180910390a150565b6000600c54905090565b60165481565b611c3a6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614eca565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4e9061530a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd9061539c565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611e589190614c01565b60405180910390a150565b611e6b6125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90614eca565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061542e565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202791906149e3565b60405180910390a25050565b60175481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120c86125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c90614eca565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a128160405161219e91906149e3565b60405180910390a150565b601c5481565b6121b76125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90614eca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa906154c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123786125de565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90614eca565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a9061552c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124d6576124d0473373ffffffffffffffffffffffffffffffffffffffff16612b7990919063ffffffff16565b506125db565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125169190614c01565b602060405180830381865afa158015612533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125579190615561565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161259492919061558e565b6020604051808303816000875af11580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d791906155cc565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c9061566b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb906156fd565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127a29190614a87565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361281e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128159061578f565b60405180910390fd5b60008111612861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285890615821565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129055750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295a57601b60169054906101000a900460ff16612959576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129509061588d565b60405180910390fd5b5b6000612965306115a8565b90506000601c54821015905080801561298b5750601b60149054906101000a900460ff16155b80156129e45750601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156129fc5750601b60159054906101000a900460ff165b15612adb576001601b60146101000a81548160ff0219169083151502179055506000601254601154612a2e9190614ffc565b90506000601054600f54612a429190614ffc565b905060008183612a529190614ffc565b90506000811115612abc576000821115612a8c576000818387612a7591906158ad565b612a7f9190614e4d565b9050612a8a81612c34565b505b6000831115612abb576000818487612aa491906158ad565b612aae9190614e4d565b9050612ab981612f8e565b505b5b6000601b60146101000a81548160ff0219169083151502179055505050505b612ae6858585613240565b5050505050565b6000806000612afa6136b6565b915091508082612b0a9190614e4d565b9250505090565b6000806000806000806000806000806000612b2b8c613954565b93509350935093506000806000612b4c8f878787612b47612aed565b6139be565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b600081471015612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb59061593b565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612be49061598c565b60006040518083038185875af1925050503d8060008114612c21576040519150601f19603f3d011682016040523d82523d6000602084013e612c26565b606091505b505090508091505092915050565b6000600282612c439190614e4d565b905060008183612c539190614d58565b905060004790506000600267ffffffffffffffff811115612c7757612c766159a1565b5b604051908082528060200260200182016040528015612ca55781602001602082028036833780820191505090505b5090503081600081518110612cbd57612cbc614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8891906159e5565b81600181518110612d9c57612d9b614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401612e3a959493929190615b0b565b600060405180830381600087803b158015612e5457600080fd5b505af1158015612e68573d6000803e3d6000fd5b5050505060008247612e7a9190614d58565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823087600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612f0596959493929190615b65565b60606040518083038185885af1158015612f23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f489190615bc6565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051612f7e93929190615c19565b60405180910390a1505050505050565b60004790506000600267ffffffffffffffff811115612fb057612faf6159a1565b5b604051908082528060200260200182016040528015612fde5781602001602082028036833780820191505090505b5090503081600081518110612ff657612ff5614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c191906159e5565b816001815181106130d5576130d4614f56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401613173959493929190615b0b565b600060405180830381600087803b15801561318d57600080fd5b505af11580156131a1573d6000803e3d6000fd5b50505050600082476131b39190614d58565b905061320081601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b7990919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998482604051613232929190615c50565b60405180910390a150505050565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e15750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f3576132ee613a41565b6133c2565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361335557613350613a82565b6133c1565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b7576133b2613ac9565b6133c0565b6133bf613a41565b5b5b5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134655750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347a57613475838383613b10565b6136b1565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561351d5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135325761352d838383613d69565b6136b0565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135d65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135eb576135e6838383613fc2565b6136af565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368d5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a25761369d83838361418d565b6136ae565b6136ad838383613fc2565b5b5b5b5b505050565b6000806000600b5490506000600a54905060005b60068054905081101561391e578260016000600684815481106136f0576136ef614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806137de575081600260006006848154811061377657613775614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156137f557600b54600a5494509450505050613950565b600160006006838154811061380d5761380c614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361387e9190614d58565b9250600260006006838154811061389857613897614f56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826139099190614d58565b9150808061391690614fb4565b9150506136ca565b50600a54600b5461392f9190614e4d565b82101561394757600b54600a54935093505050613950565b81819350935050505b9091565b600080600080600061396586614474565b9050600061397287614497565b9050600061397f886144ba565b905060008183858b6139919190614d58565b61399b9190614d58565b6139a59190614d58565b9050808484849750975097509750505050509193509193565b60008060008084896139d091906158ad565b9050600085896139e091906158ad565b9050600086896139f091906158ad565b905060008789613a0091906158ad565b9050600081838587613a129190614d58565b613a1c9190614d58565b613a269190614d58565b90508481859750975097505050505050955095509592505050565b6000601354148015613a5557506000601454145b8015613a6357506000601554145b613a80576000601381905550600060158190555060006014819055505b565b600e54601354148015613a985750601054601454145b8015613aa75750601254601554145b613ac757600e546013819055506012546015819055506010546014819055505b565b600d54601354148015613adf5750600f54601454145b8015613aee5750601154601554145b613b0e57600d54601381905550601154601581905550600f546014819055505b565b6000806000806000806000613b2488612b11565b965096509650965096509650965087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b7d9190614d58565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c0b9190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c999190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ce5816144dd565b613cee82614677565b613cf88584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d559190614a87565b60405180910390a350505050505050505050565b6000806000806000806000613d7d88612b11565b965096509650965096509650965086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dd69190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e649190614ffc565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ef29190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3e816144dd565b613f4782614677565b613f518584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613fae9190614a87565b60405180910390a350505050505050505050565b6000806000806000806000613fd688612b11565b965096509650965096509650965086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402f9190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546140bd9190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614109816144dd565b61411282614677565b61411c8584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516141799190614a87565b60405180910390a350505050505050505050565b60008060008060008060006141a188612b11565b965096509650965096509650965087600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141fa9190614d58565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142889190614d58565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143169190614ffc565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143a49190614ffc565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143f0816144dd565b6143f982614677565b6144038584614811565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516144609190614a87565b60405180910390a350505050505050505050565b600060646013548361448691906158ad565b6144909190614e4d565b9050919050565b60006064601454836144a991906158ad565b6144b39190614e4d565b9050919050565b60006064601554836144cc91906158ad565b6144d69190614e4d565b9050919050565b60008111156146745760006144f0612aed565b90506000818361450091906158ad565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461454d9190614ffc565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156146715782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461462d9190614ffc565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b600081111561480e57600061468a612aed565b90506000818361469a91906158ad565b905080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546146e79190614ffc565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561480b5782600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546147c79190614ffc565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505b50565b81600b5461481f9190614d58565b600b8190555080600c546148339190614ffc565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487757808201518184015260208101905061485c565b60008484015250505050565b6000601f19601f8301169050919050565b600061489f8261483d565b6148a98185614848565b93506148b9818560208601614859565b6148c281614883565b840191505092915050565b600060208201905081810360008301526148e78184614894565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061491f826148f4565b9050919050565b61492f81614914565b811461493a57600080fd5b50565b60008135905061494c81614926565b92915050565b6000819050919050565b61496581614952565b811461497057600080fd5b50565b6000813590506149828161495c565b92915050565b6000806040838503121561499f5761499e6148ef565b5b60006149ad8582860161493d565b92505060206149be85828601614973565b9150509250929050565b60008115159050919050565b6149dd816149c8565b82525050565b60006020820190506149f860008301846149d4565b92915050565b6000819050919050565b6000614a23614a1e614a19846148f4565b6149fe565b6148f4565b9050919050565b6000614a3582614a08565b9050919050565b6000614a4782614a2a565b9050919050565b614a5781614a3c565b82525050565b6000602082019050614a726000830184614a4e565b92915050565b614a8181614952565b82525050565b6000602082019050614a9c6000830184614a78565b92915050565b600080600060608486031215614abb57614aba6148ef565b5b6000614ac98682870161493d565b9350506020614ada8682870161493d565b9250506040614aeb86828701614973565b9150509250925092565b600060208284031215614b0b57614b0a6148ef565b5b6000614b1984828501614973565b91505092915050565b600060ff82169050919050565b614b3881614b22565b82525050565b6000602082019050614b536000830184614b2f565b92915050565b600060208284031215614b6f57614b6e6148ef565b5b6000614b7d8482850161493d565b91505092915050565b614b8f816149c8565b8114614b9a57600080fd5b50565b600081359050614bac81614b86565b92915050565b60008060408385031215614bc957614bc86148ef565b5b6000614bd785828601614973565b9250506020614be885828601614b9d565b9150509250929050565b614bfb81614914565b82525050565b6000602082019050614c166000830184614bf2565b92915050565b60008060408385031215614c3357614c326148ef565b5b6000614c418582860161493d565b9250506020614c5285828601614b9d565b9150509250929050565b60008060408385031215614c7357614c726148ef565b5b6000614c818582860161493d565b9250506020614c928582860161493d565b9150509250929050565b600060208284031215614cb257614cb16148ef565b5b6000614cc084828501614b9d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d1057607f821691505b602082108103614d2357614d22614cc9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6382614952565b9150614d6e83614952565b9250828203905081811115614d8657614d85614d29565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614de8602a83614848565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e5882614952565b9150614e6383614952565b925082614e7357614e72614e1e565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614eb4602083614848565b9150614ebf82614e7e565b602082019050919050565b60006020820190508181036000830152614ee381614ea7565b9050919050565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000614f20601b83614848565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614fbf82614952565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ff157614ff0614d29565b5b600182019050919050565b600061500782614952565b915061501283614952565b925082820190508082111561502a57615029614d29565b5b92915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061508c602c83614848565b915061509782615030565b604082019050919050565b600060208201905081810360008301526150bb8161507f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006150f8601f83614848565b9150615103826150c2565b602082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615164601b83614848565b915061516f8261512e565b602082019050919050565b6000602082019050818103600083015261519381615157565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006151d0601a83614848565b91506151db8261519a565b602082019050919050565b600060208201905081810360008301526151ff816151c3565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e30303125206f6620746f74616c20737570706c790000602082015250565b6000615262603e83614848565b915061526d82615206565b604082019050919050565b6000602082019050818103600083015261529181615255565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006152f4602883614848565b91506152ff82615298565b604082019050919050565b60006020820190508181036000830152615323816152e7565b9050919050565b7f4d61726b6574696e672077616c6c657420697320746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615386602483614848565b91506153918261532a565b604082019050919050565b600060208201905081810360008301526153b581615379565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000615418602a83614848565b9150615423826153bc565b604082019050919050565b600060208201905081810360008301526154478161540b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154aa602683614848565b91506154b58261544e565b604082019050919050565b600060208201905081810360008301526154d98161549d565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000615516602083614848565b9150615521826154e0565b602082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b60008151905061555b8161495c565b92915050565b600060208284031215615577576155766148ef565b5b60006155858482850161554c565b91505092915050565b60006040820190506155a36000830185614bf2565b6155b06020830184614a78565b9392505050565b6000815190506155c681614b86565b92915050565b6000602082840312156155e2576155e16148ef565b5b60006155f0848285016155b7565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615655602483614848565b9150615660826155f9565b604082019050919050565b6000602082019050818103600083015261568481615648565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e7602283614848565b91506156f28261568b565b604082019050919050565b60006020820190508181036000830152615716816156da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615779602583614848565b91506157848261571d565b604082019050919050565b600060208201905081810360008301526157a88161576c565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061580b602983614848565b9150615816826157af565b604082019050919050565b6000602082019050818103600083015261583a816157fe565b9050919050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000615877601a83614848565b915061588282615841565b602082019050919050565b600060208201905081810360008301526158a68161586a565b9050919050565b60006158b882614952565b91506158c383614952565b92508282026158d181614952565b915082820484148315176158e8576158e7614d29565b5b5092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000615925601d83614848565b9150615930826158ef565b602082019050919050565b6000602082019050818103600083015261595481615918565b9050919050565b600081905092915050565b50565b600061597660008361595b565b915061598182615966565b600082019050919050565b600061599782615969565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159df81614926565b92915050565b6000602082840312156159fb576159fa6148ef565b5b6000615a09848285016159d0565b91505092915050565b6000819050919050565b6000615a37615a32615a2d84615a12565b6149fe565b614952565b9050919050565b615a4781615a1c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615a8281614914565b82525050565b6000615a948383615a79565b60208301905092915050565b6000602082019050919050565b6000615ab882615a4d565b615ac28185615a58565b9350615acd83615a69565b8060005b83811015615afe578151615ae58882615a88565b9750615af083615aa0565b925050600181019050615ad1565b5085935050505092915050565b600060a082019050615b206000830188614a78565b615b2d6020830187615a3e565b8181036040830152615b3f8186615aad565b9050615b4e6060830185614bf2565b615b5b6080830184614a78565b9695505050505050565b600060c082019050615b7a6000830189614bf2565b615b876020830188614a78565b615b946040830187615a3e565b615ba16060830186615a3e565b615bae6080830185614bf2565b615bbb60a0830184614a78565b979650505050505050565b600080600060608486031215615bdf57615bde6148ef565b5b6000615bed8682870161554c565b9350506020615bfe8682870161554c565b9250506040615c0f8682870161554c565b9150509250925092565b6000606082019050615c2e6000830186614a78565b615c3b6020830185614a78565b615c486040830184614a78565b949350505050565b6000604082019050615c656000830185614a78565b615c726020830184614a78565b939250505056fea264697066735822122054c30072dba3776450f63954c6d1669149abe1fa206dffa7618439314b41172264736f6c63430008110033

Deployed Bytecode Sourcemap

12885:21505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17829:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14206:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17194:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13981:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17998:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19791:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17103:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20390:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18272:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13917:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18968:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19345:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14255:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14359:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20049:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13836:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13717:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13875:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13946:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14329:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17297:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1001:148;;;;;;;;;;;;;:::i;:::-;;14089:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18728:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26200:156;;;;;;;;;;;;;:::i;:::-;;787:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13684:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17008:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18495:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17503:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29692:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18856:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14018:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34016:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33712:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14052:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17678:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29993;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14392:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1157:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20914:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16917:83;16954:13;16987:5;16980:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16917:83;:::o;17829:161::-;17904:4;17921:39;17930:12;:10;:12::i;:::-;17944:7;17953:6;17921:8;:39::i;:::-;17978:4;17971:11;;17829:161;;;;:::o;14206:42::-;;;;;;;;;;;;;:::o;17194:95::-;17247:7;17274;;17267:14;;17194:95;:::o;13981:28::-;;;;:::o;17998:266::-;18096:4;18113:36;18123:6;18131:9;18142:6;18113:9;:36::i;:::-;18160:74;18169:6;18177:12;:10;:12::i;:::-;18227:6;18191:11;:19;18203:6;18191:19;;;;;;;;;;;;;;;:33;18211:12;:10;:12::i;:::-;18191:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;18160:8;:74::i;:::-;18252:4;18245:11;;17998:266;;;;;:::o;19791:250::-;19857:7;19896;;19885;:18;;19877:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19961:19;19984:10;:8;:10::i;:::-;19961:33;;20022:11;20012:7;:21;;;;:::i;:::-;20005:28;;;19791:250;;;:::o;17103:83::-;17144:5;17169:9;;;;;;;;;;;17162:16;;17103:83;:::o;20390:479::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20472:11:::1;:20;20484:7;20472:20;;;;;;;;;;;;;;;;;;;;;;;;;20464:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20540:9;20535:327;20559:9;:16;;;;20555:1;:20;20535:327;;;20617:7;20601:23;;:9;20611:1;20601:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;20597:254:::1;;20660:9;20689:1;20670:9;:16;;;;:20;;;;:::i;:::-;20660:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20645:9;20655:1;20645:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20729:1;20710:7;:16;20718:7;20710:16;;;;;;;;;;;;;;;:20;;;;20772:5;20749:11;:20;20761:7;20749:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20796:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;20830:5;;20597:254;20577:3;;;;;:::i;:::-;;;;20535:327;;;;20390:479:::0;:::o;18272:215::-;18360:4;18377:80;18386:12;:10;:12::i;:::-;18400:7;18446:10;18409:11;:25;18421:12;:10;:12::i;:::-;18409:25;;;;;;;;;;;;;;;:34;18435:7;18409:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18377:8;:80::i;:::-;18475:4;18468:11;;18272:215;;;;:::o;13917:22::-;;;;:::o;18968:369::-;19020:14;19037:12;:10;:12::i;:::-;19020:29;;19069:11;:19;19081:6;19069:19;;;;;;;;;;;;;;;;;;;;;;;;;19068:20;19060:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19149:15;19174:19;19185:7;19174:10;:19::i;:::-;19148:45;;;;;;;;19240:7;19222;:15;19230:6;19222:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;19204:7;:15;19212:6;19204:15;;;;;;;;;;;;;;;:43;;;;19278:7;19268;;:17;;;;:::i;:::-;19258:7;:27;;;;19322:7;19309:10;;:20;;;;:::i;:::-;19296:10;:33;;;;19009:328;;18968:369;:::o;19345:438::-;19435:7;19474;;19463;:18;;19455:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19533:17;19528:248;;19568:15;19593:19;19604:7;19593:10;:19::i;:::-;19567:45;;;;;;;;19634:7;19627:14;;;;;19528:248;19676:23;19708:19;19719:7;19708:10;:19::i;:::-;19674:53;;;;;;;;19749:15;19742:22;;;19345:438;;;;;:::o;14255:29::-;;;;;;;;;;;;;:::o;14359:26::-;;;;;;;;;;;;;:::o;20049:333::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20132:11:::1;:20;20144:7;20132:20;;;;;;;;;;;;;;;;;;;;;;;;;20131:21;20123:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20217:1;20198:7;:16;20206:7;20198:16;;;;;;;;;;;;;;;;:20;20195:108;;;20254:37;20274:7;:16;20282:7;20274:16;;;;;;;;;;;;;;;;20254:19;:37::i;:::-;20235:7;:16;20243:7;20235:16;;;;;;;;;;;;;;;:56;;;;20195:108;20336:4;20313:11;:20;20325:7;20313:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20351:9;20366:7;20351:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20049:333:::0;:::o;25723:124::-;25787:4;25811:19;:28;25831:7;25811:28;;;;;;;;;;;;;;;;;;;;;;;;;25804:35;;25723:124;;;:::o;13836:32::-;;;;:::o;13717:27::-;;;;:::o;13875:33::-;;;;:::o;13946:28::-;;;;:::o;14329:23::-;;;;;;;;;;;;;:::o;17297:198::-;17363:7;17387:11;:20;17399:7;17387:20;;;;;;;;;;;;;;;;;;;;;;;;;17383:49;;;17416:7;:16;17424:7;17416:16;;;;;;;;;;;;;;;;17409:23;;;;17383:49;17450:37;17470:7;:16;17478:7;17470:16;;;;;;;;;;;;;;;;17450:19;:37::i;:::-;17443:44;;17297:198;;;;:::o;1001:148::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1108:1:::1;1071:40;;1092:6;::::0;::::1;;;;;;;;1071:40;;;;;;;;;;;;1139:1;1122:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1001:148::o:0;14089:30::-;;;;;;;;;;;;;:::o;18728:120::-;18796:4;18820:11;:20;18832:7;18820:20;;;;;;;;;;;;;;;;;;;;;;;;;18813:27;;18728:120;;;:::o;26200:156::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26280:5:::1;26262:23;;:14;;;;;;;;;;;:23;;;26254:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26344:4;26327:14;;:21;;;;;;;;;;;;;;;;;;26200:156::o:0;787:79::-;825:7;852:6;;;;;;;;;;;845:13;;787:79;:::o;13684:26::-;;;;:::o;17008:87::-;17047:13;17080:7;17073:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17008:87;:::o;18495:225::-;18588:4;18605:85;18614:12;:10;:12::i;:::-;18628:7;18674:15;18637:11;:25;18649:12;:10;:12::i;:::-;18637:25;;;;;;;;;;;;;;;:34;18663:7;18637:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;18605:8;:85::i;:::-;18708:4;18701:11;;18495:225;;;;:::o;17503:167::-;17581:4;17598:42;17608:12;:10;:12::i;:::-;17622:9;17633:6;17598:9;:42::i;:::-;17658:4;17651:11;;17503:167;;;;:::o;29692:289::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29810:3:::1;29794:13;:11;:13::i;:::-;:19;;;;:::i;:::-;29782:9;:31;29774:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;29912:9;29891:18;:30;;;;29937:36;29963:9;29937:36;;;;;;:::i;:::-;;;;;;;;29692:289:::0;:::o;18856:104::-;18915:7;18942:10;;18935:17;;18856:104;:::o;14018:27::-;;;;:::o;34016:371::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34131:15:::1;;;;;;;;;;;34111:35;;:16;:35;;::::0;34103:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34236:1;34210:28;;:16;:28;;::::0;34202:77:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34308:16;34290:15;;:34;;;;;;;;;;;;;;;;;;34340:39;34363:15;;;;;;;;;;;34340:39;;;;;;:::i;:::-;;;;;;;;34016:371:::0;:::o;33712:292::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33839:8:::1;33807:40;;:19;:28;33827:7;33807:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;33799:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33936:8;33905:19;:28;33925:7;33905:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33978:7;33962:34;;;33987:8;33962:34;;;;;;:::i;:::-;;;;;;;;33712:292:::0;;:::o;14052:28::-;;;;:::o;17678:143::-;17759:7;17786:11;:18;17798:5;17786:18;;;;;;;;;;;;;;;:27;17805:7;17786:27;;;;;;;;;;;;;;;;17779:34;;17678:143;;;;:::o;29993:::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30076:8:::1;30062:11;;:22;;;;;;;;;;;;;;;;;;30100:28;30119:8;30100:28;;;;;;:::i;:::-;;;;;;;;29993:143:::0;:::o;14392:33::-;;;;:::o;1157:244::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1266:1:::1;1246:22;;:8;:22;;::::0;1238:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1356:8;1327:38;;1348:6;::::0;::::1;;;;;;;;1327:38;;;;;;;;;;;;1385:8;1376:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1157:244:::0;:::o;20914:442::-;924:12;:10;:12::i;:::-;914:22;;:6;;;;;;;;;;:22;;;906:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21010:4:::1;20993:22;;:5;:22;;::::0;20985:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21084:3;21067:21;;:5;:21;;::::0;21063:127:::1;;21105:52;21135:21;21113:10;21105:29;;;;:52;;;;:::i;:::-;;21172:7;;21063:127;21200:17;21227:5;21200:33;;21244:15;21262:10;:20;;;21291:4;21262:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21244:53;;21308:10;:19;;;21328:10;21340:7;21308:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20974:382;;984:1;20914:442:::0;:::o;95:115::-;148:15;191:10;176:26;;95:115;:::o;25855:337::-;25965:1;25948:19;;:5;:19;;;25940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26046:1;26027:21;;:7;:21;;;26019:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26130:6;26100:11;:18;26112:5;26100:18;;;;;;;;;;;;;;;:27;26119:7;26100:27;;;;;;;;;;;;;;;:36;;;;26168:7;26152:32;;26161:5;26152:32;;;26177:6;26152:32;;;;;;:::i;:::-;;;;;;;;25855:337;;;:::o;26368:1678::-;26506:1;26490:18;;:4;:18;;;26482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26578:1;26569:6;:10;26561:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:19;:25;26662:4;26642:25;;;;;;;;;;;;;;;;;;;;;;;;;26641:26;:54;;;;;26672:19;:23;26692:2;26672:23;;;;;;;;;;;;;;;;;;;;;;;;;26671:24;26641:54;26638:139;;;26720:14;;;;;;;;;;;26712:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;26638:139;26789:28;26820:24;26838:4;26820:9;:24::i;:::-;26789:55;;26863:24;26914:18;;26890:20;:42;;26863:69;;26961:19;:53;;;;;26998:16;;;;;;;;;;;26997:17;26961:53;:89;;;;;27037:13;;;;;;;;;;;27031:19;;:2;:19;;;26961:89;:117;;;;;27067:11;;;;;;;;;;;26961:117;26943:979;;;27124:4;27105:16;;:23;;;;;;;;;;;;;;;;;;27157:22;27202:18;;27182:17;;:38;;;;:::i;:::-;27157:63;;27235:22;27280:18;;27260:17;;:38;;;;:::i;:::-;27235:63;;27313:18;27351:14;27334;:31;;;;:::i;:::-;27313:52;;27396:1;27383:10;:14;27380:492;;;27438:1;27421:14;:18;27418:198;;;27464:23;27532:10;27514:14;27491:20;:37;;;;:::i;:::-;27490:52;;;;:::i;:::-;27464:78;;27565:31;27580:15;27565:14;:31::i;:::-;27441:175;27418:198;27672:1;27655:14;:18;27652:204;;;27698:23;27766:10;27748:14;27725:20;:37;;;;:::i;:::-;27724:52;;;;:::i;:::-;27698:78;;27799:37;27820:15;27799:20;:37::i;:::-;27675:181;27652:204;27380:492;27905:5;27886:16;;:24;;;;;;;;;;;;;;;;;;27090:832;;;26943:979;28008:30;28023:4;28028:2;28031:6;28008:14;:30::i;:::-;26471:1575;;26368:1678;;;:::o;22932:160::-;22973:7;22994:15;23011;23030:19;:17;:19::i;:::-;22993:56;;;;23077:7;23067;:17;;;;:::i;:::-;23060:24;;;;22932:160;:::o;21513:472::-;21572:7;21581;21590;21599;21608;21617;21626;21647:23;21672:12;21686:18;21706;21728:20;21740:7;21728:11;:20::i;:::-;21646:102;;;;;;;;21760:15;21777:23;21802:12;21818:62;21830:7;21839:4;21845:10;21857;21869;:8;:10::i;:::-;21818:11;:62::i;:::-;21759:121;;;;;;21899:7;21908:15;21925:4;21931:15;21948:4;21954:10;21966;21891:86;;;;;;;;;;;;;;;;;;;;;21513:472;;;;;;;;;:::o;2774:346::-;2853:4;2902:6;2877:21;:31;;2869:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3034:12;3052:9;:14;;3075:6;3052:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:54;;;3105:7;3098:14;;;2774:346;;;;:::o;28054:947::-;28113:12;28137:1;28128:6;:10;;;;:::i;:::-;28113:25;;28149:17;28178:4;28169:6;:13;;;;:::i;:::-;28149:33;;28195:22;28220:21;28195:46;;28254:21;28292:1;28278:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28254:40;;28323:4;28305;28310:1;28305:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28349:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28339:4;28344:1;28339:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28384:15;;;;;;;;;;;:66;;;28465:4;28484:1;28528:4;28555;28575:15;28384:207;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28612:18;28657:14;28633:21;:38;;;;:::i;:::-;28612:59;;28684:15;;;;;;;;;;;:31;;;28723:10;28757:4;28777:9;28801:1;28844;28887:4;;;;;;;;;;;28906:15;28684:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28950:43;28965:4;28971:10;28983:9;28950:43;;;;;;;;:::i;:::-;;;;;;;;28102:899;;;;;28054:947;:::o;29009:675::-;29079:22;29104:21;29079:46;;29138:21;29176:1;29162:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29138:40;;29207:4;29189;29194:1;29189:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29233:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29223:4;29228:1;29223:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29268:15;;;;;;;;;;;:66;;;29349:11;29375:1;29419:4;29446;29466:15;29268:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29495:18;29540:14;29516:21;:38;;;;:::i;:::-;29495:59;;29567:46;29602:10;29575:15;;;;;;;;;;;29567:34;;;;:46;;;;:::i;:::-;;29631:45;29652:11;29665:10;29631:45;;;;;;;:::i;:::-;;;;;;;;29068:616;;;29009:675;:::o;30144:1040::-;30243:19;:27;30263:6;30243:27;;;;;;;;;;;;;;;;;;;;;;;;;:75;;;;30288:19;:30;30308:9;30288:30;;;;;;;;;;;;;;;;;;;;;;;;;30243:75;30239:327;;;30350:14;:12;:14::i;:::-;30239:327;;;30397:13;;;;;;;;;;;30384:26;;:9;:26;;;30381:185;;30426:12;:10;:12::i;:::-;30381:185;;;30468:13;;;;;;;;;;;30458:23;;:6;:23;;;30455:111;;30497:11;:9;:11::i;:::-;30455:111;;;30540:14;:12;:14::i;:::-;30455:111;30381:185;30239:327;30582:11;:19;30594:6;30582:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;30606:11;:22;30618:9;30606:22;;;;;;;;;;;;;;;;;;;;;;;;;30605:23;30582:46;30578:597;;;30645:48;30667:6;30675:9;30686:6;30645:21;:48::i;:::-;30578:597;;;30716:11;:19;30728:6;30716:19;;;;;;;;;;;;;;;;;;;;;;;;;30715:20;:46;;;;;30739:11;:22;30751:9;30739:22;;;;;;;;;;;;;;;;;;;;;;;;;30715:46;30711:464;;;30778:46;30798:6;30806:9;30817:6;30778:19;:46::i;:::-;30711:464;;;30847:11;:19;30859:6;30847:19;;;;;;;;;;;;;;;;;;;;;;;;;30846:20;:47;;;;;30871:11;:22;30883:9;30871:22;;;;;;;;;;;;;;;;;;;;;;;;;30870:23;30846:47;30842:333;;;30910:44;30928:6;30936:9;30947:6;30910:17;:44::i;:::-;30842:333;;;30976:11;:19;30988:6;30976:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;30999:11;:22;31011:9;30999:22;;;;;;;;;;;;;;;;;;;;;;;;;30976:45;30972:203;;;31038:48;31060:6;31068:9;31079:6;31038:21;:48::i;:::-;30972:203;;;31119:44;31137:6;31145:9;31156:6;31119:17;:44::i;:::-;30972:203;30842:333;30711:464;30578:597;30144:1040;;;:::o;23100:552::-;23150:7;23159;23179:15;23197:7;;23179:25;;23215:15;23233:7;;23215:25;;23262:9;23257:283;23281:9;:16;;;;23277:1;:20;23257:283;;;23347:7;23323;:21;23331:9;23341:1;23331:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23323:21;;;;;;;;;;;;;;;;:31;:66;;;;23382:7;23358;:21;23366:9;23376:1;23366:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23358:21;;;;;;;;;;;;;;;;:31;23323:66;23319:97;;;23399:7;;23408;;23391:25;;;;;;;;;23319:97;23451:7;:21;23459:9;23469:1;23459:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23451:21;;;;;;;;;;;;;;;;23441:7;:31;;;;:::i;:::-;23431:41;;23507:7;:21;23515:9;23525:1;23515:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23507:21;;;;;;;;;;;;;;;;23497:7;:31;;;;:::i;:::-;23487:41;;23299:3;;;;;:::i;:::-;;;;23257:283;;;;23574:7;;23564;;:17;;;;:::i;:::-;23554:7;:27;23550:58;;;23591:7;;23600;;23583:25;;;;;;;;23550:58;23627:7;23636;23619:25;;;;;;23100:552;;;:::o;21993:420::-;22053:7;22062;22071;22080;22100:12;22115:24;22131:7;22115:15;:24::i;:::-;22100:39;;22150:18;22171:30;22193:7;22171:21;:30::i;:::-;22150:51;;22212:18;22233:30;22255:7;22233:21;:30::i;:::-;22212:51;;22274:23;22330:10;22317;22310:4;22300:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;22274:66;;22359:15;22376:4;22382:10;22394;22351:54;;;;;;;;;;;;21993:420;;;;;:::o;22421:503::-;22556:7;22565;22574;22594:15;22622:11;22612:7;:21;;;;:::i;:::-;22594:39;;22644:12;22666:11;22659:4;:18;;;;:::i;:::-;22644:33;;22688:18;22722:11;22709:10;:24;;;;:::i;:::-;22688:45;;22744:18;22778:11;22765:10;:24;;;;:::i;:::-;22744:45;;22800:23;22856:10;22843;22836:4;22826:7;:14;;;;:::i;:::-;:27;;;;:::i;:::-;:40;;;;:::i;:::-;22800:66;;22885:7;22894:15;22911:4;22877:39;;;;;;;;;;;22421:503;;;;;;;;;:::o;24922:206::-;24979:1;24968:7;;:12;:34;;;;;25001:1;24984:13;;:18;24968:34;:56;;;;;25023:1;25006:13;;:18;24968:56;25026:7;24965:68;25063:1;25053:7;:11;;;;25091:1;25075:13;:17;;;;25119:1;25103:13;:17;;;;24922:206;:::o;25426:285::-;25480:12;;25469:7;;:23;:62;;;;;25513:18;;25496:13;;:35;25469:62;:101;;;;;25552:18;;25535:13;;:35;25469:101;25572:7;25466:113;25601:12;;25591:7;:22;;;;25640:18;;25624:13;:34;;;;25685:18;;25669:13;:34;;;;25426:285;:::o;25140:278::-;25193:11;;25182:7;;:22;:60;;;;;25225:17;;25208:13;;:34;25182:60;:98;;;;;25263:17;;25246:13;;:34;25182:98;25282:7;25179:110;25311:11;;25301:7;:21;;;;25349:17;;25333:13;:33;;;;25393:17;;25377:13;:33;;;;25140:278;:::o;32395:614::-;32498:15;32515:23;32540:12;32554:23;32579:12;32593:18;32613;32635:19;32646:7;32635:10;:19::i;:::-;32497:157;;;;;;;;;;;;;;32701:7;32683;:15;32691:6;32683:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32665:7;:15;32673:6;32665:15;;;;;;;;;;;;;;;:43;;;;32755:7;32737;:15;32745:6;32737:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32719:7;:15;32727:6;32719:15;;;;;;;;;;;;;;;:43;;;;32815:15;32794:7;:18;32802:9;32794:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32773:7;:18;32781:9;32773:18;;;;;;;;;;;;;;;:57;;;;32842:26;32857:10;32842:14;:26::i;:::-;32881;32896:10;32881:14;:26::i;:::-;32918:23;32930:4;32936;32918:11;:23::i;:::-;32974:9;32957:44;;32966:6;32957:44;;;32985:15;32957:44;;;;;;:::i;:::-;;;;;;;;32486:523;;;;;;;32395:614;;;:::o;31753:634::-;31854:15;31871:23;31896:12;31910:23;31935:12;31949:18;31969;31991:19;32002:7;31991:10;:19::i;:::-;31853:157;;;;;;;;;;;;;;32057:7;32039;:15;32047:6;32039:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32021:7;:15;32029:6;32021:15;;;;;;;;;;;;;;;:43;;;;32117:15;32096:7;:18;32104:9;32096:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32075:7;:18;32083:9;32075:18;;;;;;;;;;;;;;;:57;;;;32185:15;32164:7;:18;32172:9;32164:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32143:7;:18;32151:9;32143:18;;;;;;;;;;;;;;;:57;;;;32211:26;32226:10;32211:14;:26::i;:::-;32259;32274:10;32259:14;:26::i;:::-;32296:23;32308:4;32314;32296:11;:23::i;:::-;32352:9;32335:44;;32344:6;32335:44;;;32363:15;32335:44;;;;;;:::i;:::-;;;;;;;;31842:545;;;;;;;31753:634;;;:::o;31192:553::-;31291:15;31308:23;31333:12;31347:23;31372:12;31386:18;31406;31428:19;31439:7;31428:10;:19::i;:::-;31290:157;;;;;;;;;;;;;;31494:7;31476;:15;31484:6;31476:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;31458:7;:15;31466:6;31458:15;;;;;;;;;;;;;;;:43;;;;31554:15;31533:7;:18;31541:9;31533:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;31512:7;:18;31520:9;31512:18;;;;;;;;;;;;;;;:57;;;;31580:26;31595:10;31580:14;:26::i;:::-;31617;31632:10;31617:14;:26::i;:::-;31654:23;31666:4;31672;31654:11;:23::i;:::-;31710:9;31693:44;;31702:6;31693:44;;;31721:15;31693:44;;;;;;:::i;:::-;;;;;;;;31279:466;;;;;;;31192:553;;;:::o;33017:687::-;33120:15;33137:23;33162:12;33176:23;33201:12;33215:18;33235;33257:19;33268:7;33257:10;:19::i;:::-;33119:157;;;;;;;;;;;;;;33323:7;33305;:15;33313:6;33305:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;33287:7;:15;33295:6;33287:15;;;;;;;;;;;;;;;:43;;;;33377:7;33359;:15;33367:6;33359:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;33341:7;:15;33349:6;33341:15;;;;;;;;;;;;;;;:43;;;;33437:15;33416:7;:18;33424:9;33416:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;33395:7;:18;33403:9;33395:18;;;;;;;;;;;;;;;:57;;;;33505:15;33484:7;:18;33492:9;33484:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;33463:7;:18;33471:9;33463:18;;;;;;;;;;;;;;;:57;;;;33531:26;33546:10;33531:14;:26::i;:::-;33576;33591:10;33576:14;:26::i;:::-;33613:23;33625:4;33631;33613:11;:23::i;:::-;33669:9;33652:44;;33661:6;33652:44;;;33680:15;33652:44;;;;;;:::i;:::-;;;;;;;;33108:596;;;;;;;33017:687;;;:::o;24500:122::-;24564:7;24611:3;24601:7;;24591;:17;;;;:::i;:::-;:23;;;;:::i;:::-;24584:30;;24500:122;;;:::o;24630:134::-;24700:7;24753:3;24737:13;;24727:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;24720:36;;24630:134;;;:::o;24776:::-;24846:7;24899:3;24883:13;;24873:7;:23;;;;:::i;:::-;:29;;;;:::i;:::-;24866:36;;24776:134;;;:::o;24080:408::-;24160:1;24147:10;:14;24143:338;;;24178:19;24201:10;:8;:10::i;:::-;24178:33;;24226:18;24260:11;24247:10;:24;;;;:::i;:::-;24226:45;;24336:10;24311:7;:22;24327:4;24311:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;24286:7;:22;24302:4;24286:22;;;;;;;;;;;;;;;:60;;;;24364:11;:26;24384:4;24364:26;;;;;;;;;;;;;;;;;;;;;;;;;24361:108;;;24459:10;24434:7;:22;24450:4;24434:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;24409:7;:22;24425:4;24409:22;;;;;;;;;;;;;;;:60;;;;24361:108;24163:318;;24143:338;24080:408;:::o;23664:::-;23744:1;23731:10;:14;23727:338;;;23762:19;23785:10;:8;:10::i;:::-;23762:33;;23810:18;23844:11;23831:10;:24;;;;:::i;:::-;23810:45;;23920:10;23895:7;:22;23911:4;23895:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;23870:7;:22;23886:4;23870:22;;;;;;;;;;;;;;;:60;;;;23948:11;:26;23968:4;23948:26;;;;;;;;;;;;;;;;;;;;;;;;;23945:108;;;24043:10;24018:7;:22;24034:4;24018:22;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;23993:7;:22;24009:4;23993:22;;;;;;;;;;;;;;;:60;;;;23945:108;23747:318;;23727:338;23664:408;:::o;21364:141::-;21452:4;21442:7;;:14;;;;:::i;:::-;21432:7;:24;;;;21493:4;21480:10;;:17;;;;:::i;:::-;21467:10;:30;;;;21364:141;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:329::-;5460:6;5509:2;5497:9;5488:7;5484:23;5480:32;5477:119;;;5515:79;;:::i;:::-;5477:119;5635:1;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5606:117;5401:329;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:329::-;6225:6;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6166:329;;;;:::o;6501:116::-;6571:21;6586:5;6571:21;:::i;:::-;6564:5;6561:32;6551:60;;6607:1;6604;6597:12;6551:60;6501:116;:::o;6623:133::-;6666:5;6704:6;6691:20;6682:29;;6720:30;6744:5;6720:30;:::i;:::-;6623:133;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:468::-;7653:6;7661;7710:2;7698:9;7689:7;7685:23;7681:32;7678:119;;;7716:79;;:::i;:::-;7678:119;7836:1;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7807:117;7963:2;7989:50;8031:7;8022:6;8011:9;8007:22;7989:50;:::i;:::-;7979:60;;7934:115;7588:468;;;;;:::o;8062:474::-;8130:6;8138;8187:2;8175:9;8166:7;8162:23;8158:32;8155:119;;;8193:79;;:::i;:::-;8155:119;8313:1;8338:53;8383:7;8374:6;8363:9;8359:22;8338:53;:::i;:::-;8328:63;;8284:117;8440:2;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8411:118;8062:474;;;;;:::o;8542:323::-;8598:6;8647:2;8635:9;8626:7;8622:23;8618:32;8615:119;;;8653:79;;:::i;:::-;8615:119;8773:1;8798:50;8840:7;8831:6;8820:9;8816:22;8798:50;:::i;:::-;8788:60;;8744:114;8542:323;;;;:::o;8871:180::-;8919:77;8916:1;8909:88;9016:4;9013:1;9006:15;9040:4;9037:1;9030:15;9057:320;9101:6;9138:1;9132:4;9128:12;9118:22;;9185:1;9179:4;9175:12;9206:18;9196:81;;9262:4;9254:6;9250:17;9240:27;;9196:81;9324:2;9316:6;9313:14;9293:18;9290:38;9287:84;;9343:18;;:::i;:::-;9287:84;9108:269;9057:320;;;:::o;9383:180::-;9431:77;9428:1;9421:88;9528:4;9525:1;9518:15;9552:4;9549:1;9542:15;9569:194;9609:4;9629:20;9647:1;9629:20;:::i;:::-;9624:25;;9663:20;9681:1;9663:20;:::i;:::-;9658:25;;9707:1;9704;9700:9;9692:17;;9731:1;9725:4;9722:11;9719:37;;;9736:18;;:::i;:::-;9719:37;9569:194;;;;:::o;9769:229::-;9909:34;9905:1;9897:6;9893:14;9886:58;9978:12;9973:2;9965:6;9961:15;9954:37;9769:229;:::o;10004:366::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:419::-;10542:4;10580:2;10569:9;10565:18;10557:26;;10629:9;10623:4;10619:20;10615:1;10604:9;10600:17;10593:47;10657:131;10783:4;10657:131;:::i;:::-;10649:139;;10376:419;;;:::o;10801:180::-;10849:77;10846:1;10839:88;10946:4;10943:1;10936:15;10970:4;10967:1;10960:15;10987:185;11027:1;11044:20;11062:1;11044:20;:::i;:::-;11039:25;;11078:20;11096:1;11078:20;:::i;:::-;11073:25;;11117:1;11107:35;;11122:18;;:::i;:::-;11107:35;11164:1;11161;11157:9;11152:14;;10987:185;;;;:::o;11178:182::-;11318:34;11314:1;11306:6;11302:14;11295:58;11178:182;:::o;11366:366::-;11508:3;11529:67;11593:2;11588:3;11529:67;:::i;:::-;11522:74;;11605:93;11694:3;11605:93;:::i;:::-;11723:2;11718:3;11714:12;11707:19;;11366:366;;;:::o;11738:419::-;11904:4;11942:2;11931:9;11927:18;11919:26;;11991:9;11985:4;11981:20;11977:1;11966:9;11962:17;11955:47;12019:131;12145:4;12019:131;:::i;:::-;12011:139;;11738:419;;;:::o;12163:177::-;12303:29;12299:1;12291:6;12287:14;12280:53;12163:177;:::o;12346:366::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:419::-;12884:4;12922:2;12911:9;12907:18;12899:26;;12971:9;12965:4;12961:20;12957:1;12946:9;12942:17;12935:47;12999:131;13125:4;12999:131;:::i;:::-;12991:139;;12718:419;;;:::o;13143:180::-;13191:77;13188:1;13181:88;13288:4;13285:1;13278:15;13312:4;13309:1;13302:15;13329:180;13377:77;13374:1;13367:88;13474:4;13471:1;13464:15;13498:4;13495:1;13488:15;13515:233;13554:3;13577:24;13595:5;13577:24;:::i;:::-;13568:33;;13623:66;13616:5;13613:77;13610:103;;13693:18;;:::i;:::-;13610:103;13740:1;13733:5;13729:13;13722:20;;13515:233;;;:::o;13754:191::-;13794:3;13813:20;13831:1;13813:20;:::i;:::-;13808:25;;13847:20;13865:1;13847:20;:::i;:::-;13842:25;;13890:1;13887;13883:9;13876:16;;13911:3;13908:1;13905:10;13902:36;;;13918:18;;:::i;:::-;13902:36;13754:191;;;;:::o;13951:231::-;14091:34;14087:1;14079:6;14075:14;14068:58;14160:14;14155:2;14147:6;14143:15;14136:39;13951:231;:::o;14188:366::-;14330:3;14351:67;14415:2;14410:3;14351:67;:::i;:::-;14344:74;;14427:93;14516:3;14427:93;:::i;:::-;14545:2;14540:3;14536:12;14529:19;;14188:366;;;:::o;14560:419::-;14726:4;14764:2;14753:9;14749:18;14741:26;;14813:9;14807:4;14803:20;14799:1;14788:9;14784:17;14777:47;14841:131;14967:4;14841:131;:::i;:::-;14833:139;;14560:419;;;:::o;14985:181::-;15125:33;15121:1;15113:6;15109:14;15102:57;14985:181;:::o;15172:366::-;15314:3;15335:67;15399:2;15394:3;15335:67;:::i;:::-;15328:74;;15411:93;15500:3;15411:93;:::i;:::-;15529:2;15524:3;15520:12;15513:19;;15172:366;;;:::o;15544:419::-;15710:4;15748:2;15737:9;15733:18;15725:26;;15797:9;15791:4;15787:20;15783:1;15772:9;15768:17;15761:47;15825:131;15951:4;15825:131;:::i;:::-;15817:139;;15544:419;;;:::o;15969:177::-;16109:29;16105:1;16097:6;16093:14;16086:53;15969:177;:::o;16152:366::-;16294:3;16315:67;16379:2;16374:3;16315:67;:::i;:::-;16308:74;;16391:93;16480:3;16391:93;:::i;:::-;16509:2;16504:3;16500:12;16493:19;;16152:366;;;:::o;16524:419::-;16690:4;16728:2;16717:9;16713:18;16705:26;;16777:9;16771:4;16767:20;16763:1;16752:9;16748:17;16741:47;16805:131;16931:4;16805:131;:::i;:::-;16797:139;;16524:419;;;:::o;16949:176::-;17089:28;17085:1;17077:6;17073:14;17066:52;16949:176;:::o;17131:366::-;17273:3;17294:67;17358:2;17353:3;17294:67;:::i;:::-;17287:74;;17370:93;17459:3;17370:93;:::i;:::-;17488:2;17483:3;17479:12;17472:19;;17131:366;;;:::o;17503:419::-;17669:4;17707:2;17696:9;17692:18;17684:26;;17756:9;17750:4;17746:20;17742:1;17731:9;17727:17;17720:47;17784:131;17910:4;17784:131;:::i;:::-;17776:139;;17503:419;;;:::o;17928:249::-;18068:34;18064:1;18056:6;18052:14;18045:58;18137:32;18132:2;18124:6;18120:15;18113:57;17928:249;:::o;18183:366::-;18325:3;18346:67;18410:2;18405:3;18346:67;:::i;:::-;18339:74;;18422:93;18511:3;18422:93;:::i;:::-;18540:2;18535:3;18531:12;18524:19;;18183:366;;;:::o;18555:419::-;18721:4;18759:2;18748:9;18744:18;18736:26;;18808:9;18802:4;18798:20;18794:1;18783:9;18779:17;18772:47;18836:131;18962:4;18836:131;:::i;:::-;18828:139;;18555:419;;;:::o;18980:227::-;19120:34;19116:1;19108:6;19104:14;19097:58;19189:10;19184:2;19176:6;19172:15;19165:35;18980:227;:::o;19213:366::-;19355:3;19376:67;19440:2;19435:3;19376:67;:::i;:::-;19369:74;;19452:93;19541:3;19452:93;:::i;:::-;19570:2;19565:3;19561:12;19554:19;;19213:366;;;:::o;19585:419::-;19751:4;19789:2;19778:9;19774:18;19766:26;;19838:9;19832:4;19828:20;19824:1;19813:9;19809:17;19802:47;19866:131;19992:4;19866:131;:::i;:::-;19858:139;;19585:419;;;:::o;20010:223::-;20150:34;20146:1;20138:6;20134:14;20127:58;20219:6;20214:2;20206:6;20202:15;20195:31;20010:223;:::o;20239:366::-;20381:3;20402:67;20466:2;20461:3;20402:67;:::i;:::-;20395:74;;20478:93;20567:3;20478:93;:::i;:::-;20596:2;20591:3;20587:12;20580:19;;20239:366;;;:::o;20611:419::-;20777:4;20815:2;20804:9;20800:18;20792:26;;20864:9;20858:4;20854:20;20850:1;20839:9;20835:17;20828:47;20892:131;21018:4;20892:131;:::i;:::-;20884:139;;20611:419;;;:::o;21036:229::-;21176:34;21172:1;21164:6;21160:14;21153:58;21245:12;21240:2;21232:6;21228:15;21221:37;21036:229;:::o;21271:366::-;21413:3;21434:67;21498:2;21493:3;21434:67;:::i;:::-;21427:74;;21510:93;21599:3;21510:93;:::i;:::-;21628:2;21623:3;21619:12;21612:19;;21271:366;;;:::o;21643:419::-;21809:4;21847:2;21836:9;21832:18;21824:26;;21896:9;21890:4;21886:20;21882:1;21871:9;21867:17;21860:47;21924:131;22050:4;21924:131;:::i;:::-;21916:139;;21643:419;;;:::o;22068:225::-;22208:34;22204:1;22196:6;22192:14;22185:58;22277:8;22272:2;22264:6;22260:15;22253:33;22068:225;:::o;22299:366::-;22441:3;22462:67;22526:2;22521:3;22462:67;:::i;:::-;22455:74;;22538:93;22627:3;22538:93;:::i;:::-;22656:2;22651:3;22647:12;22640:19;;22299:366;;;:::o;22671:419::-;22837:4;22875:2;22864:9;22860:18;22852:26;;22924:9;22918:4;22914:20;22910:1;22899:9;22895:17;22888:47;22952:131;23078:4;22952:131;:::i;:::-;22944:139;;22671:419;;;:::o;23096:182::-;23236:34;23232:1;23224:6;23220:14;23213:58;23096:182;:::o;23284:366::-;23426:3;23447:67;23511:2;23506:3;23447:67;:::i;:::-;23440:74;;23523:93;23612:3;23523:93;:::i;:::-;23641:2;23636:3;23632:12;23625:19;;23284:366;;;:::o;23656:419::-;23822:4;23860:2;23849:9;23845:18;23837:26;;23909:9;23903:4;23899:20;23895:1;23884:9;23880:17;23873:47;23937:131;24063:4;23937:131;:::i;:::-;23929:139;;23656:419;;;:::o;24081:143::-;24138:5;24169:6;24163:13;24154:22;;24185:33;24212:5;24185:33;:::i;:::-;24081:143;;;;:::o;24230:351::-;24300:6;24349:2;24337:9;24328:7;24324:23;24320:32;24317:119;;;24355:79;;:::i;:::-;24317:119;24475:1;24500:64;24556:7;24547:6;24536:9;24532:22;24500:64;:::i;:::-;24490:74;;24446:128;24230:351;;;;:::o;24587:332::-;24708:4;24746:2;24735:9;24731:18;24723:26;;24759:71;24827:1;24816:9;24812:17;24803:6;24759:71;:::i;:::-;24840:72;24908:2;24897:9;24893:18;24884:6;24840:72;:::i;:::-;24587:332;;;;;:::o;24925:137::-;24979:5;25010:6;25004:13;24995:22;;25026:30;25050:5;25026:30;:::i;:::-;24925:137;;;;:::o;25068:345::-;25135:6;25184:2;25172:9;25163:7;25159:23;25155:32;25152:119;;;25190:79;;:::i;:::-;25152:119;25310:1;25335:61;25388:7;25379:6;25368:9;25364:22;25335:61;:::i;:::-;25325:71;;25281:125;25068:345;;;;:::o;25419:223::-;25559:34;25555:1;25547:6;25543:14;25536:58;25628:6;25623:2;25615:6;25611:15;25604:31;25419:223;:::o;25648:366::-;25790:3;25811:67;25875:2;25870:3;25811:67;:::i;:::-;25804:74;;25887:93;25976:3;25887:93;:::i;:::-;26005:2;26000:3;25996:12;25989:19;;25648:366;;;:::o;26020:419::-;26186:4;26224:2;26213:9;26209:18;26201:26;;26273:9;26267:4;26263:20;26259:1;26248:9;26244:17;26237:47;26301:131;26427:4;26301:131;:::i;:::-;26293:139;;26020:419;;;:::o;26445:221::-;26585:34;26581:1;26573:6;26569:14;26562:58;26654:4;26649:2;26641:6;26637:15;26630:29;26445:221;:::o;26672:366::-;26814:3;26835:67;26899:2;26894:3;26835:67;:::i;:::-;26828:74;;26911:93;27000:3;26911:93;:::i;:::-;27029:2;27024:3;27020:12;27013:19;;26672:366;;;:::o;27044:419::-;27210:4;27248:2;27237:9;27233:18;27225:26;;27297:9;27291:4;27287:20;27283:1;27272:9;27268:17;27261:47;27325:131;27451:4;27325:131;:::i;:::-;27317:139;;27044:419;;;:::o;27469:224::-;27609:34;27605:1;27597:6;27593:14;27586:58;27678:7;27673:2;27665:6;27661:15;27654:32;27469:224;:::o;27699:366::-;27841:3;27862:67;27926:2;27921:3;27862:67;:::i;:::-;27855:74;;27938:93;28027:3;27938:93;:::i;:::-;28056:2;28051:3;28047:12;28040:19;;27699:366;;;:::o;28071:419::-;28237:4;28275:2;28264:9;28260:18;28252:26;;28324:9;28318:4;28314:20;28310:1;28299:9;28295:17;28288:47;28352:131;28478:4;28352:131;:::i;:::-;28344:139;;28071:419;;;:::o;28496:228::-;28636:34;28632:1;28624:6;28620:14;28613:58;28705:11;28700:2;28692:6;28688:15;28681:36;28496:228;:::o;28730:366::-;28872:3;28893:67;28957:2;28952:3;28893:67;:::i;:::-;28886:74;;28969:93;29058:3;28969:93;:::i;:::-;29087:2;29082:3;29078:12;29071:19;;28730:366;;;:::o;29102:419::-;29268:4;29306:2;29295:9;29291:18;29283:26;;29355:9;29349:4;29345:20;29341:1;29330:9;29326:17;29319:47;29383:131;29509:4;29383:131;:::i;:::-;29375:139;;29102:419;;;:::o;29527:176::-;29667:28;29663:1;29655:6;29651:14;29644:52;29527:176;:::o;29709:366::-;29851:3;29872:67;29936:2;29931:3;29872:67;:::i;:::-;29865:74;;29948:93;30037:3;29948:93;:::i;:::-;30066:2;30061:3;30057:12;30050:19;;29709:366;;;:::o;30081:419::-;30247:4;30285:2;30274:9;30270:18;30262:26;;30334:9;30328:4;30324:20;30320:1;30309:9;30305:17;30298:47;30362:131;30488:4;30362:131;:::i;:::-;30354:139;;30081:419;;;:::o;30506:410::-;30546:7;30569:20;30587:1;30569:20;:::i;:::-;30564:25;;30603:20;30621:1;30603:20;:::i;:::-;30598:25;;30658:1;30655;30651:9;30680:30;30698:11;30680:30;:::i;:::-;30669:41;;30859:1;30850:7;30846:15;30843:1;30840:22;30820:1;30813:9;30793:83;30770:139;;30889:18;;:::i;:::-;30770:139;30554:362;30506:410;;;;:::o;30922:179::-;31062:31;31058:1;31050:6;31046:14;31039:55;30922:179;:::o;31107:366::-;31249:3;31270:67;31334:2;31329:3;31270:67;:::i;:::-;31263:74;;31346:93;31435:3;31346:93;:::i;:::-;31464:2;31459:3;31455:12;31448:19;;31107:366;;;:::o;31479:419::-;31645:4;31683:2;31672:9;31668:18;31660:26;;31732:9;31726:4;31722:20;31718:1;31707:9;31703:17;31696:47;31760:131;31886:4;31760:131;:::i;:::-;31752:139;;31479:419;;;:::o;31904:147::-;32005:11;32042:3;32027:18;;31904:147;;;;:::o;32057:114::-;;:::o;32177:398::-;32336:3;32357:83;32438:1;32433:3;32357:83;:::i;:::-;32350:90;;32449:93;32538:3;32449:93;:::i;:::-;32567:1;32562:3;32558:11;32551:18;;32177:398;;;:::o;32581:379::-;32765:3;32787:147;32930:3;32787:147;:::i;:::-;32780:154;;32951:3;32944:10;;32581:379;;;:::o;32966:180::-;33014:77;33011:1;33004:88;33111:4;33108:1;33101:15;33135:4;33132:1;33125:15;33152:143;33209:5;33240:6;33234:13;33225:22;;33256:33;33283:5;33256:33;:::i;:::-;33152:143;;;;:::o;33301:351::-;33371:6;33420:2;33408:9;33399:7;33395:23;33391:32;33388:119;;;33426:79;;:::i;:::-;33388:119;33546:1;33571:64;33627:7;33618:6;33607:9;33603:22;33571:64;:::i;:::-;33561:74;;33517:128;33301:351;;;;:::o;33658:85::-;33703:7;33732:5;33721:16;;33658:85;;;:::o;33749:158::-;33807:9;33840:61;33858:42;33867:32;33893:5;33867:32;:::i;:::-;33858:42;:::i;:::-;33840:61;:::i;:::-;33827:74;;33749:158;;;:::o;33913:147::-;34008:45;34047:5;34008:45;:::i;:::-;34003:3;33996:58;33913:147;;:::o;34066:114::-;34133:6;34167:5;34161:12;34151:22;;34066:114;;;:::o;34186:184::-;34285:11;34319:6;34314:3;34307:19;34359:4;34354:3;34350:14;34335:29;;34186:184;;;;:::o;34376:132::-;34443:4;34466:3;34458:11;;34496:4;34491:3;34487:14;34479:22;;34376:132;;;:::o;34514:108::-;34591:24;34609:5;34591:24;:::i;:::-;34586:3;34579:37;34514:108;;:::o;34628:179::-;34697:10;34718:46;34760:3;34752:6;34718:46;:::i;:::-;34796:4;34791:3;34787:14;34773:28;;34628:179;;;;:::o;34813:113::-;34883:4;34915;34910:3;34906:14;34898:22;;34813:113;;;:::o;34962:732::-;35081:3;35110:54;35158:5;35110:54;:::i;:::-;35180:86;35259:6;35254:3;35180:86;:::i;:::-;35173:93;;35290:56;35340:5;35290:56;:::i;:::-;35369:7;35400:1;35385:284;35410:6;35407:1;35404:13;35385:284;;;35486:6;35480:13;35513:63;35572:3;35557:13;35513:63;:::i;:::-;35506:70;;35599:60;35652:6;35599:60;:::i;:::-;35589:70;;35445:224;35432:1;35429;35425:9;35420:14;;35385:284;;;35389:14;35685:3;35678:10;;35086:608;;;34962:732;;;;:::o;35700:831::-;35963:4;36001:3;35990:9;35986:19;35978:27;;36015:71;36083:1;36072:9;36068:17;36059:6;36015:71;:::i;:::-;36096:80;36172:2;36161:9;36157:18;36148:6;36096:80;:::i;:::-;36223:9;36217:4;36213:20;36208:2;36197:9;36193:18;36186:48;36251:108;36354:4;36345:6;36251:108;:::i;:::-;36243:116;;36369:72;36437:2;36426:9;36422:18;36413:6;36369:72;:::i;:::-;36451:73;36519:3;36508:9;36504:19;36495:6;36451:73;:::i;:::-;35700:831;;;;;;;;:::o;36537:807::-;36786:4;36824:3;36813:9;36809:19;36801:27;;36838:71;36906:1;36895:9;36891:17;36882:6;36838:71;:::i;:::-;36919:72;36987:2;36976:9;36972:18;36963:6;36919:72;:::i;:::-;37001:80;37077:2;37066:9;37062:18;37053:6;37001:80;:::i;:::-;37091;37167:2;37156:9;37152:18;37143:6;37091:80;:::i;:::-;37181:73;37249:3;37238:9;37234:19;37225:6;37181:73;:::i;:::-;37264;37332:3;37321:9;37317:19;37308:6;37264:73;:::i;:::-;36537:807;;;;;;;;;:::o;37350:663::-;37438:6;37446;37454;37503:2;37491:9;37482:7;37478:23;37474:32;37471:119;;;37509:79;;:::i;:::-;37471:119;37629:1;37654:64;37710:7;37701:6;37690:9;37686:22;37654:64;:::i;:::-;37644:74;;37600:128;37767:2;37793:64;37849:7;37840:6;37829:9;37825:22;37793:64;:::i;:::-;37783:74;;37738:129;37906:2;37932:64;37988:7;37979:6;37968:9;37964:22;37932:64;:::i;:::-;37922:74;;37877:129;37350:663;;;;;:::o;38019:442::-;38168:4;38206:2;38195:9;38191:18;38183:26;;38219:71;38287:1;38276:9;38272:17;38263:6;38219:71;:::i;:::-;38300:72;38368:2;38357:9;38353:18;38344:6;38300:72;:::i;:::-;38382;38450:2;38439:9;38435:18;38426:6;38382:72;:::i;:::-;38019:442;;;;;;:::o;38467:332::-;38588:4;38626:2;38615:9;38611:18;38603:26;;38639:71;38707:1;38696:9;38692:17;38683:6;38639:71;:::i;:::-;38720:72;38788:2;38777:9;38773:18;38764:6;38720:72;:::i;:::-;38467:332;;;;;:::o

Swarm Source

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