ETH Price: $3,404.49 (+1.04%)

Token

FluffyClifford ($FC)
 

Overview

Max Total Supply

100,000,000,000 $FC

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
333,819,802.251691168 $FC

Value
$0.00
0x7FF63eCa149e0e88df652cC9171dBe28Ba1ca77F
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:
FluffyClifford

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

*/

// The perfect token is out, the combination of the two most hyped token of the day
// FLUFFY + CLIFFORD

// tg: FluffyClifford

// tw: FluffyCliffETH

// web: fluffyclifford.com

// ~ THE NEXY MOONSHOT, DON'T MISS IT ~

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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);
    }

}  

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

    mapping (address => bool) private _isExcludedFromFee;

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

    mapping(address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    address payable public _marketingAddress = payable(0x3AD3d779A35fAf92A262403213cAE42BfBC868c9);

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100 * 10**9 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "FluffyClifford";
    string private _symbol = "$FC";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _marketingFee = 7;
    uint256 private _previousmarketingFee = _marketingFee;

    uint256 launchTime;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool tradingOpen = false;

    uint256 public _maxTxAmount = 20 * 10**9 * 10**9;

    // Liquify when 400m tokens are stored
    uint256 private numTokensSellToLiquify = 400 * 10**6 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    event TransferToMarketing(uint256 ethTransferred);

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

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

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a uniswap pair for token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

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

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

    function openTrading() external onlyOwner {
        tradingOpen = true;
        launchTime = block.timestamp;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function setmarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        _marketingFee = marketingFee;
    }

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

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _previousTaxFee = _taxFee;
        _previousmarketingFee = _marketingFee;

        _taxFee = 0;
        _marketingFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousmarketingFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], 'You have no power here!');
        require(!_isSniper[msg.sender], 'You have no power here!');
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        // buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
            require(tradingOpen, 'Trading not yet enabled.');

            //antibot
            if (block.timestamp == launchTime) {
                _isSniper[to] = true;
                _confirmedSnipers.push(to);
            }
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToLiquify;
        if (
            overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToLiquify;
            swapAndLiquify(contractTokenBalance);
        }

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

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

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

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        uint256 marketingTokenBalance = contractTokenBalance;

        // 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(marketingTokenBalance);

        // Total eth that has been swapped
        uint256 ethSwapped = address(this).balance.sub(initialBalance);

        emit SwapAndLiquify(marketingTokenBalance, ethSwapped);

        // The remaining eth balance is to be Transferred to the marketing wallet
        uint256 marketingethToTransfer = ethSwapped;

        // Transfer the eth to the marketing wallet
        _marketingAddress.transfer(marketingethToTransfer);
        emit TransferToMarketing(marketingethToTransfer);
    }

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

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

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

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

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

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

    function isRemovedSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function _removeSniper(address account) external onlyOwner {
        require(
            account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,
            'We can not blacklist Uniswap'
        );
        require(!_isSniper[account], 'Account is already blacklisted');
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function _amnestySniper(address account) external onlyOwner {
        require(_isSniper[account], 'Account is not blacklisted');
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethTransferred","type":"uint256"}],"name":"TransferToMarketing","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRemovedSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setmarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052733ad3d779a35faf92a262403213cae42bfbc868c9600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d63100000600b55600b54600019620000789190620008d3565b60001962000087919062000824565b600c556040518060400160405280600e81526020017f466c75666679436c6966666f7264000000000000000000000000000000000000815250600e9080519060200190620000d7929190620006bf565b506040518060400160405280600381526020017f2446430000000000000000000000000000000000000000000000000000000000815250600f908051906020019062000125929190620006bf565b506009601060006101000a81548160ff021916908360ff160217905550600360115560115460125560076013556013546014556001601660016101000a81548160ff0219169083151502179055506000601660026101000a81548160ff0219169083151502179055506801158e460913d0000060175567058d15e176280000601855348015620001b457600080fd5b506000620001c76200068e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600260006200027c6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031a57600080fd5b505afa1580156200032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000355919062000786565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b857600080fd5b505afa158015620003cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f3919062000786565b6040518363ffffffff1660e01b815260040162000412929190620007da565b602060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000468919062000786565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160056000620004eb6200069660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200061e6200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200067f919062000807565b60405180910390a350620009b7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006cd906200089d565b90600052602060002090601f016020900481019282620006f157600085556200073d565b82601f106200070c57805160ff19168380011785556200073d565b828001600101855582156200073d579182015b828111156200073c5782518255916020019190600101906200071f565b5b5090506200074c919062000750565b5090565b5b808211156200076b57600081600090555060010162000751565b5090565b60008151905062000780816200099d565b92915050565b6000602082840312156200079f576200079e62000998565b5b6000620007af848285016200076f565b91505092915050565b620007c3816200085f565b82525050565b620007d48162000893565b82525050565b6000604082019050620007f16000830185620007b8565b620008006020830184620007b8565b9392505050565b60006020820190506200081e6000830184620007c9565b92915050565b6000620008318262000893565b91506200083e8362000893565b9250828210156200085457620008536200090b565b5b828203905092915050565b60006200086c8262000873565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008b657607f821691505b60208210811415620008cd57620008cc62000969565b5b50919050565b6000620008e08262000893565b9150620008ed8362000893565b9250826200090057620008ff6200093a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620009a8816200085f565b8114620009b457600080fd5b50565b60805160601c60a05160601c6158ae62000a0d600039600081816116be015281816129ea0152612c2d015260008181610b2b01528181612a40015281816138b3015281816139a301526139ca01526158ae6000f3fe6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f000000000000000000000000000000000000000000000000000000000000000084612503565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aac62137f478e88a53792c4a9568b429571cb5ad78be0fac5db0a8a73c80087764736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80634a74bb021161012357806395d89b41116100ab578063caac79341161006f578063caac79341461084e578063d543dbeb14610879578063dd62ed3e146108a2578063ea2f0b37146108df578063f375b2531461090857610230565b806395d89b4114610769578063a457c2d714610794578063a9059cbb146107d1578063c49b9a801461080e578063c9567bf91461083757610230565b806370a08231116100f257806370a0823114610682578063715018a6146106bf5780637d1db4a5146106d657806388f82020146107015780638da5cb5b1461073e57610230565b80634a74bb02146105b457806352390c02146105df5780635342acb414610608578063610d5b191461064557610230565b80632d838119116101b15780633b124fe7116101755780633b124fe7146104cf5780633bd5d173146104fa578063437823ec146105235780634549b0391461054c57806349bd5a5e1461058957610230565b80632d838119146103d8578063313ce56714610415578063362a3c5d146104405780633685d41914610469578063395093511461049257610230565b806313114a9d116101f857806313114a9d146102ef5780631694505e1461031a57806318160ddd1461034557806322976e0d1461037057806323b872dd1461039b57610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b3146102895780630cd7c478146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614826565b610931565b005b34801561026a57600080fd5b506102736109d0565b6040516102809190614c9c565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab91906147b9565b610a62565b6040516102bd9190614c66565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614826565b610a80565b005b3480156102fb57600080fd5b50610304610b1f565b6040516103119190614efe565b60405180910390f35b34801561032657600080fd5b5061032f610b29565b60405161033c9190614c81565b60405180910390f35b34801561035157600080fd5b5061035a610b4d565b6040516103679190614efe565b60405180910390f35b34801561037c57600080fd5b50610385610b57565b6040516103929190614efe565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190614766565b610b5d565b6040516103cf9190614c66565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190614826565b610c36565b60405161040c9190614efe565b60405180910390f35b34801561042157600080fd5b5061042a610ca4565b6040516104379190614f9c565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906146cc565b610cbb565b005b34801561047557600080fd5b50610490600480360381019061048b91906146cc565b610fc5565b005b34801561049e57600080fd5b506104b960048036038101906104b491906147b9565b611314565b6040516104c69190614c66565b60405180910390f35b3480156104db57600080fd5b506104e46113c7565b6040516104f19190614efe565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614826565b6113cd565b005b34801561052f57600080fd5b5061054a600480360381019061054591906146cc565b611548565b005b34801561055857600080fd5b50610573600480360381019061056e9190614853565b611638565b6040516105809190614efe565b60405180910390f35b34801561059557600080fd5b5061059e6116bc565b6040516105ab9190614c30565b60405180910390f35b3480156105c057600080fd5b506105c96116e0565b6040516105d69190614c66565b60405180910390f35b3480156105eb57600080fd5b50610606600480360381019061060191906146cc565b6116f3565b005b34801561061457600080fd5b5061062f600480360381019061062a91906146cc565b6119a7565b60405161063c9190614c66565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906146cc565b6119fd565b6040516106799190614c66565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906146cc565b611a53565b6040516106b69190614efe565b60405180910390f35b3480156106cb57600080fd5b506106d4611b3e565b005b3480156106e257600080fd5b506106eb611c91565b6040516106f89190614efe565b60405180910390f35b34801561070d57600080fd5b50610728600480360381019061072391906146cc565b611c97565b6040516107359190614c66565b60405180910390f35b34801561074a57600080fd5b50610753611ced565b6040516107609190614c30565b60405180910390f35b34801561077557600080fd5b5061077e611d16565b60405161078b9190614c9c565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906147b9565b611da8565b6040516107c89190614c66565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f391906147b9565b611e75565b6040516108059190614c66565b60405180910390f35b34801561081a57600080fd5b50610835600480360381019061083091906147f9565b611e93565b005b34801561084357600080fd5b5061084c611f7c565b005b34801561085a57600080fd5b50610863612035565b6040516108709190614c4b565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190614826565b61205b565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190614726565b612121565b6040516108d69190614efe565b60405180910390f35b3480156108eb57600080fd5b50610906600480360381019061090191906146cc565b6121a8565b005b34801561091457600080fd5b5061092f600480360381019061092a91906146cc565b612298565b005b6109396124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90614dde565b60405180910390fd5b8060118190555050565b6060600e80546109df90615203565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0b90615203565b8015610a585780601f10610a2d57610100808354040283529160200191610a58565b820191906000526020600020905b815481529060010190602001808311610a3b57829003601f168201915b5050505050905090565b6000610a76610a6f6124fb565b8484612503565b6001905092915050565b610a886124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90614dde565b60405180910390fd5b8060138190555050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b60135481565b6000610b6a8484846126ce565b610c2b84610b766124fb565b610c268560405180606001604052806028815260200161582c60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bdc6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b600190509392505050565b6000600c54821115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490614cde565b60405180910390fd5b6000610c87612dd1565b9050610c9c8184612dfc90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b610cc36124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790614dde565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390614e1e565b60405180910390fd5b60005b600980549050811015610fc1578173ffffffffffffffffffffffffffffffffffffffff1660098281548110610e1757610e1661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fae5760096001600980549050610e7291906150ed565b81548110610e8357610e8261533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110610ec257610ec161533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480610f7457610f7361530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fc1565b8080610fb990615235565b915050610ddf565b5050565b610fcd6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d3e565b60405180910390fd5b60005b600780549050811015611310578173ffffffffffffffffffffffffffffffffffffffff16600782815481106111215761112061533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112fd576007600160078054905061117c91906150ed565b8154811061118d5761118c61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600782815481106111cc576111cb61533a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060078054806112c3576112c261530b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611310565b808061130890615235565b9150506110e9565b5050565b60006113bd6113216124fb565b846113b885600460006113326124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b612503565b6001905092915050565b60115481565b60006113d76124fb565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d90614ebe565b60405180910390fd5b600061147183612ea4565b505050505090506114ca81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152281600c54612f0090919063ffffffff16565b600c8190555061153d83600d54612e4690919063ffffffff16565b600d81905550505050565b6115506124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614dde565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b5483111561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690614d7e565b60405180910390fd5b8161169f57600061168f84612ea4565b50505050509050809150506116b6565b60006116aa84612ea4565b50505050915050809150505b92915050565b7f0000000000000000000000004d9a736ac273b1a608e7fa7f65dbf7e06eba8f7381565b601660019054906101000a900460ff1681565b6116fb6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177f90614dde565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614d3e565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156118e9576118a5600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aee57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b39565b611b36600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c36565b90505b919050565b611b466124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca90614dde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611d2590615203565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190615203565b8015611d9e5780601f10611d7357610100808354040283529160200191611d9e565b820191906000526020600020905b815481529060010190602001808311611d8157829003601f168201915b5050505050905090565b6000611e6b611db56124fb565b84611e66856040518060600160405280602581526020016158546025913960046000611ddf6124fb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d6d9092919063ffffffff16565b612503565b6001905092915050565b6000611e89611e826124fb565b84846126ce565b6001905092915050565b611e9b6124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1f90614dde565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f719190614c66565b60405180910390a150565b611f846124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200890614dde565b60405180910390fd5b6001601660026101000a81548160ff02191690831515021790555042601581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120636124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614dde565b60405180910390fd5b612118606461210a83600b54612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b60178190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121b06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223490614dde565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122a06124fb565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490614dde565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614e3e565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490614d5e565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614e7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125da90614cfe565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c19190614efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561273e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273590614e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a590614cbe565b60405180910390fd5b600081116127f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e890614dfe565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614ede565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290290614ede565b60405180910390fd5b612913611ced565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129815750612951611ced565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cc576017548111156129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614d9e565b60405180910390fd5b5b60006129d730611a53565b905060175481106129e85760175490505b7f0000000000000000000000004d9a736ac273b1a608e7fa7f65dbf7e06eba8f7373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a8f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057601660029054906101000a900460ff16612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614e9e565b60405180910390fd5b601554421415612bff576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b60006018548210159050808015612c245750601660009054906101000a900460ff16155b8015612c7c57507f0000000000000000000000004d9a736ac273b1a608e7fa7f65dbf7e06eba8f7373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c945750601660019054906101000a900460ff165b15612ca8576018549150612ca782612fc5565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5957600090505b612d658686868461310a565b505050505050565b6000838311158290612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9190614c9c565b60405180910390fd5b5060008385612dc491906150ed565b9050809150509392505050565b6000806000612dde61341b565b91509150612df58183612dfc90919063ffffffff16565b9250505090565b6000612e3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ce565b905092915050565b6000808284612e55919061500c565b905083811015612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614d1e565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612ebb8a613731565b9250925092506000806000612ed98d8686612ed4612dd1565b61378b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d6d565b905092915050565b600080831415612f5d5760009050612fbf565b60008284612f6b9190615093565b9050828482612f7a9190615062565b14612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614dbe565b60405180910390fd5b809150505b92915050565b6001601660006101000a81548160ff02191690831515021790555060008190506000479050612ff382613814565b60006130088247612f0090919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486838260405161303b929190614f73565b60405180910390a16000819050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156130b0573d6000803e3d6000fd5b507fcece836790e718d3e66cd1b6eaa6005ec1c1b021f2ab161c416ff6b300f6668e816040516130e09190614efe565b60405180910390a1505050506000601660006101000a81548160ff02191690831515021790555050565b8061311857613117613a60565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131bb5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d0576131cb848484613aa3565b613407565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132735750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328857613283848484613d03565b613406565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561332c5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133415761333c848484613f63565b613405565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133e35750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133f8576133f384848461412e565b613404565b613403848484613f63565b5b5b5b5b8061341557613414614423565b5b50505050565b6000806000600c5490506000600b54905060005b600780549050811015613691578260026000600784815481106134555761345461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061354357508160036000600784815481106134db576134da61533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561355a57600c54600b54945094505050506136ca565b6135ea60026000600784815481106135755761357461533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f0090919063ffffffff16565b925061367c60036000600784815481106136075761360661533a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f0090919063ffffffff16565b9150808061368990615235565b91505061342f565b506136a9600b54600c54612dfc90919063ffffffff16565b8210156136c157600c54600b549350935050506136ca565b81819350935050505b9091565b60008083118290613715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370c9190614c9c565b60405180910390fd5b50600083856137249190615062565b9050809150509392505050565b60008060008061374085614437565b9050600061374d86614468565b9050600061377682613768858a612f0090919063ffffffff16565b612f0090919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137a48589612f4a90919063ffffffff16565b905060006137bb8689612f4a90919063ffffffff16565b905060006137d28789612f4a90919063ffffffff16565b905060006137fb826137ed8587612f0090919063ffffffff16565b612f0090919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561383157613830615369565b5b60405190808252806020026020018201604052801561385f5781602001602082028036833780820191505090505b50905030816000815181106138775761387661533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391757600080fd5b505afa15801561392b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394f91906146f9565b816001815181106139635761396261533a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612503565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a2a959493929190614f19565b600060405180830381600087803b158015613a4457600080fd5b505af1158015613a58573d6000803e3d6000fd5b505050505050565b6000601154148015613a7457506000601354145b15613a7e57613aa1565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613ab587612ea4565b955095509550955095509550613b1387600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba886600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c3d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8981614499565b613c93848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613cf09190614efe565b60405180910390a3505050505050505050565b600080600080600080613d1587612ea4565b955095509550955095509550613d7386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e0883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee981614499565b613ef3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f509190614efe565b60405180910390a3505050505050505050565b600080600080600080613f7587612ea4565b955095509550955095509550613fd386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061406885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140b481614499565b6140be848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161411b9190614efe565b60405180910390a3505050505050505050565b60008060008060008061414087612ea4565b95509550955095509550955061419e87600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423386600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0090919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142c883600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435d85600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a981614499565b6143b3848361463e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144109190614efe565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b6000614461606461445360115485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b6000614492606461448460135485612f4a90919063ffffffff16565b612dfc90919063ffffffff16565b9050919050565b60006144a3612dd1565b905060006144ba8284612f4a90919063ffffffff16565b905061450e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614639576145f583600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e4690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61465382600c54612f0090919063ffffffff16565b600c8190555061466e81600d54612e4690919063ffffffff16565b600d819055505050565b600081359050614687816157e6565b92915050565b60008151905061469c816157e6565b92915050565b6000813590506146b1816157fd565b92915050565b6000813590506146c681615814565b92915050565b6000602082840312156146e2576146e1615398565b5b60006146f084828501614678565b91505092915050565b60006020828403121561470f5761470e615398565b5b600061471d8482850161468d565b91505092915050565b6000806040838503121561473d5761473c615398565b5b600061474b85828601614678565b925050602061475c85828601614678565b9150509250929050565b60008060006060848603121561477f5761477e615398565b5b600061478d86828701614678565b935050602061479e86828701614678565b92505060406147af868287016146b7565b9150509250925092565b600080604083850312156147d0576147cf615398565b5b60006147de85828601614678565b92505060206147ef858286016146b7565b9150509250929050565b60006020828403121561480f5761480e615398565b5b600061481d848285016146a2565b91505092915050565b60006020828403121561483c5761483b615398565b5b600061484a848285016146b7565b91505092915050565b6000806040838503121561486a57614869615398565b5b6000614878858286016146b7565b9250506020614889858286016146a2565b9150509250929050565b600061489f83836148ba565b60208301905092915050565b6148b481615133565b82525050565b6148c381615121565b82525050565b6148d281615121565b82525050565b60006148e382614fc7565b6148ed8185614fea565b93506148f883614fb7565b8060005b838110156149295781516149108882614893565b975061491b83614fdd565b9250506001810190506148fc565b5085935050505092915050565b61493f81615145565b82525050565b61494e81615188565b82525050565b61495d8161519a565b82525050565b600061496e82614fd2565b6149788185614ffb565b93506149888185602086016151d0565b6149918161539d565b840191505092915050565b60006149a9602383614ffb565b91506149b4826153ae565b604082019050919050565b60006149cc602a83614ffb565b91506149d7826153fd565b604082019050919050565b60006149ef602283614ffb565b91506149fa8261544c565b604082019050919050565b6000614a12601b83614ffb565b9150614a1d8261549b565b602082019050919050565b6000614a35601b83614ffb565b9150614a40826154c4565b602082019050919050565b6000614a58601e83614ffb565b9150614a63826154ed565b602082019050919050565b6000614a7b601f83614ffb565b9150614a8682615516565b602082019050919050565b6000614a9e602883614ffb565b9150614aa98261553f565b604082019050919050565b6000614ac1602183614ffb565b9150614acc8261558e565b604082019050919050565b6000614ae4602083614ffb565b9150614aef826155dd565b602082019050919050565b6000614b07602983614ffb565b9150614b1282615606565b604082019050919050565b6000614b2a601a83614ffb565b9150614b3582615655565b602082019050919050565b6000614b4d601c83614ffb565b9150614b588261567e565b602082019050919050565b6000614b70602583614ffb565b9150614b7b826156a7565b604082019050919050565b6000614b93602483614ffb565b9150614b9e826156f6565b604082019050919050565b6000614bb6601883614ffb565b9150614bc182615745565b602082019050919050565b6000614bd9602c83614ffb565b9150614be48261576e565b604082019050919050565b6000614bfc601783614ffb565b9150614c07826157bd565b602082019050919050565b614c1b81615171565b82525050565b614c2a8161517b565b82525050565b6000602082019050614c4560008301846148c9565b92915050565b6000602082019050614c6060008301846148ab565b92915050565b6000602082019050614c7b6000830184614936565b92915050565b6000602082019050614c966000830184614945565b92915050565b60006020820190508181036000830152614cb68184614963565b905092915050565b60006020820190508181036000830152614cd78161499c565b9050919050565b60006020820190508181036000830152614cf7816149bf565b9050919050565b60006020820190508181036000830152614d17816149e2565b9050919050565b60006020820190508181036000830152614d3781614a05565b9050919050565b60006020820190508181036000830152614d5781614a28565b9050919050565b60006020820190508181036000830152614d7781614a4b565b9050919050565b60006020820190508181036000830152614d9781614a6e565b9050919050565b60006020820190508181036000830152614db781614a91565b9050919050565b60006020820190508181036000830152614dd781614ab4565b9050919050565b60006020820190508181036000830152614df781614ad7565b9050919050565b60006020820190508181036000830152614e1781614afa565b9050919050565b60006020820190508181036000830152614e3781614b1d565b9050919050565b60006020820190508181036000830152614e5781614b40565b9050919050565b60006020820190508181036000830152614e7781614b63565b9050919050565b60006020820190508181036000830152614e9781614b86565b9050919050565b60006020820190508181036000830152614eb781614ba9565b9050919050565b60006020820190508181036000830152614ed781614bcc565b9050919050565b60006020820190508181036000830152614ef781614bef565b9050919050565b6000602082019050614f136000830184614c12565b92915050565b600060a082019050614f2e6000830188614c12565b614f3b6020830187614954565b8181036040830152614f4d81866148d8565b9050614f5c60608301856148c9565b614f696080830184614c12565b9695505050505050565b6000604082019050614f886000830185614c12565b614f956020830184614c12565b9392505050565b6000602082019050614fb16000830184614c21565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061501782615171565b915061502283615171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150575761505661527e565b5b828201905092915050565b600061506d82615171565b915061507883615171565b925082615088576150876152ad565b5b828204905092915050565b600061509e82615171565b91506150a983615171565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e2576150e161527e565b5b828202905092915050565b60006150f882615171565b915061510383615171565b9250828210156151165761511561527e565b5b828203905092915050565b600061512c82615151565b9050919050565b600061513e82615151565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615193826151ac565b9050919050565b60006151a582615171565b9050919050565b60006151b7826151be565b9050919050565b60006151c982615151565b9050919050565b60005b838110156151ee5780820151818401526020810190506151d3565b838111156151fd576000848401525b50505050565b6000600282049050600182168061521b57607f821691505b6020821081141561522f5761522e6152dc565b5b50919050565b600061524082615171565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152735761527261527e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920626c61636b6c69737465640000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000600082015250565b7f57652063616e206e6f7420626c61636b6c69737420556e697377617000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f752068617665206e6f20706f776572206865726521000000000000000000600082015250565b6157ef81615121565b81146157fa57600080fd5b50565b61580681615145565b811461581157600080fd5b50565b61581d81615171565b811461582857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aac62137f478e88a53792c4a9568b429571cb5ad78be0fac5db0a8a73c80087764736f6c63430008070033

Deployed Bytecode Sourcemap

12990:19539:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20961:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15794:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16706:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20831:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17827:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14163:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16071:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14035:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16875:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18751:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15980:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32046:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19467:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17196:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13952:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17922:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20594:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18307:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14221:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14296:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19012:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24673:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31557:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16174:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9619:148;;;;;;;;;;;;;:::i;:::-;;14376:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17699:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9405:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15885:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17422:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16380:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21235:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15668:118;;;;;;;;;;;;;:::i;:::-;;13538:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16555:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20713:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31678:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20961:96;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21043:6:::1;21033:7;:16;;;;20961:96:::0;:::o;15794:83::-;15831:13;15864:5;15857:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15794:83;:::o;16706:161::-;16781:4;16798:39;16807:12;:10;:12::i;:::-;16821:7;16830:6;16798:8;:39::i;:::-;16855:4;16848:11;;16706:161;;;;:::o;20831:122::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20933:12:::1;20917:13;:28;;;;20831:122:::0;:::o;17827:87::-;17869:7;17896:10;;17889:17;;17827:87;:::o;14163:51::-;;;:::o;16071:95::-;16124:7;16151;;16144:14;;16071:95;:::o;14035:32::-;;;;:::o;16875:313::-;16973:4;16990:36;17000:6;17008:9;17019:6;16990:9;:36::i;:::-;17037:121;17046:6;17054:12;:10;:12::i;:::-;17068:89;17106:6;17068:89;;;;;;;;;;;;;;;;;:11;:19;17080:6;17068:19;;;;;;;;;;;;;;;:33;17088:12;:10;:12::i;:::-;17068:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17037:8;:121::i;:::-;17176:4;17169:11;;16875:313;;;;;:::o;18751:253::-;18817:7;18856;;18845;:18;;18837:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18921:19;18944:10;:8;:10::i;:::-;18921:33;;18972:24;18984:11;18972:7;:11;;:24;;;;:::i;:::-;18965:31;;;18751:253;;;:::o;15980:83::-;16021:5;16046:9;;;;;;;;;;;16039:16;;15980:83;:::o;32046:480::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32125:9:::1;:18;32135:7;32125:18;;;;;;;;;;;;;;;;;;;;;;;;;32117:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32190:9;32185:334;32209:17;:24;;;;32205:1;:28;32185:334;;;32283:7;32259:31;;:17;32277:1;32259:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:31;;;32255:253;;;32334:17;32379:1;32352:17;:24;;;;:28;;;;:::i;:::-;32334:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32311:17;32329:1;32311:20;;;;;;;;:::i;:::-;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;32421:5;32400:9;:18;32410:7;32400:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;32445:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32487:5;;32255:253;32235:3;;;;;:::i;:::-;;;;32185:334;;;;32046:480:::0;:::o;19467:479::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19549:11:::1;:20;19561:7;19549:20;;;;;;;;;;;;;;;;;;;;;;;;;19541:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19617:9;19612:327;19636:9;:16;;;;19632:1;:20;19612:327;;;19694:7;19678:23;;:9;19688:1;19678:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;19674:254;;;19737:9;19766:1;19747:9;:16;;;;:20;;;;:::i;:::-;19737:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19722:9;19732:1;19722:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19806:1;19787:7;:16;19795:7;19787:16;;;;;;;;;;;;;;;:20;;;;19849:5;19826:11;:20;19838:7;19826:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19873:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19907:5;;19674:254;19654:3;;;;;:::i;:::-;;;;19612:327;;;;19467:479:::0;:::o;17196:218::-;17284:4;17301:83;17310:12;:10;:12::i;:::-;17324:7;17333:50;17372:10;17333:11;:25;17345:12;:10;:12::i;:::-;17333:25;;;;;;;;;;;;;;;:34;17359:7;17333:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17301:8;:83::i;:::-;17402:4;17395:11;;17196:218;;;;:::o;13952:26::-;;;;:::o;17922:377::-;17974:14;17991:12;:10;:12::i;:::-;17974:29;;18023:11;:19;18035:6;18023:19;;;;;;;;;;;;;;;;;;;;;;;;;18022:20;18014:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18103:15;18127:19;18138:7;18127:10;:19::i;:::-;18102:44;;;;;;;18175:28;18195:7;18175;:15;18183:6;18175:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;18157:7;:15;18165:6;18157:15;;;;;;;;;;;;;;;:46;;;;18224:20;18236:7;18224;;:11;;:20;;;;:::i;:::-;18214:7;:30;;;;18268:23;18283:7;18268:10;;:14;;:23;;;;:::i;:::-;18255:10;:36;;;;17963:336;;17922:377;:::o;20594:111::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20693:4:::1;20663:18;:27;20682:7;20663:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20594:111:::0;:::o;18307:436::-;18397:7;18436;;18425;:18;;18417:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18495:17;18490:246;;18530:15;18554:19;18565:7;18554:10;:19::i;:::-;18529:44;;;;;;;18595:7;18588:14;;;;;18490:246;18637:23;18668:19;18679:7;18668:10;:19::i;:::-;18635:52;;;;;;;18709:15;18702:22;;;18307:436;;;;;:::o;14221:38::-;;;:::o;14296:40::-;;;;;;;;;;;;;:::o;19012:447::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19209:11:::1;:20;19221:7;19209:20;;;;;;;;;;;;;;;;;;;;;;;;;19208:21;19200:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19294:1;19275:7;:16;19283:7;19275:16;;;;;;;;;;;;;;;;:20;19272:108;;;19331:37;19351:7;:16;19359:7;19351:16;;;;;;;;;;;;;;;;19331:19;:37::i;:::-;19312:7;:16;19320:7;19312:16;;;;;;;;;;;;;;;:56;;;;19272:108;19413:4;19390:11;:20;19402:7;19390:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19428:9;19443:7;19428:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19012:447:::0;:::o;24673:123::-;24737:4;24761:18;:27;24780:7;24761:27;;;;;;;;;;;;;;;;;;;;;;;;;24754:34;;24673:123;;;:::o;31557:113::-;31620:4;31644:9;:18;31654:7;31644:18;;;;;;;;;;;;;;;;;;;;;;;;;31637:25;;31557:113;;;:::o;16174:198::-;16240:7;16264:11;:20;16276:7;16264:20;;;;;;;;;;;;;;;;;;;;;;;;;16260:49;;;16293:7;:16;16301:7;16293:16;;;;;;;;;;;;;;;;16286:23;;;;16260:49;16327:37;16347:7;:16;16355:7;16347:16;;;;;;;;;;;;;;;;16327:19;:37::i;:::-;16320:44;;16174:198;;;;:::o;9619:148::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9726:1:::1;9689:40;;9710:6;::::0;::::1;;;;;;;;9689:40;;;;;;;;;;;;9757:1;9740:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9619:148::o:0;14376:48::-;;;;:::o;17699:120::-;17767:4;17791:11;:20;17803:7;17791:20;;;;;;;;;;;;;;;;;;;;;;;;;17784:27;;17699:120;;;:::o;9405:79::-;9443:7;9470:6;;;;;;;;;;;9463:13;;9405:79;:::o;15885:87::-;15924:13;15957:7;15950:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15885:87;:::o;17422:269::-;17515:4;17532:129;17541:12;:10;:12::i;:::-;17555:7;17564:96;17603:15;17564:96;;;;;;;;;;;;;;;;;:11;:25;17576:12;:10;:12::i;:::-;17564:25;;;;;;;;;;;;;;;:34;17590:7;17564:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17532:8;:129::i;:::-;17679:4;17672:11;;17422:269;;;;:::o;16380:167::-;16458:4;16475:42;16485:12;:10;:12::i;:::-;16499:9;16510:6;16475:9;:42::i;:::-;16535:4;16528:11;;16380:167;;;;:::o;21235:171::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21336:8:::1;21312:21;;:32;;;;;;;;;;;;;;;;;;21360:38;21389:8;21360:38;;;;;;:::i;:::-;;;;;;;;21235:171:::0;:::o;15668:118::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15735:4:::1;15721:11;;:18;;;;;;;;;;;;;;;;;;15763:15;15750:10;:28;;;;15668:118::o:0;13538:94::-;;;;;;;;;;;;;:::o;21065:162::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21159:60:::1;21203:5;21159:25;21171:12;21159:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;21144:12;:75;;;;21065:162:::0;:::o;16555:143::-;16636:7;16663:11;:18;16675:5;16663:18;;;;;;;;;;;;;;;:27;16682:7;16663:27;;;;;;;;;;;;;;;;16656:34;;16555:143;;;;:::o;20713:110::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20810:5:::1;20780:18;:27;20799:7;20780:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20713:110:::0;:::o;31678:360::-;9542:12;:10;:12::i;:::-;9532:22;;:6;;;;;;;;;;:22;;;9524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31781:42:::1;31770:53;;:7;:53;;;;31748:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;31899:9;:18;31909:7;31899:18;;;;;;;;;;;;;;;;;;;;;;;;;31898:19;31890:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31984:4;31963:9;:18;31973:7;31963:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;31999:17;32022:7;31999:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31678:360:::0;:::o;2675:98::-;2728:7;2755:10;2748:17;;2675:98;:::o;24804:337::-;24914:1;24897:19;;:5;:19;;;;24889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24995:1;24976:21;;:7;:21;;;;24968:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25079:6;25049:11;:18;25061:5;25049:18;;;;;;;;;;;;;;;:27;25068:7;25049:27;;;;;;;;;;;;;;;:36;;;;25117:7;25101:32;;25110:5;25101:32;;;25126:6;25101:32;;;;;;:::i;:::-;;;;;;;;24804:337;;;:::o;25149:2169::-;25287:1;25271:18;;:4;:18;;;;25263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25364:1;25350:16;;:2;:16;;;;25342:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25434:1;25425:6;:10;25417:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25501:9;:13;25511:2;25501:13;;;;;;;;;;;;;;;;;;;;;;;;;25500:14;25492:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;25562:9;:21;25572:10;25562:21;;;;;;;;;;;;;;;;;;;;;;;;;25561:22;25553:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25633:7;:5;:7::i;:::-;25625:15;;:4;:15;;;;:32;;;;;25650:7;:5;:7::i;:::-;25644:13;;:2;:13;;;;25625:32;25622:125;;;25690:12;;25680:6;:22;;25672:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25622:125;26025:28;26056:24;26074:4;26056:9;:24::i;:::-;26025:55;;26120:12;;26096:20;:36;26093:112;;26181:12;;26158:35;;26093:112;26245:13;26237:21;;:4;:21;;;:55;;;;;26276:15;26262:30;;:2;:30;;;;26237:55;:82;;;;;26297:18;:22;26316:2;26297:22;;;;;;;;;;;;;;;;;;;;;;;;;26296:23;26237:82;26233:337;;;26344:11;;;;;;;;;;;26336:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26447:10;;26428:15;:29;26424:135;;;26494:4;26478:9;:13;26488:2;26478:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;26517:17;26540:2;26517:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26424:135;26233:337;26582:24;26633:22;;26609:20;:46;;26582:73;;26684:19;:40;;;;;26708:16;;;;;;;;;;;26707:17;26684:40;:65;;;;;26736:13;26728:21;;:4;:21;;;;26684:65;:90;;;;;26753:21;;;;;;;;;;;26684:90;26666:243;;;26824:22;;26801:45;;26861:36;26876:20;26861:14;:36::i;:::-;26666:243;26982:12;26997:4;26982:19;;27101:18;:24;27120:4;27101:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27129:18;:22;27148:2;27129:22;;;;;;;;;;;;;;;;;;;;;;;;;27101:50;27098:96;;;27177:5;27167:15;;27098:96;27272:38;27287:4;27292:2;27295:6;27302:7;27272:14;:38::i;:::-;25252:2066;;;25149:2169;;;:::o;1346:190::-;1432:7;1465:1;1460;:6;;1468:12;1452:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1492:9;1508:1;1504;:5;;;;:::i;:::-;1492:17;;1527:1;1520:8;;;1346:190;;;;;:::o;22865:163::-;22906:7;22927:15;22944;22963:19;:17;:19::i;:::-;22926:56;;;;23000:20;23012:7;23000;:11;;:20;;;;:::i;:::-;22993:27;;;;22865:163;:::o;1798:132::-;1856:7;1883:39;1887:1;1890;1883:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1876:46;;1798:132;;;;:::o;1015:179::-;1073:7;1093:9;1109:1;1105;:5;;;;:::i;:::-;1093:17;;1134:1;1129;:6;;1121:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1185:1;1178:8;;;1015:179;;;;:::o;21663:419::-;21722:7;21731;21740;21749;21758;21767;21788:23;21813:12;21827:18;21849:20;21861:7;21849:11;:20::i;:::-;21787:82;;;;;;21881:15;21898:23;21923:12;21939:50;21951:7;21960:4;21966:10;21978;:8;:10::i;:::-;21939:11;:50::i;:::-;21880:109;;;;;;22008:7;22017:15;22034:4;22040:15;22057:4;22063:10;22000:74;;;;;;;;;;;;;;;;;;21663:419;;;;;;;:::o;1202:136::-;1260:7;1287:43;1291:1;1294;1287:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1280:50;;1202:136;;;;:::o;1544:246::-;1602:7;1631:1;1626;:6;1622:47;;;1656:1;1649:8;;;;1622:47;1679:9;1695:1;1691;:5;;;;:::i;:::-;1679:17;;1724:1;1719;1715;:5;;;;:::i;:::-;:10;1707:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1781:1;1774:8;;;1544:246;;;;;:::o;27326:1063::-;14874:4;14855:16;;:23;;;;;;;;;;;;;;;;;;27421:29:::1;27453:20;27421:52;;27751:22;27776:21;27751:46;;27842:39;27859:21;27842:16;:39::i;:::-;27938:18;27959:41;27985:14;27959:21;:25;;:41;;;;:::i;:::-;27938:62;;28018:49;28033:21;28056:10;28018:49;;;;;;;:::i;:::-;;;;;;;;28163:30;28196:10;28163:43;;28272:17;;;;;;;;;;;:26;;:50;28299:22;28272:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28338:43;28358:22;28338:43;;;;;;:::i;:::-;;;;;;;;27400:989;;;;14920:5:::0;14901:16;;:24;;;;;;;;;;;;;;;;;;27326:1063;:::o;29067:818::-;29178:7;29174:40;;29200:14;:12;:14::i;:::-;29174:40;29231:11;:19;29243:6;29231:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;29255:11;:22;29267:9;29255:22;;;;;;;;;;;;;;;;;;;;;;;;;29254:23;29231:46;29227:597;;;29294:48;29316:6;29324:9;29335:6;29294:21;:48::i;:::-;29227:597;;;29365:11;:19;29377:6;29365:19;;;;;;;;;;;;;;;;;;;;;;;;;29364:20;:46;;;;;29388:11;:22;29400:9;29388:22;;;;;;;;;;;;;;;;;;;;;;;;;29364:46;29360:464;;;29427:46;29447:6;29455:9;29466:6;29427:19;:46::i;:::-;29360:464;;;29496:11;:19;29508:6;29496:19;;;;;;;;;;;;;;;;;;;;;;;;;29495:20;:47;;;;;29520:11;:22;29532:9;29520:22;;;;;;;;;;;;;;;;;;;;;;;;;29519:23;29495:47;29491:333;;;29559:44;29577:6;29585:9;29596:6;29559:17;:44::i;:::-;29491:333;;;29625:11;:19;29637:6;29625:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29648:11;:22;29660:9;29648:22;;;;;;;;;;;;;;;;;;;;;;;;;29625:45;29621:203;;;29687:48;29709:6;29717:9;29728:6;29687:21;:48::i;:::-;29621:203;;;29768:44;29786:6;29794:9;29805:6;29768:17;:44::i;:::-;29621:203;29491:333;29360:464;29227:597;29840:7;29836:41;;29862:15;:13;:15::i;:::-;29836:41;29067:818;;;;:::o;23036:555::-;23086:7;23095;23115:15;23133:7;;23115:25;;23151:15;23169:7;;23151:25;;23192:9;23187:289;23211:9;:16;;;;23207:1;:20;23187:289;;;23277:7;23253;:21;23261:9;23271:1;23261:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23253:21;;;;;;;;;;;;;;;;:31;:66;;;;23312:7;23288;:21;23296:9;23306:1;23296:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23288:21;;;;;;;;;;;;;;;;:31;23253:66;23249:97;;;23329:7;;23338;;23321:25;;;;;;;;;23249:97;23371:34;23383:7;:21;23391:9;23401:1;23391:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23383:21;;;;;;;;;;;;;;;;23371:7;:11;;:34;;;;:::i;:::-;23361:44;;23430:34;23442:7;:21;23450:9;23460:1;23450:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23442:21;;;;;;;;;;;;;;;;23430:7;:11;;:34;;;;:::i;:::-;23420:44;;23229:3;;;;;:::i;:::-;;;;23187:289;;;;23500:20;23512:7;;23500;;:11;;:20;;;;:::i;:::-;23490:7;:30;23486:61;;;23530:7;;23539;;23522:25;;;;;;;;23486:61;23566:7;23575;23558:25;;;;;;23036:555;;;:::o;1938:189::-;2024:7;2056:1;2052;:5;2059:12;2044:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2083:9;2099:1;2095;:5;;;;:::i;:::-;2083:17;;2118:1;2111:8;;;1938:189;;;;;:::o;22090:330::-;22150:7;22159;22168;22188:12;22203:24;22219:7;22203:15;:24::i;:::-;22188:39;;22238:18;22259:30;22281:7;22259:21;:30::i;:::-;22238:51;;22300:23;22326:33;22348:10;22326:17;22338:4;22326:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22300:59;;22378:15;22395:4;22401:10;22370:42;;;;;;;;;22090:330;;;;;:::o;22428:429::-;22543:7;22552;22561;22581:15;22599:24;22611:11;22599:7;:11;;:24;;;;:::i;:::-;22581:42;;22634:12;22649:21;22658:11;22649:4;:8;;:21;;;;:::i;:::-;22634:36;;22681:18;22702:27;22717:11;22702:10;:14;;:27;;;;:::i;:::-;22681:48;;22740:23;22766:33;22788:10;22766:17;22778:4;22766:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22740:59;;22818:7;22827:15;22844:4;22810:39;;;;;;;;;;22428:429;;;;;;;;:::o;28397:589::-;28523:21;28561:1;28547:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28523:40;;28592:4;28574;28579:1;28574:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28618:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28608:4;28613:1;28608:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28653:62;28670:4;28685:15;28703:11;28653:8;:62::i;:::-;28754:15;:66;;;28835:11;28861:1;28905:4;28932;28952:15;28754:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28452:534;28397:589;:::o;24298:234::-;24355:1;24344:7;;:12;:34;;;;;24377:1;24360:13;;:18;24344:34;24341:46;;;24380:7;;24341:46;24417:7;;24399:15;:25;;;;24459:13;;24435:21;:37;;;;24495:1;24485:7;:11;;;;24523:1;24507:13;:17;;;;24298:234;:::o;30986:563::-;31089:15;31106:23;31131:12;31145:23;31170:12;31184:18;31206:19;31217:7;31206:10;:19::i;:::-;31088:137;;;;;;;;;;;;31254:28;31274:7;31254;:15;31262:6;31254:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31236:7;:15;31244:6;31236:15;;;;;;;;;;;;;;;:46;;;;31311:28;31331:7;31311;:15;31319:6;31311:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31293:7;:15;31301:6;31293:15;;;;;;;;;;;;;;;:46;;;;31371:39;31394:15;31371:7;:18;31379:9;31371:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31350:7;:18;31358:9;31350:18;;;;;;;;;;;;;;;:60;;;;31421:26;31436:10;31421:14;:26::i;:::-;31458:23;31470:4;31476;31458:11;:23::i;:::-;31514:9;31497:44;;31506:6;31497:44;;;31525:15;31497:44;;;;;;:::i;:::-;;;;;;;;31077:472;;;;;;30986:563;;;:::o;30403:575::-;30504:15;30521:23;30546:12;30560:23;30585:12;30599:18;30621:19;30632:7;30621:10;:19::i;:::-;30503:137;;;;;;;;;;;;30669:28;30689:7;30669;:15;30677:6;30669:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30651:7;:15;30659:6;30651:15;;;;;;;;;;;;;;;:46;;;;30729:39;30752:15;30729:7;:18;30737:9;30729:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30708:7;:18;30716:9;30708:18;;;;;;;;;;;;;;;:60;;;;30800:39;30823:15;30800:7;:18;30808:9;30800:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30779:7;:18;30787:9;30779:18;;;;;;;;;;;;;;;:60;;;;30850:26;30865:10;30850:14;:26::i;:::-;30887:23;30899:4;30905;30887:11;:23::i;:::-;30943:9;30926:44;;30935:6;30926:44;;;30954:15;30926:44;;;;;;:::i;:::-;;;;;;;;30492:486;;;;;;30403:575;;;:::o;29893:502::-;29992:15;30009:23;30034:12;30048:23;30073:12;30087:18;30109:19;30120:7;30109:10;:19::i;:::-;29991:137;;;;;;;;;;;;30157:28;30177:7;30157;:15;30165:6;30157:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30139:7;:15;30147:6;30139:15;;;;;;;;;;;;;;;:46;;;;30217:39;30240:15;30217:7;:18;30225:9;30217:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30196:7;:18;30204:9;30196:18;;;;;;;;;;;;;;;:60;;;;30267:26;30282:10;30267:14;:26::i;:::-;30304:23;30316:4;30322;30304:11;:23::i;:::-;30360:9;30343:44;;30352:6;30343:44;;;30371:15;30343:44;;;;;;:::i;:::-;;;;;;;;29980:415;;;;;;29893:502;;;:::o;19952:634::-;20055:15;20072:23;20097:12;20111:23;20136:12;20150:18;20172:19;20183:7;20172:10;:19::i;:::-;20054:137;;;;;;;;;;;;20220:28;20240:7;20220;:15;20228:6;20220:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20202:7;:15;20210:6;20202:15;;;;;;;;;;;;;;;:46;;;;20277:28;20297:7;20277;:15;20285:6;20277:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20259:7;:15;20267:6;20259:15;;;;;;;;;;;;;;;:46;;;;20337:39;20360:15;20337:7;:18;20345:9;20337:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20316:7;:18;20324:9;20316:18;;;;;;;;;;;;;;;:60;;;;20408:39;20431:15;20408:7;:18;20416:9;20408:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20387:7;:18;20395:9;20387:18;;;;;;;;;;;;;;;:60;;;;20458:26;20473:10;20458:14;:26::i;:::-;20495:23;20507:4;20513;20495:11;:23::i;:::-;20551:9;20534:44;;20543:6;20534:44;;;20562:15;20534:44;;;;;;:::i;:::-;;;;;;;;20043:543;;;;;;19952:634;;;:::o;24540:125::-;24594:15;;24584:7;:25;;;;24636:21;;24620:13;:37;;;;24540:125::o;23962:154::-;24026:7;24053:55;24092:5;24053:20;24065:7;;24053;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;24046:62;;23962:154;;;:::o;24124:166::-;24194:7;24221:61;24266:5;24221:26;24233:13;;24221:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;24214:68;;24124:166;;;:::o;23599:355::-;23662:19;23685:10;:8;:10::i;:::-;23662:33;;23706:18;23727:27;23742:11;23727:10;:14;;:27;;;;:::i;:::-;23706:48;;23790:38;23817:10;23790:7;:22;23806:4;23790:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23765:7;:22;23781:4;23765:22;;;;;;;;;;;;;;;:63;;;;23842:11;:26;23862:4;23842:26;;;;;;;;;;;;;;;;;;;;;;;;;23839:107;;;23908:38;23935:10;23908:7;:22;23924:4;23908:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23883:7;:22;23899:4;23883:22;;;;;;;;;;;;;;;:63;;;;23839:107;23651:303;;23599:355;:::o;21508:147::-;21586:17;21598:4;21586:7;;:11;;:17;;;;:::i;:::-;21576:7;:27;;;;21627:20;21642:4;21627:10;;:14;;:20;;;;:::i;:::-;21614:10;:33;;;;21508:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:329::-;644:6;693:2;681:9;672:7;668:23;664:32;661:119;;;699:79;;:::i;:::-;661:119;819:1;844:53;889:7;880:6;869:9;865:22;844:53;:::i;:::-;834:63;;790:117;585:329;;;;:::o;920:351::-;990:6;1039:2;1027:9;1018:7;1014:23;1010:32;1007:119;;;1045:79;;:::i;:::-;1007:119;1165:1;1190:64;1246:7;1237:6;1226:9;1222:22;1190:64;:::i;:::-;1180:74;;1136:128;920:351;;;;:::o;1277:474::-;1345:6;1353;1402:2;1390:9;1381:7;1377:23;1373:32;1370:119;;;1408:79;;:::i;:::-;1370:119;1528:1;1553:53;1598:7;1589:6;1578:9;1574:22;1553:53;:::i;:::-;1543:63;;1499:117;1655:2;1681:53;1726:7;1717:6;1706:9;1702:22;1681:53;:::i;:::-;1671:63;;1626:118;1277:474;;;;;:::o;1757:619::-;1834:6;1842;1850;1899:2;1887:9;1878:7;1874:23;1870:32;1867:119;;;1905:79;;:::i;:::-;1867:119;2025:1;2050:53;2095:7;2086:6;2075:9;2071:22;2050:53;:::i;:::-;2040:63;;1996:117;2152:2;2178:53;2223:7;2214:6;2203:9;2199:22;2178:53;:::i;:::-;2168:63;;2123:118;2280:2;2306:53;2351:7;2342:6;2331:9;2327:22;2306:53;:::i;:::-;2296:63;;2251:118;1757:619;;;;;:::o;2382:474::-;2450:6;2458;2507:2;2495:9;2486:7;2482:23;2478:32;2475:119;;;2513:79;;:::i;:::-;2475:119;2633:1;2658:53;2703:7;2694:6;2683:9;2679:22;2658:53;:::i;:::-;2648:63;;2604:117;2760:2;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2731:118;2382:474;;;;;:::o;2862:323::-;2918:6;2967:2;2955:9;2946:7;2942:23;2938:32;2935:119;;;2973:79;;:::i;:::-;2935:119;3093:1;3118:50;3160:7;3151:6;3140:9;3136:22;3118:50;:::i;:::-;3108:60;;3064:114;2862:323;;;;:::o;3191:329::-;3250:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:119;;;3305:79;;:::i;:::-;3267:119;3425:1;3450:53;3495:7;3486:6;3475:9;3471:22;3450:53;:::i;:::-;3440:63;;3396:117;3191:329;;;;:::o;3526:468::-;3591:6;3599;3648:2;3636:9;3627:7;3623:23;3619:32;3616:119;;;3654:79;;:::i;:::-;3616:119;3774:1;3799:53;3844:7;3835:6;3824:9;3820:22;3799:53;:::i;:::-;3789:63;;3745:117;3901:2;3927:50;3969:7;3960:6;3949:9;3945:22;3927:50;:::i;:::-;3917:60;;3872:115;3526:468;;;;;:::o;4000:179::-;4069:10;4090:46;4132:3;4124:6;4090:46;:::i;:::-;4168:4;4163:3;4159:14;4145:28;;4000:179;;;;:::o;4185:142::-;4288:32;4314:5;4288:32;:::i;:::-;4283:3;4276:45;4185:142;;:::o;4333:108::-;4410:24;4428:5;4410:24;:::i;:::-;4405:3;4398:37;4333:108;;:::o;4447:118::-;4534:24;4552:5;4534:24;:::i;:::-;4529:3;4522:37;4447:118;;:::o;4601:732::-;4720:3;4749:54;4797:5;4749:54;:::i;:::-;4819:86;4898:6;4893:3;4819:86;:::i;:::-;4812:93;;4929:56;4979:5;4929:56;:::i;:::-;5008:7;5039:1;5024:284;5049:6;5046:1;5043:13;5024:284;;;5125:6;5119:13;5152:63;5211:3;5196:13;5152:63;:::i;:::-;5145:70;;5238:60;5291:6;5238:60;:::i;:::-;5228:70;;5084:224;5071:1;5068;5064:9;5059:14;;5024:284;;;5028:14;5324:3;5317:10;;4725:608;;;4601:732;;;;:::o;5339:109::-;5420:21;5435:5;5420:21;:::i;:::-;5415:3;5408:34;5339:109;;:::o;5454:183::-;5567:63;5624:5;5567:63;:::i;:::-;5562:3;5555:76;5454:183;;:::o;5643:147::-;5738:45;5777:5;5738:45;:::i;:::-;5733:3;5726:58;5643:147;;:::o;5796:364::-;5884:3;5912:39;5945:5;5912:39;:::i;:::-;5967:71;6031:6;6026:3;5967:71;:::i;:::-;5960:78;;6047:52;6092:6;6087:3;6080:4;6073:5;6069:16;6047:52;:::i;:::-;6124:29;6146:6;6124:29;:::i;:::-;6119:3;6115:39;6108:46;;5888:272;5796:364;;;;:::o;6166:366::-;6308:3;6329:67;6393:2;6388:3;6329:67;:::i;:::-;6322:74;;6405:93;6494:3;6405:93;:::i;:::-;6523:2;6518:3;6514:12;6507:19;;6166:366;;;:::o;6538:::-;6680:3;6701:67;6765:2;6760:3;6701:67;:::i;:::-;6694:74;;6777:93;6866:3;6777:93;:::i;:::-;6895:2;6890:3;6886:12;6879:19;;6538:366;;;:::o;6910:::-;7052:3;7073:67;7137:2;7132:3;7073:67;:::i;:::-;7066:74;;7149:93;7238:3;7149:93;:::i;:::-;7267:2;7262:3;7258:12;7251:19;;6910:366;;;:::o;7282:::-;7424:3;7445:67;7509:2;7504:3;7445:67;:::i;:::-;7438:74;;7521:93;7610:3;7521:93;:::i;:::-;7639:2;7634:3;7630:12;7623:19;;7282:366;;;:::o;7654:::-;7796:3;7817:67;7881:2;7876:3;7817:67;:::i;:::-;7810:74;;7893:93;7982:3;7893:93;:::i;:::-;8011:2;8006:3;8002:12;7995:19;;7654:366;;;:::o;8026:::-;8168:3;8189:67;8253:2;8248:3;8189:67;:::i;:::-;8182:74;;8265:93;8354:3;8265:93;:::i;:::-;8383:2;8378:3;8374:12;8367:19;;8026:366;;;:::o;8398:::-;8540:3;8561:67;8625:2;8620:3;8561:67;:::i;:::-;8554:74;;8637:93;8726:3;8637:93;:::i;:::-;8755:2;8750:3;8746:12;8739:19;;8398:366;;;:::o;8770:::-;8912:3;8933:67;8997:2;8992:3;8933:67;:::i;:::-;8926:74;;9009:93;9098:3;9009:93;:::i;:::-;9127:2;9122:3;9118:12;9111:19;;8770:366;;;:::o;9142:::-;9284:3;9305:67;9369:2;9364:3;9305:67;:::i;:::-;9298:74;;9381:93;9470:3;9381:93;:::i;:::-;9499:2;9494:3;9490:12;9483:19;;9142:366;;;:::o;9514:::-;9656:3;9677:67;9741:2;9736:3;9677:67;:::i;:::-;9670:74;;9753:93;9842:3;9753:93;:::i;:::-;9871:2;9866:3;9862:12;9855:19;;9514:366;;;:::o;9886:::-;10028:3;10049:67;10113:2;10108:3;10049:67;:::i;:::-;10042:74;;10125:93;10214:3;10125:93;:::i;:::-;10243:2;10238:3;10234:12;10227:19;;9886:366;;;:::o;10258:::-;10400:3;10421:67;10485:2;10480:3;10421:67;:::i;:::-;10414:74;;10497:93;10586:3;10497:93;:::i;:::-;10615:2;10610:3;10606:12;10599:19;;10258:366;;;:::o;10630:::-;10772:3;10793:67;10857:2;10852:3;10793:67;:::i;:::-;10786:74;;10869:93;10958:3;10869:93;:::i;:::-;10987:2;10982:3;10978:12;10971:19;;10630:366;;;:::o;11002:::-;11144:3;11165:67;11229:2;11224:3;11165:67;:::i;:::-;11158:74;;11241:93;11330:3;11241:93;:::i;:::-;11359:2;11354:3;11350:12;11343:19;;11002:366;;;:::o;11374:::-;11516:3;11537:67;11601:2;11596:3;11537:67;:::i;:::-;11530:74;;11613:93;11702:3;11613:93;:::i;:::-;11731:2;11726:3;11722:12;11715:19;;11374:366;;;:::o;11746:::-;11888:3;11909:67;11973:2;11968:3;11909:67;:::i;:::-;11902:74;;11985:93;12074:3;11985:93;:::i;:::-;12103:2;12098:3;12094:12;12087:19;;11746:366;;;:::o;12118:::-;12260:3;12281:67;12345:2;12340:3;12281:67;:::i;:::-;12274:74;;12357:93;12446:3;12357:93;:::i;:::-;12475:2;12470:3;12466:12;12459:19;;12118:366;;;:::o;12490:::-;12632:3;12653:67;12717:2;12712:3;12653:67;:::i;:::-;12646:74;;12729:93;12818:3;12729:93;:::i;:::-;12847:2;12842:3;12838:12;12831:19;;12490:366;;;:::o;12862:118::-;12949:24;12967:5;12949:24;:::i;:::-;12944:3;12937:37;12862:118;;:::o;12986:112::-;13069:22;13085:5;13069:22;:::i;:::-;13064:3;13057:35;12986:112;;:::o;13104:222::-;13197:4;13235:2;13224:9;13220:18;13212:26;;13248:71;13316:1;13305:9;13301:17;13292:6;13248:71;:::i;:::-;13104:222;;;;:::o;13332:254::-;13441:4;13479:2;13468:9;13464:18;13456:26;;13492:87;13576:1;13565:9;13561:17;13552:6;13492:87;:::i;:::-;13332:254;;;;:::o;13592:210::-;13679:4;13717:2;13706:9;13702:18;13694:26;;13730:65;13792:1;13781:9;13777:17;13768:6;13730:65;:::i;:::-;13592:210;;;;:::o;13808:274::-;13927:4;13965:2;13954:9;13950:18;13942:26;;13978:97;14072:1;14061:9;14057:17;14048:6;13978:97;:::i;:::-;13808:274;;;;:::o;14088:313::-;14201:4;14239:2;14228:9;14224:18;14216:26;;14288:9;14282:4;14278:20;14274:1;14263:9;14259:17;14252:47;14316:78;14389:4;14380:6;14316:78;:::i;:::-;14308:86;;14088:313;;;;:::o;14407:419::-;14573:4;14611:2;14600:9;14596:18;14588:26;;14660:9;14654:4;14650:20;14646:1;14635:9;14631:17;14624:47;14688:131;14814:4;14688:131;:::i;:::-;14680:139;;14407:419;;;:::o;14832:::-;14998:4;15036:2;15025:9;15021:18;15013:26;;15085:9;15079:4;15075:20;15071:1;15060:9;15056:17;15049:47;15113:131;15239:4;15113:131;:::i;:::-;15105:139;;14832:419;;;:::o;15257:::-;15423:4;15461:2;15450:9;15446:18;15438:26;;15510:9;15504:4;15500:20;15496:1;15485:9;15481:17;15474:47;15538:131;15664:4;15538:131;:::i;:::-;15530:139;;15257:419;;;:::o;15682:::-;15848:4;15886:2;15875:9;15871:18;15863:26;;15935:9;15929:4;15925:20;15921:1;15910:9;15906:17;15899:47;15963:131;16089:4;15963:131;:::i;:::-;15955:139;;15682:419;;;:::o;16107:::-;16273:4;16311:2;16300:9;16296:18;16288:26;;16360:9;16354:4;16350:20;16346:1;16335:9;16331:17;16324:47;16388:131;16514:4;16388:131;:::i;:::-;16380:139;;16107:419;;;:::o;16532:::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16785:9;16779:4;16775:20;16771:1;16760:9;16756:17;16749:47;16813:131;16939:4;16813:131;:::i;:::-;16805:139;;16532:419;;;:::o;16957:::-;17123:4;17161:2;17150:9;17146:18;17138:26;;17210:9;17204:4;17200:20;17196:1;17185:9;17181:17;17174:47;17238:131;17364:4;17238:131;:::i;:::-;17230:139;;16957:419;;;:::o;17382:::-;17548:4;17586:2;17575:9;17571:18;17563:26;;17635:9;17629:4;17625:20;17621:1;17610:9;17606:17;17599:47;17663:131;17789:4;17663:131;:::i;:::-;17655:139;;17382:419;;;:::o;17807:::-;17973:4;18011:2;18000:9;17996:18;17988:26;;18060:9;18054:4;18050:20;18046:1;18035:9;18031:17;18024:47;18088:131;18214:4;18088:131;:::i;:::-;18080:139;;17807:419;;;:::o;18232:::-;18398:4;18436:2;18425:9;18421:18;18413:26;;18485:9;18479:4;18475:20;18471:1;18460:9;18456:17;18449:47;18513:131;18639:4;18513:131;:::i;:::-;18505:139;;18232:419;;;:::o;18657:::-;18823:4;18861:2;18850:9;18846:18;18838:26;;18910:9;18904:4;18900:20;18896:1;18885:9;18881:17;18874:47;18938:131;19064:4;18938:131;:::i;:::-;18930:139;;18657:419;;;:::o;19082:::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19335:9;19329:4;19325:20;19321:1;19310:9;19306:17;19299:47;19363:131;19489:4;19363:131;:::i;:::-;19355:139;;19082:419;;;:::o;19507:::-;19673:4;19711:2;19700:9;19696:18;19688:26;;19760:9;19754:4;19750:20;19746:1;19735:9;19731:17;19724:47;19788:131;19914:4;19788:131;:::i;:::-;19780:139;;19507:419;;;:::o;19932:::-;20098:4;20136:2;20125:9;20121:18;20113:26;;20185:9;20179:4;20175:20;20171:1;20160:9;20156:17;20149:47;20213:131;20339:4;20213:131;:::i;:::-;20205:139;;19932:419;;;:::o;20357:::-;20523:4;20561:2;20550:9;20546:18;20538:26;;20610:9;20604:4;20600:20;20596:1;20585:9;20581:17;20574:47;20638:131;20764:4;20638:131;:::i;:::-;20630:139;;20357:419;;;:::o;20782:::-;20948:4;20986:2;20975:9;20971:18;20963:26;;21035:9;21029:4;21025:20;21021:1;21010:9;21006:17;20999:47;21063:131;21189:4;21063:131;:::i;:::-;21055:139;;20782:419;;;:::o;21207:::-;21373:4;21411:2;21400:9;21396:18;21388:26;;21460:9;21454:4;21450:20;21446:1;21435:9;21431:17;21424:47;21488:131;21614:4;21488:131;:::i;:::-;21480:139;;21207:419;;;:::o;21632:::-;21798:4;21836:2;21825:9;21821:18;21813:26;;21885:9;21879:4;21875:20;21871:1;21860:9;21856:17;21849:47;21913:131;22039:4;21913:131;:::i;:::-;21905:139;;21632:419;;;:::o;22057:222::-;22150:4;22188:2;22177:9;22173:18;22165:26;;22201:71;22269:1;22258:9;22254:17;22245:6;22201:71;:::i;:::-;22057:222;;;;:::o;22285:831::-;22548:4;22586:3;22575:9;22571:19;22563:27;;22600:71;22668:1;22657:9;22653:17;22644:6;22600:71;:::i;:::-;22681:80;22757:2;22746:9;22742:18;22733:6;22681:80;:::i;:::-;22808:9;22802:4;22798:20;22793:2;22782:9;22778:18;22771:48;22836:108;22939:4;22930:6;22836:108;:::i;:::-;22828:116;;22954:72;23022:2;23011:9;23007:18;22998:6;22954:72;:::i;:::-;23036:73;23104:3;23093:9;23089:19;23080:6;23036:73;:::i;:::-;22285:831;;;;;;;;:::o;23122:332::-;23243:4;23281:2;23270:9;23266:18;23258:26;;23294:71;23362:1;23351:9;23347:17;23338:6;23294:71;:::i;:::-;23375:72;23443:2;23432:9;23428:18;23419:6;23375:72;:::i;:::-;23122:332;;;;;:::o;23460:214::-;23549:4;23587:2;23576:9;23572:18;23564:26;;23600:67;23664:1;23653:9;23649:17;23640:6;23600:67;:::i;:::-;23460:214;;;;:::o;23761:132::-;23828:4;23851:3;23843:11;;23881:4;23876:3;23872:14;23864:22;;23761:132;;;:::o;23899:114::-;23966:6;24000:5;23994:12;23984:22;;23899:114;;;:::o;24019:99::-;24071:6;24105:5;24099:12;24089:22;;24019:99;;;:::o;24124:113::-;24194:4;24226;24221:3;24217:14;24209:22;;24124:113;;;:::o;24243:184::-;24342:11;24376:6;24371:3;24364:19;24416:4;24411:3;24407:14;24392:29;;24243:184;;;;:::o;24433:169::-;24517:11;24551:6;24546:3;24539:19;24591:4;24586:3;24582:14;24567:29;;24433:169;;;;:::o;24608:305::-;24648:3;24667:20;24685:1;24667:20;:::i;:::-;24662:25;;24701:20;24719:1;24701:20;:::i;:::-;24696:25;;24855:1;24787:66;24783:74;24780:1;24777:81;24774:107;;;24861:18;;:::i;:::-;24774:107;24905:1;24902;24898:9;24891:16;;24608:305;;;;:::o;24919:185::-;24959:1;24976:20;24994:1;24976:20;:::i;:::-;24971:25;;25010:20;25028:1;25010:20;:::i;:::-;25005:25;;25049:1;25039:35;;25054:18;;:::i;:::-;25039:35;25096:1;25093;25089:9;25084:14;;24919:185;;;;:::o;25110:348::-;25150:7;25173:20;25191:1;25173:20;:::i;:::-;25168:25;;25207:20;25225:1;25207:20;:::i;:::-;25202:25;;25395:1;25327:66;25323:74;25320:1;25317:81;25312:1;25305:9;25298:17;25294:105;25291:131;;;25402:18;;:::i;:::-;25291:131;25450:1;25447;25443:9;25432:20;;25110:348;;;;:::o;25464:191::-;25504:4;25524:20;25542:1;25524:20;:::i;:::-;25519:25;;25558:20;25576:1;25558:20;:::i;:::-;25553:25;;25597:1;25594;25591:8;25588:34;;;25602:18;;:::i;:::-;25588:34;25647:1;25644;25640:9;25632:17;;25464:191;;;;:::o;25661:96::-;25698:7;25727:24;25745:5;25727:24;:::i;:::-;25716:35;;25661:96;;;:::o;25763:104::-;25808:7;25837:24;25855:5;25837:24;:::i;:::-;25826:35;;25763:104;;;:::o;25873:90::-;25907:7;25950:5;25943:13;25936:21;25925:32;;25873:90;;;:::o;25969:126::-;26006:7;26046:42;26039:5;26035:54;26024:65;;25969:126;;;:::o;26101:77::-;26138:7;26167:5;26156:16;;26101:77;;;:::o;26184:86::-;26219:7;26259:4;26252:5;26248:16;26237:27;;26184:86;;;:::o;26276:152::-;26352:9;26385:37;26416:5;26385:37;:::i;:::-;26372:50;;26276:152;;;:::o;26434:121::-;26492:9;26525:24;26543:5;26525:24;:::i;:::-;26512:37;;26434:121;;;:::o;26561:126::-;26611:9;26644:37;26675:5;26644:37;:::i;:::-;26631:50;;26561:126;;;:::o;26693:113::-;26743:9;26776:24;26794:5;26776:24;:::i;:::-;26763:37;;26693:113;;;:::o;26812:307::-;26880:1;26890:113;26904:6;26901:1;26898:13;26890:113;;;26989:1;26984:3;26980:11;26974:18;26970:1;26965:3;26961:11;26954:39;26926:2;26923:1;26919:10;26914:15;;26890:113;;;27021:6;27018:1;27015:13;27012:101;;;27101:1;27092:6;27087:3;27083:16;27076:27;27012:101;26861:258;26812:307;;;:::o;27125:320::-;27169:6;27206:1;27200:4;27196:12;27186:22;;27253:1;27247:4;27243:12;27274:18;27264:81;;27330:4;27322:6;27318:17;27308:27;;27264:81;27392:2;27384:6;27381:14;27361:18;27358:38;27355:84;;;27411:18;;:::i;:::-;27355:84;27176:269;27125:320;;;:::o;27451:233::-;27490:3;27513:24;27531:5;27513:24;:::i;:::-;27504:33;;27559:66;27552:5;27549:77;27546:103;;;27629:18;;:::i;:::-;27546:103;27676:1;27669:5;27665:13;27658:20;;27451:233;;;:::o;27690:180::-;27738:77;27735:1;27728:88;27835:4;27832:1;27825:15;27859:4;27856:1;27849:15;27876:180;27924:77;27921:1;27914:88;28021:4;28018:1;28011:15;28045:4;28042:1;28035:15;28062:180;28110:77;28107:1;28100:88;28207:4;28204:1;28197:15;28231:4;28228:1;28221:15;28248:180;28296:77;28293:1;28286:88;28393:4;28390:1;28383:15;28417:4;28414:1;28407:15;28434:180;28482:77;28479:1;28472:88;28579:4;28576:1;28569:15;28603:4;28600:1;28593:15;28620:180;28668:77;28665:1;28658:88;28765:4;28762:1;28755:15;28789:4;28786:1;28779:15;28929:117;29038:1;29035;29028:12;29052:102;29093:6;29144:2;29140:7;29135:2;29128:5;29124:14;29120:28;29110:38;;29052:102;;;:::o;29160:222::-;29300:34;29296:1;29288:6;29284:14;29277:58;29369:5;29364:2;29356:6;29352:15;29345:30;29160:222;:::o;29388:229::-;29528:34;29524:1;29516:6;29512:14;29505:58;29597:12;29592:2;29584:6;29580:15;29573:37;29388:229;:::o;29623:221::-;29763:34;29759:1;29751:6;29747:14;29740:58;29832:4;29827:2;29819:6;29815:15;29808:29;29623:221;:::o;29850:177::-;29990:29;29986:1;29978:6;29974:14;29967:53;29850:177;:::o;30033:::-;30173:29;30169:1;30161:6;30157:14;30150:53;30033:177;:::o;30216:180::-;30356:32;30352:1;30344:6;30340:14;30333:56;30216:180;:::o;30402:181::-;30542:33;30538:1;30530:6;30526:14;30519:57;30402:181;:::o;30589:227::-;30729:34;30725:1;30717:6;30713:14;30706:58;30798:10;30793:2;30785:6;30781:15;30774:35;30589:227;:::o;30822:220::-;30962:34;30958:1;30950:6;30946:14;30939:58;31031:3;31026:2;31018:6;31014:15;31007:28;30822:220;:::o;31048:182::-;31188:34;31184:1;31176:6;31172:14;31165:58;31048:182;:::o;31236:228::-;31376:34;31372:1;31364:6;31360:14;31353:58;31445:11;31440:2;31432:6;31428:15;31421:36;31236:228;:::o;31470:176::-;31610:28;31606:1;31598:6;31594:14;31587:52;31470:176;:::o;31652:178::-;31792:30;31788:1;31780:6;31776:14;31769:54;31652:178;:::o;31836:224::-;31976:34;31972:1;31964:6;31960:14;31953:58;32045:7;32040:2;32032:6;32028:15;32021:32;31836:224;:::o;32066:223::-;32206:34;32202:1;32194:6;32190:14;32183:58;32275:6;32270:2;32262:6;32258:15;32251:31;32066:223;:::o;32295:174::-;32435:26;32431:1;32423:6;32419:14;32412:50;32295:174;:::o;32475:231::-;32615:34;32611:1;32603:6;32599:14;32592:58;32684:14;32679:2;32671:6;32667:15;32660:39;32475:231;:::o;32712:173::-;32852:25;32848:1;32840:6;32836:14;32829:49;32712:173;:::o;32891:122::-;32964:24;32982:5;32964:24;:::i;:::-;32957:5;32954:35;32944:63;;33003:1;33000;32993:12;32944:63;32891:122;:::o;33019:116::-;33089:21;33104:5;33089:21;:::i;:::-;33082:5;33079:32;33069:60;;33125:1;33122;33115:12;33069:60;33019:116;:::o;33141:122::-;33214:24;33232:5;33214:24;:::i;:::-;33207:5;33204:35;33194:63;;33253:1;33250;33243:12;33194:63;33141:122;:::o

Swarm Source

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