ETH Price: $2,446.13 (+2.33%)

Token

Psyduck (DUCK)
 

Overview

Max Total Supply

500,000,000 DUCK

Holders

20

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,084,412.908451248 DUCK

Value
$0.00
0x6B0e54E803aDF945220581A90D6EF5AD9b998385
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:
PsyduckContract

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 2023-04-22
*/

// SPDX-License-Identifier: MIT

/*
Psyduck is here, the meme power.

WEB:      https://www.psyduck.fun
twitter:  https://twitter.com/psyduckerc
telegram: https://t.me/+ZBK1brLEjpBjOWRl
*/

pragma solidity ^0.8.17;

abstract contract Project {
    address public marketingWallet = 0x61F1B25d0C160a0984F30c5CCBEb801cBfF0bA2D;
    address public devWallet = 0x61F1B25d0C160a0984F30c5CCBEb801cBfF0bA2D;

    string constant _name = "Psyduck";
    string constant _symbol = "DUCK";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 500000000 * 10**_decimals;

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

    uint256 public buyFee             = 1;
    uint256 public buyTotalFee        = buyFee;

    uint256 public swapLpFee          = 0;
    uint256 public swapMarketing      = 0;
    uint256 public swapTreasuryFee    = 0;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;

    uint256 public transFee           = 0;

    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 PsyduckContract 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 & Testnet 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;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // 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 < 10, "Fees cannot be that high");
    }

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

