ETH Price: $2,475.15 (-1.89%)
Gas: 0.6 Gwei

Token

Eth Chat (ETHC)
 

Overview

Max Total Supply

100,000,000 ETHC

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ETHC

Value
$0.00
0xfa388c8459ecd6fc6b8959aecd3182ea46013f87
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:
EthChatToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-14
*/

// SPDX-License-Identifier: MIT

/**
 
*/

/**

website; https://www.eth-chat.com/
telegram: https://t.me/ethchatportal
twitter: https://twitter.com/EthChatOfficial

*/

pragma solidity ^0.8.17;

/**
 * Abstract contract 
 */
abstract contract Project {
    address public marketingWallet = 0x2823e58f79b95067D18656552B230f65A1368d87;
    address public devWallet = 0x3dCE27029301025785d874f82b15B963a2BD9c0B;

    string constant _name = "Eth Chat";
    string constant _symbol = "ETHC";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**8 * 10**_decimals;

    uint256 public _maxTxAmount = (_totalSupply * 10) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%]
    uint256 public _maxWalletToken = (_totalSupply * 10) / 1000; //

    uint256 public buyFee             = 25;
    uint256 public buyTotalFee        = buyFee;

    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 25;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;

    uint256 public transFee           = 1;

    uint256 public feeDenominator     = 100;

}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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

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

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

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

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



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

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

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

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

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

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

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}




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

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


/**
 * MainContract
 */
contract EthChatToken is Project, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

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

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

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] > amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }


// *** 
// End functions for the burning mechanism 
// *** 

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != devWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

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

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

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

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

// *** 
// Handle Fees
// *** 

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

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

        uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

// *** 
// End Handle Fees
// *** 

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

