ETH Price: $3,086.90 (-0.05%)
Gas: 5 Gwei

Token

TCG 2.0 ETH (ethTCG2)
 

Overview

Max Total Supply

280,000,000 ethTCG2

Holders

630

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
77,544.004243266 ethTCG2

Value
$0.00
0xc8d138869997d5d31dc823af71c6d374fd3e4397
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:
ethTCGCoin20

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * author: BlockCzech R&D Lab <[email protected]>
 * 
 * 
 *░░████████╗░█████╗░░██████╗░░░░█████╗░░█████╗░██╗███╗░░██╗░░██████╗░░░░░█████╗░░░
 *░░╚══██╔══╝██╔══██╗██╔════╝░░░██╔══██╗██╔══██╗██║████╗░██║░░╚════██╗░░░██╔══██╗░░
 *░░░░░██║░░░██║░░╚═╝██║░░██╗░░░██║░░╚═╝██║░░██║██║██╔██╗██║░░░░███╔═╝░░░██║░░██║░░
 *░░░░░██║░░░██║░░██╗██║░░╚██╗░░██║░░██╗██║░░██║██║██║╚████║░░██╔══╝░░░░░██║░░██║░░
 *░░░░░██║░░░╚█████╔╝╚██████╔╝░░╚█████╔╝╚█████╔╝██║██║░╚███║░░███████╗██╗╚█████╔╝░░
 *░░░░░╚═╝░░░░╚════╝░░╚═════╝░░░░╚════╝░░╚════╝░╚═╝╚═╝░░╚══╝░░╚══════╝╚═╝░╚════╝░░░
 *
 * 
 * The TCGCoin20 [ETH] is based on the Automatic Liquidity Pool & Custom Fees Architecture.
 *
 * 
 * SPDX-License-Identifier: MIT
 * 
 */

pragma solidity 0.8.11;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

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

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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;
}

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

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

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

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

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

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

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

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

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

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

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