// ***
// end fee things. 
// ***

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

    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":"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":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040527361f1b25d0c160a0984f30c5ccbeb801cbff0ba2d6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507361f1b25d0c160a0984f30c5ccbeb801cbff0ba2d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000bd919062000c1b565b631dcd6500620000ce919062000c6c565b600255600a80600254620000e3919062000c6c565b620000ef919062000ce6565b600355600a8060025462000104919062000c6c565b62000110919062000ce6565b600455600160055560055460065560006007556000600855600060095560095460075460085462000142919062000d1e565b6200014e919062000d1e565b600a556000600b556064600c5561dead601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060146019556064601a556000601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff021916908315150217905550600a601b60026101000a81548160ff021916908360ff1602179055506001601d60006101000a81548160ff021916908315150217905550612710601e6002546200026b919062000c6c565b62000277919062000ce6565b601e55612710601e6002546200028e919062000c6c565b6200029a919062000ce6565b601f55348015620002aa57600080fd5b506000620002bd62000a7960201b60201c565b905080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e7919062000dc3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000475919062000dc3565b6040518363ffffffff1660e01b81526004016200049492919062000e06565b6020604051808303816000875af1158015620004b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004da919062000dc3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000a6a919062000e44565b60405180910390a35062000e61565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b0f5780860481111562000ae75762000ae662000a81565b5b600185161562000af75780820291505b808102905062000b078562000ab0565b945062000ac7565b94509492505050565b60008262000b2a576001905062000bfd565b8162000b3a576000905062000bfd565b816001811462000b53576002811462000b5e5762000b94565b600191505062000bfd565b60ff84111562000b735762000b7262000a81565b5b8360020a91508482111562000b8d5762000b8c62000a81565b5b5062000bfd565b5060208310610133831016604e8410600b841016171562000bce5782820a90508381111562000bc85762000bc762000a81565b5b62000bfd565b62000bdd848484600162000abd565b9250905081840481111562000bf75762000bf662000a81565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c288262000c04565b915062000c358362000c0e565b925062000c647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b18565b905092915050565b600062000c798262000c04565b915062000c868362000c04565b925082820262000c968162000c04565b9150828204841483151762000cb05762000caf62000a81565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf38262000c04565b915062000d008362000c04565b92508262000d135762000d1262000cb7565b5b828204905092915050565b600062000d2b8262000c04565b915062000d388362000c04565b925082820190508082111562000d535762000d5262000a81565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d8b8262000d5e565b9050919050565b62000d9d8162000d7e565b811462000da957600080fd5b50565b60008151905062000dbd8162000d92565b92915050565b60006020828403121562000ddc5762000ddb62000d59565b5b600062000dec8482850162000dac565b91505092915050565b62000e008162000d7e565b82525050565b600060408201905062000e1d600083018562000df5565b62000e2c602083018462000df5565b9392505050565b62000e3e8162000c04565b82525050565b600060208201905062000e5b600083018462000e33565b92915050565b60805160a05161564f62000ecd600039600081816119be015281816125f70152818161331501528181613368015281816133bf015281816134a3015281816136b601526140ee015260008181611eb0015281816142f3015281816143d50152614672015261564f6000f3fe6080604052600436106103b15760003560e01c80636d1b229d116101e7578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610db9578063f53fd58414610de2578063f84ba65d14610e0d578063ffb54a9914610e36576103b8565b8063dd62ed3e14610cff578063e53c30b014610d3c578063e632313c14610d67578063ee9ef29e14610d90576103b8565b8063d7c01032116100dc578063d7c0103214610c5b578063dcf7aef314610c84578063dd395c6314610cad578063dd46706414610cd6576103b8565b8063b6c5232414610b9f578063bd9ab53714610bca578063ca33e64c14610bf3578063d51ed1c814610c1e576103b8565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610af557806395d89b4114610b20578063a69df4b514610b4b578063a9059cbb14610b62576103b8565b80637d1db4a514610a4b5780638038cbd314610a76578063893d20e814610a9f5780638da5cb5b14610aca576103b8565b8063715018a6116101c1578063715018a6146109b3578063722b62ad146109ca57806375f0a874146109f557806378109e5414610a20576103b8565b80636d1b229d146109225780636ddd17131461094b57806370a0823114610976576103b8565b80632b112e49116102d757806349bd5a5e1161026a5780635d098b38116102395780635d098b381461087a578063617fe0ed146108a3578063658d4b7f146108ce57806367ac77b4146108f7576103b8565b806349bd5a5e146107c057806350db71fb146107eb578063571ac8b0146108145780635c85974f14610851576103b8565b80633705b392116102a65780633705b3921461071657806344a33fd21461074157806346e421a21461076a5780634706240214610795576103b8565b80632b112e491461066c5780632d594567146106975780632e8fa821146106c0578063313ce567146106eb576103b8565b8063180b0d7e1161034f5780631e25dc541161031e5780631e25dc54146105b2578063201e7991146105dd57806323b872dd1461060657806329e04b4a14610643576103b8565b8063180b0d7e1461050a57806318160ddd146105355780631ad017b9146105605780631da1db5e14610589576103b8565b806309302dc61161038b57806309302dc61461043e578063095ea7b3146104675780630d295980146104a45780631161ae39146104cd576103b8565b8063026f7d15146103bd5780630445b667146103e857806306fdde0314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610e61565b6040516103df91906147b8565b60405180910390f35b3480156103f457600080fd5b506103fd610e67565b60405161040a91906147b8565b60405180910390f35b34801561041f57600080fd5b50610428610e6d565b6040516104359190614863565b60405180910390f35b34801561044a57600080fd5b50610465600480360381019061046091906148b6565b610eaa565b005b34801561047357600080fd5b5061048e60048036038101906104899190614941565b610f65565b60405161049b919061499c565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906149e3565b611057565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614a10565b61110b565b604051610501919061499c565b60405180910390f35b34801561051657600080fd5b5061051f611120565b60405161052c91906147b8565b60405180910390f35b34801561054157600080fd5b5061054a611126565b60405161055791906147b8565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614a50565b611130565b005b34801561059557600080fd5b506105b060048036038101906105ab91906148b6565b6112dd565b005b3480156105be57600080fd5b506105c76113fb565b6040516105d491906147b8565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614a10565b611401565b005b34801561061257600080fd5b5061062d60048036038101906106289190614a7d565b6114aa565b60405161063a919061499c565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906148b6565b6116aa565b005b34801561067857600080fd5b5061068161174b565b60405161068e91906147b8565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614b09565b6117cd565b005b3480156106cc57600080fd5b506106d561189d565b6040516106e291906147b8565b60405180910390f35b3480156106f757600080fd5b506107006118a3565b60405161070d9190614b58565b60405180910390f35b34801561072257600080fd5b5061072b6118ac565b60405161073891906147b8565b60405180910390f35b34801561074d57600080fd5b50610768600480360381019061076391906148b6565b6118b2565b005b34801561077657600080fd5b5061077f6119b0565b60405161078c91906147b8565b60405180910390f35b3480156107a157600080fd5b506107aa6119b6565b6040516107b791906147b8565b60405180910390f35b3480156107cc57600080fd5b506107d56119bc565b6040516107e29190614b82565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190614b9d565b6119e0565b005b34801561082057600080fd5b5061083b60048036038101906108369190614a50565b611ad2565b604051610848919061499c565b60405180910390f35b34801561085d57600080fd5b50610878600480360381019061087391906148b6565b611b05565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614a50565b611ba6565b005b3480156108af57600080fd5b506108b8611da9565b6040516108c5919061499c565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614b9d565b611dbc565b005b34801561090357600080fd5b5061090c611eae565b6040516109199190614c3c565b60405180910390f35b34801561092e57600080fd5b50610949600480360381019061094491906148b6565b611ed2565b005b34801561095757600080fd5b50610960611f4b565b60405161096d919061499c565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614a50565b611f5e565b6040516109aa91906147b8565b60405180910390f35b3480156109bf57600080fd5b506109c8611fa7565b005b3480156109d657600080fd5b506109df6120ff565b6040516109ec9190614b58565b60405180910390f35b348015610a0157600080fd5b50610a0a612112565b604051610a179190614b82565b60405180910390f35b348015610a2c57600080fd5b50610a35612136565b604051610a4291906147b8565b60405180910390f35b348015610a5757600080fd5b50610a6061213c565b604051610a6d91906147b8565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614c57565b612142565b005b348015610aab57600080fd5b50610ab461226a565b604051610ac19190614b82565b60405180910390f35b348015610ad657600080fd5b50610adf612279565b604051610aec9190614b82565b60405180910390f35b348015610b0157600080fd5b50610b0a6122a3565b604051610b179190614b82565b60405180910390f35b348015610b2c57600080fd5b50610b356122c9565b604051610b429190614863565b60405180910390f35b348015610b5757600080fd5b50610b60612306565b005b348015610b6e57600080fd5b50610b896004803603810190610b849190614941565b6124dd565b604051610b96919061499c565b60405180910390f35b348015610bab57600080fd5b50610bb46124f2565b604051610bc191906147b8565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec91906148b6565b6124fc565b005b348015610bff57600080fd5b50610c086125b7565b604051610c159190614b82565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c4091906148b6565b6125dd565b604051610c5291906147b8565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190614cbe565b61264d565b005b348015610c9057600080fd5b50610cab6004803603810190610ca691906148b6565b6129a6565b005b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614b9d565b612a47565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf891906148b6565b612b39565b005b348015610d0b57600080fd5b50610d266004803603810190610d219190614d11565b612d07565b604051610d3391906147b8565b60405180910390f35b348015610d4857600080fd5b50610d51612d8e565b604051610d5e91906147b8565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906148b6565b612d94565b005b348015610d9c57600080fd5b50610db76004803603810190610db291906148b6565b612e4e565b005b348015610dc557600080fd5b50610de06004803603810190610ddb9190614a50565b612eef565b005b348015610dee57600080fd5b50610df76130b5565b604051610e0491906147b8565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614b9d565b6130bb565b005b348015610e4257600080fd5b50610e4b6131ad565b604051610e58919061499c565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600781526020017f5073796475636b00000000000000000000000000000000000000000000000000815250905090565b610eb26131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890614d9d565b60405180910390fd5b6103e881600254610f529190614dec565b610f5c9190614e5d565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161104591906147b8565b60405180910390a36001905092915050565b61105f6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614d9d565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b600082611117836125dd565b11905092915050565b600c5481565b6000600254905090565b6111386131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90614d9d565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112e56131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614d9d565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846113c19190614dec565b6113cb9190614e5d565b9081150290604051600060405180830381858888f193505050501580156113f6573d6000803e3d6000fd5b505050565b600b5481565b6114096131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f90614d9d565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461169657611615826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6116a184848461321d565b90509392505050565b6116b26131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890614d9d565b60405180910390fd5b80601e8190555050565b60006117c861177b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f5e565b6117ba6117a9601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f5e565b600254613aea90919063ffffffff16565b613aea90919063ffffffff16565b905090565b6117d56131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614d9d565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b6118ba6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090614d9d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846119769190614dec565b6119809190614e5d565b9081150290604051600060405180830381858888f193505050501580156119ab573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6119e86131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90614d9d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611afe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f65565b9050919050565b611b0d6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390614d9d565b60405180910390fd5b8060038190555050565b611bae6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614d9d565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611dc46131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614d9d565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f4857611f4633601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b00565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611faf6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590614d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61214a6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090614d9d565b60405180910390fd5b836007819055508260088190555081600981905550612213826122058587613cd390919063ffffffff16565b613cd390919063ffffffff16565b600a8190555080600c81905550600a805410612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90614eda565b60405180910390fd5b50505050565b6000612274612279565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4455434b00000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614f6c565b60405180910390fd5b600f5442116123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614fd8565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006124ea33848461321d565b905092915050565b6000600f54905090565b6125046131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614d9d565b60405180910390fd5b6103e8816002546125a49190614dec565b6125ae9190614e5d565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126466125ea61174b565b612638612629600261261b7f0000000000000000000000000000000000000000000000000000000000000000611f5e565b613ce990919063ffffffff16565b85613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050919050565b6126556131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614d9d565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6129ae6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490614d9d565b60405180910390fd5b8060068190555050565b612a4f6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614d9d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b416131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc790614d9d565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612c819190614ff8565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612d9c6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614d9d565b60405180910390fd5b601e54811115612e4357601e54601f81905550612e4b565b80601f819055505b50565b612e566131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc90614d9d565b60405180910390fd5b80600b8190555050565b612ef76131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d90614d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec9061509e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6130c36131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314990614d9d565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b6000838311158290613210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132079190614863565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff16156132465761323f848484613b00565b9050613ae3565b61324e612279565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132bc575061328c612279565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561331157601b60009054906101000a900460ff16613310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133079061510a565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561340e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561349a5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134f257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561354a575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135a45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135fe5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156136b457600061360e86611f5e565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136b25760045485826136709190614ff8565b11156136b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a89061519c565b60405180910390fd5b5b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561371b5750601b60019054906101000a900460ff165b80156137715750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138595742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106137f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ee9061522e565b60405180910390fd5b601b60029054906101000a900460ff1660ff16426138159190614ff8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138b5576138b48685613d15565b5b61393e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600084905081156139a9576000600b5411156139a4576139a18786613db2565b90505b6139e1565b6139b287613f1b565b6139bc57846139c8565b6139c7878685613f72565b5b90506139d26140ea565b156139e0576139df6141bf565b5b5b613a3381601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad391906147b8565b60405180910390a3600193505050505b9392505050565b60008183613af8919061524e565b905092915050565b6000613b8b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c2082601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cc091906147b8565b60405180910390a3600190509392505050565b60008183613ce19190614ff8565b905092915050565b60008183613cf79190614dec565b905092915050565b60008183613d0d9190614e5d565b905092915050565b60035481111580613d6f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da5906152ce565b60405180910390fd5b5050565b600080600b5490506000613e026064600c54613dce9190614dec565b613df46064613de68689613ce990919063ffffffff16565b613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050613e5681601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ef691906147b8565b60405180910390a3613f118185613aea90919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613f8257600654613f86565b600a545b90506000613fd06064600c54613f9c9190614dec565b613fc26064613fb4868a613ce990919063ffffffff16565b613ce990919063ffffffff16565b613cff90919063ffffffff16565b905061402481601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140c491906147b8565b60405180910390a36140df8186613aea90919063ffffffff16565b925050509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156141555750602060009054906101000a900460ff16155b801561416d5750601d60009054906101000a900460ff165b80156141ba5750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff02191690831515021790555060006141ea601954601a5461110b565b6141f6576007546141f9565b60005b90506000614239600261422b600a5461421d86601f54613ce990919063ffffffff16565b613cff90919063ffffffff16565b613cff90919063ffffffff16565b9050600061425282601f54613aea90919063ffffffff16565b90506000600267ffffffffffffffff811115614271576142706152ee565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b661531d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561435c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143809190615361565b816001815181106143945761439361531d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614435959493929190615487565b600060405180830381600087803b15801561444f57600080fd5b505af1158015614463573d6000803e3d6000fd5b50505050600061447c8247613aea90919063ffffffff16565b905060006144a8614497600289613cff90919063ffffffff16565b600a54613aea90919063ffffffff16565b905060006144e660026144d8846144ca60075488613ce990919063ffffffff16565b613cff90919063ffffffff16565b613cff90919063ffffffff16565b905060006145118361450360085487613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050600061453c8461452e60095488613ce990919063ffffffff16565b613cff90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161458990615512565b600060405180830381858888f193505050503d80600081146145c7576040519150601f19603f3d011682016040523d82523d6000602084013e6145cc565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826175309060405161461a90615512565b600060405180830381858888f193505050503d8060008114614658576040519150601f19603f3d011682016040523d82523d6000602084013e61465d565b606091505b5050809150506000905060008a1115614777577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016146f796959493929190615527565b60606040518083038185885af1158015614715573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061473a919061559d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161476e9291906155f0565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b6147b28161479f565b82525050565b60006020820190506147cd60008301846147a9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561480d5780820151818401526020810190506147f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000614835826147d3565b61483f81856147de565b935061484f8185602086016147ef565b61485881614819565b840191505092915050565b6000602082019050818103600083015261487d818461482a565b905092915050565b600080fd5b6148938161479f565b811461489e57600080fd5b50565b6000813590506148b08161488a565b92915050565b6000602082840312156148cc576148cb614885565b5b60006148da848285016148a1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061490e826148e3565b9050919050565b61491e81614903565b811461492957600080fd5b50565b60008135905061493b81614915565b92915050565b6000806040838503121561495857614957614885565b5b60006149668582860161492c565b9250506020614977858286016148a1565b9150509250929050565b60008115159050919050565b61499681614981565b82525050565b60006020820190506149b1600083018461498d565b92915050565b6149c081614981565b81146149cb57600080fd5b50565b6000813590506149dd816149b7565b92915050565b6000602082840312156149f9576149f8614885565b5b6000614a07848285016149ce565b91505092915050565b60008060408385031215614a2757614a26614885565b5b6000614a35858286016148a1565b9250506020614a46858286016148a1565b9150509250929050565b600060208284031215614a6657614a65614885565b5b6000614a748482850161492c565b91505092915050565b600080600060608486031215614a9657614a95614885565b5b6000614aa48682870161492c565b9350506020614ab58682870161492c565b9250506040614ac6868287016148a1565b9150509250925092565b600060ff82169050919050565b614ae681614ad0565b8114614af157600080fd5b50565b600081359050614b0381614add565b92915050565b60008060408385031215614b2057614b1f614885565b5b6000614b2e858286016149ce565b9250506020614b3f85828601614af4565b9150509250929050565b614b5281614ad0565b82525050565b6000602082019050614b6d6000830184614b49565b92915050565b614b7c81614903565b82525050565b6000602082019050614b976000830184614b73565b92915050565b60008060408385031215614bb457614bb3614885565b5b6000614bc28582860161492c565b9250506020614bd3858286016149ce565b9150509250929050565b6000819050919050565b6000614c02614bfd614bf8846148e3565b614bdd565b6148e3565b9050919050565b6000614c1482614be7565b9050919050565b6000614c2682614c09565b9050919050565b614c3681614c1b565b82525050565b6000602082019050614c516000830184614c2d565b92915050565b60008060008060808587031215614c7157614c70614885565b5b6000614c7f878288016148a1565b9450506020614c90878288016148a1565b9350506040614ca1878288016148a1565b9250506060614cb2878288016148a1565b91505092959194509250565b600080600060608486031215614cd757614cd6614885565b5b6000614ce58682870161492c565b9350506020614cf68682870161492c565b9250506040614d078682870161492c565b9150509250925092565b60008060408385031215614d2857614d27614885565b5b6000614d368582860161492c565b9250506020614d478582860161492c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d876020836147de565b9150614d9282614d51565b602082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614df78261479f565b9150614e028361479f565b9250828202614e108161479f565b91508282048414831517614e2757614e26614dbd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e688261479f565b9150614e738361479f565b925082614e8357614e82614e2e565b5b828204905092915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b6000614ec46018836147de565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614f566023836147de565b9150614f6182614efa565b604082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614fc2601f836147de565b9150614fcd82614f8c565b602082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b60006150038261479f565b915061500e8361479f565b925082820190508082111561502657615025614dbd565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150886026836147de565b91506150938261502c565b604082019050919050565b600060208201905081810360008301526150b78161507b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006150f46014836147de565b91506150ff826150be565b602082019050919050565b60006020820190508181036000830152615123816150e7565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615186603e836147de565b91506151918261512a565b604082019050919050565b600060208201905081810360008301526151b581615179565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006152186025836147de565b9150615223826151bc565b604082019050919050565b600060208201905081810360008301526152478161520b565b9050919050565b60006152598261479f565b91506152648361479f565b925082820390508181111561527c5761527b614dbd565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152b86011836147de565b91506152c382615282565b602082019050919050565b600060208201905081810360008301526152e7816152ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061535b81614915565b92915050565b60006020828403121561537757615376614885565b5b60006153858482850161534c565b91505092915050565b6000819050919050565b60006153b36153ae6153a98461538e565b614bdd565b61479f565b9050919050565b6153c381615398565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153fe81614903565b82525050565b600061541083836153f5565b60208301905092915050565b6000602082019050919050565b6000615434826153c9565b61543e81856153d4565b9350615449836153e5565b8060005b8381101561547a5781516154618882615404565b975061546c8361541c565b92505060018101905061544d565b5085935050505092915050565b600060a08201905061549c60008301886147a9565b6154a960208301876153ba565b81810360408301526154bb8186615429565b90506154ca6060830185614b73565b6154d760808301846147a9565b9695505050505050565b600081905092915050565b50565b60006154fc6000836154e1565b9150615507826154ec565b600082019050919050565b600061551d826154ef565b9150819050919050565b600060c08201905061553c6000830189614b73565b61554960208301886147a9565b61555660408301876153ba565b61556360608301866153ba565b6155706080830185614b73565b61557d60a08301846147a9565b979650505050505050565b6000815190506155978161488a565b92915050565b6000806000606084860312156155b6576155b5614885565b5b60006155c486828701615588565b93505060206155d586828701615588565b92505060406155e686828701615588565b9150509250925092565b600060408201905061560560008301856147a9565b61561260208301846147a9565b939250505056fea26469706673582212202ba6dd3df4cbee062d78df4bb6fd4096c7904abf4800358a2c38c217b1e1593364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80636d1b229d116101e7578063b6c523241161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610db9578063f53fd58414610de2578063f84ba65d14610e0d578063ffb54a9914610e36576103b8565b8063dd62ed3e14610cff578063e53c30b014610d3c578063e632313c14610d67578063ee9ef29e14610d90576103b8565b8063d7c01032116100dc578063d7c0103214610c5b578063dcf7aef314610c84578063dd395c6314610cad578063dd46706414610cd6576103b8565b8063b6c5232414610b9f578063bd9ab53714610bca578063ca33e64c14610bf3578063d51ed1c814610c1e576103b8565b80637d1db4a5116101855780638ea5220f116101545780638ea5220f14610af557806395d89b4114610b20578063a69df4b514610b4b578063a9059cbb14610b62576103b8565b80637d1db4a514610a4b5780638038cbd314610a76578063893d20e814610a9f5780638da5cb5b14610aca576103b8565b8063715018a6116101c1578063715018a6146109b3578063722b62ad146109ca57806375f0a874146109f557806378109e5414610a20576103b8565b80636d1b229d146109225780636ddd17131461094b57806370a0823114610976576103b8565b80632b112e49116102d757806349bd5a5e1161026a5780635d098b38116102395780635d098b381461087a578063617fe0ed146108a3578063658d4b7f146108ce57806367ac77b4146108f7576103b8565b806349bd5a5e146107c057806350db71fb146107eb578063571ac8b0146108145780635c85974f14610851576103b8565b80633705b392116102a65780633705b3921461071657806344a33fd21461074157806346e421a21461076a5780634706240214610795576103b8565b80632b112e491461066c5780632d594567146106975780632e8fa821146106c0578063313ce567146106eb576103b8565b8063180b0d7e1161034f5780631e25dc541161031e5780631e25dc54146105b2578063201e7991146105dd57806323b872dd1461060657806329e04b4a14610643576103b8565b8063180b0d7e1461050a57806318160ddd146105355780631ad017b9146105605780631da1db5e14610589576103b8565b806309302dc61161038b57806309302dc61461043e578063095ea7b3146104675780630d295980146104a45780631161ae39146104cd576103b8565b8063026f7d15146103bd5780630445b667146103e857806306fdde0314610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610e61565b6040516103df91906147b8565b60405180910390f35b3480156103f457600080fd5b506103fd610e67565b60405161040a91906147b8565b60405180910390f35b34801561041f57600080fd5b50610428610e6d565b6040516104359190614863565b60405180910390f35b34801561044a57600080fd5b50610465600480360381019061046091906148b6565b610eaa565b005b34801561047357600080fd5b5061048e60048036038101906104899190614941565b610f65565b60405161049b919061499c565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906149e3565b611057565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614a10565b61110b565b604051610501919061499c565b60405180910390f35b34801561051657600080fd5b5061051f611120565b60405161052c91906147b8565b60405180910390f35b34801561054157600080fd5b5061054a611126565b60405161055791906147b8565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190614a50565b611130565b005b34801561059557600080fd5b506105b060048036038101906105ab91906148b6565b6112dd565b005b3480156105be57600080fd5b506105c76113fb565b6040516105d491906147b8565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614a10565b611401565b005b34801561061257600080fd5b5061062d60048036038101906106289190614a7d565b6114aa565b60405161063a919061499c565b60405180910390f35b34801561064f57600080fd5b5061066a600480360381019061066591906148b6565b6116aa565b005b34801561067857600080fd5b5061068161174b565b60405161068e91906147b8565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190614b09565b6117cd565b005b3480156106cc57600080fd5b506106d561189d565b6040516106e291906147b8565b60405180910390f35b3480156106f757600080fd5b506107006118a3565b60405161070d9190614b58565b60405180910390f35b34801561072257600080fd5b5061072b6118ac565b60405161073891906147b8565b60405180910390f35b34801561074d57600080fd5b50610768600480360381019061076391906148b6565b6118b2565b005b34801561077657600080fd5b5061077f6119b0565b60405161078c91906147b8565b60405180910390f35b3480156107a157600080fd5b506107aa6119b6565b6040516107b791906147b8565b60405180910390f35b3480156107cc57600080fd5b506107d56119bc565b6040516107e29190614b82565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190614b9d565b6119e0565b005b34801561082057600080fd5b5061083b60048036038101906108369190614a50565b611ad2565b604051610848919061499c565b60405180910390f35b34801561085d57600080fd5b50610878600480360381019061087391906148b6565b611b05565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614a50565b611ba6565b005b3480156108af57600080fd5b506108b8611da9565b6040516108c5919061499c565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614b9d565b611dbc565b005b34801561090357600080fd5b5061090c611eae565b6040516109199190614c3c565b60405180910390f35b34801561092e57600080fd5b50610949600480360381019061094491906148b6565b611ed2565b005b34801561095757600080fd5b50610960611f4b565b60405161096d919061499c565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614a50565b611f5e565b6040516109aa91906147b8565b60405180910390f35b3480156109bf57600080fd5b506109c8611fa7565b005b3480156109d657600080fd5b506109df6120ff565b6040516109ec9190614b58565b60405180910390f35b348015610a0157600080fd5b50610a0a612112565b604051610a179190614b82565b60405180910390f35b348015610a2c57600080fd5b50610a35612136565b604051610a4291906147b8565b60405180910390f35b348015610a5757600080fd5b50610a6061213c565b604051610a6d91906147b8565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614c57565b612142565b005b348015610aab57600080fd5b50610ab461226a565b604051610ac19190614b82565b60405180910390f35b348015610ad657600080fd5b50610adf612279565b604051610aec9190614b82565b60405180910390f35b348015610b0157600080fd5b50610b0a6122a3565b604051610b179190614b82565b60405180910390f35b348015610b2c57600080fd5b50610b356122c9565b604051610b429190614863565b60405180910390f35b348015610b5757600080fd5b50610b60612306565b005b348015610b6e57600080fd5b50610b896004803603810190610b849190614941565b6124dd565b604051610b96919061499c565b60405180910390f35b348015610bab57600080fd5b50610bb46124f2565b604051610bc191906147b8565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec91906148b6565b6124fc565b005b348015610bff57600080fd5b50610c086125b7565b604051610c159190614b82565b60405180910390f35b348015610c2a57600080fd5b50610c456004803603810190610c4091906148b6565b6125dd565b604051610c5291906147b8565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190614cbe565b61264d565b005b348015610c9057600080fd5b50610cab6004803603810190610ca691906148b6565b6129a6565b005b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614b9d565b612a47565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf891906148b6565b612b39565b005b348015610d0b57600080fd5b50610d266004803603810190610d219190614d11565b612d07565b604051610d3391906147b8565b60405180910390f35b348015610d4857600080fd5b50610d51612d8e565b604051610d5e91906147b8565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906148b6565b612d94565b005b348015610d9c57600080fd5b50610db76004803603810190610db291906148b6565b612e4e565b005b348015610dc557600080fd5b50610de06004803603810190610ddb9190614a50565b612eef565b005b348015610dee57600080fd5b50610df76130b5565b604051610e0491906147b8565b60405180910390f35b348015610e1957600080fd5b50610e346004803603810190610e2f9190614b9d565b6130bb565b005b348015610e4257600080fd5b50610e4b6131ad565b604051610e58919061499c565b60405180910390f35b60085481565b601e5481565b60606040518060400160405280600781526020017f5073796475636b00000000000000000000000000000000000000000000000000815250905090565b610eb26131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890614d9d565b60405180910390fd5b6103e881600254610f529190614dec565b610f5c9190614e5d565b60048190555050565b600081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161104591906147b8565b60405180910390a36001905092915050565b61105f6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614d9d565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b600082611117836125dd565b11905092915050565b600c5481565b6000600254905090565b6111386131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90614d9d565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112e56131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136b90614d9d565b60405180910390fd5b600047905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846113c19190614dec565b6113cb9190614e5d565b9081150290604051600060405180830381858888f193505050501580156113f6573d6000803e3d6000fd5b505050565b600b5481565b6114096131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148f90614d9d565b60405180910390fd5b8160198190555080601a819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461169657611615826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6116a184848461321d565b90509392505050565b6116b26131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890614d9d565b60405180910390fd5b80601e8190555050565b60006117c861177b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f5e565b6117ba6117a9601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f5e565b600254613aea90919063ffffffff16565b613aea90919063ffffffff16565b905090565b6117d56131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614d9d565b60405180910390fd5b81601b60016101000a81548160ff02191690831515021790555080601b60026101000a81548160ff021916908360ff1602179055505050565b601f5481565b60006009905090565b60065481565b6118ba6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194090614d9d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846119769190614dec565b6119809190614e5d565b9081150290604051600060405180830381858888f193505050501580156119ab573d6000803e3d6000fd5b505050565b60075481565b60055481565b7f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057881565b6119e86131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6e90614d9d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611afe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f65565b9050919050565b611b0d6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390614d9d565b60405180910390fd5b8060038190555050565b611bae6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614d9d565b60405180910390fd5b6000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b60019054906101000a900460ff1681565b611dc46131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4a90614d9d565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f4857611f4633601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b00565b505b50565b601d60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611faf6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590614d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b60029054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b60035481565b61214a6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d090614d9d565b60405180910390fd5b836007819055508260088190555081600981905550612213826122058587613cd390919063ffffffff16565b613cd390919063ffffffff16565b600a8190555080600c81905550600a805410612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90614eda565b60405180910390fd5b50505050565b6000612274612279565b905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f4455434b00000000000000000000000000000000000000000000000000000000815250905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238d90614f6c565b60405180910390fd5b600f5442116123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614fd8565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006124ea33848461321d565b905092915050565b6000600f54905090565b6125046131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614d9d565b60405180910390fd5b6103e8816002546125a49190614dec565b6125ae9190614e5d565b60038190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126466125ea61174b565b612638612629600261261b7f000000000000000000000000e0bc81692544be973d4db37c951e3f360f610578611f5e565b613ce990919063ffffffff16565b85613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050919050565b6126556131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614d9d565b60405180910390fd5b600060146000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555082601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6129ae6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490614d9d565b60405180910390fd5b8060068190555050565b612a4f6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614d9d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612b416131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc790614d9d565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612c819190614ff8565b600f81905550600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612d9c6131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614d9d565b60405180910390fd5b601e54811115612e4357601e54601f81905550612e4b565b80601f819055505b50565b612e566131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc90614d9d565b60405180910390fd5b80600b8190555050565b612ef76131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7d90614d9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fec9061509e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6130c36131c0565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314990614d9d565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60009054906101000a900460ff1681565b600033905090565b6000838311158290613210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132079190614863565b60405180910390fd5b5082840390509392505050565b6000602060009054906101000a900460ff16156132465761323f848484613b00565b9050613ae3565b61324e612279565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132bc575061328c612279565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561331157601b60009054906101000a900460ff16613310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133079061510a565b60405180910390fd5b5b60007f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561340e57507f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561349a5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156134f257507f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561354a575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135a45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156135fe5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156136b457600061360e86611f5e565b9050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136b25760045485826136709190614ff8565b11156136b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a89061519c565b60405180910390fd5b5b505b7f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561371b5750601b60019054906101000a900460ff165b80156137715750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138595742601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106137f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ee9061522e565b60405180910390fd5b601b60029054906101000a900460ff1660ff16426138159190614ff8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138b5576138b48685613d15565b5b61393e846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600084905081156139a9576000600b5411156139a4576139a18786613db2565b90505b6139e1565b6139b287613f1b565b6139bc57846139c8565b6139c7878685613f72565b5b90506139d26140ea565b156139e0576139df6141bf565b5b5b613a3381601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ad391906147b8565b60405180910390a3600193505050505b9392505050565b60008183613af8919061524e565b905092915050565b6000613b8b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c89092919063ffffffff16565b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c2082601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613cc091906147b8565b60405180910390a3600190509392505050565b60008183613ce19190614ff8565b905092915050565b60008183613cf79190614dec565b905092915050565b60008183613d0d9190614e5d565b905092915050565b60035481111580613d6f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613da5906152ce565b60405180910390fd5b5050565b600080600b5490506000613e026064600c54613dce9190614dec565b613df46064613de68689613ce990919063ffffffff16565b613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050613e5681601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ef691906147b8565b60405180910390a3613f118185613aea90919063ffffffff16565b9250505092915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613f8257600654613f86565b600a545b90506000613fd06064600c54613f9c9190614dec565b613fc26064613fb4868a613ce990919063ffffffff16565b613ce990919063ffffffff16565b613cff90919063ffffffff16565b905061402481601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cd390919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140c491906147b8565b60405180910390a36140df8186613aea90919063ffffffff16565b925050509392505050565b60007f000000000000000000000000e0bc81692544be973d4db37c951e3f360f61057873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156141555750602060009054906101000a900460ff16155b801561416d5750601d60009054906101000a900460ff165b80156141ba5750601e54601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff02191690831515021790555060006141ea601954601a5461110b565b6141f6576007546141f9565b60005b90506000614239600261422b600a5461421d86601f54613ce990919063ffffffff16565b613cff90919063ffffffff16565b613cff90919063ffffffff16565b9050600061425282601f54613aea90919063ffffffff16565b90506000600267ffffffffffffffff811115614271576142706152ee565b5b60405190808252806020026020018201604052801561429f5781602001602082028036833780820191505090505b50905030816000815181106142b7576142b661531d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561435c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143809190615361565b816001815181106143945761439361531d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060004790507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401614435959493929190615487565b600060405180830381600087803b15801561444f57600080fd5b505af1158015614463573d6000803e3d6000fd5b50505050600061447c8247613aea90919063ffffffff16565b905060006144a8614497600289613cff90919063ffffffff16565b600a54613aea90919063ffffffff16565b905060006144e660026144d8846144ca60075488613ce990919063ffffffff16565b613cff90919063ffffffff16565b613cff90919063ffffffff16565b905060006145118361450360085487613ce990919063ffffffff16565b613cff90919063ffffffff16565b9050600061453c8461452e60095488613ce990919063ffffffff16565b613cff90919063ffffffff16565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836175309060405161458990615512565b600060405180830381858888f193505050503d80600081146145c7576040519150601f19603f3d011682016040523d82523d6000602084013e6145cc565b606091505b50509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826175309060405161461a90615512565b600060405180830381858888f193505050503d8060008114614658576040519150601f19603f3d011682016040523d82523d6000602084013e61465d565b606091505b5050809150506000905060008a1115614777577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016146f796959493929190615527565b60606040518083038185885af1158015614715573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061473a919061559d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161476e9291906155f0565b60405180910390a15b50505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000819050919050565b6147b28161479f565b82525050565b60006020820190506147cd60008301846147a9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561480d5780820151818401526020810190506147f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000614835826147d3565b61483f81856147de565b935061484f8185602086016147ef565b61485881614819565b840191505092915050565b6000602082019050818103600083015261487d818461482a565b905092915050565b600080fd5b6148938161479f565b811461489e57600080fd5b50565b6000813590506148b08161488a565b92915050565b6000602082840312156148cc576148cb614885565b5b60006148da848285016148a1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061490e826148e3565b9050919050565b61491e81614903565b811461492957600080fd5b50565b60008135905061493b81614915565b92915050565b6000806040838503121561495857614957614885565b5b60006149668582860161492c565b9250506020614977858286016148a1565b9150509250929050565b60008115159050919050565b61499681614981565b82525050565b60006020820190506149b1600083018461498d565b92915050565b6149c081614981565b81146149cb57600080fd5b50565b6000813590506149dd816149b7565b92915050565b6000602082840312156149f9576149f8614885565b5b6000614a07848285016149ce565b91505092915050565b60008060408385031215614a2757614a26614885565b5b6000614a35858286016148a1565b9250506020614a46858286016148a1565b9150509250929050565b600060208284031215614a6657614a65614885565b5b6000614a748482850161492c565b91505092915050565b600080600060608486031215614a9657614a95614885565b5b6000614aa48682870161492c565b9350506020614ab58682870161492c565b9250506040614ac6868287016148a1565b9150509250925092565b600060ff82169050919050565b614ae681614ad0565b8114614af157600080fd5b50565b600081359050614b0381614add565b92915050565b60008060408385031215614b2057614b1f614885565b5b6000614b2e858286016149ce565b9250506020614b3f85828601614af4565b9150509250929050565b614b5281614ad0565b82525050565b6000602082019050614b6d6000830184614b49565b92915050565b614b7c81614903565b82525050565b6000602082019050614b976000830184614b73565b92915050565b60008060408385031215614bb457614bb3614885565b5b6000614bc28582860161492c565b9250506020614bd3858286016149ce565b9150509250929050565b6000819050919050565b6000614c02614bfd614bf8846148e3565b614bdd565b6148e3565b9050919050565b6000614c1482614be7565b9050919050565b6000614c2682614c09565b9050919050565b614c3681614c1b565b82525050565b6000602082019050614c516000830184614c2d565b92915050565b60008060008060808587031215614c7157614c70614885565b5b6000614c7f878288016148a1565b9450506020614c90878288016148a1565b9350506040614ca1878288016148a1565b9250506060614cb2878288016148a1565b91505092959194509250565b600080600060608486031215614cd757614cd6614885565b5b6000614ce58682870161492c565b9350506020614cf68682870161492c565b9250506040614d078682870161492c565b9150509250925092565b60008060408385031215614d2857614d27614885565b5b6000614d368582860161492c565b9250506020614d478582860161492c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d876020836147de565b9150614d9282614d51565b602082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614df78261479f565b9150614e028361479f565b9250828202614e108161479f565b91508282048414831517614e2757614e26614dbd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e688261479f565b9150614e738361479f565b925082614e8357614e82614e2e565b5b828204905092915050565b7f466565732063616e6e6f74206265207468617420686967680000000000000000600082015250565b6000614ec46018836147de565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614f566023836147de565b9150614f6182614efa565b604082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614fc2601f836147de565b9150614fcd82614f8c565b602082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b60006150038261479f565b915061500e8361479f565b925082820190508082111561502657615025614dbd565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150886026836147de565b91506150938261502c565b604082019050919050565b600060208201905081810360008301526150b78161507b565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006150f46014836147de565b91506150ff826150be565b602082019050919050565b60006020820190508181036000830152615123816150e7565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000615186603e836147de565b91506151918261512a565b604082019050919050565b600060208201905081810360008301526151b581615179565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006152186025836147de565b9150615223826151bc565b604082019050919050565b600060208201905081810360008301526152478161520b565b9050919050565b60006152598261479f565b91506152648361479f565b925082820390508181111561527c5761527b614dbd565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006152b86011836147de565b91506152c382615282565b602082019050919050565b600060208201905081810360008301526152e7816152ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061535b81614915565b92915050565b60006020828403121561537757615376614885565b5b60006153858482850161534c565b91505092915050565b6000819050919050565b60006153b36153ae6153a98461538e565b614bdd565b61479f565b9050919050565b6153c381615398565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153fe81614903565b82525050565b600061541083836153f5565b60208301905092915050565b6000602082019050919050565b6000615434826153c9565b61543e81856153d4565b9350615449836153e5565b8060005b8381101561547a5781516154618882615404565b975061546c8361541c565b92505060018101905061544d565b5085935050505092915050565b600060a08201905061549c60008301886147a9565b6154a960208301876153ba565b81810360408301526154bb8186615429565b90506154ca6060830185614b73565b6154d760808301846147a9565b9695505050505050565b600081905092915050565b50565b60006154fc6000836154e1565b9150615507826154ec565b600082019050919050565b600061551d826154ef565b9150819050919050565b600060c08201905061553c6000830189614b73565b61554960208301886147a9565b61555660408301876153ba565b61556360608301866153ba565b6155706080830185614b73565b61557d60a08301846147a9565b979650505050505050565b6000815190506155978161488a565b92915050565b6000806000606084860312156155b6576155b5614885565b5b60006155c486828701615588565b93505060206155d586828701615588565b92505060406155e686828701615588565b9150509250925092565b600060408201905061560560008301856147a9565b61561260208301846147a9565b939250505056fea26469706673582212202ba6dd3df4cbee062d78df4bb6fd4096c7904abf4800358a2c38c217b1e1593364736f6c63430008110033