// *** 
// Various exempt functions
// *** 

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner() {
        isFeeExempt[holder] = exempt;
    }

    function setIsMaxExempt(address holder, bool exempt) external onlyOwner() {
        isMaxExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() {
        isTimelockExempt[holder] = exempt;
    }

// *** 
// End various exempt functions
// *** 


// ***
// Start fee things
// ***

    function setTransFee(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 60, "Fees cannot be that high");
    }

    function setBuyFees(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

// ***
// end fee stuff§2e sw. 
// ***



    function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() {
        isFeeExempt[devWallet] = false;
        isFeeExempt[_newWallet] = true;
        devWallet = _newWallet;
    }

    function setMarketingWallet(address _newWallet) external onlyOwner() {
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newWallet] = true;

        isMaxExempt[_newWallet] = true;

        marketingWallet = _newWallet;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() {

        isFeeExempt[devWallet] = false;
        isFeeExempt[_newdevWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        devWallet = _newdevWallet;
    }

// ***
// Swap settings
// ***

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

// ***
// End Swap settings
// ***

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

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

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    /* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

        uint256 SCCC = tokens * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052732823e58f79b95067d18656552b230f65a1368d876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dce27029301025785d874f82b15b963a2bd9c0b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000bd919062000c1f565b6305f5e100620000ce919062000c70565b6002556103e8600a600254620000e5919062000c70565b620000f1919062000cea565b6003556103e8600a60025462000108919062000c70565b62000114919062000cea565b600455601960055560055460065560016007556019600855600160095560095460075460085462000146919062000d22565b62000152919062000d22565b600a556001600b556064600c5561dead601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060146019556064601a556000601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff021916908315150217905550600a601b60026101000a81548160ff021916908360ff1602179055506001601d60006101000a81548160ff021916908315150217905550612710601e6002546200026f919062000c70565b6200027b919062000cea565b601e55612710601e60025462000292919062000c70565b6200029e919062000cea565b601f55348015620002ae57600080fd5b506000620002c162000a7d60201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000dc7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062000dc7565b6040518363ffffffff1660e01b81526004016200049892919062000e0a565b6020604051808303816000875af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de919062000dc7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000a6e919062000e48565b60405180910390a35062000e65565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b135780860481111562000aeb5762000aea62000a85565b5b600185161562000afb5780820291505b808102905062000b0b8562000ab4565b945062000acb565b94509492505050565b60008262000b2e576001905062000c01565b8162000b3e576000905062000c01565b816001811462000b57576002811462000b625762000b98565b600191505062000c01565b60ff84111562000b775762000b7662000a85565b5b8360020a91508482111562000b915762000b9062000a85565b5b5062000c01565b5060208310610133831016604e8410600b841016171562000bd25782820a90508381111562000bcc5762000bcb62000a85565b5b62000c01565b62000be1848484600162000ac1565b9250905081840481111562000bfb5762000bfa62000a85565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c2c8262000c08565b915062000c398362000c12565b925062000c687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b1c565b905092915050565b600062000c7d8262000c08565b915062000c8a8362000c08565b925082820262000c9a8162000c08565b9150828204841483151762000cb45762000cb362000a85565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf78262000c08565b915062000d048362000c08565b92508262000d175762000d1662000cbb565b5b828204905092915050565b600062000d2f8262000c08565b915062000d3c8362000c08565b925082820190508082111562000d575762000d5662000a85565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d8f8262000d62565b9050919050565b62000da18162000d82565b811462000dad57600080fd5b50565b60008151905062000dc18162000d96565b92915050565b60006020828403121562000de05762000ddf62000d5d565b5b600062000df08482850162000db0565b91505092915050565b62000e048162000d82565b82525050565b600060408201905062000e21600083018562000df9565b62000e30602083018462000df9565b9392505050565b62000e428162000c08565b82525050565b600060208201905062000e5f600083018462000e37565b92915050565b60805160a051615c3062000ed16000396000818161193a015281816127a5015281816134c3015281816135160152818161356d0152818161365101528181613864015261429c015260008181611e2c015281816144a10152818161458301526148200152615c306000f3fe6080604052600436106103b15760003560e01c80636ddd1713116101e7578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610db9578063f53fd58414610de2578063f84ba65d14610e0d578063ffb54a9914610e36576103b8565b8063dd62ed3e14610cff578063e53c30b014610d3c578063e632313c14610d67578063ee9ef29e14610d90576103b8565b8063d7c01032116100dc578063d7c0103214610c5b578063dcf7aef314610c84578063dd395c6314610cad578063dd46706414610cd6576103b8565b8063b6c5232414610b9f578063bd9ab53714610bca578063ca33e64c14610bf3578063d51ed1c814610c1e576103b8565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610af557806395d89b4114610b20578063a69df4b514610b4b578063a9059cbb14610b62576103b8565b80637d1db4a514610a4b5780638038cbd314610a76578063893d20e814610a9f5780638da5cb5b14610aca576103b8565b8063715018a6116101c1578063715018a6146109b3578063722b62ad146109ca57806375f0a874146109f557806378109e5414610a20576103b8565b80636ddd17131461092257806370a082311461094d578063713e4ae51461098a576103b8565b80632d594567116102d757806350db71fb1161026a578063617fe0ed11610239578063617fe0ed1461087a578063658d4b7f146108a557806367ac77b4146108ce5780636d1b229d146108f9576103b8565b806350db71fb146107c2578063571ac8b0146107eb5780635c85974f146108285780635d098b3814610851576103b8565b8063442a583d116102a6578063442a583d1461071857806346e421a214610741578063470624021461076c57806349bd5a5e14610797576103b8565b80632d5945671461066e5780632e8fa82114610697578063313ce567146106c25780633705b392146106ed576103b8565b8063180b0d7e1161034f578063201e79911161031e578063201e7991146105b457806323b872dd146105dd57806329e04b4a1461061a5780632b112e4914610643576103b8565b8063180b0d7e1461050a57806318160ddd146105355780631ad017b9146105605780631e25dc5414610589576103b8565b806309302dc61161038b57806309302dc61461043e578063095ea7b3146104675780630d295980146104a45780631161ae39146104cd576103b8565b8063026f7d15146103bd5780630445b667146103e857806306fdde0314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610e61565b6040516103df9190614966565b60405180910390f35b3480156103f457600080fd5b506103fd610e67565b60405161040a9190614966565b60405180910390f35b34801561041f57600080fd5b50610428610e6d565b6040516104359190614a11565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614a69565b610eaa565b005b34801561047357600080fd5b5061048e60048036038101906104899190614af4565b610f65565b60405161049b9190614b4f565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614b96565b611057565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614bc3565b61110b565b6040516105019190614b4f565b60405180910390f35b34801561051657600080fd5b5061051f611120565b60405161052c9190614966565b60405180910390f35b34801561054157600080fd5b5061054a611126565b6040516105579190614966565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614c03565b611130565b005b34801561059557600080fd5b5061059e6112dd565b6040516105ab9190614966565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190614bc3565b6112e3565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614c30565b61138c565b6040516106119190614b4f565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190614a69565b61158c565b005b34801561064f57600080fd5b5061065861162d565b6040516106659190614966565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190614cbc565b6116af565b005b3480156106a357600080fd5b506106ac61177f565b6040516106b99190614966565b60405180910390f35b3480156106ce57600080fd5b506106d7611785565b6040516106e49190614d0b565b60405180910390f35b3480156106f957600080fd5b5061070261178e565b60405161070f9190614966565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190614d8b565b611794565b005b34801561074d57600080fd5b5061075661192c565b6040516107639190614966565b60405180910390f35b34801561077857600080fd5b50610781611932565b60405161078e9190614966565b60405180910390f35b3480156107a357600080fd5b506107ac611938565b6040516107b99190614e0e565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190614e29565b61195c565b005b3480156107f757600080fd5b50610812600480360381019061080d9190614c03565b611a4e565b60405161081f9190614b4f565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190614a69565b611a81565b005b34801561085d57600080fd5b5061087860048036038101906108739190614c03565b611b22565b005b34801561088657600080fd5b5061088f611d25565b60405161089c9190614b4f565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614e29565b611d38565b005b3480156108da57600080fd5b506108e3611e2a565b6040516108f09190614ec8565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a69565b611e4e565b005b34801561092e57600080fd5b50610937611ec7565b6040516109449190614b4f565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190614c03565b611eda565b6040516109819190614966565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190614f39565b611f23565b005b3480156109bf57600080fd5b506109c8612154565b005b3480156109d657600080fd5b506109df6122ac565b6040516109ec9190614d0b565b60405180910390f35b348015610a0157600080fd5b50610a0a6122bf565b604051610a179190614e0e565b60405180910390f35b348015610a2c57600080fd5b50610a356122e3565b604051610a429190614966565b60405180910390f35b348015610a5757600080fd5b50610a606122e9565b604051610a6d9190614966565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614fce565b6122ef565b005b348015610aab57600080fd5b50610ab4612418565b604051610ac19190614e0e565b60405180910390f35b348015610ad657600080fd5b50610adf612427565b604051610aec9190614e0e565b60405180910390f35b348015610b0157600080fd5b50610b0a612451565b604051610b179190614e0e565b60405180910390f35b348015610b2c57600080fd5b50610b35612477565b604051610b429190614a11565b60405180910390f35b348015610b5757600080fd5b50610b606124b4565b005b348015610b6e57600080fd5b50610b896004803603810190610b849190614af4565b61268b565b604051610b969190614b4f565b60405180910390f35b348015610bab57600080fd5b50610bb46126a0565b604051610bc19190614966565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614a69565b6126aa565b005b348015610bff57600080fd5b50610c08612765565b604051610c159190614e0e565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c409190614a69565b61278b565b604051610c529190614966565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190615035565b6127fb565b005b348015610c9057600080fd5b50610cab6004803603810190610ca69190614a69565b612b54565b005b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614e29565b612bf5565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614a69565b612ce7565b005b348015610d0b57600080fd5b50610d266004803603810190610d219190615088565b612eb5565b604051610d339190614966565b60405180910390f35b348015610d4857600080fd5b50610d51612f3c565b604051610d5e9190614966565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d899190614a69565b612f42565b005b348015610d9c57600080fd5b50610db76004803603810190610db29190614a69565b612ffc565b005b348015610dc557600080fd5b50610de06004803603810190610ddb9190614c03565b61309d565b005b348015610dee57600080fd5b50610df7613263565b604051610e049190614966565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614e29565b613269565b005b348015610e4257600080fd5b50610e4b61335b565b604051610e589190614b4f565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600881526020017f4574682043686174000000000000000000000000000000000000000000000000815250905090565b610eb261336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890615114565b60405180910390fd5b6103e881600254610f529190615163565b610f5c91906151d4565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110459190614966565b60405180910390a36001905092915050565b61105f61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590615114565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6000826111178361278b565b11905092915050565b600c5481565b6000600254905090565b61113861336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90615114565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b6112eb61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190615114565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611578576114f7826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115838484846133cb565b90509392505050565b61159461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a90615114565b60405180910390fd5b80601e8190555050565b60006116aa61165d601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eda565b61169c61168b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eda565b600254613c9890919063ffffffff16565b613c9890919063ffffffff16565b905090565b6116b761336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90615114565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b61179c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290615114565b60405180910390fd5b6103218383905010611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990615277565b60405180910390fd5b600083839050826118839190615163565b90508061188f86611eda565b10156118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906152e3565b60405180910390fd5b60005b8484905081101561192457611910868686848181106118f5576118f4615303565b5b905060200201602081019061190a9190614c03565b85613cae565b50808061191c90615332565b9150506118d3565b505050505050565b60075481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61196461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90615114565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611a7a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f65565b9050919050565b611a8961336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90615114565b60405180910390fd5b8060038190555050565b611b2a61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090615114565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611d4061336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690615114565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ec457611ec233601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cae565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f2b61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190615114565b60405180910390fd5b6101f58484905010612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff8906153ec565b60405180910390fd5b818190508484905014612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061547e565b60405180910390fd5b6000805b858590508110156120925783838281811061206b5761206a615303565b5b905060200201358261207d919061549e565b9150808061208a90615332565b91505061204d565b508061209d87611eda565b10156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d5906152e3565b60405180910390fd5b60005b8585905081101561214b576121378787878481811061210357612102615303565b5b90506020020160208101906121189190614c03565b86868581811061212b5761212a615303565b5b90506020020135613cae565b50808061214390615332565b9150506120e1565b50505050505050565b61215c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290615114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b6122f761336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90615114565b60405180910390fd5b8360078190555082600881905550816009819055506123c0826123b28587613e8190919063ffffffff16565b613e8190919063ffffffff16565b600a8190555080600c81905550603c600a5410612412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124099061551e565b60405180910390fd5b50505050565b6000612422612427565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4554484300000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b906155b0565b60405180910390fd5b600f544211612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f9061561c565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006126983384846133cb565b905092915050565b6000600f54905090565b6126b261336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890615114565b60405180910390fd5b6103e8816002546127529190615163565b61275c91906151d4565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006127f461279861162d565b6127e66127d760026127c97f0000000000000000000000000000000000000000000000000000000000000000611eda565b613e9790919063ffffffff16565b85613e9790919063ffffffff16565b613ead90919063ffffffff16565b9050919050565b61280361336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990615114565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612b5c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be290615114565b60405180910390fd5b8060068190555050565b612bfd61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390615114565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612cef61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590615114565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612e2f919061549e565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612f4a61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd090615114565b60405180910390fd5b601e54811115612ff157601e54601f81905550612ff9565b80601f819055505b50565b61300461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a90615114565b60405180910390fd5b80600b8190555050565b6130a561336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312b90615114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a906156ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b61327161336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f790615114565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b60008383111582906133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b59190614a11565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff16156133f4576133ed848484613cae565b9050613c91565b6133fc612427565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561346a575061343a612427565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134bf57601b60009054906101000a900460ff166134be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b59061571a565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156135bc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136485750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156136a057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156136f8575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137525750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137ac5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156138625760006137bc86611eda565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386057600454858261381e919061549e565b111561385f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613856906157ac565b60405180910390fd5b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156138c95750601b60019054906101000a900460ff165b801561391f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a075742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106139a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399c9061583e565b60405180910390fd5b601b60029054906101000a900460ff1660ff16426139c3919061549e565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a6357613a628685613ec3565b5b613aec846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613b57576000600b541115613b5257613b4f8786613f60565b90505b613b8f565b613b60876140c9565b613b6a5784613b76565b613b75878685614120565b5b9050613b80614298565b15613b8e57613b8d61436d565b5b5b613be181601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c819190614966565b60405180910390a3600193505050505b9392505050565b60008183613ca6919061585e565b905092915050565b6000613d39826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dce82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e6e9190614966565b60405180910390a3600190509392505050565b60008183613e8f919061549e565b905092915050565b60008183613ea59190615163565b905092915050565b60008183613ebb91906151d4565b905092915050565b60035481111580613f1d5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f53906158de565b60405180910390fd5b5050565b600080600b5490506000613fb06064600c54613f7c9190615163565b613fa26064613f948689613e9790919063ffffffff16565b613e9790919063ffffffff16565b613ead90919063ffffffff16565b905061400481601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140a49190614966565b60405180910390a36140bf8185613c9890919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000808261413057600654614134565b600a545b9050600061417e6064600c5461414a9190615163565b6141706064614162868a613e9790919063ffffffff16565b613e9790919063ffffffff16565b613ead90919063ffffffff16565b90506141d281601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142729190614966565b60405180910390a361428d8186613c9890919063ffffffff16565b925050509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156143035750602060009054906101000a900460ff16155b801561431b5750601d60009054906101000a900460ff165b80156143685750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000614398601954601a5461110b565b6143a4576007546143a7565b60005b905060006143e760026143d9600a546143cb86601f54613e9790919063ffffffff16565b613ead90919063ffffffff16565b613ead90919063ffffffff16565b9050600061440082601f54613c9890919063ffffffff16565b90506000600267ffffffffffffffff81111561441f5761441e6158fe565b5b60405190808252806020026020018201604052801561444d5781602001602082028036833780820191505090505b509050308160008151811061446557614464615303565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561450a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061452e9190615942565b8160018151811061454257614541615303565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016145e3959493929190615a68565b600060405180830381600087803b1580156145fd57600080fd5b505af1158015614611573d6000803e3d6000fd5b50505050600061462a8247613c9890919063ffffffff16565b90506000614656614645600289613ead90919063ffffffff16565b600a54613c9890919063ffffffff16565b9050600061469460026146868461467860075488613e9790919063ffffffff16565b613ead90919063ffffffff16565b613ead90919063ffffffff16565b905060006146bf836146b160085487613e9790919063ffffffff16565b613ead90919063ffffffff16565b905060006146ea846146dc60095488613e9790919063ffffffff16565b613ead90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161473790615af3565b600060405180830381858888f193505050503d8060008114614775576040519150601f19603f3d011682016040523d82523d6000602084013e61477a565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516147c890615af3565b600060405180830381858888f193505050503d8060008114614806576040519150601f19603f3d011682016040523d82523d6000602084013e61480b565b606091505b5050809150506000905060008a1115614925577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016148a596959493929190615b08565b60606040518083038185885af11580156148c3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148e89190615b7e565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161491c929190615bd1565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b6149608161494d565b82525050565b600060208201905061497b6000830184614957565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149bb5780820151818401526020810190506149a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006149e382614981565b6149ed818561498c565b93506149fd81856020860161499d565b614a06816149c7565b840191505092915050565b60006020820190508181036000830152614a2b81846149d8565b905092915050565b600080fd5b600080fd5b614a468161494d565b8114614a5157600080fd5b50565b600081359050614a6381614a3d565b92915050565b600060208284031215614a7f57614a7e614a33565b5b6000614a8d84828501614a54565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac182614a96565b9050919050565b614ad181614ab6565b8114614adc57600080fd5b50565b600081359050614aee81614ac8565b92915050565b60008060408385031215614b0b57614b0a614a33565b5b6000614b1985828601614adf565b9250506020614b2a85828601614a54565b9150509250929050565b60008115159050919050565b614b4981614b34565b82525050565b6000602082019050614b646000830184614b40565b92915050565b614b7381614b34565b8114614b7e57600080fd5b50565b600081359050614b9081614b6a565b92915050565b600060208284031215614bac57614bab614a33565b5b6000614bba84828501614b81565b91505092915050565b60008060408385031215614bda57614bd9614a33565b5b6000614be885828601614a54565b9250506020614bf985828601614a54565b9150509250929050565b600060208284031215614c1957614c18614a33565b5b6000614c2784828501614adf565b91505092915050565b600080600060608486031215614c4957614c48614a33565b5b6000614c5786828701614adf565b9350506020614c6886828701614adf565b9250506040614c7986828701614a54565b9150509250925092565b600060ff82169050919050565b614c9981614c83565b8114614ca457600080fd5b50565b600081359050614cb681614c90565b92915050565b60008060408385031215614cd357614cd2614a33565b5b6000614ce185828601614b81565b9250506020614cf285828601614ca7565b9150509250929050565b614d0581614c83565b82525050565b6000602082019050614d206000830184614cfc565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d4b57614d4a614d26565b5b8235905067ffffffffffffffff811115614d6857614d67614d2b565b5b602083019150836020820283011115614d8457614d83614d30565b5b9250929050565b60008060008060608587031215614da557614da4614a33565b5b6000614db387828801614adf565b945050602085013567ffffffffffffffff811115614dd457614dd3614a38565b5b614de087828801614d35565b93509350506040614df387828801614a54565b91505092959194509250565b614e0881614ab6565b82525050565b6000602082019050614e236000830184614dff565b92915050565b60008060408385031215614e4057614e3f614a33565b5b6000614e4e85828601614adf565b9250506020614e5f85828601614b81565b9150509250929050565b6000819050919050565b6000614e8e614e89614e8484614a96565b614e69565b614a96565b9050919050565b6000614ea082614e73565b9050919050565b6000614eb282614e95565b9050919050565b614ec281614ea7565b82525050565b6000602082019050614edd6000830184614eb9565b92915050565b60008083601f840112614ef957614ef8614d26565b5b8235905067ffffffffffffffff811115614f1657614f15614d2b565b5b602083019150836020820283011115614f3257614f31614d30565b5b9250929050565b600080600080600060608688031215614f5557614f54614a33565b5b6000614f6388828901614adf565b955050602086013567ffffffffffffffff811115614f8457614f83614a38565b5b614f9088828901614d35565b9450945050604086013567ffffffffffffffff811115614fb357614fb2614a38565b5b614fbf88828901614ee3565b92509250509295509295909350565b60008060008060808587031215614fe857614fe7614a33565b5b6000614ff687828801614a54565b945050602061500787828801614a54565b935050604061501887828801614a54565b925050606061502987828801614a54565b91505092959194509250565b60008060006060848603121561504e5761504d614a33565b5b600061505c86828701614adf565b935050602061506d86828701614adf565b925050604061507e86828701614adf565b9150509250925092565b6000806040838503121561509f5761509e614a33565b5b60006150ad85828601614adf565b92505060206150be85828601614adf565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150fe60208361498c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061516e8261494d565b91506151798361494d565b92508282026151878161494d565b9150828204841483151761519e5761519d615134565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151df8261494d565b91506151ea8361494d565b9250826151fa576151f96151a5565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b6000615261602d8361498c565b915061526c82615205565b604082019050919050565b6000602082019050818103600083015261529081615254565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b60006152cd601b8361498c565b91506152d882615297565b602082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061533d8261494d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361536f5761536e615134565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b60006153d6602d8361498c565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b600061546860288361498c565b91506154738261540c565b604082019050919050565b600060208201905081810360008301526154978161545b565b9050919050565b60006154a98261494d565b91506154b48361494d565b92508282019050808211156154cc576154cb615134565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b600061550860188361498c565b9150615513826154d2565b602082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061559a60238361498c565b91506155a58261553e565b604082019050919050565b600060208201905081810360008301526155c98161558d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615606601f8361498c565b9150615611826155d0565b602082019050919050565b60006020820190508181036000830152615635816155f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569860268361498c565b91506156a38261563c565b604082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061570460148361498c565b915061570f826156ce565b602082019050919050565b60006020820190508181036000830152615733816156f7565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615796603e8361498c565b91506157a18261573a565b604082019050919050565b600060208201905081810360008301526157c581615789565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b600061582860258361498c565b9150615833826157cc565b604082019050919050565b600060208201905081810360008301526158578161581b565b9050919050565b60006158698261494d565b91506158748361494d565b925082820390508181111561588c5761588b615134565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006158c860118361498c565b91506158d382615892565b602082019050919050565b600060208201905081810360008301526158f7816158bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061593c81614ac8565b92915050565b60006020828403121561595857615957614a33565b5b60006159668482850161592d565b91505092915050565b6000819050919050565b600061599461598f61598a8461596f565b614e69565b61494d565b9050919050565b6159a481615979565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159df81614ab6565b82525050565b60006159f183836159d6565b60208301905092915050565b6000602082019050919050565b6000615a15826159aa565b615a1f81856159b5565b9350615a2a836159c6565b8060005b83811015615a5b578151615a4288826159e5565b9750615a4d836159fd565b925050600181019050615a2e565b5085935050505092915050565b600060a082019050615a7d6000830188614957565b615a8a602083018761599b565b8181036040830152615a9c8186615a0a565b9050615aab6060830185614dff565b615ab86080830184614957565b9695505050505050565b600081905092915050565b50565b6000615add600083615ac2565b9150615ae882615acd565b600082019050919050565b6000615afe82615ad0565b9150819050919050565b600060c082019050615b1d6000830189614dff565b615b2a6020830188614957565b615b37604083018761599b565b615b44606083018661599b565b615b516080830185614dff565b615b5e60a0830184614957565b979650505050505050565b600081519050615b7881614a3d565b92915050565b600080600060608486031215615b9757615b96614a33565b5b6000615ba586828701615b69565b9350506020615bb686828701615b69565b9250506040615bc786828701615b69565b9150509250925092565b6000604082019050615be66000830185614957565b615bf36020830184614957565b939250505056fea26469706673582212204525cac7e950a44373364dc4139cf30dc5bb38bface092d8b5a2f23cfb13d79c64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80636ddd1713116101e7578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610db9578063f53fd58414610de2578063f84ba65d14610e0d578063ffb54a9914610e36576103b8565b8063dd62ed3e14610cff578063e53c30b014610d3c578063e632313c14610d67578063ee9ef29e14610d90576103b8565b8063d7c01032116100dc578063d7c0103214610c5b578063dcf7aef314610c84578063dd395c6314610cad578063dd46706414610cd6576103b8565b8063b6c5232414610b9f578063bd9ab53714610bca578063ca33e64c14610bf3578063d51ed1c814610c1e576103b8565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610af557806395d89b4114610b20578063a69df4b514610b4b578063a9059cbb14610b62576103b8565b80637d1db4a514610a4b5780638038cbd314610a76578063893d20e814610a9f5780638da5cb5b14610aca576103b8565b8063715018a6116101c1578063715018a6146109b3578063722b62ad146109ca57806375f0a874146109f557806378109e5414610a20576103b8565b80636ddd17131461092257806370a082311461094d578063713e4ae51461098a576103b8565b80632d594567116102d757806350db71fb1161026a578063617fe0ed11610239578063617fe0ed1461087a578063658d4b7f146108a557806367ac77b4146108ce5780636d1b229d146108f9576103b8565b806350db71fb146107c2578063571ac8b0146107eb5780635c85974f146108285780635d098b3814610851576103b8565b8063442a583d116102a6578063442a583d1461071857806346e421a214610741578063470624021461076c57806349bd5a5e14610797576103b8565b80632d5945671461066e5780632e8fa82114610697578063313ce567146106c25780633705b392146106ed576103b8565b8063180b0d7e1161034f578063201e79911161031e578063201e7991146105b457806323b872dd146105dd57806329e04b4a1461061a5780632b112e4914610643576103b8565b8063180b0d7e1461050a57806318160ddd146105355780631ad017b9146105605780631e25dc5414610589576103b8565b806309302dc61161038b57806309302dc61461043e578063095ea7b3146104675780630d295980146104a45780631161ae39146104cd576103b8565b8063026f7d15146103bd5780630445b667146103e857806306fdde0314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610e61565b6040516103df9190614966565b60405180910390f35b3480156103f457600080fd5b506103fd610e67565b60405161040a9190614966565b60405180910390f35b34801561041f57600080fd5b50610428610e6d565b6040516104359190614a11565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190614a69565b610eaa565b005b34801561047357600080fd5b5061048e60048036038101906104899190614af4565b610f65565b60405161049b9190614b4f565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614b96565b611057565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614bc3565b61110b565b6040516105019190614b4f565b60405180910390f35b34801561051657600080fd5b5061051f611120565b60405161052c9190614966565b60405180910390f35b34801561054157600080fd5b5061054a611126565b6040516105579190614966565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614c03565b611130565b005b34801561059557600080fd5b5061059e6112dd565b6040516105ab9190614966565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190614bc3565b6112e3565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614c30565b61138c565b6040516106119190614b4f565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190614a69565b61158c565b005b34801561064f57600080fd5b5061065861162d565b6040516106659190614966565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190614cbc565b6116af565b005b3480156106a357600080fd5b506106ac61177f565b6040516106b99190614966565b60405180910390f35b3480156106ce57600080fd5b506106d7611785565b6040516106e49190614d0b565b60405180910390f35b3480156106f957600080fd5b5061070261178e565b60405161070f9190614966565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a9190614d8b565b611794565b005b34801561074d57600080fd5b5061075661192c565b6040516107639190614966565b60405180910390f35b34801561077857600080fd5b50610781611932565b60405161078e9190614966565b60405180910390f35b3480156107a357600080fd5b506107ac611938565b6040516107b99190614e0e565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190614e29565b61195c565b005b3480156107f757600080fd5b50610812600480360381019061080d9190614c03565b611a4e565b60405161081f9190614b4f565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190614a69565b611a81565b005b34801561085d57600080fd5b5061087860048036038101906108739190614c03565b611b22565b005b34801561088657600080fd5b5061088f611d25565b60405161089c9190614b4f565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614e29565b611d38565b005b3480156108da57600080fd5b506108e3611e2a565b6040516108f09190614ec8565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190614a69565b611e4e565b005b34801561092e57600080fd5b50610937611ec7565b6040516109449190614b4f565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190614c03565b611eda565b6040516109819190614966565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190614f39565b611f23565b005b3480156109bf57600080fd5b506109c8612154565b005b3480156109d657600080fd5b506109df6122ac565b6040516109ec9190614d0b565b60405180910390f35b348015610a0157600080fd5b50610a0a6122bf565b604051610a179190614e0e565b60405180910390f35b348015610a2c57600080fd5b50610a356122e3565b604051610a429190614966565b60405180910390f35b348015610a5757600080fd5b50610a606122e9565b604051610a6d9190614966565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614fce565b6122ef565b005b348015610aab57600080fd5b50610ab4612418565b604051610ac19190614e0e565b60405180910390f35b348015610ad657600080fd5b50610adf612427565b604051610aec9190614e0e565b60405180910390f35b348015610b0157600080fd5b50610b0a612451565b604051610b179190614e0e565b60405180910390f35b348015610b2c57600080fd5b50610b35612477565b604051610b429190614a11565b60405180910390f35b348015610b5757600080fd5b50610b606124b4565b005b348015610b6e57600080fd5b50610b896004803603810190610b849190614af4565b61268b565b604051610b969190614b4f565b60405180910390f35b348015610bab57600080fd5b50610bb46126a0565b604051610bc19190614966565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec9190614a69565b6126aa565b005b348015610bff57600080fd5b50610c08612765565b604051610c159190614e0e565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c409190614a69565b61278b565b604051610c529190614966565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190615035565b6127fb565b005b348015610c9057600080fd5b50610cab6004803603810190610ca69190614a69565b612b54565b005b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614e29565b612bf5565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614a69565b612ce7565b005b348015610d0b57600080fd5b50610d266004803603810190610d219190615088565b612eb5565b604051610d339190614966565b60405180910390f35b348015610d4857600080fd5b50610d51612f3c565b604051610d5e9190614966565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d899190614a69565b612f42565b005b348015610d9c57600080fd5b50610db76004803603810190610db29190614a69565b612ffc565b005b348015610dc557600080fd5b50610de06004803603810190610ddb9190614c03565b61309d565b005b348015610dee57600080fd5b50610df7613263565b604051610e049190614966565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614e29565b613269565b005b348015610e4257600080fd5b50610e4b61335b565b604051610e589190614b4f565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600881526020017f4574682043686174000000000000000000000000000000000000000000000000815250905090565b610eb261336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890615114565b60405180910390fd5b6103e881600254610f529190615163565b610f5c91906151d4565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110459190614966565b60405180910390a36001905092915050565b61105f61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590615114565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6000826111178361278b565b11905092915050565b600c5481565b6000600254905090565b61113861336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90615114565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b6112eb61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190615114565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611578576114f7826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6115838484846133cb565b90509392505050565b61159461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a90615114565b60405180910390fd5b80601e8190555050565b60006116aa61165d601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eda565b61169c61168b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eda565b600254613c9890919063ffffffff16565b613c9890919063ffffffff16565b905090565b6116b761336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90615114565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b61179c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290615114565b60405180910390fd5b6103218383905010611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990615277565b60405180910390fd5b600083839050826118839190615163565b90508061188f86611eda565b10156118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c7906152e3565b60405180910390fd5b60005b8484905081101561192457611910868686848181106118f5576118f4615303565b5b905060200201602081019061190a9190614c03565b85613cae565b50808061191c90615332565b9150506118d3565b505050505050565b60075481565b60055481565b7f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff81565b61196461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90615114565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611a7a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f65565b9050919050565b611a8961336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90615114565b60405180910390fd5b8060038190555050565b611b2a61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090615114565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611d4061336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690615114565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ec457611ec233601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613cae565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f2b61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190615114565b60405180910390fd5b6101f58484905010612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff8906153ec565b60405180910390fd5b818190508484905014612049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120409061547e565b60405180910390fd5b6000805b858590508110156120925783838281811061206b5761206a615303565b5b905060200201358261207d919061549e565b9150808061208a90615332565b91505061204d565b508061209d87611eda565b10156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d5906152e3565b60405180910390fd5b60005b8585905081101561214b576121378787878481811061210357612102615303565b5b90506020020160208101906121189190614c03565b86868581811061212b5761212a615303565b5b90506020020135613cae565b50808061214390615332565b9150506120e1565b50505050505050565b61215c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e290615114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b6122f761336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237d90615114565b60405180910390fd5b8360078190555082600881905550816009819055506123c0826123b28587613e8190919063ffffffff16565b613e8190919063ffffffff16565b600a8190555080600c81905550603c600a5410612412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124099061551e565b60405180910390fd5b50505050565b6000612422612427565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4554484300000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b906155b0565b60405180910390fd5b600f544211612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f9061561c565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006126983384846133cb565b905092915050565b6000600f54905090565b6126b261336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890615114565b60405180910390fd5b6103e8816002546127529190615163565b61275c91906151d4565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006127f461279861162d565b6127e66127d760026127c97f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff611eda565b613e9790919063ffffffff16565b85613e9790919063ffffffff16565b613ead90919063ffffffff16565b9050919050565b61280361336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288990615114565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612b5c61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be290615114565b60405180910390fd5b8060068190555050565b612bfd61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390615114565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612cef61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590615114565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612e2f919061549e565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612f4a61336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd090615114565b60405180910390fd5b601e54811115612ff157601e54601f81905550612ff9565b80601f819055505b50565b61300461336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a90615114565b60405180910390fd5b80600b8190555050565b6130a561336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312b90615114565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036131a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319a906156ae565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b61327161336e565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f790615114565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b60008383111582906133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b59190614a11565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff16156133f4576133ed848484613cae565b9050613c91565b6133fc612427565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561346a575061343a612427565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134bf57601b60009054906101000a900460ff166134be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b59061571a565b60405180910390fd5b5b60007f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156135bc57507f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136485750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156136a057507f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156136f8575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137525750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137ac5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156138625760006137bc86611eda565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386057600454858261381e919061549e565b111561385f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613856906157ac565b60405180910390fd5b5b505b7f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156138c95750601b60019054906101000a900460ff165b801561391f5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a075742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106139a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399c9061583e565b60405180910390fd5b601b60029054906101000a900460ff1660ff16426139c3919061549e565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a6357613a628685613ec3565b5b613aec846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008490508115613b57576000600b541115613b5257613b4f8786613f60565b90505b613b8f565b613b60876140c9565b613b6a5784613b76565b613b75878685614120565b5b9050613b80614298565b15613b8e57613b8d61436d565b5b5b613be181601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c819190614966565b60405180910390a3600193505050505b9392505050565b60008183613ca6919061585e565b905092915050565b6000613d39826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133769092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dce82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e6e9190614966565b60405180910390a3600190509392505050565b60008183613e8f919061549e565b905092915050565b60008183613ea59190615163565b905092915050565b60008183613ebb91906151d4565b905092915050565b60035481111580613f1d5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f53906158de565b60405180910390fd5b5050565b600080600b5490506000613fb06064600c54613f7c9190615163565b613fa26064613f948689613e9790919063ffffffff16565b613e9790919063ffffffff16565b613ead90919063ffffffff16565b905061400481601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140a49190614966565b60405180910390a36140bf8185613c9890919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b6000808261413057600654614134565b600a545b9050600061417e6064600c5461414a9190615163565b6141706064614162868a613e9790919063ffffffff16565b613e9790919063ffffffff16565b613ead90919063ffffffff16565b90506141d281601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8190919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142729190614966565b60405180910390a361428d8186613c9890919063ffffffff16565b925050509392505050565b60007f0000000000000000000000008dd39b5431bca58a09cd0e5c854c900bbcca80ff73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156143035750602060009054906101000a900460ff16155b801561431b5750601d60009054906101000a900460ff165b80156143685750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff0219169083151502179055506000614398601954601a5461110b565b6143a4576007546143a7565b60005b905060006143e760026143d9600a546143cb86601f54613e9790919063ffffffff16565b613ead90919063ffffffff16565b613ead90919063ffffffff16565b9050600061440082601f54613c9890919063ffffffff16565b90506000600267ffffffffffffffff81111561441f5761441e6158fe565b5b60405190808252806020026020018201604052801561444d5781602001602082028036833780820191505090505b509050308160008151811061446557614464615303565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561450a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061452e9190615942565b8160018151811061454257614541615303565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016145e3959493929190615a68565b600060405180830381600087803b1580156145fd57600080fd5b505af1158015614611573d6000803e3d6000fd5b50505050600061462a8247613c9890919063ffffffff16565b90506000614656614645600289613ead90919063ffffffff16565b600a54613c9890919063ffffffff16565b9050600061469460026146868461467860075488613e9790919063ffffffff16565b613ead90919063ffffffff16565b613ead90919063ffffffff16565b905060006146bf836146b160085487613e9790919063ffffffff16565b613ead90919063ffffffff16565b905060006146ea846146dc60095488613e9790919063ffffffff16565b613ead90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161473790615af3565b600060405180830381858888f193505050503d8060008114614775576040519150601f19603f3d011682016040523d82523d6000602084013e61477a565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516147c890615af3565b600060405180830381858888f193505050503d8060008114614806576040519150601f19603f3d011682016040523d82523d6000602084013e61480b565b606091505b5050809150506000905060008a1115614925577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016148a596959493929190615b08565b60606040518083038185885af11580156148c3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148e89190615b7e565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161491c929190615bd1565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b6149608161494d565b82525050565b600060208201905061497b6000830184614957565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156149bb5780820151818401526020810190506149a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006149e382614981565b6149ed818561498c565b93506149fd81856020860161499d565b614a06816149c7565b840191505092915050565b60006020820190508181036000830152614a2b81846149d8565b905092915050565b600080fd5b600080fd5b614a468161494d565b8114614a5157600080fd5b50565b600081359050614a6381614a3d565b92915050565b600060208284031215614a7f57614a7e614a33565b5b6000614a8d84828501614a54565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ac182614a96565b9050919050565b614ad181614ab6565b8114614adc57600080fd5b50565b600081359050614aee81614ac8565b92915050565b60008060408385031215614b0b57614b0a614a33565b5b6000614b1985828601614adf565b9250506020614b2a85828601614a54565b9150509250929050565b60008115159050919050565b614b4981614b34565b82525050565b6000602082019050614b646000830184614b40565b92915050565b614b7381614b34565b8114614b7e57600080fd5b50565b600081359050614b9081614b6a565b92915050565b600060208284031215614bac57614bab614a33565b5b6000614bba84828501614b81565b91505092915050565b60008060408385031215614bda57614bd9614a33565b5b6000614be885828601614a54565b9250506020614bf985828601614a54565b9150509250929050565b600060208284031215614c1957614c18614a33565b5b6000614c2784828501614adf565b91505092915050565b600080600060608486031215614c4957614c48614a33565b5b6000614c5786828701614adf565b9350506020614c6886828701614adf565b9250506040614c7986828701614a54565b9150509250925092565b600060ff82169050919050565b614c9981614c83565b8114614ca457600080fd5b50565b600081359050614cb681614c90565b92915050565b60008060408385031215614cd357614cd2614a33565b5b6000614ce185828601614b81565b9250506020614cf285828601614ca7565b9150509250929050565b614d0581614c83565b82525050565b6000602082019050614d206000830184614cfc565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d4b57614d4a614d26565b5b8235905067ffffffffffffffff811115614d6857614d67614d2b565b5b602083019150836020820283011115614d8457614d83614d30565b5b9250929050565b60008060008060608587031215614da557614da4614a33565b5b6000614db387828801614adf565b945050602085013567ffffffffffffffff811115614dd457614dd3614a38565b5b614de087828801614d35565b93509350506040614df387828801614a54565b91505092959194509250565b614e0881614ab6565b82525050565b6000602082019050614e236000830184614dff565b92915050565b60008060408385031215614e4057614e3f614a33565b5b6000614e4e85828601614adf565b9250506020614e5f85828601614b81565b9150509250929050565b6000819050919050565b6000614e8e614e89614e8484614a96565b614e69565b614a96565b9050919050565b6000614ea082614e73565b9050919050565b6000614eb282614e95565b9050919050565b614ec281614ea7565b82525050565b6000602082019050614edd6000830184614eb9565b92915050565b60008083601f840112614ef957614ef8614d26565b5b8235905067ffffffffffffffff811115614f1657614f15614d2b565b5b602083019150836020820283011115614f3257614f31614d30565b5b9250929050565b600080600080600060608688031215614f5557614f54614a33565b5b6000614f6388828901614adf565b955050602086013567ffffffffffffffff811115614f8457614f83614a38565b5b614f9088828901614d35565b9450945050604086013567ffffffffffffffff811115614fb357614fb2614a38565b5b614fbf88828901614ee3565b92509250509295509295909350565b60008060008060808587031215614fe857614fe7614a33565b5b6000614ff687828801614a54565b945050602061500787828801614a54565b935050604061501887828801614a54565b925050606061502987828801614a54565b91505092959194509250565b60008060006060848603121561504e5761504d614a33565b5b600061505c86828701614adf565b935050602061506d86828701614adf565b925050604061507e86828701614adf565b9150509250925092565b6000806040838503121561509f5761509e614a33565b5b60006150ad85828601614adf565b92505060206150be85828601614adf565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150fe60208361498c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061516e8261494d565b91506151798361494d565b92508282026151878161494d565b9150828204841483151761519e5761519d615134565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151df8261494d565b91506151ea8361494d565b9250826151fa576151f96151a5565b5b828204905092915050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3830302061646472657373657300000000000000000000000000000000000000602082015250565b6000615261602d8361498c565b915061526c82615205565b604082019050919050565b6000602082019050818103600083015261529081615254565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b60006152cd601b8361498c565b91506152d882615297565b602082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061533d8261494d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361536f5761536e615134565b5b600182019050919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b60006153d6602d8361498c565b91506153e18261537a565b604082019050919050565b60006020820190508181036000830152615405816153c9565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b600061546860288361498c565b91506154738261540c565b604082019050919050565b600060208201905081810360008301526154978161545b565b9050919050565b60006154a98261494d565b91506154b48361494d565b92508282019050808211156154cc576154cb615134565b5b92915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b600061550860188361498c565b9150615513826154d2565b602082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061559a60238361498c565b91506155a58261553e565b604082019050919050565b600060208201905081810360008301526155c98161558d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615606601f8361498c565b9150615611826155d0565b602082019050919050565b60006020820190508181036000830152615635816155f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569860268361498c565b91506156a38261563c565b604082019050919050565b600060208201905081810360008301526156c78161568b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061570460148361498c565b915061570f826156ce565b602082019050919050565b60006020820190508181036000830152615733816156f7565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615796603e8361498c565b91506157a18261573a565b604082019050919050565b600060208201905081810360008301526157c581615789565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b600061582860258361498c565b9150615833826157cc565b604082019050919050565b600060208201905081810360008301526158578161581b565b9050919050565b60006158698261494d565b91506158748361494d565b925082820390508181111561588c5761588b615134565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006158c860118361498c565b91506158d382615892565b602082019050919050565b600060208201905081810360008301526158f7816158bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061593c81614ac8565b92915050565b60006020828403121561595857615957614a33565b5b60006159668482850161592d565b91505092915050565b6000819050919050565b600061599461598f61598a8461596f565b614e69565b61494d565b9050919050565b6159a481615979565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6159df81614ab6565b82525050565b60006159f183836159d6565b60208301905092915050565b6000602082019050919050565b6000615a15826159aa565b615a1f81856159b5565b9350615a2a836159c6565b8060005b83811015615a5b578151615a4288826159e5565b9750615a4d836159fd565b925050600181019050615a2e565b5085935050505092915050565b600060a082019050615a7d6000830188614957565b615a8a602083018761599b565b8181036040830152615a9c8186615a0a565b9050615aab6060830185614dff565b615ab86080830184614957565b9695505050505050565b600081905092915050565b50565b6000615add600083615ac2565b9150615ae882615acd565b600082019050919050565b6000615afe82615ad0565b9150819050919050565b600060c082019050615b1d6000830189614dff565b615b2a6020830188614957565b615b37604083018761599b565b615b44606083018661599b565b615b516080830185614dff565b615b5e60a0830184614957565b979650505050505050565b600081519050615b7881614a3d565b92915050565b600080600060608486031215615b9757615b96614a33565b5b6000615ba586828701615b69565b9350506020615bb686828701615b69565b9250506040615bc786828701615b69565b9150509250925092565b6000604082019050615be66000830185614957565b615bf36020830184614957565b939250505056fea26469706673582212204525cac7e950a44373364dc4139cf30dc5bb38bface092d8b5a2f23cfb13d79c64736f6c63430008110033

Deployed Bytecode Sourcemap

18263:15845:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;933:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19243:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20857:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22177:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21281:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27301:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32757:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1156:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20587:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30819:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1110:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32231:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21799:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31842:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32423:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27442:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19306:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20681:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;838:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33590:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;889:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;793:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18973;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29843:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21505:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22540:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31023:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19060:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29448:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18916:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22800:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19206:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21029:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32934:648;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8923:148;;;;;;;;;;;;;:::i;:::-;;19104:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;278:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;722:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;612:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30172:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20943:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8280:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;360:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20767:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9945:305;;;;;;;;;;;;;:::i;:::-;;21635:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9478:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22360:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18787:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32573:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31280:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30666:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29577:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9643:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21140:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1022:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31962:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30076:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9226:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;978:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29706:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19020:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;933:38;;;;:::o;19243:56::-;;;;:::o;20857:80::-;20905:13;20929:5;;;;;;;;;;;;;;;;;20922:12;;20857:80;:::o;22177:177::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22342:4:::1;22314:23;22299:12;;:38;;;;:::i;:::-;22298:48;;;;:::i;:::-;22280:15;:66;;;;22177:177:::0;:::o;21281:216::-;21356:4;21408:6;21373:11;:23;21385:10;21373:23;;;;;;;;;;;;;;;:32;21397:7;21373:32;;;;;;;;;;;;;;;:41;;;;21451:7;21430:37;;21439:10;21430:37;;;21460:6;21430:37;;;;;;:::i;:::-;;;;;;;;21485:4;21478:11;;21281:216;;;;:::o;27301:94::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27380:7:::1;27366:11;;:21;;;;;;;;;;;;;;;;;;27301:94:::0;:::o;32757:150::-;32837:4;32893:6;32861:29;32881:8;32861:19;:29::i;:::-;:38;32854:45;;32757:150;;;;:::o;1156:39::-;;;;:::o;20587:88::-;20642:7;20660:12;;20653:19;;20587:88;:::o;30819:196::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30928:5:::1;30903:11;:22;30915:9;;;;;;;;;;;30903:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30970:4;30944:11;:23;30956:10;30944:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30997:10;30985:9;;:22;;;;;;;;;;;;;;;;;;30819:196:::0;:::o;1110:37::-;;;;:::o;32231:184::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32348:7:::1;32330:15;:25;;;;32395:12;32366:26;:41;;;;32231:184:::0;;:::o;21799:370::-;21899:4;21954:17;21919:11;:19;21931:6;21919:19;;;;;;;;;;;;;;;:31;21939:10;21919:31;;;;;;;;;;;;;;;;:52;21916:186;;22021:69;22057:6;22021:69;;;;;;;;;;;;;;;;;:11;:19;22033:6;22021:19;;;;;;;;;;;;;;;:31;22041:10;22021:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;21987:11;:19;21999:6;21987:19;;;;;;;;;;;;;;;:31;22007:10;21987:31;;;;;;;;;;;;;;;:103;;;;21916:186;22121:40;22135:6;22143:9;22154:6;22121:13;:40::i;:::-;22114:47;;21799:370;;;;;:::o;31842:112::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31939:7:::1;31923:13;:23;;;;31842:112:::0;:::o;32423:142::-;32476:7;32503:54;32541:15;32551:4;;;;;;;;;;;32541:9;:15::i;:::-;32503:33;32520:15;32530:4;;;;;;;;;;;32520:9;:15::i;:::-;32503:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;32496:61;;32423:142;:::o;27442:164::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27547:7:::1;27526:18;;:28;;;;;;;;;;;;;;;;;;27589:9;27565:21;;:33;;;;;;;;;;;;;;;;;;27442:164:::0;;:::o;19306:53::-;;;;:::o;20681:80::-;20733:5;545:1;20742:16;;20681:80;:::o;838:42::-;;;;:::o;33590:449::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33731:3:::1;33712:9;;:16;;:22;33704:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;33796:12;33820:9;;:16;;33811:6;:25;;;;:::i;:::-;33796:40;;33876:4;33857:15;33867:4;33857:9;:15::i;:::-;:23;;33849:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33929:6;33925:107;33943:9;;:16;;33939:1;:20;33925:107;;;33980:40;33995:4;34000:9;;34010:1;34000:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34013:6;33980:14;:40::i;:::-;;33961:3;;;;;:::i;:::-;;;;33925:107;;;;33691:348;33590:449:::0;;;;:::o;889:37::-;;;;:::o;793:38::-;;;;:::o;18973:::-;;;:::o;29843:131::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29960:6:::1;29933:16;:24;29950:6;29933:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;29843:131:::0;;:::o;21505:122::-;21560:4;21584:35;21592:7;21601:17;21584:7;:35::i;:::-;21577:42;;21505:122;;;:::o;22540:97::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:6:::1;22608:12;:21;;;;22540:97:::0;:::o;31023:249::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31134:5:::1;31103:11;:28;31115:15:::0;::::1;;;;;;;;;;31103:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31176:4;31150:11;:23;31162:10;31150:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31219:4;31193:11;:23;31205:10;31193:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31254:10;31236:15;::::0;:28:::1;;;;;;;;;;;;;;;;;;31023:249:::0;:::o;19060:37::-;;;;;;;;;;;;;:::o;29448:121::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29555:6:::1;29533:11;:19;29545:6;29533:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29448:121:::0;;:::o;18916:50::-;;;:::o;22800:231::-;22949:6;22925:9;:21;22935:10;22925:21;;;;;;;;;;;;;;;;:30;22922:102;;;22972:40;22987:10;22999:4;;;;;;;;;;;23005:6;22972:14;:40::i;:::-;;22922:102;22800:231;:::o;19206:30::-;;;;;;;;;;;;;:::o;21029:105::-;21095:7;21113:9;:18;21123:7;21113:18;;;;;;;;;;;;;;;;21106:25;;21029:105;;;:::o;32934:648::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33087:3:::1;33068:9;;:16;;:22;33060:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;33178:6;;:13;;33158:9;;:16;;:33;33150:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33248:12;33281:6:::0;33277:90:::1;33295:9;;:16;;33291:1;:20;33277:90;;;33346:6;;33353:1;33346:9;;;;;;;:::i;:::-;;;;;;;;33339:4;:16;;;;:::i;:::-;33332:23;;33313:3;;;;;:::i;:::-;;;;33277:90;;;;33406:4;33387:15;33397:4;33387:9;:15::i;:::-;:23;;33379:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33459:6;33455:110;33473:9;;:16;;33469:1;:20;33455:110;;;33510:43;33525:4;33530:9;;33540:1;33530:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33543:6;;33550:1;33543:9;;;;;;;:::i;:::-;;;;;;;;33510:14;:43::i;:::-;;33491:3;;;;;:::i;:::-;;;;33455:110;;;;33047:535;32934:648:::0;;;;;:::o;8923:148::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9030:1:::1;8993:40;;9014:6;;;;;;;;;;;8993:40;;;;;;;;;;;;9061:1;9044:6;;:19;;;;;;;;;;;;;;;;;;8923:148::o:0;19104:39::-;;;;;;;;;;;;;:::o;278:75::-;;;;;;;;;;;;:::o;722:59::-;;;;:::o;612:56::-;;;;:::o;30172:486::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30344:13:::1;30332:9;:25;;;;30384:20;30368:13;:36;;;;30433:19;30415:15;:37;;;;30478:64;30522:19;30478:39;30496:20;30478:13;:17;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;30463:12;:79;;;;30570:15;30553:14;:32;;;;30619:2;30604:12;;:17;30596:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;30172:486:::0;;;;:::o;20943:80::-;20995:7;21013;:5;:7::i;:::-;21006:14;;20943:80;:::o;8280:79::-;8318:7;8345:6;;;;;;;;;;;8338:13;;8280:79;:::o;360:69::-;;;;;;;;;;;;;:::o;20767:84::-;20817:13;20841:7;;;;;;;;;;;;;;;;;20834:14;;20767:84;:::o;9945:305::-;10015:10;9997:28;;:14;;;;;;;;;;;:28;;;9989:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10102:9;;10084:15;:27;10076:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10193:14;;;;;;;;;;;10164:44;;10185:6;;;;;;;;;;;10164:44;;;;;;;;;;;;10228:14;;;;;;;;;;;10219:6;;:23;;;;;;;;;;;;;;;;;;9945:305::o;21635:156::-;21715:4;21739:44;21753:10;21765:9;21776:6;21739:13;:44::i;:::-;21732:51;;21635:156;;;;:::o;9478:89::-;9523:7;9550:9;;9543:16;;9478:89;:::o;22360:172::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22520:4:::1;22491:24;22476:12;;:39;;;;:::i;:::-;22475:49;;;;:::i;:::-;22460:12;:64;;;;22360:172:::0;:::o;18787:36::-;;;;;;;;;;;;;:::o;32573:176::-;32641:7;32668:73;32718:22;:20;:22::i;:::-;32668:45;32681:31;32710:1;32681:24;32691:13;32681:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;32668:8;:12;;:45;;;;:::i;:::-;:49;;:73;;;;:::i;:::-;32661:80;;32573:176;;;:::o;31280:518::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31449:5:::1;31424:11;:22;31436:9;;;;;;;;;;;31424:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31494:4;31465:11;:26;31477:13;31465:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31540:5;31509:11;:28;31521:15:::0;::::1;;;;;;;;;;31509:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31591:4;31556:11;:32;31568:19;31556:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31643:4;31608:11;:32;31620:19;31608:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31684:22;31660:21;;:46;;;;;;;;;;;;;;;;;;31735:19;31717:15;::::0;:37:::1;;;;;;;;;;;;;;;;;;31777:13;31765:9;;:25;;;;;;;;;;;;;;;;;;31280:518:::0;;;:::o;30666:96::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30748:6:::1;30734:11;:20;;;;30666:96:::0;:::o;29577:121::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:6:::1;29662:11;:19;29674:6;29662:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29577:121:::0;;:::o;9643:226::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9724:6:::1;;;;;;;;;;;9707:14;;:23;;;;;;;;;;;;;;;;;;9758:1;9741:6;;:19;;;;;;;;;;;;;;;;;;9801:4;9783:15;:22;;;;:::i;:::-;9771:9;:34;;;;9858:1;9821:40;;9842:6;;;;;;;;;;;9821:40;;;;;;;;;;;;9643:226:::0;:::o;21140:133::-;21224:7;21242:11;:19;21254:6;21242:19;;;;;;;;;;;;;;;:28;21262:7;21242:28;;;;;;;;;;;;;;;;21235:35;;21140:133;;;;:::o;1022:79::-;;;;:::o;31962:221::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:13:::1;;32037:7;:23;32034:134;;;32090:13;;32077:10;:26;;;;32034:134;;;32149:7;32136:10;:20;;;;32034:134;31962:221:::0;:::o;30076:88::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30153:3:::1;30142:8;:14;;;;30076:88:::0;:::o;9226:244::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9335:1:::1;9315:22;;:8;:22;;::::0;9307:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9425:8;9396:38;;9417:6;;;;;;;;;;;9396:38;;;;;;;;;;;;9454:8;9445:6;;:17;;;;;;;;;;;;;;;;;;9226:244:::0;:::o;978:37::-;;;;:::o;29706:129::-;8502:12;:10;:12::i;:::-;8492:22;;:6;;;;;;;;;;;:22;;;8484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:6:::1;29795:15;:23;29811:6;29795:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;29706:129:::0;;:::o;19020:31::-;;;;;;;;;;;;;:::o;6864:98::-;6917:7;6944:10;6937:17;;6864:98;:::o;3952:240::-;4072:7;4130:1;4125;:6;;4133:12;4117:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4172:1;4168;:5;4161:12;;3952:240;;;;;:::o;23106:2380::-;23198:4;23218:6;;;;;;;;;;;23215:63;;;23234:41;23249:6;23257:9;23268:6;23234:14;:41::i;:::-;23227:48;;;;23215:63;23303:7;:5;:7::i;:::-;23293:17;;:6;:17;;;;:41;;;;;23327:7;:5;:7::i;:::-;23314:20;;:9;:20;;;;23293:41;23290:115;;;23358:11;;;;;;;;;;;23350:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;23290:115;23417:11;23445:13;23432:26;;:9;:26;;;23417:42;;23470:15;23502:13;23489:26;;:9;:26;;;;:53;;;;;23529:13;23519:23;;:6;:23;;;;23489:53;23470:73;;23581:4;23560:26;;:9;:26;;;;:70;;;;;23625:4;;;;;;;;;;;23604:26;;:9;:26;;;;23560:70;:114;;;;;23661:13;23648:26;;:9;:26;;;;23560:114;:160;;;;;23705:15;;;;;;;;;;23692:28;;:9;:28;;;;23560:160;:200;;;;;23751:9;;;;;;;;;;;23738:22;;:9;:22;;;;23560:200;:252;;;;;23791:21;;;;;;;;;;;23778:34;;:9;:34;;;;23560:252;23556:526;;;23838:18;23859:20;23869:9;23859;:20::i;:::-;23838:41;;23898:11;:22;23910:9;23898:22;;;;;;;;;;;;;;;;;;;;;;;;;23894:177;;23974:15;;23963:6;23950:10;:19;;;;:::i;:::-;23949:40;;23941:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23894:177;23823:259;23556:526;24108:13;24098:23;;:6;:23;;;:58;;;;;24138:18;;;;;;;;;;;24098:58;:103;;;;;24174:16;:27;24191:9;24174:27;;;;;;;;;;;;;;;;;;;;;;;;;24173:28;24098:103;24094:317;;;24262:15;24235:13;:24;24249:9;24235:24;;;;;;;;;;;;;;;;:42;24227:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24378:21;;;;;;;;;;;24360:39;;:15;:39;;;;:::i;:::-;24333:13;:24;24347:9;24333:24;;;;;;;;;;;;;;;:66;;;;24094:317;24633:15;:26;24649:9;24633:26;;;;;;;;;;;;;;;;;;;;;;;;;24629:87;;24676:28;24689:6;24697;24676:12;:28::i;:::-;24629:87;24775:53;24797:6;24775:53;;;;;;;;;;;;;;;;;:9;:17;24785:6;24775:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24755:9;:17;24765:6;24755:17;;;;;;;;;;;;;;;:73;;;;24841:22;24866:6;24841:31;;25005:10;25002:318;;;25046:1;25035:8;;:12;25032:100;;;25085:31;25101:6;25109;25085:15;:31::i;:::-;25068:48;;25032:100;25002:318;;;25181:21;25195:6;25181:13;:21::i;:::-;:64;;25239:6;25181:64;;;25205:31;25213:6;25221;25229;25205:7;:31::i;:::-;25181:64;25164:81;;25277:16;:14;:16::i;:::-;25274:35;;;25296:10;:8;:10::i;:::-;25274:35;25002:318;25355:40;25380:14;25355:9;:20;25365:9;25355:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;25332:9;:20;25342:9;25332:20;;;;;;;;;;;;;;;:63;;;;25430:9;25413:43;;25422:6;25413:43;;;25441:14;25413:43;;;;;;:::i;:::-;;;;;;;;25474:4;25467:11;;;;;23106:2380;;;;;;:::o;2054:98::-;2112:7;2143:1;2139;:5;;;;:::i;:::-;2132:12;;2054:98;;;;:::o;25494:330::-;25587:4;25624:53;25646:6;25624:53;;;;;;;;;;;;;;;;;:9;:17;25634:6;25624:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25604:9;:17;25614:6;25604:17;;;;;;;;;;;;;;;:73;;;;25711:32;25736:6;25711:9;:20;25721:9;25711:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25688:9;:20;25698:9;25688:20;;;;;;;;;;;;;;;:55;;;;25776:9;25759:35;;25768:6;25759:35;;;25787:6;25759:35;;;;;;:::i;:::-;;;;;;;;25812:4;25805:11;;25494:330;;;;;:::o;1673:98::-;1731:7;1762:1;1758;:5;;;;:::i;:::-;1751:12;;1673:98;;;;:::o;2411:::-;2469:7;2500:1;2496;:5;;;;:::i;:::-;2489:12;;2411:98;;;;:::o;2810:::-;2868:7;2899:1;2895;:5;;;;:::i;:::-;2888:12;;2810:98;;;;:::o;25832:166::-;25929:12;;25919:6;:22;;:49;;;;25945:15;:23;25961:6;25945:23;;;;;;;;;;;;;;;;;;;;;;;;;25919:49;25911:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25832:166;;:::o;26164:406::-;26239:7;26261:17;26281:8;;26261:28;;26300:17;26320:56;26372:3;26355:14;;:20;;;;:::i;:::-;26320:30;26346:3;26320:21;26331:9;26320:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26300:76;;26424:39;26453:9;26424;:24;26442:4;26424:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26397:9;:24;26415:4;26397:24;;;;;;;;;;;;;;;:66;;;;26504:4;26479:42;;26488:6;26479:42;;;26511:9;26479:42;;;;;;:::i;:::-;;;;;;;;26541:21;26552:9;26541:6;:10;;:21;;;;:::i;:::-;26534:28;;;;26164:406;;;;:::o;26006:114::-;26068:4;26093:11;:19;26105:6;26093:19;;;;;;;;;;;;;;;;;;;;;;;;;26092:20;26085:27;;26006:114;;;:::o;26578:438::-;26658:7;26680:17;26700:6;:35;;26724:11;;26700:35;;;26709:12;;26700:35;26680:55;;26746:17;26766:56;26818:3;26801:14;;:20;;;;:::i;:::-;26766:30;26792:3;26766:21;26777:9;26766:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26746:76;;26870:39;26899:9;26870;:24;26888:4;26870:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26843:9;:24;26861:4;26843:24;;;;;;;;;;;;;;;:66;;;;26950:4;26925:42;;26934:6;26925:42;;;26957:9;26925:42;;;;;;:::i;:::-;;;;;;;;26987:21;26998:9;26987:6;:10;;:21;;;;:::i;:::-;26980:28;;;;26578:438;;;;;:::o;27064:206::-;27113:4;27151:13;27137:27;;:10;:27;;;;:47;;;;;27178:6;;;;;;;;;;;27177:7;27137:47;:71;;;;;27197:11;;;;;;;;;;;27137:71;:125;;;;;27249:13;;27221:9;:24;27239:4;27221:24;;;;;;;;;;;;;;;;:41;;27137:125;27130:132;;27064:206;:::o;27614:1777::-;19417:4;19408:6;;:13;;;;;;;;;;;;;;;;;;27663:27:::1;27693:60;27709:15;;27726:26;;27693:15;:60::i;:::-;:76;;27760:9;;27693:76;;;27756:1;27693:76;27663:106;;27780:23;27806:60;27864:1;27806:53;27846:12;;27806:35;27821:19;27806:10;;:14;;:35;;;;:::i;:::-;:39;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;27780:86;;27877:20;27900:31;27915:15;27900:10;;:14;;:31;;;;:::i;:::-;27877:54;;27944:21;27982:1;27968:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27944:40;;28013:4;27995;28000:1;27995:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28039:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28029:4;28034:1;28029:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;28073:21;28097;28073:45;;28131:14;:65;;;28211:12;28238:1;28254:4;28281;28301:15;28131:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28340:17;28360:40;28386:13;28360:21;:25;;:40;;;;:::i;:::-;28340:60;;28413:19;28435:44;28452:26;28476:1;28452:19;:23;;:26;;;;:::i;:::-;28435:12;;:16;;:44;;;;:::i;:::-;28413:66;;28492:26;28521:48;28567:1;28521:41;28550:11;28521:24;28535:9;;28521;:13;;:24;;;;:::i;:::-;:28;;:41;;;;:::i;:::-;:45;;:48;;;;:::i;:::-;28492:77;;28580:26;28609:45;28642:11;28609:28;28623:13;;28609:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;28580:74;;28665:25;28693:47;28728:11;28693:30;28707:15;;28693:9;:13;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;28665:75;;28754:15;28782::::0;::::1;;;;;;;;;;28774:29;;28811:18;28836:5;28774:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:93;;;28881:9;;;;;;;;;;;28873:23;;28904:17;28928:5;28873:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28857:81;;;;;28996:5;28983:18;;29035:1;29017:15;:19;29014:370;;;29052:14;:30;;;29090:18;29136:4;29160:15;29194:1;29214::::0;29234:21:::1;;;;;;;;;;;29274:15;29052:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29324:48;29336:18;29356:15;29324:48;;;;;;;:::i;:::-;;;;;;;;29014:370;27652:1739;;;;;;;;;;;19435:5:::0;19426:6;;:14;;;;;;;;;;;;;;;;;;27614:1777::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:329::-;2443:6;2492:2;2480:9;2471:7;2467:23;2463:32;2460:119;;;2498:79;;:::i;:::-;2460:119;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2384:329;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:116::-;4203:21;4218:5;4203:21;:::i;:::-;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4183:60;4133:116;:::o;4255:133::-;4298:5;4336:6;4323:20;4314:29;;4352:30;4376:5;4352:30;:::i;:::-;4255:133;;;;:::o;4394:323::-;4450:6;4499:2;4487:9;4478:7;4474:23;4470:32;4467:119;;;4505:79;;:::i;:::-;4467:119;4625:1;4650:50;4692:7;4683:6;4672:9;4668:22;4650:50;:::i;:::-;4640:60;;4596:114;4394:323;;;;:::o;4723:474::-;4791:6;4799;4848:2;4836:9;4827:7;4823:23;4819:32;4816:119;;;4854:79;;:::i;:::-;4816:119;4974:1;4999:53;5044:7;5035:6;5024:9;5020:22;4999:53;:::i;:::-;4989:63;;4945:117;5101:2;5127:53;5172:7;5163:6;5152:9;5148:22;5127:53;:::i;:::-;5117:63;;5072:118;4723:474;;;;;:::o;5203:329::-;5262:6;5311:2;5299:9;5290:7;5286:23;5282:32;5279:119;;;5317:79;;:::i;:::-;5279:119;5437:1;5462:53;5507:7;5498:6;5487:9;5483:22;5462:53;:::i;:::-;5452:63;;5408:117;5203:329;;;;:::o;5538:619::-;5615:6;5623;5631;5680:2;5668:9;5659:7;5655:23;5651:32;5648:119;;;5686:79;;:::i;:::-;5648:119;5806:1;5831:53;5876:7;5867:6;5856:9;5852:22;5831:53;:::i;:::-;5821:63;;5777:117;5933:2;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5904:118;6061:2;6087:53;6132:7;6123:6;6112:9;6108:22;6087:53;:::i;:::-;6077:63;;6032:118;5538:619;;;;;:::o;6163:86::-;6198:7;6238:4;6231:5;6227:16;6216:27;;6163:86;;;:::o;6255:118::-;6326:22;6342:5;6326:22;:::i;:::-;6319:5;6316:33;6306:61;;6363:1;6360;6353:12;6306:61;6255:118;:::o;6379:135::-;6423:5;6461:6;6448:20;6439:29;;6477:31;6502:5;6477:31;:::i;:::-;6379:135;;;;:::o;6520:464::-;6583:6;6591;6640:2;6628:9;6619:7;6615:23;6611:32;6608:119;;;6646:79;;:::i;:::-;6608:119;6766:1;6791:50;6833:7;6824:6;6813:9;6809:22;6791:50;:::i;:::-;6781:60;;6737:114;6890:2;6916:51;6959:7;6950:6;6939:9;6935:22;6916:51;:::i;:::-;6906:61;;6861:116;6520:464;;;;;:::o;6990:112::-;7073:22;7089:5;7073:22;:::i;:::-;7068:3;7061:35;6990:112;;:::o;7108:214::-;7197:4;7235:2;7224:9;7220:18;7212:26;;7248:67;7312:1;7301:9;7297:17;7288:6;7248:67;:::i;:::-;7108:214;;;;:::o;7328:117::-;7437:1;7434;7427:12;7451:117;7560:1;7557;7550:12;7574:117;7683:1;7680;7673:12;7714:568;7787:8;7797:6;7847:3;7840:4;7832:6;7828:17;7824:27;7814:122;;7855:79;;:::i;:::-;7814:122;7968:6;7955:20;7945:30;;7998:18;7990:6;7987:30;7984:117;;;8020:79;;:::i;:::-;7984:117;8134:4;8126:6;8122:17;8110:29;;8188:3;8180:4;8172:6;8168:17;8158:8;8154:32;8151:41;8148:128;;;8195:79;;:::i;:::-;8148:128;7714:568;;;;;:::o;8288:849::-;8392:6;8400;8408;8416;8465:2;8453:9;8444:7;8440:23;8436:32;8433:119;;;8471:79;;:::i;:::-;8433:119;8591:1;8616:53;8661:7;8652:6;8641:9;8637:22;8616:53;:::i;:::-;8606:63;;8562:117;8746:2;8735:9;8731:18;8718:32;8777:18;8769:6;8766:30;8763:117;;;8799:79;;:::i;:::-;8763:117;8912:80;8984:7;8975:6;8964:9;8960:22;8912:80;:::i;:::-;8894:98;;;;8689:313;9041:2;9067:53;9112:7;9103:6;9092:9;9088:22;9067:53;:::i;:::-;9057:63;;9012:118;8288:849;;;;;;;:::o;9143:118::-;9230:24;9248:5;9230:24;:::i;:::-;9225:3;9218:37;9143:118;;:::o;9267:222::-;9360:4;9398:2;9387:9;9383:18;9375:26;;9411:71;9479:1;9468:9;9464:17;9455:6;9411:71;:::i;:::-;9267:222;;;;:::o;9495:468::-;9560:6;9568;9617:2;9605:9;9596:7;9592:23;9588:32;9585:119;;;9623:79;;:::i;:::-;9585:119;9743:1;9768:53;9813:7;9804:6;9793:9;9789:22;9768:53;:::i;:::-;9758:63;;9714:117;9870:2;9896:50;9938:7;9929:6;9918:9;9914:22;9896:50;:::i;:::-;9886:60;;9841:115;9495:468;;;;;:::o;9969:60::-;9997:3;10018:5;10011:12;;9969:60;;;:::o;10035:142::-;10085:9;10118:53;10136:34;10145:24;10163:5;10145:24;:::i;:::-;10136:34;:::i;:::-;10118:53;:::i;:::-;10105:66;;10035:142;;;:::o;10183:126::-;10233:9;10266:37;10297:5;10266:37;:::i;:::-;10253:50;;10183:126;;;:::o;10315:153::-;10392:9;10425:37;10456:5;10425:37;:::i;:::-;10412:50;;10315:153;;;:::o;10474:185::-;10588:64;10646:5;10588:64;:::i;:::-;10583:3;10576:77;10474:185;;:::o;10665:276::-;10785:4;10823:2;10812:9;10808:18;10800:26;;10836:98;10931:1;10920:9;10916:17;10907:6;10836:98;:::i;:::-;10665:276;;;;:::o;10964:568::-;11037:8;11047:6;11097:3;11090:4;11082:6;11078:17;11074:27;11064:122;;11105:79;;:::i;:::-;11064:122;11218:6;11205:20;11195:30;;11248:18;11240:6;11237:30;11234:117;;;11270:79;;:::i;:::-;11234:117;11384:4;11376:6;11372:17;11360:29;;11438:3;11430:4;11422:6;11418:17;11408:8;11404:32;11401:41;11398:128;;;11445:79;;:::i;:::-;11398:128;10964:568;;;;;:::o;11538:1079::-;11669:6;11677;11685;11693;11701;11750:2;11738:9;11729:7;11725:23;11721:32;11718:119;;;11756:79;;:::i;:::-;11718:119;11876:1;11901:53;11946:7;11937:6;11926:9;11922:22;11901:53;:::i;:::-;11891:63;;11847:117;12031:2;12020:9;12016:18;12003:32;12062:18;12054:6;12051:30;12048:117;;;12084:79;;:::i;:::-;12048:117;12197:80;12269:7;12260:6;12249:9;12245:22;12197:80;:::i;:::-;12179:98;;;;11974:313;12354:2;12343:9;12339:18;12326:32;12385:18;12377:6;12374:30;12371:117;;;12407:79;;:::i;:::-;12371:117;12520:80;12592:7;12583:6;12572:9;12568:22;12520:80;:::i;:::-;12502:98;;;;12297:313;11538:1079;;;;;;;;:::o;12623:765::-;12709:6;12717;12725;12733;12782:3;12770:9;12761:7;12757:23;12753:33;12750:120;;;12789:79;;:::i;:::-;12750:120;12909:1;12934:53;12979:7;12970:6;12959:9;12955:22;12934:53;:::i;:::-;12924:63;;12880:117;13036:2;13062:53;13107:7;13098:6;13087:9;13083:22;13062:53;:::i;:::-;13052:63;;13007:118;13164:2;13190:53;13235:7;13226:6;13215:9;13211:22;13190:53;:::i;:::-;13180:63;;13135:118;13292:2;13318:53;13363:7;13354:6;13343:9;13339:22;13318:53;:::i;:::-;13308:63;;13263:118;12623:765;;;;;;;:::o;13394:619::-;13471:6;13479;13487;13536:2;13524:9;13515:7;13511:23;13507:32;13504:119;;;13542:79;;:::i;:::-;13504:119;13662:1;13687:53;13732:7;13723:6;13712:9;13708:22;13687:53;:::i;:::-;13677:63;;13633:117;13789:2;13815:53;13860:7;13851:6;13840:9;13836:22;13815:53;:::i;:::-;13805:63;;13760:118;13917:2;13943:53;13988:7;13979:6;13968:9;13964:22;13943:53;:::i;:::-;13933:63;;13888:118;13394:619;;;;;:::o;14019:474::-;14087:6;14095;14144:2;14132:9;14123:7;14119:23;14115:32;14112:119;;;14150:79;;:::i;:::-;14112:119;14270:1;14295:53;14340:7;14331:6;14320:9;14316:22;14295:53;:::i;:::-;14285:63;;14241:117;14397:2;14423:53;14468:7;14459:6;14448:9;14444:22;14423:53;:::i;:::-;14413:63;;14368:118;14019:474;;;;;:::o;14499:182::-;14639:34;14635:1;14627:6;14623:14;14616:58;14499:182;:::o;14687:366::-;14829:3;14850:67;14914:2;14909:3;14850:67;:::i;:::-;14843:74;;14926:93;15015:3;14926:93;:::i;:::-;15044:2;15039:3;15035:12;15028:19;;14687:366;;;:::o;15059:419::-;15225:4;15263:2;15252:9;15248:18;15240:26;;15312:9;15306:4;15302:20;15298:1;15287:9;15283:17;15276:47;15340:131;15466:4;15340:131;:::i;:::-;15332:139;;15059:419;;;:::o;15484:180::-;15532:77;15529:1;15522:88;15629:4;15626:1;15619:15;15653:4;15650:1;15643:15;15670:410;15710:7;15733:20;15751:1;15733:20;:::i;:::-;15728:25;;15767:20;15785:1;15767:20;:::i;:::-;15762:25;;15822:1;15819;15815:9;15844:30;15862:11;15844:30;:::i;:::-;15833:41;;16023:1;16014:7;16010:15;16007:1;16004:22;15984:1;15977:9;15957:83;15934:139;;16053:18;;:::i;:::-;15934:139;15718:362;15670:410;;;;:::o;16086:180::-;16134:77;16131:1;16124:88;16231:4;16228:1;16221:15;16255:4;16252:1;16245:15;16272:185;16312:1;16329:20;16347:1;16329:20;:::i;:::-;16324:25;;16363:20;16381:1;16363:20;:::i;:::-;16358:25;;16402:1;16392:35;;16407:18;;:::i;:::-;16392:35;16449:1;16446;16442:9;16437:14;;16272:185;;;;:::o;16463:232::-;16603:34;16599:1;16591:6;16587:14;16580:58;16672:15;16667:2;16659:6;16655:15;16648:40;16463:232;:::o;16701:366::-;16843:3;16864:67;16928:2;16923:3;16864:67;:::i;:::-;16857:74;;16940:93;17029:3;16940:93;:::i;:::-;17058:2;17053:3;17049:12;17042:19;;16701:366;;;:::o;17073:419::-;17239:4;17277:2;17266:9;17262:18;17254:26;;17326:9;17320:4;17316:20;17312:1;17301:9;17297:17;17290:47;17354:131;17480:4;17354:131;:::i;:::-;17346:139;;17073:419;;;:::o;17498:177::-;17638:29;17634:1;17626:6;17622:14;17615:53;17498:177;:::o;17681:366::-;17823:3;17844:67;17908:2;17903:3;17844:67;:::i;:::-;17837:74;;17920:93;18009:3;17920:93;:::i;:::-;18038:2;18033:3;18029:12;18022:19;;17681:366;;;:::o;18053:419::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18053:419;;;:::o;18478:180::-;18526:77;18523:1;18516:88;18623:4;18620:1;18613:15;18647:4;18644:1;18637:15;18664:233;18703:3;18726:24;18744:5;18726:24;:::i;:::-;18717:33;;18772:66;18765:5;18762:77;18759:103;;18842:18;;:::i;:::-;18759:103;18889:1;18882:5;18878:13;18871:20;;18664:233;;;:::o;18903:232::-;19043:34;19039:1;19031:6;19027:14;19020:58;19112:15;19107:2;19099:6;19095:15;19088:40;18903:232;:::o;19141:366::-;19283:3;19304:67;19368:2;19363:3;19304:67;:::i;:::-;19297:74;;19380:93;19469:3;19380:93;:::i;:::-;19498:2;19493:3;19489:12;19482:19;;19141:366;;;:::o;19513:419::-;19679:4;19717:2;19706:9;19702:18;19694:26;;19766:9;19760:4;19756:20;19752:1;19741:9;19737:17;19730:47;19794:131;19920:4;19794:131;:::i;:::-;19786:139;;19513:419;;;:::o;19938:227::-;20078:34;20074:1;20066:6;20062:14;20055:58;20147:10;20142:2;20134:6;20130:15;20123:35;19938:227;:::o;20171:366::-;20313:3;20334:67;20398:2;20393:3;20334:67;:::i;:::-;20327:74;;20410:93;20499:3;20410:93;:::i;:::-;20528:2;20523:3;20519:12;20512:19;;20171:366;;;:::o;20543:419::-;20709:4;20747:2;20736:9;20732:18;20724:26;;20796:9;20790:4;20786:20;20782:1;20771:9;20767:17;20760:47;20824:131;20950:4;20824:131;:::i;:::-;20816:139;;20543:419;;;:::o;20968:191::-;21008:3;21027:20;21045:1;21027:20;:::i;:::-;21022:25;;21061:20;21079:1;21061:20;:::i;:::-;21056:25;;21104:1;21101;21097:9;21090:16;;21125:3;21122:1;21119:10;21116:36;;;21132:18;;:::i;:::-;21116:36;20968:191;;;;:::o;21165:174::-;21305:26;21301:1;21293:6;21289:14;21282:50;21165:174;:::o;21345:366::-;21487:3;21508:67;21572:2;21567:3;21508:67;:::i;:::-;21501:74;;21584:93;21673:3;21584:93;:::i;:::-;21702:2;21697:3;21693:12;21686:19;;21345:366;;;:::o;21717:419::-;21883:4;21921:2;21910:9;21906:18;21898:26;;21970:9;21964:4;21960:20;21956:1;21945:9;21941:17;21934:47;21998:131;22124:4;21998:131;:::i;:::-;21990:139;;21717:419;;;:::o;22142:222::-;22282:34;22278:1;22270:6;22266:14;22259:58;22351:5;22346:2;22338:6;22334:15;22327:30;22142:222;:::o;22370:366::-;22512:3;22533:67;22597:2;22592:3;22533:67;:::i;:::-;22526:74;;22609:93;22698:3;22609:93;:::i;:::-;22727:2;22722:3;22718:12;22711:19;;22370:366;;;:::o;22742:419::-;22908:4;22946:2;22935:9;22931:18;22923:26;;22995:9;22989:4;22985:20;22981:1;22970:9;22966:17;22959:47;23023:131;23149:4;23023:131;:::i;:::-;23015:139;;22742:419;;;:::o;23167:181::-;23307:33;23303:1;23295:6;23291:14;23284:57;23167:181;:::o;23354:366::-;23496:3;23517:67;23581:2;23576:3;23517:67;:::i;:::-;23510:74;;23593:93;23682:3;23593:93;:::i;:::-;23711:2;23706:3;23702:12;23695:19;;23354:366;;;:::o;23726:419::-;23892:4;23930:2;23919:9;23915:18;23907:26;;23979:9;23973:4;23969:20;23965:1;23954:9;23950:17;23943:47;24007:131;24133:4;24007:131;:::i;:::-;23999:139;;23726:419;;;:::o;24151:225::-;24291:34;24287:1;24279:6;24275:14;24268:58;24360:8;24355:2;24347:6;24343:15;24336:33;24151:225;:::o;24382:366::-;24524:3;24545:67;24609:2;24604:3;24545:67;:::i;:::-;24538:74;;24621:93;24710:3;24621:93;:::i;:::-;24739:2;24734:3;24730:12;24723:19;;24382:366;;;:::o;24754:419::-;24920:4;24958:2;24947:9;24943:18;24935:26;;25007:9;25001:4;24997:20;24993:1;24982:9;24978:17;24971:47;25035:131;25161:4;25035:131;:::i;:::-;25027:139;;24754:419;;;:::o;25179:170::-;25319:22;25315:1;25307:6;25303:14;25296:46;25179:170;:::o;25355:366::-;25497:3;25518:67;25582:2;25577:3;25518:67;:::i;:::-;25511:74;;25594:93;25683:3;25594:93;:::i;:::-;25712:2;25707:3;25703:12;25696:19;;25355:366;;;:::o;25727:419::-;25893:4;25931:2;25920:9;25916:18;25908:26;;25980:9;25974:4;25970:20;25966:1;25955:9;25951:17;25944:47;26008:131;26134:4;26008:131;:::i;:::-;26000:139;;25727:419;;;:::o;26152:249::-;26292:34;26288:1;26280:6;26276:14;26269:58;26361:32;26356:2;26348:6;26344:15;26337:57;26152:249;:::o;26407:366::-;26549:3;26570:67;26634:2;26629:3;26570:67;:::i;:::-;26563:74;;26646:93;26735:3;26646:93;:::i;:::-;26764:2;26759:3;26755:12;26748:19;;26407:366;;;:::o;26779:419::-;26945:4;26983:2;26972:9;26968:18;26960:26;;27032:9;27026:4;27022:20;27018:1;27007:9;27003:17;26996:47;27060:131;27186:4;27060:131;:::i;:::-;27052:139;;26779:419;;;:::o;27204:224::-;27344:34;27340:1;27332:6;27328:14;27321:58;27413:7;27408:2;27400:6;27396:15;27389:32;27204:224;:::o;27434:366::-;27576:3;27597:67;27661:2;27656:3;27597:67;:::i;:::-;27590:74;;27673:93;27762:3;27673:93;:::i;:::-;27791:2;27786:3;27782:12;27775:19;;27434:366;;;:::o;27806:419::-;27972:4;28010:2;27999:9;27995:18;27987:26;;28059:9;28053:4;28049:20;28045:1;28034:9;28030:17;28023:47;28087:131;28213:4;28087:131;:::i;:::-;28079:139;;27806:419;;;:::o;28231:194::-;28271:4;28291:20;28309:1;28291:20;:::i;:::-;28286:25;;28325:20;28343:1;28325:20;:::i;:::-;28320:25;;28369:1;28366;28362:9;28354:17;;28393:1;28387:4;28384:11;28381:37;;;28398:18;;:::i;:::-;28381:37;28231:194;;;;:::o;28431:167::-;28571:19;28567:1;28559:6;28555:14;28548:43;28431:167;:::o;28604:366::-;28746:3;28767:67;28831:2;28826:3;28767:67;:::i;:::-;28760:74;;28843:93;28932:3;28843:93;:::i;:::-;28961:2;28956:3;28952:12;28945:19;;28604:366;;;:::o;28976:419::-;29142:4;29180:2;29169:9;29165:18;29157:26;;29229:9;29223:4;29219:20;29215:1;29204:9;29200:17;29193:47;29257:131;29383:4;29257:131;:::i;:::-;29249:139;;28976:419;;;:::o;29401:180::-;29449:77;29446:1;29439:88;29546:4;29543:1;29536:15;29570:4;29567:1;29560:15;29587:143;29644:5;29675:6;29669:13;29660:22;;29691:33;29718:5;29691:33;:::i;:::-;29587:143;;;;:::o;29736:351::-;29806:6;29855:2;29843:9;29834:7;29830:23;29826:32;29823:119;;;29861:79;;:::i;:::-;29823:119;29981:1;30006:64;30062:7;30053:6;30042:9;30038:22;30006:64;:::i;:::-;29996:74;;29952:128;29736:351;;;;:::o;30093:85::-;30138:7;30167:5;30156:16;;30093:85;;;:::o;30184:158::-;30242:9;30275:61;30293:42;30302:32;30328:5;30302:32;:::i;:::-;30293:42;:::i;:::-;30275:61;:::i;:::-;30262:74;;30184:158;;;:::o;30348:147::-;30443:45;30482:5;30443:45;:::i;:::-;30438:3;30431:58;30348:147;;:::o;30501:114::-;30568:6;30602:5;30596:12;30586:22;;30501:114;;;:::o;30621:184::-;30720:11;30754:6;30749:3;30742:19;30794:4;30789:3;30785:14;30770:29;;30621:184;;;;:::o;30811:132::-;30878:4;30901:3;30893:11;;30931:4;30926:3;30922:14;30914:22;;30811:132;;;:::o;30949:108::-;31026:24;31044:5;31026:24;:::i;:::-;31021:3;31014:37;30949:108;;:::o;31063:179::-;31132:10;31153:46;31195:3;31187:6;31153:46;:::i;:::-;31231:4;31226:3;31222:14;31208:28;;31063:179;;;;:::o;31248:113::-;31318:4;31350;31345:3;31341:14;31333:22;;31248:113;;;:::o;31397:732::-;31516:3;31545:54;31593:5;31545:54;:::i;:::-;31615:86;31694:6;31689:3;31615:86;:::i;:::-;31608:93;;31725:56;31775:5;31725:56;:::i;:::-;31804:7;31835:1;31820:284;31845:6;31842:1;31839:13;31820:284;;;31921:6;31915:13;31948:63;32007:3;31992:13;31948:63;:::i;:::-;31941:70;;32034:60;32087:6;32034:60;:::i;:::-;32024:70;;31880:224;31867:1;31864;31860:9;31855:14;;31820:284;;;31824:14;32120:3;32113:10;;31521:608;;;31397:732;;;;:::o;32135:831::-;32398:4;32436:3;32425:9;32421:19;32413:27;;32450:71;32518:1;32507:9;32503:17;32494:6;32450:71;:::i;:::-;32531:80;32607:2;32596:9;32592:18;32583:6;32531:80;:::i;:::-;32658:9;32652:4;32648:20;32643:2;32632:9;32628:18;32621:48;32686:108;32789:4;32780:6;32686:108;:::i;:::-;32678:116;;32804:72;32872:2;32861:9;32857:18;32848:6;32804:72;:::i;:::-;32886:73;32954:3;32943:9;32939:19;32930:6;32886:73;:::i;:::-;32135:831;;;;;;;;:::o;32972:147::-;33073:11;33110:3;33095:18;;32972:147;;;;:::o;33125:114::-;;:::o;33245:398::-;33404:3;33425:83;33506:1;33501:3;33425:83;:::i;:::-;33418:90;;33517:93;33606:3;33517:93;:::i;:::-;33635:1;33630:3;33626:11;33619:18;;33245:398;;;:::o;33649:379::-;33833:3;33855:147;33998:3;33855:147;:::i;:::-;33848:154;;34019:3;34012:10;;33649:379;;;:::o;34034:807::-;34283:4;34321:3;34310:9;34306:19;34298:27;;34335:71;34403:1;34392:9;34388:17;34379:6;34335:71;:::i;:::-;34416:72;34484:2;34473:9;34469:18;34460:6;34416:72;:::i;:::-;34498:80;34574:2;34563:9;34559:18;34550:6;34498:80;:::i;:::-;34588;34664:2;34653:9;34649:18;34640:6;34588:80;:::i;:::-;34678:73;34746:3;34735:9;34731:19;34722:6;34678:73;:::i;:::-;34761;34829:3;34818:9;34814:19;34805:6;34761:73;:::i;:::-;34034:807;;;;;;;;;:::o;34847:143::-;34904:5;34935:6;34929:13;34920:22;;34951:33;34978:5;34951:33;:::i;:::-;34847:143;;;;:::o;34996:663::-;35084:6;35092;35100;35149:2;35137:9;35128:7;35124:23;35120:32;35117:119;;;35155:79;;:::i;:::-;35117:119;35275:1;35300:64;35356:7;35347:6;35336:9;35332:22;35300:64;:::i;:::-;35290:74;;35246:128;35413:2;35439:64;35495:7;35486:6;35475:9;35471:22;35439:64;:::i;:::-;35429:74;;35384:129;35552:2;35578:64;35634:7;35625:6;35614:9;35610:22;35578:64;:::i;:::-;35568:74;;35523:129;34996:663;;;;;:::o;35665:332::-;35786:4;35824:2;35813:9;35809:18;35801:26;;35837:71;35905:1;35894:9;35890:17;35881:6;35837:71;:::i;:::-;35918:72;35986:2;35975:9;35971:18;35962:6;35918:72;:::i;:::-;35665:332;;;;;:::o

Swarm Source

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