contract ethTCGCoin20 is Context, IERC20, Ownable {
    using Address for address;
    using SafeMath for uint256;

    mapping (address => uint256) private _reflectOwned;
    mapping (address => uint256) private _takeOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

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

    mapping (address => bool) private _isDEXBuyFee;
    mapping (address => bool) private _isDEXSellFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _takeTotal = 280 * 10**6 * 10**9;
    uint256 private _reflectTotal = (MAX - (MAX % _takeTotal));
    uint256 private _takeFeeTotal;

    string private constant _name = "TCG 2.0 ETH";
    string private constant _symbol = "ethTCG2";
    uint8 private constant _decimals = 9;

    bool public _taxFeeFlag = false;

    uint256 public _taxFee = 0;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _liquiditySellFee = 10;
    uint256 private _previousLiquiditySellFee = _liquiditySellFee;


    IUniswapV2Router02 public uniswapRouter;
    address public uniswapPair;

    bool public isIntoLiquifySwap;
    bool public swapAndLiquifyEnabled = true;

    uint256 private _maxLoopCount = 100;


    uint256 public _maximumValueOfTransaction = 280 * 10**6 * 10**9 ;
    uint256 public numTokensSellToAddToLiquidity = 10 * 10**9 ;

    event SwapAndLiquifyEvent(
        uint256 coinsForSwapping,
        uint256 bnbIsReceived,
        uint256 coinsThatWasAddedIntoLiquidity
    );

    event LiquifySwapUpdatedEnabled(bool enabled);
    event SetTaxFeePercent(uint value);
    event SetTaxFeeFlag(bool flag);
    event SetMaxLoopCount(uint value);
    event SetMaxTxPercent(uint value);
    event SetLiquidityFeePercent(uint value);
    event SetSellFeeLiquidity(uint value);
    event ExcludedFromFee(address _address);
    event IncludeInFee(address _address);
    event ETHReceived(address _address);
    event Delivery(address _address,  uint256 amount);
    event AddLiquidity(uint256 coin_amount, uint256 bnb_amount);
    event SwapAndLiquifyEnabled(bool flag);
    event RouterSet(address indexed router);


    modifier lockSwaping {
        isIntoLiquifySwap = true;
        _;
        isIntoLiquifySwap = false;
    }

    constructor () {
        _reflectOwned[_msgSender()] = _reflectTotal;
	    _setRouterAddress(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);	
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _takeTotal);
    }
    
    function _setRouterAddressByOwner(address router, address factory) external onlyOwner() {
        _setRouterAddress(router, factory);
    }

    function _setRouterAddress(address router, address factory) private {

        IUniswapV2Router02 _uniswapRouter = IUniswapV2Router02(router);

        uniswapPair = IUniswapV2Factory(_uniswapRouter.factory())
            .createPair(address(this), _uniswapRouter.WETH());

        uniswapRouter = _uniswapRouter;
        
        address payable _pancakeFactory = payable(factory);
        _isExcludedFromFee[_pancakeFactory] = true;
        
        emit RouterSet(router);
    }
    
    function _isV2Pair(address account) internal view returns(bool){
        return (account == uniswapPair);
    }



    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BEP20 functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() external view override returns (uint256) {
        return _takeTotal;
    }

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

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

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);

        return true;
    }

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

        return true;
    }

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

        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero"));

        return true;
    }


    function _getCurrentSupply() private view returns(uint256, uint256) {
        require(_excluded.length <= _maxLoopCount, "The number of loop iterations in _getCurrentSupply is greater than the allowed value.");

        uint256 rSupply = _reflectTotal;
        uint256 tSupply = _takeTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectOwned[_excluded[i]] > rSupply || _takeOwned[_excluded[i]] > tSupply) return (_reflectTotal, _takeTotal);
            rSupply = rSupply.sub(_reflectOwned[_excluded[i]]);
            tSupply = tSupply.sub(_takeOwned[_excluded[i]]);
        }
        if (rSupply < _reflectTotal.div(_takeTotal)) return (_reflectTotal, _takeTotal);

        return (rSupply, tSupply);
    }

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

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

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Setter functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

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

    function setTaxFeeFlag(bool flag) external onlyOwner() {
        emit SetTaxFeeFlag(flag);
        _taxFeeFlag = flag;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        emit SetLiquidityFeePercent(liquidityFee);
        _liquidityFee = liquidityFee;
    }

    function setMaxLoopCount(uint256 maxLoopCount) external onlyOwner() {
        emit SetMaxLoopCount(maxLoopCount);
        _maxLoopCount = maxLoopCount;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        emit SetMaxTxPercent(maxTxPercent);
        _maximumValueOfTransaction = _takeTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner() {
        numTokensSellToAddToLiquidity = amount;
    }

    function setLiquiditySellFeePercent(uint256 liquiditySellFee) external onlyOwner() {
        emit SetTaxFeePercent(liquiditySellFee);
        _liquiditySellFee = liquiditySellFee;
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees calculate functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function totalFees() external view returns (uint256) {
        return _takeFeeTotal;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 takeAmountToTransfer, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 reflectAmount, uint256 reflectAmountToTransfer, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());

        return (reflectAmount, reflectAmountToTransfer, rFee, takeAmountToTransfer, tFee, tLiquidity);
    }

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

        return (takeAmountToTransfer, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 reflectAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 reflectAmountToTransfer = reflectAmount.sub(rFee).sub(rLiquidity);

        return (reflectAmount, reflectAmountToTransfer, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Withdraw function \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    /// This will allow to rescue ETH sent by mistake directly to the contract
    function rescueTokensFromContract(uint256 amount) external onlyOwner {
        if(amount == 0 ){ // ETH
            payable(owner()).transfer(address(this).balance);
        }else{ // TCG2
            _tokenTransfer(address(this), owner(), amount, false);
        }
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees managing functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Fees group mebership functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function setupBot(address account, bool value) external onlyOwner {
        _isBot[account] = value;
    }

    function excludeFromFee(address account) external onlyOwner {
        emit ExcludedFromFee(account);
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        emit IncludeInFee(account);
        _isExcludedFromFee[account] = false;
    }

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

    function setDexWithSellFee(address account, bool value) external onlyOwner {
        _isDEXSellFee[account] = value;
    }


    function isDexWithSellFee(address account) public view returns(bool) {
        return _isDEXSellFee[account];
    }

    function setDexWithBuyFee(address account, bool value) external onlyOwner {
        _isDEXBuyFee[account] = value;
    }

    function isDexWithBuyFee(address account) public view returns(bool) {
        return _isDEXBuyFee[account];
    }


    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LP functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        emit SwapAndLiquifyEnabled(_enabled);
        swapAndLiquifyEnabled = _enabled;

        emit LiquifySwapUpdatedEnabled(_enabled);
    }

    //to receive ETH from uniswapRouter when swapping
    receive() external payable {}

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _reflectOwned[address(this)] = _reflectOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _takeOwned[address(this)] = _takeOwned[address(this)].add(tLiquidity);
    }

    function swapAndLiquifyByOwner(uint256 amount) external onlyOwner {
        swapAndLiquify(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockSwaping {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to pancakswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquifyEvent(half, newBalance, otherHalf);
    }

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

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

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        emit AddLiquidity(tokenAmount, ethAmount);
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

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

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Reflection functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


    function tokenFromReflection(uint256 reflectAmount) public view returns(uint256) {
        require(reflectAmount <= _reflectTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();

        return reflectAmount.div(currentRate);
    }

    // \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Custom transfer functions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require( !_isBot[to], "BEP20: transfer to the bot address");
        require( !_isBot[from], "BEP20: transfer from the bot address");
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maximumValueOfTransaction, "Transfer amount exceeds the maxTxAmount.");


        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maximumValueOfTransaction){contractTokenBalance = _maximumValueOfTransaction;}

        bool overMinimumCoinBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinimumCoinBalance &&
            !isIntoLiquifySwap &&
            from != uniswapPair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

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

        if(_isDEXSellFee[to] && !_isExcludedFromFee[from]){
            takeFee = true;
            _previousLiquidityFee = _liquidityFee;
            _liquidityFee = _liquiditySellFee;
        } else if(_isDEXBuyFee[from] && !_isExcludedFromFee[to]){
            takeFee = true;
        }

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

        if(takeFee = true){
            _liquidityFee = _previousLiquidityFee;
        }

    }

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

        if(!takeFee){removeAllFee();}

        (uint256 reflectAmount, uint256 reflectAmountToTransfer, uint256 rFee, uint256 takeAmountToTransfer, uint256 tFee, uint256 tLiquidity) = _getValues(amount);

        _reflectOwned[sender] = _reflectOwned[sender].sub(reflectAmount);
        _reflectOwned[recipient] = _reflectOwned[recipient].add(reflectAmountToTransfer);


        _takeLiquidity(tLiquidity);
        
        emit Transfer(sender, recipient, takeAmountToTransfer);

        if(!takeFee){restoreAllFee();}
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"coin_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnb_amount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"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":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Delivery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ETHReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquifySwapUpdatedEnabled","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":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetLiquidityFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxLoopCount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxTxPercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetSellFeeLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetTaxFeeFlag","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetTaxFeePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SwapAndLiquifyEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"coinsForSwapping","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbIsReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"coinsThatWasAddedIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquifyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maximumValueOfTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"name":"_setRouterAddressByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"isDexWithBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDexWithSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isIntoLiquifySwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexWithBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexWithSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquiditySellFee","type":"uint256"}],"name":"setLiquiditySellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxLoopCount","type":"uint256"}],"name":"setMaxLoopCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setTaxFeeFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setupBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapAndLiquifyByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526703e2c284391c0000600c55600c546000196200002291906200062b565b60001962000031919062000692565b600d556000600f60006101000a81548160ff0219169083151502179055506000601055601054601155600a601255601254601355600a6014556014546015556001601760156101000a81548160ff02191690831515021790555060646018556703e2c284391c00006019556402540be400601a55348015620000b257600080fd5b506000620000c56200033060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d54600360006200017a6200033060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001f2737a250d5630b4cf539739df2c5dacb4c659f2488d735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6200033860201b60201c565b60016006600062000208620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002c16200033060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620003229190620006de565b60405180910390a3620007d5565b600033905090565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000765565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d919062000765565b6040518363ffffffff1660e01b81526004016200045c929190620007a8565b6020604051808303816000875af11580156200047c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a2919062000765565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200063882620005f2565b91506200064583620005f2565b925082620006585762000657620005fc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200069f82620005f2565b9150620006ac83620005f2565b925082821015620006c257620006c162000663565b5b828203905092915050565b620006d881620005f2565b82525050565b6000602082019050620006f56000830184620006cd565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200072d8262000700565b9050919050565b6200073f8162000720565b81146200074b57600080fd5b50565b6000815190506200075f8162000734565b92915050565b6000602082840312156200077e576200077d620006fb565b5b60006200078e848285016200074e565b91505092915050565b620007a28162000720565b82525050565b6000604082019050620007bf600083018562000797565b620007ce602083018462000797565b9392505050565b61502980620007e56000396000f3fe6080604052600436106102975760003560e01c8063735de9f71161015a578063c816841b116100c1578063dd62ed3e1161007a578063dd62ed3e14610a21578063e5f84e4214610a5e578063ea2f0b3714610a89578063f0f165af14610ab2578063f2fde38b14610adb578063f42cf5b314610b045761029e565b8063c816841b14610925578063ca3ba99514610950578063d12a768814610979578063d543dbeb146109a4578063dac11380146109cd578063dd467064146109f85761029e565b8063a457c2d711610113578063a457c2d714610819578063a69df4b514610856578063a84c19771461086d578063a9059cbb14610896578063bafa57f5146108d3578063c49b9a80146108fc5761029e565b8063735de9f7146107195780638da5cb5b146107445780638ee88c531461076f57806395d22b861461079857806395d89b41146107c3578063982fc6bc146107ee5761029e565b8063437823ec116101fe57806361dd90ad116101b757806361dd90ad1461060b5780636bc87c3a146106485780636cf9f871146106735780636dbdb1cd1461069c57806370a08231146106c5578063715018a6146107025761029e565b8063437823ec146104fd5780634a74bb02146105265780635342acb41461055157806359940aa81461058e5780635eb34f51146105b7578063602bc62b146105e05761029e565b8063216bcc1711610250578063216bcc17146103c757806323b872dd146103f05780632d8381191461042d578063313ce5671461046a57806339509351146104955780633b124fe7146104d25761029e565b8063061c82d0146102a357806306fdde03146102cc578063072b12e2146102f7578063095ea7b31461033457806313114a9d1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613eb5565b610b2d565b005b3480156102d857600080fd5b506102e1610c03565b6040516102ee9190613f7b565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613ffb565b610c40565b60405161032b9190614043565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061405e565b610c96565b6040516103689190614043565b60405180910390f35b34801561037d57600080fd5b50610386610cb4565b60405161039391906140ad565b60405180910390f35b3480156103a857600080fd5b506103b1610cbe565b6040516103be91906140ad565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613eb5565b610cc8565b005b3480156103fc57600080fd5b50610417600480360381019061041291906140c8565b610d9e565b6040516104249190614043565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613eb5565b610e77565b60405161046191906140ad565b60405180910390f35b34801561047657600080fd5b5061047f610ee5565b60405161048c9190614137565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061405e565b610eee565b6040516104c99190614043565b60405180910390f35b3480156104de57600080fd5b506104e7610fa1565b6040516104f491906140ad565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ffb565b610fa7565b005b34801561053257600080fd5b5061053b6110ce565b6040516105489190614043565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613ffb565b6110e1565b6040516105859190614043565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061417e565b611137565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141be565b611227565b005b3480156105ec57600080fd5b506105f56112ca565b60405161060291906140ad565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613ffb565b6112d4565b60405161063f9190614043565b60405180910390f35b34801561065457600080fd5b5061065d61132a565b60405161066a91906140ad565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613eb5565b611330565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613eb5565b611406565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ffb565b6114a7565b6040516106f991906140ad565b60405180910390f35b34801561070e57600080fd5b50610717611592565b005b34801561072557600080fd5b5061072e6116e5565b60405161073b919061425d565b60405180910390f35b34801561075057600080fd5b5061075961170b565b6040516107669190614287565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190613eb5565b611734565b005b3480156107a457600080fd5b506107ad61180a565b6040516107ba9190614043565b60405180910390f35b3480156107cf57600080fd5b506107d861181d565b6040516107e59190613f7b565b60405180910390f35b3480156107fa57600080fd5b5061080361185a565b60405161081091906140ad565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b919061405e565b611860565b60405161084d9190614043565b60405180910390f35b34801561086257600080fd5b5061086b61192d565b005b34801561087957600080fd5b50610894600480360381019061088f91906142a2565b611b01565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061405e565b611bea565b6040516108ca9190614043565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f5919061417e565b611c08565b005b34801561090857600080fd5b50610923600480360381019061091e91906142a2565b611cf8565b005b34801561093157600080fd5b5061093a611e18565b6040516109479190614287565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613eb5565b611e3e565b005b34801561098557600080fd5b5061098e611f47565b60405161099b91906140ad565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613eb5565b611f4d565b005b3480156109d957600080fd5b506109e261204a565b6040516109ef91906140ad565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613eb5565b612050565b005b348015610a2d57600080fd5b50610a486004803603810190610a4391906141be565b612217565b604051610a5591906140ad565b60405180910390f35b348015610a6a57600080fd5b50610a7361229e565b604051610a809190614043565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613ffb565b6122b1565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613eb5565b6123d8565b005b348015610ae757600080fd5b50610b026004803603810190610afd9190613ffb565b612477565b005b348015610b1057600080fd5b50610b2b6004803603810190610b26919061417e565b612639565b005b610b35612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610bf191906140ad565b60405180910390a18060108190555050565b60606040518060400160405280600b81526020017f54434720322e3020455448000000000000000000000000000000000000000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610caa610ca3612729565b8484612731565b6001905092915050565b6000600e54905090565b6000600c54905090565b610cd0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610d8c91906140ad565b60405180910390a18060148190555050565b6000610dab8484846128fc565b610e6c84610db7612729565b610e6785604051806060016040528060288152602001614fa760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1d612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b600190509392505050565b6000600d54821115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb5906143ad565b60405180910390fd5b6000610ec8612ec2565b9050610edd8184612eed90919063ffffffff16565b915050919050565b60006009905090565b6000610f97610efb612729565b84610f928560056000610f0c612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b612731565b6001905092915050565b60105481565b610faf612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061431b565b60405180910390fd5b7ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c8160405161106b9190614287565b60405180910390a16001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601760159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061431b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61122f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061431b565b60405180910390fd5b6112c68282612f19565b5050565b6000600254905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b611338612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc9061431b565b60405180910390fd5b7f65b5acab4a325162455ef7363784b96e746f3703d63e4e139f33ba0e0260de5d816040516113f491906140ad565b60405180910390a18060188190555050565b61140e612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061431b565b60405180910390fd5b6114a48161319f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561154257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061158d565b61158a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e77565b90505b919050565b61159a612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e9061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173c612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c09061431b565b60405180910390fd5b7fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516117f891906140ad565b60405180910390a18060128190555050565b601760149054906101000a900460ff1681565b60606040518060400160405280600781526020017f6574685443473200000000000000000000000000000000000000000000000000815250905090565b60195481565b600061192361186d612729565b8461191e85604051806060016040528060258152602001614fcf6025913960056000611897612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b49061443f565b60405180910390fd5b6002544211611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906144ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b09612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061431b565b60405180910390fd5b7f41bbe7cd012e7bef77126e91d0829d308b727ccf7495b355fea9eb07f99270f281604051611bc59190614043565b60405180910390a180600f60006101000a81548160ff02191690831515021790555050565b6000611bfe611bf7612729565b84846128fc565b6001905092915050565b611c10612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c949061431b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d00612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061431b565b60405180910390fd5b7ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b81604051611dbc9190614043565b60405180910390a180601760156101000a81548160ff0219169083151502179055507f9b37996c8b5253e2bc406f4abfdbd8e4d25d2d2cf4864f181d8c263368b3f70281604051611e0d9190614043565b60405180910390a150565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e46612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca9061431b565b60405180910390fd5b6000811415611f2f57611ee461170b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f29573d6000803e3d6000fd5b50611f44565b611f4330611f3b61170b565b836000613275565b5b50565b601a5481565b611f55612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061431b565b60405180910390fd5b7f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b5188160405161201191906140ad565b60405180910390a1612041606461203383600c5461345390919063ffffffff16565b612eed90919063ffffffff16565b60198190555050565b60145481565b612058612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc9061431b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261219391906144fa565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b6122b9612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061431b565b60405180910390fd5b7f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e816040516123759190614287565b60405180910390a16000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123e0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061431b565b60405180910390fd5b80601a8190555050565b61247f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125039061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906145c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c59061431b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906146e6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ef91906140ad565b60405180910390a3505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614778565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061480a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061489c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aed9061492e565b60405180910390fd5b60008111612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b30906149c0565b60405180910390fd5b612b4161170b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f61170b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfa57601954811115612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf090614a52565b60405180910390fd5b5b6000612c05306114a7565b90506019548110612c165760195490505b6000601a548210159050808015612c3a5750601760149054906101000a900460ff16155b8015612c945750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cac5750601760159054906101000a900460ff165b15612cc057601a549150612cbf8261319f565b5b6000600f60009054906101000a900460ff169050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d975760019050601254601381905550601454601281905550612e45565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600190505b5b612e5186868684613275565b600190508015612e65576013546012819055505b505050505050565b6000838311158290612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac9190613f7b565b60405180910390fd5b5082840390509392505050565b6000806000612ecf613469565b91509150612ee68183612eed90919063ffffffff16565b9250505090565b60008183612efb9190614aa1565b905092915050565b60008183612f1191906144fa565b905092915050565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8d9190614ae7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130189190614ae7565b6040518363ffffffff1660e01b8152600401613035929190614b14565b6020604051808303816000875af1158015613054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130789190614ae7565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b6001601760146101000a81548160ff02191690831515021790555060006131d0600283612eed90919063ffffffff16565b905060006131e7828461376690919063ffffffff16565b905060004790506131f78361377c565b600061320c824761376690919063ffffffff16565b905061321883826139bf565b7fba38c3ad648004cf41379049fbd93fd358394610f3a9c40cc72d4738f878f5e384828560405161324b93929190614b3d565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b8061328357613282613add565b5b60008060008060008061329588613b20565b9550955095509550955095506132f386600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338885600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133d481613b7c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343191906140ad565b60405180910390a38661344757613446613d21565b5b50505050505050505050565b600081836134619190614b74565b905092915050565b60008060185460098054905011156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad90614c66565b60405180910390fd5b6000600d5490506000600c54905060005b600980549050811015613729578260036000600984815481106134ed576134ec614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135db575081600460006009848154811061357357613572614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135f257600d54600c5494509450505050613762565b613682600360006009848154811061360d5761360c614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461376690919063ffffffff16565b9250613714600460006009848154811061369f5761369e614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361376690919063ffffffff16565b9150808061372190614cb5565b9150506134c7565b50613741600c54600d54612eed90919063ffffffff16565b82101561375957600d54600c54935093505050613762565b81819350935050505b9091565b600081836137749190614cfe565b905092915050565b6000600267ffffffffffffffff81111561379957613798614d32565b5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b50905030816000815181106137df576137de614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138aa9190614ae7565b816001815181106138be576138bd614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061392530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613989959493929190614e5a565b600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050565b7fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb482826040516139f0929190614eb4565b60405180910390a1613a2530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a7161170b565b426040518863ffffffff1660e01b8152600401613a9396959493929190614edd565b60606040518083038185885af1158015613ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ad69190614f53565b5050505050565b6000601054148015613af157506000601254145b15613afb57613b1e565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806000806000613b378a613d35565b9250925092506000806000613b558d8686613b50612ec2565b613d8f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613b86612ec2565b90506000613b9d828461345390919063ffffffff16565b9050613bf181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d1c57613cd883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b601154601081905550601354601281905550565b600080600080613d4485613e18565b90506000613d5186613e49565b90506000613d7a82613d6c858a61376690919063ffffffff16565b61376690919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613da8858961345390919063ffffffff16565b90506000613dbf868961345390919063ffffffff16565b90506000613dd6878961345390919063ffffffff16565b90506000613dff82613df1858761376690919063ffffffff16565b61376690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000613e426064613e346010548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b6000613e736064613e656012548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b613e9281613e7f565b8114613e9d57600080fd5b50565b600081359050613eaf81613e89565b92915050565b600060208284031215613ecb57613eca613e7a565b5b6000613ed984828501613ea0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1c578082015181840152602081019050613f01565b83811115613f2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4d82613ee2565b613f578185613eed565b9350613f67818560208601613efe565b613f7081613f31565b840191505092915050565b60006020820190508181036000830152613f958184613f42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fc882613f9d565b9050919050565b613fd881613fbd565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b60006020828403121561401157614010613e7a565b5b600061401f84828501613fe6565b91505092915050565b60008115159050919050565b61403d81614028565b82525050565b60006020820190506140586000830184614034565b92915050565b6000806040838503121561407557614074613e7a565b5b600061408385828601613fe6565b925050602061409485828601613ea0565b9150509250929050565b6140a781613e7f565b82525050565b60006020820190506140c2600083018461409e565b92915050565b6000806000606084860312156140e1576140e0613e7a565b5b60006140ef86828701613fe6565b935050602061410086828701613fe6565b925050604061411186828701613ea0565b9150509250925092565b600060ff82169050919050565b6141318161411b565b82525050565b600060208201905061414c6000830184614128565b92915050565b61415b81614028565b811461416657600080fd5b50565b60008135905061417881614152565b92915050565b6000806040838503121561419557614194613e7a565b5b60006141a385828601613fe6565b92505060206141b485828601614169565b9150509250929050565b600080604083850312156141d5576141d4613e7a565b5b60006141e385828601613fe6565b92505060206141f485828601613fe6565b9150509250929050565b6000819050919050565b600061422361421e61421984613f9d565b6141fe565b613f9d565b9050919050565b600061423582614208565b9050919050565b60006142478261422a565b9050919050565b6142578161423c565b82525050565b6000602082019050614272600083018461424e565b92915050565b61428181613fbd565b82525050565b600060208201905061429c6000830184614278565b92915050565b6000602082840312156142b8576142b7613e7a565b5b60006142c684828501614169565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614305602083613eed565b9150614310826142cf565b602082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614397602a83613eed565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614429602383613eed565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614495601f83613eed565b91506144a08261445f565b602082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450582613e7f565b915061451083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614545576145446144cb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145ac602683613eed565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463e602483613eed565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d0602283613eed565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f42455032303a207472616e7366657220746f2074686520626f7420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614762602283613eed565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f42455032303a207472616e736665722066726f6d2074686520626f742061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483613eed565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614886602583613eed565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614918602383613eed565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006149aa602983613eed565b91506149b58261494e565b604082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614a3c602883613eed565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aac82613e7f565b9150614ab783613e7f565b925082614ac757614ac6614a72565b5b828204905092915050565b600081519050614ae181613fcf565b92915050565b600060208284031215614afd57614afc613e7a565b5b6000614b0b84828501614ad2565b91505092915050565b6000604082019050614b296000830185614278565b614b366020830184614278565b9392505050565b6000606082019050614b52600083018661409e565b614b5f602083018561409e565b614b6c604083018461409e565b949350505050565b6000614b7f82613e7f565b9150614b8a83613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc357614bc26144cb565b5b828202905092915050565b7f546865206e756d626572206f66206c6f6f7020697465726174696f6e7320696e60008201527f205f67657443757272656e74537570706c79206973206772656174657220746860208201527f616e2074686520616c6c6f7765642076616c75652e0000000000000000000000604082015250565b6000614c50605583613eed565b9150614c5b82614bce565b606082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cc082613e7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf357614cf26144cb565b5b600182019050919050565b6000614d0982613e7f565b9150614d1483613e7f565b925082821015614d2757614d266144cb565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000614d86614d81614d7c84614d61565b6141fe565b613e7f565b9050919050565b614d9681614d6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd181613fbd565b82525050565b6000614de38383614dc8565b60208301905092915050565b6000602082019050919050565b6000614e0782614d9c565b614e118185614da7565b9350614e1c83614db8565b8060005b83811015614e4d578151614e348882614dd7565b9750614e3f83614def565b925050600181019050614e20565b5085935050505092915050565b600060a082019050614e6f600083018861409e565b614e7c6020830187614d8d565b8181036040830152614e8e8186614dfc565b9050614e9d6060830185614278565b614eaa608083018461409e565b9695505050505050565b6000604082019050614ec9600083018561409e565b614ed6602083018461409e565b9392505050565b600060c082019050614ef26000830189614278565b614eff602083018861409e565b614f0c6040830187614d8d565b614f196060830186614d8d565b614f266080830185614278565b614f3360a083018461409e565b979650505050505050565b600081519050614f4d81613e89565b92915050565b600080600060608486031215614f6c57614f6b613e7a565b5b6000614f7a86828701614f3e565b9350506020614f8b86828701614f3e565b9250506040614f9c86828701614f3e565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220680a548488016062e1913285c8294437ae232677d2eb29d9462251bfc7f0bbc064736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063735de9f71161015a578063c816841b116100c1578063dd62ed3e1161007a578063dd62ed3e14610a21578063e5f84e4214610a5e578063ea2f0b3714610a89578063f0f165af14610ab2578063f2fde38b14610adb578063f42cf5b314610b045761029e565b8063c816841b14610925578063ca3ba99514610950578063d12a768814610979578063d543dbeb146109a4578063dac11380146109cd578063dd467064146109f85761029e565b8063a457c2d711610113578063a457c2d714610819578063a69df4b514610856578063a84c19771461086d578063a9059cbb14610896578063bafa57f5146108d3578063c49b9a80146108fc5761029e565b8063735de9f7146107195780638da5cb5b146107445780638ee88c531461076f57806395d22b861461079857806395d89b41146107c3578063982fc6bc146107ee5761029e565b8063437823ec116101fe57806361dd90ad116101b757806361dd90ad1461060b5780636bc87c3a146106485780636cf9f871146106735780636dbdb1cd1461069c57806370a08231146106c5578063715018a6146107025761029e565b8063437823ec146104fd5780634a74bb02146105265780635342acb41461055157806359940aa81461058e5780635eb34f51146105b7578063602bc62b146105e05761029e565b8063216bcc1711610250578063216bcc17146103c757806323b872dd146103f05780632d8381191461042d578063313ce5671461046a57806339509351146104955780633b124fe7146104d25761029e565b8063061c82d0146102a357806306fdde03146102cc578063072b12e2146102f7578063095ea7b31461033457806313114a9d1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613eb5565b610b2d565b005b3480156102d857600080fd5b506102e1610c03565b6040516102ee9190613f7b565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613ffb565b610c40565b60405161032b9190614043565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061405e565b610c96565b6040516103689190614043565b60405180910390f35b34801561037d57600080fd5b50610386610cb4565b60405161039391906140ad565b60405180910390f35b3480156103a857600080fd5b506103b1610cbe565b6040516103be91906140ad565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613eb5565b610cc8565b005b3480156103fc57600080fd5b50610417600480360381019061041291906140c8565b610d9e565b6040516104249190614043565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613eb5565b610e77565b60405161046191906140ad565b60405180910390f35b34801561047657600080fd5b5061047f610ee5565b60405161048c9190614137565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061405e565b610eee565b6040516104c99190614043565b60405180910390f35b3480156104de57600080fd5b506104e7610fa1565b6040516104f491906140ad565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190613ffb565b610fa7565b005b34801561053257600080fd5b5061053b6110ce565b6040516105489190614043565b60405180910390f35b34801561055d57600080fd5b5061057860048036038101906105739190613ffb565b6110e1565b6040516105859190614043565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061417e565b611137565b005b3480156105c357600080fd5b506105de60048036038101906105d991906141be565b611227565b005b3480156105ec57600080fd5b506105f56112ca565b60405161060291906140ad565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d9190613ffb565b6112d4565b60405161063f9190614043565b60405180910390f35b34801561065457600080fd5b5061065d61132a565b60405161066a91906140ad565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190613eb5565b611330565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613eb5565b611406565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ffb565b6114a7565b6040516106f991906140ad565b60405180910390f35b34801561070e57600080fd5b50610717611592565b005b34801561072557600080fd5b5061072e6116e5565b60405161073b919061425d565b60405180910390f35b34801561075057600080fd5b5061075961170b565b6040516107669190614287565b60405180910390f35b34801561077b57600080fd5b5061079660048036038101906107919190613eb5565b611734565b005b3480156107a457600080fd5b506107ad61180a565b6040516107ba9190614043565b60405180910390f35b3480156107cf57600080fd5b506107d861181d565b6040516107e59190613f7b565b60405180910390f35b3480156107fa57600080fd5b5061080361185a565b60405161081091906140ad565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b919061405e565b611860565b60405161084d9190614043565b60405180910390f35b34801561086257600080fd5b5061086b61192d565b005b34801561087957600080fd5b50610894600480360381019061088f91906142a2565b611b01565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061405e565b611bea565b6040516108ca9190614043565b60405180910390f35b3480156108df57600080fd5b506108fa60048036038101906108f5919061417e565b611c08565b005b34801561090857600080fd5b50610923600480360381019061091e91906142a2565b611cf8565b005b34801561093157600080fd5b5061093a611e18565b6040516109479190614287565b60405180910390f35b34801561095c57600080fd5b5061097760048036038101906109729190613eb5565b611e3e565b005b34801561098557600080fd5b5061098e611f47565b60405161099b91906140ad565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190613eb5565b611f4d565b005b3480156109d957600080fd5b506109e261204a565b6040516109ef91906140ad565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190613eb5565b612050565b005b348015610a2d57600080fd5b50610a486004803603810190610a4391906141be565b612217565b604051610a5591906140ad565b60405180910390f35b348015610a6a57600080fd5b50610a7361229e565b604051610a809190614043565b60405180910390f35b348015610a9557600080fd5b50610ab06004803603810190610aab9190613ffb565b6122b1565b005b348015610abe57600080fd5b50610ad96004803603810190610ad49190613eb5565b6123d8565b005b348015610ae757600080fd5b50610b026004803603810190610afd9190613ffb565b612477565b005b348015610b1057600080fd5b50610b2b6004803603810190610b26919061417e565b612639565b005b610b35612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb99061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610bf191906140ad565b60405180910390a18060108190555050565b60606040518060400160405280600b81526020017f54434720322e3020455448000000000000000000000000000000000000000000815250905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610caa610ca3612729565b8484612731565b6001905092915050565b6000600e54905090565b6000600c54905090565b610cd0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061431b565b60405180910390fd5b7f19da908cae03512cf29c19a5842b2904a06fd24ef9982759c78f9379831ed70f81604051610d8c91906140ad565b60405180910390a18060148190555050565b6000610dab8484846128fc565b610e6c84610db7612729565b610e6785604051806060016040528060288152602001614fa760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1d612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b600190509392505050565b6000600d54821115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb5906143ad565b60405180910390fd5b6000610ec8612ec2565b9050610edd8184612eed90919063ffffffff16565b915050919050565b60006009905090565b6000610f97610efb612729565b84610f928560056000610f0c612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b612731565b6001905092915050565b60105481565b610faf612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061431b565b60405180910390fd5b7ff1d6512ec7550bf605a5a38910e48fb6a57938ed74a5afa01753fa023001005c8160405161106b9190614287565b60405180910390a16001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601760159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61113f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061431b565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61122f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b39061431b565b60405180910390fd5b6112c68282612f19565b5050565b6000600254905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b611338612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc9061431b565b60405180910390fd5b7f65b5acab4a325162455ef7363784b96e746f3703d63e4e139f33ba0e0260de5d816040516113f491906140ad565b60405180910390a18060188190555050565b61140e612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061431b565b60405180910390fd5b6114a48161319f565b50565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561154257600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061158d565b61158a600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e77565b90505b919050565b61159a612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e9061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61173c612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c09061431b565b60405180910390fd5b7fa080f06a1e9c2a432b1d35cf0a54ebca051cf5dce7433c3d8e94948436f10356816040516117f891906140ad565b60405180910390a18060128190555050565b601760149054906101000a900460ff1681565b60606040518060400160405280600781526020017f6574685443473200000000000000000000000000000000000000000000000000815250905090565b60195481565b600061192361186d612729565b8461191e85604051806060016040528060258152602001614fcf6025913960056000611897612729565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6d9092919063ffffffff16565b612731565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b49061443f565b60405180910390fd5b6002544211611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906144ab565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b09612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8d9061431b565b60405180910390fd5b7f41bbe7cd012e7bef77126e91d0829d308b727ccf7495b355fea9eb07f99270f281604051611bc59190614043565b60405180910390a180600f60006101000a81548160ff02191690831515021790555050565b6000611bfe611bf7612729565b84846128fc565b6001905092915050565b611c10612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c949061431b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d00612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061431b565b60405180910390fd5b7ff2acc1979c00010542ffd8cae4d838ff799fc95287f58db252e6b45eaaa3936b81604051611dbc9190614043565b60405180910390a180601760156101000a81548160ff0219169083151502179055507f9b37996c8b5253e2bc406f4abfdbd8e4d25d2d2cf4864f181d8c263368b3f70281604051611e0d9190614043565b60405180910390a150565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e46612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca9061431b565b60405180910390fd5b6000811415611f2f57611ee461170b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f29573d6000803e3d6000fd5b50611f44565b611f4330611f3b61170b565b836000613275565b5b50565b601a5481565b611f55612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061431b565b60405180910390fd5b7f570636dca93f35bb5dee1663ad99fe3f70745771395df08a5f7732130618b5188160405161201191906140ad565b60405180910390a1612041606461203383600c5461345390919063ffffffff16565b612eed90919063ffffffff16565b60198190555050565b60145481565b612058612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc9061431b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261219391906144fa565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f60009054906101000a900460ff1681565b6122b9612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061431b565b60405180910390fd5b7f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e816040516123759190614287565b60405180910390a16000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123e0612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461246d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124649061431b565b60405180910390fd5b80601a8190555050565b61247f612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125039061431b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906145c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612729565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c59061431b565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612811576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612808906146e6565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128ef91906140ad565b60405180910390a3505050565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614778565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d9061480a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d9061489c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aed9061492e565b60405180910390fd5b60008111612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b30906149c0565b60405180910390fd5b612b4161170b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612baf5750612b7f61170b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612bfa57601954811115612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf090614a52565b60405180910390fd5b5b6000612c05306114a7565b90506019548110612c165760195490505b6000601a548210159050808015612c3a5750601760149054906101000a900460ff16155b8015612c945750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cac5750601760159054906101000a900460ff165b15612cc057601a549150612cbf8261319f565b5b6000600f60009054906101000a900460ff169050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d775750600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d975760019050601254601381905550601454601281905550612e45565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e3a5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4457600190505b5b612e5186868684613275565b600190508015612e65576013546012819055505b505050505050565b6000838311158290612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac9190613f7b565b60405180910390fd5b5082840390509392505050565b6000806000612ecf613469565b91509150612ee68183612eed90919063ffffffff16565b9250505090565b60008183612efb9190614aa1565b905092915050565b60008183612f1191906144fa565b905092915050565b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8d9190614ae7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130189190614ae7565b6040518363ffffffff1660e01b8152600401613035929190614b14565b6020604051808303816000875af1158015613054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130789190614ae7565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008290506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a250505050565b6001601760146101000a81548160ff02191690831515021790555060006131d0600283612eed90919063ffffffff16565b905060006131e7828461376690919063ffffffff16565b905060004790506131f78361377c565b600061320c824761376690919063ffffffff16565b905061321883826139bf565b7fba38c3ad648004cf41379049fbd93fd358394610f3a9c40cc72d4738f878f5e384828560405161324b93929190614b3d565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b8061328357613282613add565b5b60008060008060008061329588613b20565b9550955095509550955095506132f386600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061338885600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133d481613b7c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343191906140ad565b60405180910390a38661344757613446613d21565b5b50505050505050505050565b600081836134619190614b74565b905092915050565b60008060185460098054905011156134b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ad90614c66565b60405180910390fd5b6000600d5490506000600c54905060005b600980549050811015613729578260036000600984815481106134ed576134ec614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135db575081600460006009848154811061357357613572614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135f257600d54600c5494509450505050613762565b613682600360006009848154811061360d5761360c614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461376690919063ffffffff16565b9250613714600460006009848154811061369f5761369e614c86565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361376690919063ffffffff16565b9150808061372190614cb5565b9150506134c7565b50613741600c54600d54612eed90919063ffffffff16565b82101561375957600d54600c54935093505050613762565b81819350935050505b9091565b600081836137749190614cfe565b905092915050565b6000600267ffffffffffffffff81111561379957613798614d32565b5b6040519080825280602002602001820160405280156137c75781602001602082028036833780820191505090505b50905030816000815181106137df576137de614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138aa9190614ae7565b816001815181106138be576138bd614c86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061392530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613989959493929190614e5a565b600060405180830381600087803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b505050505050565b7fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb482826040516139f0929190614eb4565b60405180910390a1613a2530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612731565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613a7161170b565b426040518863ffffffff1660e01b8152600401613a9396959493929190614edd565b60606040518083038185885af1158015613ab1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ad69190614f53565b5050505050565b6000601054148015613af157506000601254145b15613afb57613b1e565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806000806000613b378a613d35565b9250925092506000806000613b558d8686613b50612ec2565b613d8f565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613b86612ec2565b90506000613b9d828461345390919063ffffffff16565b9050613bf181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d1c57613cd883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b601154601081905550601354601281905550565b600080600080613d4485613e18565b90506000613d5186613e49565b90506000613d7a82613d6c858a61376690919063ffffffff16565b61376690919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613da8858961345390919063ffffffff16565b90506000613dbf868961345390919063ffffffff16565b90506000613dd6878961345390919063ffffffff16565b90506000613dff82613df1858761376690919063ffffffff16565b61376690919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000613e426064613e346010548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b6000613e736064613e656012548561345390919063ffffffff16565b612eed90919063ffffffff16565b9050919050565b600080fd5b6000819050919050565b613e9281613e7f565b8114613e9d57600080fd5b50565b600081359050613eaf81613e89565b92915050565b600060208284031215613ecb57613eca613e7a565b5b6000613ed984828501613ea0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f1c578082015181840152602081019050613f01565b83811115613f2b576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f4d82613ee2565b613f578185613eed565b9350613f67818560208601613efe565b613f7081613f31565b840191505092915050565b60006020820190508181036000830152613f958184613f42565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fc882613f9d565b9050919050565b613fd881613fbd565b8114613fe357600080fd5b50565b600081359050613ff581613fcf565b92915050565b60006020828403121561401157614010613e7a565b5b600061401f84828501613fe6565b91505092915050565b60008115159050919050565b61403d81614028565b82525050565b60006020820190506140586000830184614034565b92915050565b6000806040838503121561407557614074613e7a565b5b600061408385828601613fe6565b925050602061409485828601613ea0565b9150509250929050565b6140a781613e7f565b82525050565b60006020820190506140c2600083018461409e565b92915050565b6000806000606084860312156140e1576140e0613e7a565b5b60006140ef86828701613fe6565b935050602061410086828701613fe6565b925050604061411186828701613ea0565b9150509250925092565b600060ff82169050919050565b6141318161411b565b82525050565b600060208201905061414c6000830184614128565b92915050565b61415b81614028565b811461416657600080fd5b50565b60008135905061417881614152565b92915050565b6000806040838503121561419557614194613e7a565b5b60006141a385828601613fe6565b92505060206141b485828601614169565b9150509250929050565b600080604083850312156141d5576141d4613e7a565b5b60006141e385828601613fe6565b92505060206141f485828601613fe6565b9150509250929050565b6000819050919050565b600061422361421e61421984613f9d565b6141fe565b613f9d565b9050919050565b600061423582614208565b9050919050565b60006142478261422a565b9050919050565b6142578161423c565b82525050565b6000602082019050614272600083018461424e565b92915050565b61428181613fbd565b82525050565b600060208201905061429c6000830184614278565b92915050565b6000602082840312156142b8576142b7613e7a565b5b60006142c684828501614169565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614305602083613eed565b9150614310826142cf565b602082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614397602a83613eed565b91506143a28261433b565b604082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614429602383613eed565b9150614434826143cd565b604082019050919050565b600060208201905081810360008301526144588161441c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614495601f83613eed565b91506144a08261445f565b602082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061450582613e7f565b915061451083613e7f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614545576145446144cb565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145ac602683613eed565b91506145b782614550565b604082019050919050565b600060208201905081810360008301526145db8161459f565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463e602483613eed565b9150614649826145e2565b604082019050919050565b6000602082019050818103600083015261466d81614631565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146d0602283613eed565b91506146db82614674565b604082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b7f42455032303a207472616e7366657220746f2074686520626f7420616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614762602283613eed565b915061476d82614706565b604082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f42455032303a207472616e736665722066726f6d2074686520626f742061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f4602483613eed565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614886602583613eed565b91506148918261482a565b604082019050919050565b600060208201905081810360008301526148b581614879565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614918602383613eed565b9150614923826148bc565b604082019050919050565b600060208201905081810360008301526149478161490b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006149aa602983613eed565b91506149b58261494e565b604082019050919050565b600060208201905081810360008301526149d98161499d565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614a3c602883613eed565b9150614a47826149e0565b604082019050919050565b60006020820190508181036000830152614a6b81614a2f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aac82613e7f565b9150614ab783613e7f565b925082614ac757614ac6614a72565b5b828204905092915050565b600081519050614ae181613fcf565b92915050565b600060208284031215614afd57614afc613e7a565b5b6000614b0b84828501614ad2565b91505092915050565b6000604082019050614b296000830185614278565b614b366020830184614278565b9392505050565b6000606082019050614b52600083018661409e565b614b5f602083018561409e565b614b6c604083018461409e565b949350505050565b6000614b7f82613e7f565b9150614b8a83613e7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc357614bc26144cb565b5b828202905092915050565b7f546865206e756d626572206f66206c6f6f7020697465726174696f6e7320696e60008201527f205f67657443757272656e74537570706c79206973206772656174657220746860208201527f616e2074686520616c6c6f7765642076616c75652e0000000000000000000000604082015250565b6000614c50605583613eed565b9150614c5b82614bce565b606082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cc082613e7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cf357614cf26144cb565b5b600182019050919050565b6000614d0982613e7f565b9150614d1483613e7f565b925082821015614d2757614d266144cb565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000614d86614d81614d7c84614d61565b6141fe565b613e7f565b9050919050565b614d9681614d6b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd181613fbd565b82525050565b6000614de38383614dc8565b60208301905092915050565b6000602082019050919050565b6000614e0782614d9c565b614e118185614da7565b9350614e1c83614db8565b8060005b83811015614e4d578151614e348882614dd7565b9750614e3f83614def565b925050600181019050614e20565b5085935050505092915050565b600060a082019050614e6f600083018861409e565b614e7c6020830187614d8d565b8181036040830152614e8e8186614dfc565b9050614e9d6060830185614278565b614eaa608083018461409e565b9695505050505050565b6000604082019050614ec9600083018561409e565b614ed6602083018461409e565b9392505050565b600060c082019050614ef26000830189614278565b614eff602083018861409e565b614f0c6040830187614d8d565b614f196060830186614d8d565b614f266080830185614278565b614f3360a083018461409e565b979650505050505050565b600081519050614f4d81613e89565b92915050565b600080600060608486031215614f6c57614f6b613e7a565b5b6000614f7a86828701614f3e565b9350506020614f8b86828701614f3e565b9250506040614f9c86828701614f3e565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220680a548488016062e1913285c8294437ae232677d2eb29d9462251bfc7f0bbc064736f6c634300080b0033

Deployed Bytecode Sourcemap

17750:18667:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24781:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21607:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29836:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22541:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26113:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21888:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25788:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22714:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33428:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21797:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18760:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29253:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19178:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29571:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29702:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20707:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13682:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30091:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18843:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25244:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31033:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21996:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13274:148;;;;;;;;;;;;;:::i;:::-;;19061:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13060:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25062:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19142:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21700:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19273:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23269:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14014:305;;;;;;;;;;;;;:::i;:::-;;24927:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22211:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29137:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30333:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19107:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28214:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19344:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25412:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18945:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13780:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22388:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18720:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25644:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13430:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29961:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24781:138;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24860:24:::1;24877:6;24860:24;;;;;;:::i;:::-;;;;;;;;24905:6;24895:7;:16;;;;24781:138:::0;:::o;21607:85::-;21646:13;21679:5;;;;;;;;;;;;;;;;;21672:12;;21607:85;:::o;29836:117::-;29899:4;29923:13;:22;29937:7;29923:22;;;;;;;;;;;;;;;;;;;;;;;;;29916:29;;29836:117;;;:::o;22541:165::-;22618:4;22635:39;22644:12;:10;:12::i;:::-;22658:7;22667:6;22635:8;:39::i;:::-;22694:4;22687:11;;22541:165;;;;:::o;26113:92::-;26157:7;26184:13;;26177:20;;26113:92;:::o;21888:100::-;21943:7;21970:10;;21963:17;;21888:100;:::o;25788:188::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25887:34:::1;25904:16;25887:34;;;;;;:::i;:::-;;;;;;;;25952:16;25932:17;:36;;;;25788:188:::0;:::o;22714:317::-;22814:4;22831:36;22841:6;22849:9;22860:6;22831:9;:36::i;:::-;22878:121;22887:6;22895:12;:10;:12::i;:::-;22909:89;22947:6;22909:89;;;;;;;;;;;;;;;;;:11;:19;22921:6;22909:19;;;;;;;;;;;;;;;:33;22929:12;:10;:12::i;:::-;22909:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22878:8;:121::i;:::-;23019:4;23012:11;;22714:317;;;;;:::o;33428:279::-;33500:7;33545:13;;33528;:30;;33520:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33616:19;33639:10;:8;:10::i;:::-;33616:33;;33669:30;33687:11;33669:13;:17;;:30;;;;:::i;:::-;33662:37;;;33428:279;;;:::o;21797:83::-;21838:5;18710:1;21856:16;;21797:83;:::o;23039:222::-;23129:4;23146:83;23155:12;:10;:12::i;:::-;23169:7;23178:50;23217:10;23178:11;:25;23190:12;:10;:12::i;:::-;23178:25;;;;;;;;;;;;;;;:34;23204:7;23178:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23146:8;:83::i;:::-;23249:4;23242:11;;23039:222;;;;:::o;18760:26::-;;;;:::o;29253:153::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29329:24:::1;29345:7;29329:24;;;;;;:::i;:::-;;;;;;;;29394:4;29364:18;:27;29383:7;29364:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29253:153:::0;:::o;19178:40::-;;;;;;;;;;;;;:::o;29571:123::-;29635:4;29659:18;:27;29678:7;29659:27;;;;;;;;;;;;;;;;;;;;;;;;;29652:34;;29571:123;;;:::o;29702:124::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29813:5:::1;29788:13;:22;29802:7;29788:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;29702:124:::0;;:::o;20707:141::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20806:34:::1;20824:6;20832:7;20806:17;:34::i;:::-;20707:141:::0;;:::o;13682:90::-;13728:7;13755:9;;13748:16;;13682:90;:::o;30091:115::-;30153:4;30177:12;:21;30190:7;30177:21;;;;;;;;;;;;;;;;;;;;;;;;;30170:28;;30091:115;;;:::o;18843:33::-;;;;:::o;25244:160::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25328:29:::1;25344:12;25328:29;;;;;;:::i;:::-;;;;;;;;25384:12;25368:13;:28;;;;25244:160:::0;:::o;31033:107::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31110:22:::1;31125:6;31110:14;:22::i;:::-;31033:107:::0;:::o;21996:207::-;22062:7;22086:11;:20;22098:7;22086:20;;;;;;;;;;;;;;;;;;;;;;;;;22082:52;;;22115:10;:19;22126:7;22115:19;;;;;;;;;;;;;;;;22108:26;;;;22082:52;22152:43;22172:13;:22;22186:7;22172:22;;;;;;;;;;;;;;;;22152:19;:43::i;:::-;22145:50;;21996:207;;;;:::o;13274:148::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13381:1:::1;13344:40;;13365:6;::::0;::::1;;;;;;;;13344:40;;;;;;;;;;;;13412:1;13395:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13274:148::o:0;19061:39::-;;;;;;;;;;;;;:::o;13060:79::-;13098:7;13125:6;;;;;;;;;;;13118:13;;13060:79;:::o;25062:174::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25153:36:::1;25176:12;25153:36;;;;;;:::i;:::-;;;;;;;;25216:12;25200:13;:28;;;;25062:174:::0;:::o;19142:29::-;;;;;;;;;;;;;:::o;21700:89::-;21741:13;21774:7;;;;;;;;;;;;;;;;;21767:14;;21700:89;:::o;19273:63::-;;;;:::o;23269:273::-;23364:4;23381:129;23390:12;:10;:12::i;:::-;23404:7;23413:96;23452:15;23413:96;;;;;;;;;;;;;;;;;:11;:25;23425:12;:10;:12::i;:::-;23413:25;;;;;;;;;;;;;;;:34;23439:7;23413:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23381:8;:129::i;:::-;23530:4;23523:11;;23269:273;;;;:::o;14014:305::-;14084:10;14066:28;;:14;;;;;;;;;;;:28;;;14058:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14171:9;;14153:15;:27;14145:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14262:14;;;;;;;;;;;14233:44;;14254:6;;;;;;;;;;14233:44;;;;;;;;;;;;14297:14;;;;;;;;;;;14288:6;;:23;;;;;;;;;;;;;;;;;;14014:305::o;24927:127::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24998:19:::1;25012:4;24998:19;;;;;;:::i;:::-;;;;;;;;25042:4;25028:11;;:18;;;;;;;;;;;;;;;;;;24927:127:::0;:::o;22211:169::-;22291:4;22308:42;22318:12;:10;:12::i;:::-;22332:9;22343:6;22308:9;:42::i;:::-;22368:4;22361:11;;22211:169;;;;:::o;29137:108::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:5:::1;29214:6;:15;29221:7;29214:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;29137:108:::0;;:::o;30333:219::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30417:31:::1;30439:8;30417:31;;;;;;:::i;:::-;;;;;;;;30483:8;30459:21;;:32;;;;;;;;;;;;;;;;;;30509:35;30535:8;30509:35;;;;;;:::i;:::-;;;;;;;;30333:219:::0;:::o;19107:26::-;;;;;;;;;;;;;:::o;28214:277::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28307:1:::1;28297:6;:11;28294:190;;;28340:7;:5;:7::i;:::-;28332:25;;:48;28358:21;28332:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28294:190;;;28419:53;28442:4;28449:7;:5;:7::i;:::-;28458:6;28466:5;28419:14;:53::i;:::-;28294:190;28214:277:::0;:::o;19344:57::-;;;;:::o;25412:224::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25496:29:::1;25512:12;25496:29;;;;;;:::i;:::-;;;;;;;;25565:63;25612:5;25565:28;25580:12;25565:10;;:14;;:28;;;;:::i;:::-;:32;;:63;;;;:::i;:::-;25536:26;:92;;;;25412:224:::0;:::o;18945:37::-;;;;:::o;13780:226::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13861:6:::1;::::0;::::1;;;;;;;;13844:14;;:23;;;;;;;;;;;;;;;;;;13895:1;13878:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13938:4;13920:15;:22;;;;:::i;:::-;13908:9;:34;;;;13995:1;13958:40;;13979:6;::::0;::::1;;;;;;;;13958:40;;;;;;;;;;;;13780:226:::0;:::o;22388:145::-;22471:7;22498:11;:18;22510:5;22498:18;;;;;;;;;;;;;;;:27;22517:7;22498:27;;;;;;;;;;;;;;;;22491:34;;22388:145;;;;:::o;18720:31::-;;;;;;;;;;;;;:::o;29414:149::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29488:21:::1;29501:7;29488:21;;;;;;:::i;:::-;;;;;;;;29550:5;29520:18;:27;29539:7;29520:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;29414:149:::0;:::o;25644:136::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25766:6:::1;25734:29;:38;;;;25644:136:::0;:::o;13430:244::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13539:1:::1;13519:22;;:8;:22;;;;13511:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13629:8;13600:38;;13621:6;::::0;::::1;;;;;;;;13600:38;;;;;;;;;;;;13658:8;13649:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13430:244:::0;:::o;29961:122::-;13197:12;:10;:12::i;:::-;13187:22;;:6;;;;;;;;;;:22;;;13179:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30070:5:::1;30046:12;:21;30059:7;30046:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29961:122:::0;;:::o;1765:98::-;1818:7;1845:10;1838:17;;1765:98;:::o;24315:337::-;24425:1;24408:19;;:5;:19;;;;24400:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24506:1;24487:21;;:7;:21;;;;24479:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24590:6;24560:11;:18;24572:5;24560:18;;;;;;;;;;;;;;;:27;24579:7;24560:27;;;;;;;;;;;;;;;:36;;;;24628:7;24612:32;;24621:5;24612:32;;;24637:6;24612:32;;;;;;:::i;:::-;;;;;;;;24315:337;;;:::o;33845:1849::-;33969:6;:10;33976:2;33969:10;;;;;;;;;;;;;;;;;;;;;;;;;33968:11;33959:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34039:6;:12;34046:4;34039:12;;;;;;;;;;;;;;;;;;;;;;;;;34038:13;34029:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34127:1;34111:18;;:4;:18;;;;34103:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34204:1;34190:16;;:2;:16;;;;34182:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34274:1;34265:6;:10;34257:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34343:7;:5;:7::i;:::-;34335:15;;:4;:15;;;;:32;;;;;34360:7;:5;:7::i;:::-;34354:13;;:2;:13;;;;34335:32;34332:139;;;34400:26;;34390:6;:36;;34382:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;34332:139;34486:28;34517:24;34535:4;34517:9;:24::i;:::-;34486:55;;34581:26;;34557:20;:50;34554:106;;34632:26;;34609:49;;34554:106;34672:27;34726:29;;34702:20;:53;;34672:83;;34784:22;:57;;;;;34824:17;;;;;;;;;;;34823:18;34784:57;:93;;;;;34866:11;;;;;;;;;;;34858:19;;:4;:19;;;;34784:93;:131;;;;;34894:21;;;;;;;;;;;34784:131;34766:320;;;34965:29;;34942:52;;35038:36;35053:20;35038:14;:36::i;:::-;34766:320;35159:12;35174:11;;;;;;;;;;;35159:26;;35201:13;:17;35215:2;35201:17;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;35223:18;:24;35242:4;35223:24;;;;;;;;;;;;;;;;;;;;;;;;;35222:25;35201:46;35198:287;;;35273:4;35263:14;;35316:13;;35292:21;:37;;;;35360:17;;35344:13;:33;;;;35198:287;;;35398:12;:18;35411:4;35398:18;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;35421:18;:22;35440:2;35421:22;;;;;;;;;;;;;;;;;;;;;;;;;35420:23;35398:45;35395:90;;;35469:4;35459:14;;35395:90;35198:287;35552:38;35567:4;35572:2;35575:6;35582:7;35552:14;:38::i;:::-;35616:4;35606:14;;;35603:82;;;35652:21;;35636:13;:37;;;;35603:82;33948:1746;;;33845:1849;;;:::o;11930:240::-;12050:7;12108:1;12103;:6;;12111:12;12095:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12150:1;12146;:5;12139:12;;11930:240;;;;;:::o;27839:165::-;27880:7;27901:15;27918;27937:19;:17;:19::i;:::-;27900:56;;;;27976:20;27988:7;27976;:11;;:20;;;;:::i;:::-;27969:27;;;;27839:165;:::o;11718:98::-;11776:7;11807:1;11803;:5;;;;:::i;:::-;11796:12;;11718:98;;;;:::o;11400:::-;11458:7;11489:1;11485;:5;;;;:::i;:::-;11478:12;;11400:98;;;;:::o;20856:494::-;20937:33;20992:6;20937:62;;21044:14;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21026:68;;;21103:4;21110:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21026:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21012:11;;:120;;;;;;;;;;;;;;;;;;21161:14;21145:13;;:30;;;;;;;;;;;;;;;;;;21196:31;21238:7;21196:50;;21295:4;21257:18;:35;21276:15;21257:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;21335:6;21325:17;;;;;;;;;;;;20924:426;;20856:494;;:::o;31148:985::-;20269:4;20249:17;;:24;;;;;;;;;;;;;;;;;;31284:12:::1;31299:27;31324:1;31299:20;:24;;:27;;;;:::i;:::-;31284:42;;31337:17;31357:30;31382:4;31357:20;:24;;:30;;;;:::i;:::-;31337:50;;31665:22;31690:21;31665:46;;31756:22;31773:4;31756:16;:22::i;:::-;31909:18;31930:41;31956:14;31930:21;:25;;:41;;;;:::i;:::-;31909:62;;32024:35;32037:9;32048:10;32024:12;:35::i;:::-;32077:48;32097:4;32103:10;32115:9;32077:48;;;;;;;;:::i;:::-;;;;;;;;31222:911;;;;20316:5:::0;20296:17;;:25;;;;;;;;;;;;;;;;;;31148:985;:::o;35775:639::-;35888:7;35884:29;;35897:14;:12;:14::i;:::-;35884:29;35926:21;35949:31;35982:12;35996:28;36026:12;36040:18;36062;36073:6;36062:10;:18::i;:::-;35925:155;;;;;;;;;;;;36117:40;36143:13;36117;:21;36131:6;36117:21;;;;;;;;;;;;;;;;:25;;:40;;;;:::i;:::-;36093:13;:21;36107:6;36093:21;;;;;;;;;;;;;;;:64;;;;36195:53;36224:23;36195:13;:24;36209:9;36195:24;;;;;;;;;;;;;;;;:28;;:53;;;;:::i;:::-;36168:13;:24;36182:9;36168:24;;;;;;;;;;;;;;;:80;;;;36263:26;36278:10;36263:14;:26::i;:::-;36332:9;36315:49;;36324:6;36315:49;;;36343:20;36315:49;;;;;;:::i;:::-;;;;;;;;36381:7;36377:30;;36390:15;:13;:15::i;:::-;36377:30;35871:543;;;;;;35775:639;;;;:::o;11612:98::-;11670:7;11701:1;11697;:5;;;;:::i;:::-;11690:12;;11612:98;;;;:::o;23552:755::-;23602:7;23611;23659:13;;23639:9;:16;;;;:33;;23631:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;23775:15;23793:13;;23775:31;;23817:15;23835:10;;23817:28;;23861:9;23856:316;23880:9;:16;;;;23876:1;:20;23856:316;;;23952:7;23922:13;:27;23936:9;23946:1;23936:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23922:27;;;;;;;;;;;;;;;;:37;:75;;;;23990:7;23963:10;:24;23974:9;23984:1;23974:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23963:24;;;;;;;;;;;;;;;;:34;23922:75;23918:115;;;24007:13;;24022:10;;23999:34;;;;;;;;;23918:115;24058:40;24070:13;:27;24084:9;24094:1;24084:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24070:27;;;;;;;;;;;;;;;;24058:7;:11;;:40;;;;:::i;:::-;24048:50;;24123:37;24135:10;:24;24146:9;24156:1;24146:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24135:24;;;;;;;;;;;;;;;;24123:7;:11;;:37;;;;:::i;:::-;24113:47;;23898:3;;;;;:::i;:::-;;;;23856:316;;;;24196:29;24214:10;;24196:13;;:17;;:29;;;;:::i;:::-;24186:7;:39;24182:79;;;24235:13;;24250:10;;24227:34;;;;;;;;24182:79;24282:7;24291;24274:25;;;;;;23552:755;;;:::o;11506:98::-;11564:7;11595:1;11591;:5;;;;:::i;:::-;11584:12;;11506:98;;;;:::o;32141:583::-;32267:21;32305:1;32291:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32267:40;;32336:4;32318;32323:1;32318:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32362:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32352:4;32357:1;32352:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;32395:60;32412:4;32427:13;;;;;;;;;;;32443:11;32395:8;:60::i;:::-;32494:13;;;;;;;;;;;:64;;;32573:11;32599:1;32643:4;32670;32690:15;32494:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32196:528;32141:583;:::o;32732:561::-;32818:36;32831:11;32844:9;32818:36;;;;;;;:::i;:::-;;;;;;;;32932:60;32949:4;32964:13;;;;;;;;;;;32980:11;32932:8;:60::i;:::-;33035:13;;;;;;;;;;;:29;;;33072:9;33105:4;33125:11;33151:1;33194;33237:7;:5;:7::i;:::-;33259:15;33035:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32732:561;;:::o;28627:234::-;28684:1;28673:7;;:12;:34;;;;;28706:1;28689:13;;:18;28673:34;28670:46;;;28709:7;;28670:46;28746:7;;28728:15;:25;;;;28788:13;;28764:21;:37;;;;28824:1;28814:7;:11;;;;28852:1;28836:13;:17;;;;28627:234;:::o;26549:459::-;26608:7;26617;26626;26635;26644;26653;26674:28;26704:12;26718:18;26740:20;26752:7;26740:11;:20::i;:::-;26673:87;;;;;;26772:21;26795:31;26828:12;26844:50;26856:7;26865:4;26871:10;26883;:8;:10::i;:::-;26844:11;:50::i;:::-;26771:123;;;;;;26915:13;26930:23;26955:4;26961:20;26983:4;26989:10;26907:93;;;;;;;;;;;;;;;;;;26549:459;;;;;;;:::o;30652:373::-;30715:19;30738:10;:8;:10::i;:::-;30715:33;;30759:18;30780:27;30795:11;30780:10;:14;;:27;;;;:::i;:::-;30759:48;;30849:44;30882:10;30849:13;:28;30871:4;30849:28;;;;;;;;;;;;;;;;:32;;:44;;;;:::i;:::-;30818:13;:28;30840:4;30818:28;;;;;;;;;;;;;;;:75;;;;30907:11;:26;30927:4;30907:26;;;;;;;;;;;;;;;;;;;;;;;;;30904:113;;;30976:41;31006:10;30976;:25;30995:4;30976:25;;;;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;30948:10;:25;30967:4;30948:25;;;;;;;;;;;;;;;:69;;;;30904:113;30704:321;;30652:373;:::o;28869:125::-;28923:15;;28913:7;:25;;;;28965:21;;28949:13;:37;;;;28869:125::o;27016:342::-;27076:7;27085;27094;27114:12;27129:24;27145:7;27129:15;:24::i;:::-;27114:39;;27164:18;27185:30;27207:7;27185:21;:30::i;:::-;27164:51;;27226:28;27257:33;27279:10;27257:17;27269:4;27257:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;27226:64;;27311:20;27333:4;27339:10;27303:47;;;;;;;;;27016:342;;;;;:::o;27366:465::-;27481:7;27490;27499;27519:21;27543:24;27555:11;27543:7;:11;;:24;;;;:::i;:::-;27519:48;;27578:12;27593:21;27602:11;27593:4;:8;;:21;;;;:::i;:::-;27578:36;;27625:18;27646:27;27661:11;27646:10;:14;;:27;;;;:::i;:::-;27625:48;;27684:31;27718:39;27746:10;27718:23;27736:4;27718:13;:17;;:23;;;;:::i;:::-;:27;;:39;;;;:::i;:::-;27684:73;;27778:13;27793:23;27818:4;27770:53;;;;;;;;;;27366:465;;;;;;;;:::o;26213:154::-;26277:7;26304:55;26343:5;26304:20;26316:7;;26304;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;26297:62;;26213:154;;;:::o;26375:166::-;26445:7;26472:61;26517:5;26472:26;26484:13;;26472:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;26465:68;;26375:166;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:329::-;2981:6;3030:2;3018:9;3009:7;3005:23;3001:32;2998:119;;;3036:79;;:::i;:::-;2998:119;3156:1;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;:::i;:::-;3171:63;;3127:117;2922:329;;;;:::o;3257:90::-;3291:7;3334:5;3327:13;3320:21;3309:32;;3257:90;;;:::o;3353:109::-;3434:21;3449:5;3434:21;:::i;:::-;3429:3;3422:34;3353:109;;:::o;3468:210::-;3555:4;3593:2;3582:9;3578:18;3570:26;;3606:65;3668:1;3657:9;3653:17;3644:6;3606:65;:::i;:::-;3468:210;;;;:::o;3684:474::-;3752:6;3760;3809:2;3797:9;3788:7;3784:23;3780:32;3777:119;;;3815:79;;:::i;:::-;3777:119;3935:1;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3906:117;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;3684:474;;;;;:::o;4164:118::-;4251:24;4269:5;4251:24;:::i;:::-;4246:3;4239:37;4164:118;;:::o;4288:222::-;4381:4;4419:2;4408:9;4404:18;4396:26;;4432:71;4500:1;4489:9;4485:17;4476:6;4432:71;:::i;:::-;4288:222;;;;:::o;4516:619::-;4593:6;4601;4609;4658:2;4646:9;4637:7;4633:23;4629:32;4626:119;;;4664:79;;:::i;:::-;4626:119;4784:1;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4755:117;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;5039:2;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5010:118;4516:619;;;;;:::o;5141:86::-;5176:7;5216:4;5209:5;5205:16;5194:27;;5141:86;;;:::o;5233:112::-;5316:22;5332:5;5316:22;:::i;:::-;5311:3;5304:35;5233:112;;:::o;5351:214::-;5440:4;5478:2;5467:9;5463:18;5455:26;;5491:67;5555:1;5544:9;5540:17;5531:6;5491:67;:::i;:::-;5351:214;;;;:::o;5571:116::-;5641:21;5656:5;5641:21;:::i;:::-;5634:5;5631:32;5621:60;;5677:1;5674;5667:12;5621:60;5571:116;:::o;5693:133::-;5736:5;5774:6;5761:20;5752:29;;5790:30;5814:5;5790:30;:::i;:::-;5693:133;;;;:::o;5832:468::-;5897:6;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:50;6275:7;6266:6;6255:9;6251:22;6233:50;:::i;:::-;6223:60;;6178:115;5832:468;;;;;:::o;6306:474::-;6374:6;6382;6431:2;6419:9;6410:7;6406:23;6402:32;6399:119;;;6437:79;;:::i;:::-;6399:119;6557:1;6582:53;6627:7;6618:6;6607:9;6603:22;6582:53;:::i;:::-;6572:63;;6528:117;6684:2;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6655:118;6306:474;;;;;:::o;6786:60::-;6814:3;6835:5;6828:12;;6786:60;;;:::o;6852:142::-;6902:9;6935:53;6953:34;6962:24;6980:5;6962:24;:::i;:::-;6953:34;:::i;:::-;6935:53;:::i;:::-;6922:66;;6852:142;;;:::o;7000:126::-;7050:9;7083:37;7114:5;7083:37;:::i;:::-;7070:50;;7000:126;;;:::o;7132:152::-;7208:9;7241:37;7272:5;7241:37;:::i;:::-;7228:50;;7132:152;;;:::o;7290:183::-;7403:63;7460:5;7403:63;:::i;:::-;7398:3;7391:76;7290:183;;:::o;7479:274::-;7598:4;7636:2;7625:9;7621:18;7613:26;;7649:97;7743:1;7732:9;7728:17;7719:6;7649:97;:::i;:::-;7479:274;;;;:::o;7759:118::-;7846:24;7864:5;7846:24;:::i;:::-;7841:3;7834:37;7759:118;;:::o;7883:222::-;7976:4;8014:2;8003:9;7999:18;7991:26;;8027:71;8095:1;8084:9;8080:17;8071:6;8027:71;:::i;:::-;7883:222;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:182::-;8580:34;8576:1;8568:6;8564:14;8557:58;8440:182;:::o;8628:366::-;8770:3;8791:67;8855:2;8850:3;8791:67;:::i;:::-;8784:74;;8867:93;8956:3;8867:93;:::i;:::-;8985:2;8980:3;8976:12;8969:19;;8628:366;;;:::o;9000:419::-;9166:4;9204:2;9193:9;9189:18;9181:26;;9253:9;9247:4;9243:20;9239:1;9228:9;9224:17;9217:47;9281:131;9407:4;9281:131;:::i;:::-;9273:139;;9000:419;;;:::o;9425:229::-;9565:34;9561:1;9553:6;9549:14;9542:58;9634:12;9629:2;9621:6;9617:15;9610:37;9425:229;:::o;9660:366::-;9802:3;9823:67;9887:2;9882:3;9823:67;:::i;:::-;9816:74;;9899:93;9988:3;9899:93;:::i;:::-;10017:2;10012:3;10008:12;10001:19;;9660:366;;;:::o;10032:419::-;10198:4;10236:2;10225:9;10221:18;10213:26;;10285:9;10279:4;10275:20;10271:1;10260:9;10256:17;10249:47;10313:131;10439:4;10313:131;:::i;:::-;10305:139;;10032:419;;;:::o;10457:222::-;10597:34;10593:1;10585:6;10581:14;10574:58;10666:5;10661:2;10653:6;10649:15;10642:30;10457:222;:::o;10685:366::-;10827:3;10848:67;10912:2;10907:3;10848:67;:::i;:::-;10841:74;;10924:93;11013:3;10924:93;:::i;:::-;11042:2;11037:3;11033:12;11026:19;;10685:366;;;:::o;11057:419::-;11223:4;11261:2;11250:9;11246:18;11238:26;;11310:9;11304:4;11300:20;11296:1;11285:9;11281:17;11274:47;11338:131;11464:4;11338:131;:::i;:::-;11330:139;;11057:419;;;:::o;11482:181::-;11622:33;11618:1;11610:6;11606:14;11599:57;11482:181;:::o;11669:366::-;11811:3;11832:67;11896:2;11891:3;11832:67;:::i;:::-;11825:74;;11908:93;11997:3;11908:93;:::i;:::-;12026:2;12021:3;12017:12;12010:19;;11669:366;;;:::o;12041:419::-;12207:4;12245:2;12234:9;12230:18;12222:26;;12294:9;12288:4;12284:20;12280:1;12269:9;12265:17;12258:47;12322:131;12448:4;12322:131;:::i;:::-;12314:139;;12041:419;;;:::o;12466:180::-;12514:77;12511:1;12504:88;12611:4;12608:1;12601:15;12635:4;12632:1;12625:15;12652:305;12692:3;12711:20;12729:1;12711:20;:::i;:::-;12706:25;;12745:20;12763:1;12745:20;:::i;:::-;12740:25;;12899:1;12831:66;12827:74;12824:1;12821:81;12818:107;;;12905:18;;:::i;:::-;12818:107;12949:1;12946;12942:9;12935:16;;12652:305;;;;:::o;12963:225::-;13103:34;13099:1;13091:6;13087:14;13080:58;13172:8;13167:2;13159:6;13155:15;13148:33;12963:225;:::o;13194:366::-;13336:3;13357:67;13421:2;13416:3;13357:67;:::i;:::-;13350:74;;13433:93;13522:3;13433:93;:::i;:::-;13551:2;13546:3;13542:12;13535:19;;13194:366;;;:::o;13566:419::-;13732:4;13770:2;13759:9;13755:18;13747:26;;13819:9;13813:4;13809:20;13805:1;13794:9;13790:17;13783:47;13847:131;13973:4;13847:131;:::i;:::-;13839:139;;13566:419;;;:::o;13991:223::-;14131:34;14127:1;14119:6;14115:14;14108:58;14200:6;14195:2;14187:6;14183:15;14176:31;13991:223;:::o;14220:366::-;14362:3;14383:67;14447:2;14442:3;14383:67;:::i;:::-;14376:74;;14459:93;14548:3;14459:93;:::i;:::-;14577:2;14572:3;14568:12;14561:19;;14220:366;;;:::o;14592:419::-;14758:4;14796:2;14785:9;14781:18;14773:26;;14845:9;14839:4;14835:20;14831:1;14820:9;14816:17;14809:47;14873:131;14999:4;14873:131;:::i;:::-;14865:139;;14592:419;;;:::o;15017:221::-;15157:34;15153:1;15145:6;15141:14;15134:58;15226:4;15221:2;15213:6;15209:15;15202:29;15017:221;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:221::-;16181:34;16177:1;16169:6;16165:14;16158:58;16250:4;16245:2;16237:6;16233:15;16226:29;16041:221;:::o;16268:366::-;16410:3;16431:67;16495:2;16490:3;16431:67;:::i;:::-;16424:74;;16507:93;16596:3;16507:93;:::i;:::-;16625:2;16620:3;16616:12;16609:19;;16268:366;;;:::o;16640:419::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16893:9;16887:4;16883:20;16879:1;16868:9;16864:17;16857:47;16921:131;17047:4;16921:131;:::i;:::-;16913:139;;16640:419;;;:::o;17065:223::-;17205:34;17201:1;17193:6;17189:14;17182:58;17274:6;17269:2;17261:6;17257:15;17250:31;17065:223;:::o;17294:366::-;17436:3;17457:67;17521:2;17516:3;17457:67;:::i;:::-;17450:74;;17533:93;17622:3;17533:93;:::i;:::-;17651:2;17646:3;17642:12;17635:19;;17294:366;;;:::o;17666:419::-;17832:4;17870:2;17859:9;17855:18;17847:26;;17919:9;17913:4;17909:20;17905:1;17894:9;17890:17;17883:47;17947:131;18073:4;17947:131;:::i;:::-;17939:139;;17666:419;;;:::o;18091:224::-;18231:34;18227:1;18219:6;18215:14;18208:58;18300:7;18295:2;18287:6;18283:15;18276:32;18091:224;:::o;18321:366::-;18463:3;18484:67;18548:2;18543:3;18484:67;:::i;:::-;18477:74;;18560:93;18649:3;18560:93;:::i;:::-;18678:2;18673:3;18669:12;18662:19;;18321:366;;;:::o;18693:419::-;18859:4;18897:2;18886:9;18882:18;18874:26;;18946:9;18940:4;18936:20;18932:1;18921:9;18917:17;18910:47;18974:131;19100:4;18974:131;:::i;:::-;18966:139;;18693:419;;;:::o;19118:222::-;19258:34;19254:1;19246:6;19242:14;19235:58;19327:5;19322:2;19314:6;19310:15;19303:30;19118:222;:::o;19346:366::-;19488:3;19509:67;19573:2;19568:3;19509:67;:::i;:::-;19502:74;;19585:93;19674:3;19585:93;:::i;:::-;19703:2;19698:3;19694:12;19687:19;;19346:366;;;:::o;19718:419::-;19884:4;19922:2;19911:9;19907:18;19899:26;;19971:9;19965:4;19961:20;19957:1;19946:9;19942:17;19935:47;19999:131;20125:4;19999:131;:::i;:::-;19991:139;;19718:419;;;:::o;20143:228::-;20283:34;20279:1;20271:6;20267:14;20260:58;20352:11;20347:2;20339:6;20335:15;20328:36;20143:228;:::o;20377:366::-;20519:3;20540:67;20604:2;20599:3;20540:67;:::i;:::-;20533:74;;20616:93;20705:3;20616:93;:::i;:::-;20734:2;20729:3;20725:12;20718:19;;20377:366;;;:::o;20749:419::-;20915:4;20953:2;20942:9;20938:18;20930:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21030:131;21156:4;21030:131;:::i;:::-;21022:139;;20749:419;;;:::o;21174:227::-;21314:34;21310:1;21302:6;21298:14;21291:58;21383:10;21378:2;21370:6;21366:15;21359:35;21174:227;:::o;21407:366::-;21549:3;21570:67;21634:2;21629:3;21570:67;:::i;:::-;21563:74;;21646:93;21735:3;21646:93;:::i;:::-;21764:2;21759:3;21755:12;21748:19;;21407:366;;;:::o;21779:419::-;21945:4;21983:2;21972:9;21968:18;21960:26;;22032:9;22026:4;22022:20;22018:1;22007:9;22003:17;21996:47;22060:131;22186:4;22060:131;:::i;:::-;22052:139;;21779:419;;;:::o;22204:180::-;22252:77;22249:1;22242:88;22349:4;22346:1;22339:15;22373:4;22370:1;22363:15;22390:185;22430:1;22447:20;22465:1;22447:20;:::i;:::-;22442:25;;22481:20;22499:1;22481:20;:::i;:::-;22476:25;;22520:1;22510:35;;22525:18;;:::i;:::-;22510:35;22567:1;22564;22560:9;22555:14;;22390:185;;;;:::o;22581:143::-;22638:5;22669:6;22663:13;22654:22;;22685:33;22712:5;22685:33;:::i;:::-;22581:143;;;;:::o;22730:351::-;22800:6;22849:2;22837:9;22828:7;22824:23;22820:32;22817:119;;;22855:79;;:::i;:::-;22817:119;22975:1;23000:64;23056:7;23047:6;23036:9;23032:22;23000:64;:::i;:::-;22990:74;;22946:128;22730:351;;;;:::o;23087:332::-;23208:4;23246:2;23235:9;23231:18;23223:26;;23259:71;23327:1;23316:9;23312:17;23303:6;23259:71;:::i;:::-;23340:72;23408:2;23397:9;23393:18;23384:6;23340:72;:::i;:::-;23087:332;;;;;:::o;23425:442::-;23574:4;23612:2;23601:9;23597:18;23589:26;;23625:71;23693:1;23682:9;23678:17;23669:6;23625:71;:::i;:::-;23706:72;23774:2;23763:9;23759:18;23750:6;23706:72;:::i;:::-;23788;23856:2;23845:9;23841:18;23832:6;23788:72;:::i;:::-;23425:442;;;;;;:::o;23873:348::-;23913:7;23936:20;23954:1;23936:20;:::i;:::-;23931:25;;23970:20;23988:1;23970:20;:::i;:::-;23965:25;;24158:1;24090:66;24086:74;24083:1;24080:81;24075:1;24068:9;24061:17;24057:105;24054:131;;;24165:18;;:::i;:::-;24054:131;24213:1;24210;24206:9;24195:20;;23873:348;;;;:::o;24227:309::-;24367:34;24363:1;24355:6;24351:14;24344:58;24436:34;24431:2;24423:6;24419:15;24412:59;24505:23;24500:2;24492:6;24488:15;24481:48;24227:309;:::o;24542:366::-;24684:3;24705:67;24769:2;24764:3;24705:67;:::i;:::-;24698:74;;24781:93;24870:3;24781:93;:::i;:::-;24899:2;24894:3;24890:12;24883:19;;24542:366;;;:::o;24914:419::-;25080:4;25118:2;25107:9;25103:18;25095:26;;25167:9;25161:4;25157:20;25153:1;25142:9;25138:17;25131:47;25195:131;25321:4;25195:131;:::i;:::-;25187:139;;24914:419;;;:::o;25339:180::-;25387:77;25384:1;25377:88;25484:4;25481:1;25474:15;25508:4;25505:1;25498:15;25525:233;25564:3;25587:24;25605:5;25587:24;:::i;:::-;25578:33;;25633:66;25626:5;25623:77;25620:103;;;25703:18;;:::i;:::-;25620:103;25750:1;25743:5;25739:13;25732:20;;25525:233;;;:::o;25764:191::-;25804:4;25824:20;25842:1;25824:20;:::i;:::-;25819:25;;25858:20;25876:1;25858:20;:::i;:::-;25853:25;;25897:1;25894;25891:8;25888:34;;;25902:18;;:::i;:::-;25888:34;25947:1;25944;25940:9;25932:17;;25764:191;;;;:::o;25961:180::-;26009:77;26006:1;25999:88;26106:4;26103:1;26096:15;26130:4;26127:1;26120:15;26147:85;26192:7;26221:5;26210:16;;26147:85;;;:::o;26238:158::-;26296:9;26329:61;26347:42;26356:32;26382:5;26356:32;:::i;:::-;26347:42;:::i;:::-;26329:61;:::i;:::-;26316:74;;26238:158;;;:::o;26402:147::-;26497:45;26536:5;26497:45;:::i;:::-;26492:3;26485:58;26402:147;;:::o;26555:114::-;26622:6;26656:5;26650:12;26640:22;;26555:114;;;:::o;26675:184::-;26774:11;26808:6;26803:3;26796:19;26848:4;26843:3;26839:14;26824:29;;26675:184;;;;:::o;26865:132::-;26932:4;26955:3;26947:11;;26985:4;26980:3;26976:14;26968:22;;26865:132;;;:::o;27003:108::-;27080:24;27098:5;27080:24;:::i;:::-;27075:3;27068:37;27003:108;;:::o;27117:179::-;27186:10;27207:46;27249:3;27241:6;27207:46;:::i;:::-;27285:4;27280:3;27276:14;27262:28;;27117:179;;;;:::o;27302:113::-;27372:4;27404;27399:3;27395:14;27387:22;;27302:113;;;:::o;27451:732::-;27570:3;27599:54;27647:5;27599:54;:::i;:::-;27669:86;27748:6;27743:3;27669:86;:::i;:::-;27662:93;;27779:56;27829:5;27779:56;:::i;:::-;27858:7;27889:1;27874:284;27899:6;27896:1;27893:13;27874:284;;;27975:6;27969:13;28002:63;28061:3;28046:13;28002:63;:::i;:::-;27995:70;;28088:60;28141:6;28088:60;:::i;:::-;28078:70;;27934:224;27921:1;27918;27914:9;27909:14;;27874:284;;;27878:14;28174:3;28167:10;;27575:608;;;27451:732;;;;:::o;28189:831::-;28452:4;28490:3;28479:9;28475:19;28467:27;;28504:71;28572:1;28561:9;28557:17;28548:6;28504:71;:::i;:::-;28585:80;28661:2;28650:9;28646:18;28637:6;28585:80;:::i;:::-;28712:9;28706:4;28702:20;28697:2;28686:9;28682:18;28675:48;28740:108;28843:4;28834:6;28740:108;:::i;:::-;28732:116;;28858:72;28926:2;28915:9;28911:18;28902:6;28858:72;:::i;:::-;28940:73;29008:3;28997:9;28993:19;28984:6;28940:73;:::i;:::-;28189:831;;;;;;;;:::o;29026:332::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29198:71;29266:1;29255:9;29251:17;29242:6;29198:71;:::i;:::-;29279:72;29347:2;29336:9;29332:18;29323:6;29279:72;:::i;:::-;29026:332;;;;;:::o;29364:807::-;29613:4;29651:3;29640:9;29636:19;29628:27;;29665:71;29733:1;29722:9;29718:17;29709:6;29665:71;:::i;:::-;29746:72;29814:2;29803:9;29799:18;29790:6;29746:72;:::i;:::-;29828:80;29904:2;29893:9;29889:18;29880:6;29828:80;:::i;:::-;29918;29994:2;29983:9;29979:18;29970:6;29918:80;:::i;:::-;30008:73;30076:3;30065:9;30061:19;30052:6;30008:73;:::i;:::-;30091;30159:3;30148:9;30144:19;30135:6;30091:73;:::i;:::-;29364:807;;;;;;;;;:::o;30177:143::-;30234:5;30265:6;30259:13;30250:22;;30281:33;30308:5;30281:33;:::i;:::-;30177:143;;;;:::o;30326:663::-;30414:6;30422;30430;30479:2;30467:9;30458:7;30454:23;30450:32;30447:119;;;30485:79;;:::i;:::-;30447:119;30605:1;30630:64;30686:7;30677:6;30666:9;30662:22;30630:64;:::i;:::-;30620:74;;30576:128;30743:2;30769:64;30825:7;30816:6;30805:9;30801:22;30769:64;:::i;:::-;30759:74;;30714:129;30882:2;30908:64;30964:7;30955:6;30944:9;30940:22;30908:64;:::i;:::-;30898:74;;30853:129;30326:663;;;;;:::o

Swarm Source

ipfs://680a548488016062e1913285c8294437ae232677d2eb29d9462251bfc7f0bbc0
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.