Deployed Bytecode Sourcemap

18233:15162:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19216:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20840:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22160:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21264:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27730:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33176:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1132:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20570:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31238:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27261:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1086:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32650:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21782:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32261:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32842:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27871:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19279:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20664:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;815:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27483:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;866:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;771;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18946:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30272:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21488:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22523:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31442:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19033:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29877:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18889:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22783:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19179:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21012:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8899:148;;;;;;;;;;;;;:::i;:::-;;19077:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;261:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;702:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;594:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30601:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20926:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8256:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;343:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20750:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9921:305;;;;;;;;;;;;;:::i;:::-;;21618:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9454:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22343:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18760:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32992:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31699:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31095:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30006:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9619:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21123:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32381:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30505:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9202:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;954:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30135:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18993:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;910:37;;;;:::o;19216:56::-;;;;:::o;20840:80::-;20888:13;20912:5;;;;;;;;;;;;;;;;;20905:12;;20840:80;:::o;22160:177::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22325:4:::1;22297:23;22282:12;;:38;;;;:::i;:::-;22281:48;;;;:::i;:::-;22263:15;:66;;;;22160:177:::0;:::o;21264:216::-;21339:4;21391:6;21356:11;:23;21368:10;21356:23;;;;;;;;;;;;;;;:32;21380:7;21356:32;;;;;;;;;;;;;;;:41;;;;21434:7;21413:37;;21422:10;21413:37;;;21443:6;21413:37;;;;;;:::i;:::-;;;;;;;;21468:4;21461:11;;21264:216;;;;:::o;27730:94::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27809:7:::1;27795:11;;:21;;;;;;;;;;;;;;;;;;27730:94:::0;:::o;33176:150::-;33256:4;33312:6;33280:29;33300:8;33280:19;:29::i;:::-;:38;33273:45;;33176:150;;;;:::o;1132:39::-;;;;:::o;20570:88::-;20625:7;20643:12;;20636:19;;20570:88;:::o;31238:196::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31347:5:::1;31322:11;:22;31334:9;;;;;;;;;;;31322:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31389:4;31363:11;:23;31375:10;31363:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31416:10;31404:9;;:22;;;;;;;;;;;;;;;;;;31238:196:::0;:::o;27261:214::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27346:17:::1;27366:21;27346:41;;27406:15;::::0;::::1;;;;;;;;27398:33;;:69;27463:3;27444:16;27432:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;27398:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27335:140;27261:214:::0;:::o;1086:37::-;;;;:::o;32650:184::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32767:7:::1;32749:15;:25;;;;32814:12;32785:26;:41;;;;32650:184:::0;;:::o;21782:370::-;21882:4;21937:17;21902:11;:19;21914:6;21902:19;;;;;;;;;;;;;;;:31;21922:10;21902:31;;;;;;;;;;;;;;;;:52;21899:186;;22004:69;22040:6;22004:69;;;;;;;;;;;;;;;;;:11;:19;22016:6;22004:19;;;;;;;;;;;;;;;:31;22024:10;22004:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;21970:11;:19;21982:6;21970:19;;;;;;;;;;;;;;;:31;21990:10;21970:31;;;;;;;;;;;;;;;:103;;;;21899:186;22104:40;22118:6;22126:9;22137:6;22104:13;:40::i;:::-;22097:47;;21782:370;;;;;:::o;32261:112::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32358:7:::1;32342:13;:23;;;;32261:112:::0;:::o;32842:142::-;32895:7;32922:54;32960:15;32970:4;;;;;;;;;;;32960:9;:15::i;:::-;32922:33;32939:15;32949:4;;;;;;;;;;;32939:9;:15::i;:::-;32922:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;32915:61;;32842:142;:::o;27871:164::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27976:7:::1;27955:18;;:28;;;;;;;;;;;;;;;;;;28018:9;27994:21;;:33;;;;;;;;;;;;;;;;;;27871:164:::0;;:::o;19279:53::-;;;;:::o;20664:80::-;20716:5;527:1;20725:16;;20664:80;:::o;815:42::-;;;;:::o;27483:216::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27575:17:::1;27595:21;27575:41;;27635:10;27627:28;;:64;27687:3;27668:16;27656:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;27627:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27564:135;27483:216:::0;:::o;866:37::-;;;;:::o;771:::-;;;;:::o;18946:38::-;;;:::o;30272:131::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30389:6:::1;30362:16;:24;30379:6;30362:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30272:131:::0;;:::o;21488:122::-;21543:4;21567:35;21575:7;21584:17;21567:7;:35::i;:::-;21560:42;;21488:122;;;:::o;22523:97::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22606:6:::1;22591:12;:21;;;;22523:97:::0;:::o;31442:249::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31553:5:::1;31522:11;:28;31534:15:::0;::::1;;;;;;;;;;31522:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31595:4;31569:11;:23;31581:10;31569:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31638:4;31612:11;:23;31624:10;31612:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31673:10;31655:15;::::0;:28:::1;;;;;;;;;;;;;;;;;;31442:249:::0;:::o;19033:37::-;;;;;;;;;;;;;:::o;29877:121::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29984:6:::1;29962:11;:19;29974:6;29962:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29877:121:::0;;:::o;18889:50::-;;;:::o;22783:231::-;22932:6;22908:9;:21;22918:10;22908:21;;;;;;;;;;;;;;;;:30;22905:102;;;22955:40;22970:10;22982:4;;;;;;;;;;;22988:6;22955:14;:40::i;:::-;;22905:102;22783:231;:::o;19179:30::-;;;;;;;;;;;;;:::o;21012:105::-;21078:7;21096:9;:18;21106:7;21096:18;;;;;;;;;;;;;;;;21089:25;;21012:105;;;:::o;8899:148::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9006:1:::1;8969:40;;8990:6;;;;;;;;;;;8969:40;;;;;;;;;;;;9037:1;9020:6;;:19;;;;;;;;;;;;;;;;;;8899:148::o:0;19077:39::-;;;;;;;;;;;;;:::o;261:75::-;;;;;;;;;;;;:::o;702:57::-;;;;:::o;594:54::-;;;;:::o;30601:486::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30773:13:::1;30761:9;:25;;;;30813:20;30797:13;:36;;;;30862:19;30844:15;:37;;;;30907:64;30951:19;30907:39;30925:20;30907:13;:17;;:39;;;;:::i;:::-;:43;;:64;;;;:::i;:::-;30892:12;:79;;;;30999:15;30982:14;:32;;;;31048:2;31033:12:::0;::::1;:17;31025:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;30601:486:::0;;;;:::o;20926:80::-;20978:7;20996;:5;:7::i;:::-;20989:14;;20926:80;:::o;8256:79::-;8294:7;8321:6;;;;;;;;;;;8314:13;;8256:79;:::o;343:69::-;;;;;;;;;;;;;:::o;20750:84::-;20800:13;20824:7;;;;;;;;;;;;;;;;;20817:14;;20750:84;:::o;9921:305::-;9991:10;9973:28;;:14;;;;;;;;;;;:28;;;9965:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10078:9;;10060:15;:27;10052:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10169:14;;;;;;;;;;;10140:44;;10161:6;;;;;;;;;;;10140:44;;;;;;;;;;;;10204:14;;;;;;;;;;;10195:6;;:23;;;;;;;;;;;;;;;;;;9921:305::o;21618:156::-;21698:4;21722:44;21736:10;21748:9;21759:6;21722:13;:44::i;:::-;21715:51;;21618:156;;;;:::o;9454:89::-;9499:7;9526:9;;9519:16;;9454:89;:::o;22343:172::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22503:4:::1;22474:24;22459:12;;:39;;;;:::i;:::-;22458:49;;;;:::i;:::-;22443:12;:64;;;;22343:172:::0;:::o;18760:36::-;;;;;;;;;;;;;:::o;32992:176::-;33060:7;33087:73;33137:22;:20;:22::i;:::-;33087:45;33100:31;33129:1;33100:24;33110:13;33100:9;:24::i;:::-;:28;;:31;;;;:::i;:::-;33087:8;:12;;:45;;;;:::i;:::-;:49;;:73;;;;:::i;:::-;33080:80;;32992:176;;;:::o;31699:518::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31868:5:::1;31843:11;:22;31855:9;;;;;;;;;;;31843:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31913:4;31884:11;:26;31896:13;31884:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31959:5;31928:11;:28;31940:15:::0;::::1;;;;;;;;;;31928:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32010:4;31975:11;:32;31987:19;31975:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32062:4;32027:11;:32;32039:19;32027:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32103:22;32079:21;;:46;;;;;;;;;;;;;;;;;;32154:19;32136:15;::::0;:37:::1;;;;;;;;;;;;;;;;;;32196:13;32184:9;;:25;;;;;;;;;;;;;;;;;;31699:518:::0;;;:::o;31095:96::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31177:6:::1;31163:11;:20;;;;31095:96:::0;:::o;30006:121::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30113:6:::1;30091:11;:19;30103:6;30091:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30006:121:::0;;:::o;9619:226::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9700:6:::1;;;;;;;;;;;9683:14;;:23;;;;;;;;;;;;;;;;;;9734:1;9717:6;;:19;;;;;;;;;;;;;;;;;;9777:4;9759:15;:22;;;;:::i;:::-;9747:9;:34;;;;9834:1;9797:40;;9818:6;;;;;;;;;;;9797:40;;;;;;;;;;;;9619:226:::0;:::o;21123:133::-;21207:7;21225:11;:19;21237:6;21225:19;;;;;;;;;;;;;;;:28;21245:7;21225:28;;;;;;;;;;;;;;;;21218:35;;21123:133;;;;:::o;998:79::-;;;;:::o;32381:221::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32466:13:::1;;32456:7;:23;32453:134;;;32509:13;;32496:10;:26;;;;32453:134;;;32568:7;32555:10;:20;;;;32453:134;32381:221:::0;:::o;30505:88::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30582:3:::1;30571:8;:14;;;;30505:88:::0;:::o;9202:244::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9311:1:::1;9291:22;;:8;:22;;::::0;9283:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9401:8;9372:38;;9393:6;;;;;;;;;;;9372:38;;;;;;;;;;;;9430:8;9421:6;;:17;;;;;;;;;;;;;;;;;;9202:244:::0;:::o;954:37::-;;;;:::o;30135:129::-;8478:12;:10;:12::i;:::-;8468:22;;:6;;;;;;;;;;;:22;;;8460:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30250:6:::1;30224:15;:23;30240:6;30224:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30135:129:::0;;:::o;18993:31::-;;;;;;;;;;;;;:::o;6840:98::-;6893:7;6920:10;6913:17;;6840:98;:::o;3928:240::-;4048:7;4106:1;4101;:6;;4109:12;4093:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4148:1;4144;:5;4137:12;;3928:240;;;;;:::o;23089:2380::-;23181:4;23201:6;;;;;;;;;;;23198:63;;;23217:41;23232:6;23240:9;23251:6;23217:14;:41::i;:::-;23210:48;;;;23198:63;23286:7;:5;:7::i;:::-;23276:17;;:6;:17;;;;:41;;;;;23310:7;:5;:7::i;:::-;23297:20;;:9;:20;;;;23276:41;23273:115;;;23341:11;;;;;;;;;;;23333:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;23273:115;23400:11;23428:13;23415:26;;:9;:26;;;23400:42;;23453:15;23485:13;23472:26;;:9;:26;;;;:53;;;;;23512:13;23502:23;;:6;:23;;;;23472:53;23453:73;;23564:4;23543:26;;:9;:26;;;;:70;;;;;23608:4;;;;;;;;;;;23587:26;;:9;:26;;;;23543:70;:114;;;;;23644:13;23631:26;;:9;:26;;;;23543:114;:160;;;;;23688:15;;;;;;;;;;23675:28;;:9;:28;;;;23543:160;:200;;;;;23734:9;;;;;;;;;;;23721:22;;:9;:22;;;;23543:200;:252;;;;;23774:21;;;;;;;;;;;23761:34;;:9;:34;;;;23543:252;23539:526;;;23821:18;23842:20;23852:9;23842;:20::i;:::-;23821:41;;23881:11;:22;23893:9;23881:22;;;;;;;;;;;;;;;;;;;;;;;;;23877:177;;23957:15;;23946:6;23933:10;:19;;;;:::i;:::-;23932:40;;23924:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23877:177;23806:259;23539:526;24091:13;24081:23;;:6;:23;;;:58;;;;;24121:18;;;;;;;;;;;24081:58;:103;;;;;24157:16;:27;24174:9;24157:27;;;;;;;;;;;;;;;;;;;;;;;;;24156:28;24081:103;24077:317;;;24245:15;24218:13;:24;24232:9;24218:24;;;;;;;;;;;;;;;;:42;24210:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24361:21;;;;;;;;;;;24343:39;;:15;:39;;;;:::i;:::-;24316:13;:24;24330:9;24316:24;;;;;;;;;;;;;;;:66;;;;24077:317;24616:15;:26;24632:9;24616:26;;;;;;;;;;;;;;;;;;;;;;;;;24612:87;;24659:28;24672:6;24680;24659:12;:28::i;:::-;24612:87;24758:53;24780:6;24758:53;;;;;;;;;;;;;;;;;:9;:17;24768:6;24758:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24738:9;:17;24748:6;24738:17;;;;;;;;;;;;;;;:73;;;;24824:22;24849:6;24824:31;;24988:10;24985:318;;;25029:1;25018:8;;:12;25015:100;;;25068:31;25084:6;25092;25068:15;:31::i;:::-;25051:48;;25015:100;24985:318;;;25164:21;25178:6;25164:13;:21::i;:::-;:64;;25222:6;25164:64;;;25188:31;25196:6;25204;25212;25188:7;:31::i;:::-;25164:64;25147:81;;25260:16;:14;:16::i;:::-;25257:35;;;25279:10;:8;:10::i;:::-;25257:35;24985:318;25338:40;25363:14;25338:9;:20;25348:9;25338:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;25315:9;:20;25325:9;25315:20;;;;;;;;;;;;;;;:63;;;;25413:9;25396:43;;25405:6;25396:43;;;25424:14;25396:43;;;;;;:::i;:::-;;;;;;;;25457:4;25450:11;;;;;23089:2380;;;;;;:::o;2030:98::-;2088:7;2119:1;2115;:5;;;;:::i;:::-;2108:12;;2030:98;;;;:::o;25477:330::-;25570:4;25607:53;25629:6;25607:53;;;;;;;;;;;;;;;;;:9;:17;25617:6;25607:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25587:9;:17;25597:6;25587:17;;;;;;;;;;;;;;;:73;;;;25694:32;25719:6;25694:9;:20;25704:9;25694:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25671:9;:20;25681:9;25671:20;;;;;;;;;;;;;;;:55;;;;25759:9;25742:35;;25751:6;25742:35;;;25770:6;25742:35;;;;;;:::i;:::-;;;;;;;;25795:4;25788:11;;25477:330;;;;;:::o;1649:98::-;1707:7;1738:1;1734;:5;;;;:::i;:::-;1727:12;;1649:98;;;;:::o;2387:::-;2445:7;2476:1;2472;:5;;;;:::i;:::-;2465:12;;2387:98;;;;:::o;2786:::-;2844:7;2875:1;2871;:5;;;;:::i;:::-;2864:12;;2786:98;;;;:::o;25815:166::-;25912:12;;25902:6;:22;;:49;;;;25928:15;:23;25944:6;25928:23;;;;;;;;;;;;;;;;;;;;;;;;;25902:49;25894:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25815:166;;:::o;26147:406::-;26222:7;26244:17;26264:8;;26244:28;;26283:17;26303:56;26355:3;26338:14;;:20;;;;:::i;:::-;26303:30;26329:3;26303:21;26314:9;26303:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26283:76;;26407:39;26436:9;26407;:24;26425:4;26407:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26380:9;:24;26398:4;26380:24;;;;;;;;;;;;;;;:66;;;;26487:4;26462:42;;26471:6;26462:42;;;26494:9;26462:42;;;;;;:::i;:::-;;;;;;;;26524:21;26535:9;26524:6;:10;;:21;;;;:::i;:::-;26517:28;;;;26147:406;;;;:::o;25989:114::-;26051:4;26076:11;:19;26088:6;26076:19;;;;;;;;;;;;;;;;;;;;;;;;;26075:20;26068:27;;25989:114;;;:::o;26561:438::-;26641:7;26663:17;26683:6;:35;;26707:11;;26683:35;;;26692:12;;26683:35;26663:55;;26729:17;26749:56;26801:3;26784:14;;:20;;;;:::i;:::-;26749:30;26775:3;26749:21;26760:9;26749:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;:34;;:56;;;;:::i;:::-;26729:76;;26853:39;26882:9;26853;:24;26871:4;26853:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26826:9;:24;26844:4;26826:24;;;;;;;;;;;;;;;:66;;;;26933:4;26908:42;;26917:6;26908:42;;;26940:9;26908:42;;;;;;:::i;:::-;;;;;;;;26970:21;26981:9;26970:6;:10;;:21;;;;:::i;:::-;26963:28;;;;26561:438;;;;;:::o;27047:206::-;27096:4;27134:13;27120:27;;:10;:27;;;;:47;;;;;27161:6;;;;;;;;;;;27160:7;27120:47;:71;;;;;27180:11;;;;;;;;;;;27120:71;:125;;;;;27232:13;;27204:9;:24;27222:4;27204:24;;;;;;;;;;;;;;;;:41;;27120:125;27113:132;;27047:206;:::o;28043:1777::-;19390:4;19381:6;;:13;;;;;;;;;;;;;;;;;;28092:27:::1;28122:60;28138:15;;28155:26;;28122:15;:60::i;:::-;:76;;28189:9;;28122:76;;;28185:1;28122:76;28092:106;;28209:23;28235:60;28293:1;28235:53;28275:12;;28235:35;28250:19;28235:10;;:14;;:35;;;;:::i;:::-;:39;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;28209:86;;28306:20;28329:31;28344:15;28329:10;;:14;;:31;;;;:::i;:::-;28306:54;;28373:21;28411:1;28397:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28373:40;;28442:4;28424;28429:1;28424:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28468:14;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28458:4;28463:1;28458:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;28502:21;28526;28502:45;;28560:14;:65;;;28640:12;28667:1;28683:4;28710;28730:15;28560:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28769:17;28789:40;28815:13;28789:21;:25;;:40;;;;:::i;:::-;28769:60;;28842:19;28864:44;28881:26;28905:1;28881:19;:23;;:26;;;;:::i;:::-;28864:12;;:16;;:44;;;;:::i;:::-;28842:66;;28921:26;28950:48;28996:1;28950:41;28979:11;28950:24;28964:9;;28950;:13;;:24;;;;:::i;:::-;:28;;:41;;;;:::i;:::-;:45;;:48;;;;:::i;:::-;28921:77;;29009:26;29038:45;29071:11;29038:28;29052:13;;29038:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;29009:74;;29094:25;29122:47;29157:11;29122:30;29136:15;;29122:9;:13;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;29094:75;;29183:15;29211::::0;::::1;;;;;;;;;;29203:29;;29240:18;29265:5;29203:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29182:93;;;29310:9;;;;;;;;;;;29302:23;;29333:17;29357:5;29302:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29286:81;;;;;29425:5;29412:18;;29464:1;29446:15;:19;29443:370;;;29481:14;:30;;;29519:18;29565:4;29589:15;29623:1;29643::::0;29663:21:::1;;;;;;;;;;;29703:15;29481:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29753:48;29765:18;29785:15;29753:48;;;;;;;:::i;:::-;;;;;;;;29443:370;28081:1739;;;;;;;;;;;19408:5:::0;19399:6;;:14;;;;;;;;;;;;;;;;;;28043: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;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:118::-;7415:24;7433:5;7415:24;:::i;:::-;7410:3;7403:37;7328:118;;:::o;7452:222::-;7545:4;7583:2;7572:9;7568:18;7560:26;;7596:71;7664:1;7653:9;7649:17;7640:6;7596:71;:::i;:::-;7452:222;;;;:::o;7680:468::-;7745:6;7753;7802:2;7790:9;7781:7;7777:23;7773:32;7770:119;;;7808:79;;:::i;:::-;7770:119;7928:1;7953:53;7998:7;7989:6;7978:9;7974:22;7953:53;:::i;:::-;7943:63;;7899:117;8055:2;8081:50;8123:7;8114:6;8103:9;8099:22;8081:50;:::i;:::-;8071:60;;8026:115;7680:468;;;;;:::o;8154:60::-;8182:3;8203:5;8196:12;;8154:60;;;:::o;8220:142::-;8270:9;8303:53;8321:34;8330:24;8348:5;8330:24;:::i;:::-;8321:34;:::i;:::-;8303:53;:::i;:::-;8290:66;;8220:142;;;:::o;8368:126::-;8418:9;8451:37;8482:5;8451:37;:::i;:::-;8438:50;;8368:126;;;:::o;8500:153::-;8577:9;8610:37;8641:5;8610:37;:::i;:::-;8597:50;;8500:153;;;:::o;8659:185::-;8773:64;8831:5;8773:64;:::i;:::-;8768:3;8761:77;8659:185;;:::o;8850:276::-;8970:4;9008:2;8997:9;8993:18;8985:26;;9021:98;9116:1;9105:9;9101:17;9092:6;9021:98;:::i;:::-;8850:276;;;;:::o;9132:765::-;9218:6;9226;9234;9242;9291:3;9279:9;9270:7;9266:23;9262:33;9259:120;;;9298:79;;:::i;:::-;9259:120;9418:1;9443:53;9488:7;9479:6;9468:9;9464:22;9443:53;:::i;:::-;9433:63;;9389:117;9545:2;9571:53;9616:7;9607:6;9596:9;9592:22;9571:53;:::i;:::-;9561:63;;9516:118;9673:2;9699:53;9744:7;9735:6;9724:9;9720:22;9699:53;:::i;:::-;9689:63;;9644:118;9801:2;9827:53;9872:7;9863:6;9852:9;9848:22;9827:53;:::i;:::-;9817:63;;9772:118;9132:765;;;;;;;:::o;9903:619::-;9980:6;9988;9996;10045:2;10033:9;10024:7;10020:23;10016:32;10013:119;;;10051:79;;:::i;:::-;10013:119;10171:1;10196:53;10241:7;10232:6;10221:9;10217:22;10196:53;:::i;:::-;10186:63;;10142:117;10298:2;10324:53;10369:7;10360:6;10349:9;10345:22;10324:53;:::i;:::-;10314:63;;10269:118;10426:2;10452:53;10497:7;10488:6;10477:9;10473:22;10452:53;:::i;:::-;10442:63;;10397:118;9903:619;;;;;:::o;10528:474::-;10596:6;10604;10653:2;10641:9;10632:7;10628:23;10624:32;10621:119;;;10659:79;;:::i;:::-;10621:119;10779:1;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10750:117;10906:2;10932:53;10977:7;10968:6;10957:9;10953:22;10932:53;:::i;:::-;10922:63;;10877:118;10528:474;;;;;:::o;11008:182::-;11148:34;11144:1;11136:6;11132:14;11125:58;11008:182;:::o;11196:366::-;11338:3;11359:67;11423:2;11418:3;11359:67;:::i;:::-;11352:74;;11435:93;11524:3;11435:93;:::i;:::-;11553:2;11548:3;11544:12;11537:19;;11196:366;;;:::o;11568:419::-;11734:4;11772:2;11761:9;11757:18;11749:26;;11821:9;11815:4;11811:20;11807:1;11796:9;11792:17;11785:47;11849:131;11975:4;11849:131;:::i;:::-;11841:139;;11568:419;;;:::o;11993:180::-;12041:77;12038:1;12031:88;12138:4;12135:1;12128:15;12162:4;12159:1;12152:15;12179:410;12219:7;12242:20;12260:1;12242:20;:::i;:::-;12237:25;;12276:20;12294:1;12276:20;:::i;:::-;12271:25;;12331:1;12328;12324:9;12353:30;12371:11;12353:30;:::i;:::-;12342:41;;12532:1;12523:7;12519:15;12516:1;12513:22;12493:1;12486:9;12466:83;12443:139;;12562:18;;:::i;:::-;12443:139;12227:362;12179:410;;;;:::o;12595:180::-;12643:77;12640:1;12633:88;12740:4;12737:1;12730:15;12764:4;12761:1;12754:15;12781:185;12821:1;12838:20;12856:1;12838:20;:::i;:::-;12833:25;;12872:20;12890:1;12872:20;:::i;:::-;12867:25;;12911:1;12901:35;;12916:18;;:::i;:::-;12901:35;12958:1;12955;12951:9;12946:14;;12781:185;;;;:::o;12972:174::-;13112:26;13108:1;13100:6;13096:14;13089:50;12972:174;:::o;13152:366::-;13294:3;13315:67;13379:2;13374:3;13315:67;:::i;:::-;13308:74;;13391:93;13480:3;13391:93;:::i;:::-;13509:2;13504:3;13500:12;13493:19;;13152:366;;;:::o;13524:419::-;13690:4;13728:2;13717:9;13713:18;13705:26;;13777:9;13771:4;13767:20;13763:1;13752:9;13748:17;13741:47;13805:131;13931:4;13805:131;:::i;:::-;13797:139;;13524:419;;;:::o;13949:222::-;14089:34;14085:1;14077:6;14073:14;14066:58;14158:5;14153:2;14145:6;14141:15;14134:30;13949:222;:::o;14177:366::-;14319:3;14340:67;14404:2;14399:3;14340:67;:::i;:::-;14333:74;;14416:93;14505:3;14416:93;:::i;:::-;14534:2;14529:3;14525:12;14518:19;;14177:366;;;:::o;14549:419::-;14715:4;14753:2;14742:9;14738:18;14730:26;;14802:9;14796:4;14792:20;14788:1;14777:9;14773:17;14766:47;14830:131;14956:4;14830:131;:::i;:::-;14822:139;;14549:419;;;:::o;14974:181::-;15114:33;15110:1;15102:6;15098:14;15091:57;14974:181;:::o;15161:366::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15161:366;;;:::o;15533:419::-;15699:4;15737:2;15726:9;15722:18;15714:26;;15786:9;15780:4;15776:20;15772:1;15761:9;15757:17;15750:47;15814:131;15940:4;15814:131;:::i;:::-;15806:139;;15533:419;;;:::o;15958:191::-;15998:3;16017:20;16035:1;16017:20;:::i;:::-;16012:25;;16051:20;16069:1;16051:20;:::i;:::-;16046:25;;16094:1;16091;16087:9;16080:16;;16115:3;16112:1;16109:10;16106:36;;;16122:18;;:::i;:::-;16106:36;15958:191;;;;:::o;16155:225::-;16295:34;16291:1;16283:6;16279:14;16272:58;16364:8;16359:2;16351:6;16347:15;16340:33;16155:225;:::o;16386:366::-;16528:3;16549:67;16613:2;16608:3;16549:67;:::i;:::-;16542:74;;16625:93;16714:3;16625:93;:::i;:::-;16743:2;16738:3;16734:12;16727:19;;16386:366;;;:::o;16758:419::-;16924:4;16962:2;16951:9;16947:18;16939:26;;17011:9;17005:4;17001:20;16997:1;16986:9;16982:17;16975:47;17039:131;17165:4;17039:131;:::i;:::-;17031:139;;16758:419;;;:::o;17183:170::-;17323:22;17319:1;17311:6;17307:14;17300:46;17183:170;:::o;17359:366::-;17501:3;17522:67;17586:2;17581:3;17522:67;:::i;:::-;17515:74;;17598:93;17687:3;17598:93;:::i;:::-;17716:2;17711:3;17707:12;17700:19;;17359:366;;;:::o;17731:419::-;17897:4;17935:2;17924:9;17920:18;17912:26;;17984:9;17978:4;17974:20;17970:1;17959:9;17955:17;17948:47;18012:131;18138:4;18012:131;:::i;:::-;18004:139;;17731:419;;;:::o;18156:249::-;18296:34;18292:1;18284:6;18280:14;18273:58;18365:32;18360:2;18352:6;18348:15;18341:57;18156:249;:::o;18411:366::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:419::-;18949:4;18987:2;18976:9;18972:18;18964:26;;19036:9;19030:4;19026:20;19022:1;19011:9;19007:17;19000:47;19064:131;19190:4;19064:131;:::i;:::-;19056:139;;18783:419;;;:::o;19208:224::-;19348:34;19344:1;19336:6;19332:14;19325:58;19417:7;19412:2;19404:6;19400:15;19393:32;19208:224;:::o;19438:366::-;19580:3;19601:67;19665:2;19660:3;19601:67;:::i;:::-;19594:74;;19677:93;19766:3;19677:93;:::i;:::-;19795:2;19790:3;19786:12;19779:19;;19438:366;;;:::o;19810:419::-;19976:4;20014:2;20003:9;19999:18;19991:26;;20063:9;20057:4;20053:20;20049:1;20038:9;20034:17;20027:47;20091:131;20217:4;20091:131;:::i;:::-;20083:139;;19810:419;;;:::o;20235:194::-;20275:4;20295:20;20313:1;20295:20;:::i;:::-;20290:25;;20329:20;20347:1;20329:20;:::i;:::-;20324:25;;20373:1;20370;20366:9;20358:17;;20397:1;20391:4;20388:11;20385:37;;;20402:18;;:::i;:::-;20385:37;20235:194;;;;:::o;20435:167::-;20575:19;20571:1;20563:6;20559:14;20552:43;20435:167;:::o;20608:366::-;20750:3;20771:67;20835:2;20830:3;20771:67;:::i;:::-;20764:74;;20847:93;20936:3;20847:93;:::i;:::-;20965:2;20960:3;20956:12;20949:19;;20608:366;;;:::o;20980:419::-;21146:4;21184:2;21173:9;21169:18;21161:26;;21233:9;21227:4;21223:20;21219:1;21208:9;21204:17;21197:47;21261:131;21387:4;21261:131;:::i;:::-;21253:139;;20980:419;;;:::o;21405:180::-;21453:77;21450:1;21443:88;21550:4;21547:1;21540:15;21574:4;21571:1;21564:15;21591:180;21639:77;21636:1;21629:88;21736:4;21733:1;21726:15;21760:4;21757:1;21750:15;21777:143;21834:5;21865:6;21859:13;21850:22;;21881:33;21908:5;21881:33;:::i;:::-;21777:143;;;;:::o;21926:351::-;21996:6;22045:2;22033:9;22024:7;22020:23;22016:32;22013:119;;;22051:79;;:::i;:::-;22013:119;22171:1;22196:64;22252:7;22243:6;22232:9;22228:22;22196:64;:::i;:::-;22186:74;;22142:128;21926:351;;;;:::o;22283:85::-;22328:7;22357:5;22346:16;;22283:85;;;:::o;22374:158::-;22432:9;22465:61;22483:42;22492:32;22518:5;22492:32;:::i;:::-;22483:42;:::i;:::-;22465:61;:::i;:::-;22452:74;;22374:158;;;:::o;22538:147::-;22633:45;22672:5;22633:45;:::i;:::-;22628:3;22621:58;22538:147;;:::o;22691:114::-;22758:6;22792:5;22786:12;22776:22;;22691:114;;;:::o;22811:184::-;22910:11;22944:6;22939:3;22932:19;22984:4;22979:3;22975:14;22960:29;;22811:184;;;;:::o;23001:132::-;23068:4;23091:3;23083:11;;23121:4;23116:3;23112:14;23104:22;;23001:132;;;:::o;23139:108::-;23216:24;23234:5;23216:24;:::i;:::-;23211:3;23204:37;23139:108;;:::o;23253:179::-;23322:10;23343:46;23385:3;23377:6;23343:46;:::i;:::-;23421:4;23416:3;23412:14;23398:28;;23253:179;;;;:::o;23438:113::-;23508:4;23540;23535:3;23531:14;23523:22;;23438:113;;;:::o;23587:732::-;23706:3;23735:54;23783:5;23735:54;:::i;:::-;23805:86;23884:6;23879:3;23805:86;:::i;:::-;23798:93;;23915:56;23965:5;23915:56;:::i;:::-;23994:7;24025:1;24010:284;24035:6;24032:1;24029:13;24010:284;;;24111:6;24105:13;24138:63;24197:3;24182:13;24138:63;:::i;:::-;24131:70;;24224:60;24277:6;24224:60;:::i;:::-;24214:70;;24070:224;24057:1;24054;24050:9;24045:14;;24010:284;;;24014:14;24310:3;24303:10;;23711:608;;;23587:732;;;;:::o;24325:831::-;24588:4;24626:3;24615:9;24611:19;24603:27;;24640:71;24708:1;24697:9;24693:17;24684:6;24640:71;:::i;:::-;24721:80;24797:2;24786:9;24782:18;24773:6;24721:80;:::i;:::-;24848:9;24842:4;24838:20;24833:2;24822:9;24818:18;24811:48;24876:108;24979:4;24970:6;24876:108;:::i;:::-;24868:116;;24994:72;25062:2;25051:9;25047:18;25038:6;24994:72;:::i;:::-;25076:73;25144:3;25133:9;25129:19;25120:6;25076:73;:::i;:::-;24325:831;;;;;;;;:::o;25162:147::-;25263:11;25300:3;25285:18;;25162:147;;;;:::o;25315:114::-;;:::o;25435:398::-;25594:3;25615:83;25696:1;25691:3;25615:83;:::i;:::-;25608:90;;25707:93;25796:3;25707:93;:::i;:::-;25825:1;25820:3;25816:11;25809:18;;25435:398;;;:::o;25839:379::-;26023:3;26045:147;26188:3;26045:147;:::i;:::-;26038:154;;26209:3;26202:10;;25839:379;;;:::o;26224:807::-;26473:4;26511:3;26500:9;26496:19;26488:27;;26525:71;26593:1;26582:9;26578:17;26569:6;26525:71;:::i;:::-;26606:72;26674:2;26663:9;26659:18;26650:6;26606:72;:::i;:::-;26688:80;26764:2;26753:9;26749:18;26740:6;26688:80;:::i;:::-;26778;26854:2;26843:9;26839:18;26830:6;26778:80;:::i;:::-;26868:73;26936:3;26925:9;26921:19;26912:6;26868:73;:::i;:::-;26951;27019:3;27008:9;27004:19;26995:6;26951:73;:::i;:::-;26224:807;;;;;;;;;:::o;27037:143::-;27094:5;27125:6;27119:13;27110:22;;27141:33;27168:5;27141:33;:::i;:::-;27037:143;;;;:::o;27186:663::-;27274:6;27282;27290;27339:2;27327:9;27318:7;27314:23;27310:32;27307:119;;;27345:79;;:::i;:::-;27307:119;27465:1;27490:64;27546:7;27537:6;27526:9;27522:22;27490:64;:::i;:::-;27480:74;;27436:128;27603:2;27629:64;27685:7;27676:6;27665:9;27661:22;27629:64;:::i;:::-;27619:74;;27574:129;27742:2;27768:64;27824:7;27815:6;27804:9;27800:22;27768:64;:::i;:::-;27758:74;;27713:129;27186:663;;;;;:::o;27855:332::-;27976:4;28014:2;28003:9;27999:18;27991:26;;28027:71;28095:1;28084:9;28080:17;28071:6;28027:71;:::i;:::-;28108:72;28176:2;28165:9;28161:18;28152:6;28108:72;:::i;:::-;27855:332;;;;;:::o

Swarm Source

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