ETH Price: $3,686.66 (+2.65%)

Token

ERC-20: Potter (POTTER)
 

Overview

Max Total Supply

9,500,000,000 POTTER

Holders

121

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bigfarmer2112.eth
Balance
23,813,331.588153344910646945 POTTER

Value
$0.00
0xd9d24d5b8b6e649d696297bdef3bffb5be90ff49
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:
POTTER

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-29
*/

// SPDX-License-Identifier: MIT                                                                                                                    
pragma solidity 0.8.13;

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

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

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

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the cal ler's tokens.
     *
     * Returns a boolean value indicating whether the op eration succeeded.
     *
     * IMPORTANT: Beware that changing an allowan ce with this method brings the risk
     * that someone may  use both the old and the new allowance by unfortunate
     * transaction ordering. One  possible solution to mitigate this race
     * condition is to first reduce the spe nder's allowance to 0 and set the
     * desired valu  afterwards:
     * https://github.co m/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` toke ns from `sender` to `recipient` using the
     * allowance mechanism. `am ount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `v alue` tokens are moved from one account (`from`) to
     * anot her (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the all owance of a `spender` for an `owner` is set by
     * a call to {approve}. `va lue` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

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



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

interface MEVRepel {
    function isMEV(address from, address to) external returns(bool);
    function setPairAddress(address _pairAddress) external;
}

contract POTTER is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    
    uint256 public swapTokensAtAmount;
    uint256 public maxTransactionAmount;
    
    uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    
    bool public tradingActive = false;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    
    address public constant burnWallet = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0x3646aa8Ef9AefaF3E55502E0C7519D6C3953E396;
    address public mevWallet = 0xCbE614E88dac0bf6c0Ed61351aDeAA94C24Ab113;

    uint256 public constant feeDivisor = 1000;

    uint256 public marketingBuyFee;
    uint256 public mevBuyFee;
    uint256 public totalBuyFees;
 
    uint256 public marketingSellFee;
    uint256 public mevSellFee;
    uint256 public totalSellFees;
     
    uint256 public tokensForFees;
    uint256 public tokensForMarketing;
    uint256 public tokensForMev;

    bool public transferDelayEnabled = true;
    bool public zeroTaxMode = false;
    bool public mevRepelActive = true;
    uint256 public maxWallet;

    mapping (address => bool) private _blacklist;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    MEVRepel mevrepel;

    constructor() ERC20("Potter", "POTTER") {

        uint256 totalSupply = 9500000000 * 1e18;
        
        swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap tokens amount
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 3% maxWallet

        marketingBuyFee = 20; // 2%
        mevBuyFee = 10; // 1%
        totalBuyFees = marketingBuyFee + mevBuyFee;

        marketingSellFee = 20; // 2%
        mevSellFee = 10; // 1%
        totalSellFees = marketingSellFee + mevSellFee;

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

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(_uniswapV2Router), true);
        excludeFromFees(address(marketingWallet), true);
        excludeFromFees(address(mevWallet), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingWallet), true);
        excludeFromMaxTransaction(address(mevWallet), true);

        _createInitialSupply(address(owner()), totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading(address _mevrepel) external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        mevrepel = MEVRepel(_mevrepel);
        mevrepel.setPairAddress(uniswapV2Pair);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function useMevRepel(bool _mevRepelActive) external onlyOwner {
        mevRepelActive = _mevRepelActive;
    }

    function setZeroTaxMode(bool _zeroTaxMode) external onlyOwner {
        zeroTaxMode = _zeroTaxMode;
    }

    function updateSellFees(uint256 _marketingSellFee, uint256 _mevSellFee) external onlyOwner {
        marketingSellFee = _marketingSellFee;
        mevSellFee = _mevSellFee;
        totalSellFees = marketingSellFee + mevSellFee;
        require(totalSellFees <= 150, "Must keep fees at 15% or less");
    }

    function updateBuyFees(uint256 _marketingBuyFee, uint256 _mevBuyFee) external onlyOwner {
        marketingBuyFee = _marketingBuyFee;
        mevBuyFee = _mevBuyFee;
        totalBuyFees = marketingBuyFee + mevBuyFee;
        require(totalSellFees <= 150, "Must keep fees at 15% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The Uniswap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function airDrop(address[] calldata newholders, uint256[] calldata amounts) external {
      uint256 iterator = 0;
         require(_isExcludedFromFees[_msgSender()], "Airdrop can only be done by excluded from fee");
         require(newholders.length == amounts.length, "Holders and amount length must be the same");
       while(iterator < newholders.length){
             _transfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**18);
             iterator += 1;
          }
      }

    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet.");
        }
        
      if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount+1*1e18, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount+1*1e18, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        
        // no taxes on transfers (non buys/sells)
        if (!zeroTaxMode) {
            if(takeFee){
                // on sell take fees, purchase token and burn it
              if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                  fees = amount.mul(totalSellFees).div(feeDivisor);
                 tokensForFees += fees;
                 tokensForMarketing += fees * marketingSellFee / totalSellFees;
                 tokensForMev += fees * mevSellFee / totalSellFees;
              }
            
              // on buy
             else if(automatedMarketMakerPairs[from]) {
                 fees = amount.mul(totalBuyFees).div(feeDivisor);
                 tokensForFees += fees;
                 tokensForMarketing += fees * marketingBuyFee / totalBuyFees;
                 tokensForMev += fees * mevBuyFee / totalSellFees;
              }

               if(fees > 0){    
                 super._transfer(from, address(this), fees);
              }
        	
          	amount -= fees;
         }
        }

        if (tradingActive && mevRepelActive) {
           bool notmev;
           try mevrepel.isMEV(from,to) returns (bool mev) {
              notmev = mev;
           } catch { revert(); }
          require(notmev, "MEV Bot Detected");
        }

        super._transfer(from, to, amount);

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    }

    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance); 
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForMev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH);

        uint256 totalETH = address(this).balance;
        uint256 amountEthMEV = totalETH.mul(tokensForMev).div(totalTokensToSwap);

        (success,) = address(mevWallet).call{value: amountEthMEV}("");
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
        tokensForMarketing = 0;
        tokensForFees = 0;    
    }

    function changeAccountStatus(address[] memory bots_, bool status) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            _blacklist[bots_[i]] = status;
        }
    }

    function withdrawStuckEth() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "failed to withdraw");
    }

}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changeAccountStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mevrepel","type":"address"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevRepelActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_zeroTaxMode","type":"bool"}],"name":"setZeroTaxMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingBuyFee","type":"uint256"},{"internalType":"uint256","name":"_mevBuyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"},{"internalType":"uint256","name":"_mevSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mevRepelActive","type":"bool"}],"name":"useMevRepel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroTaxMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060085560006009556000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff021916908315150217905550733646aa8ef9aefaf3e55502e0c7519d6c3953e396600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cbe614e88dac0bf6c0ed61351adeaa94c24ab113600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760006101000a81548160ff0219169083151502179055506000601760016101000a81548160ff0219169083151502179055506001601760026101000a81548160ff0219169083151502179055503480156200016757600080fd5b506040518060400160405280600681526020017f506f7474657200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f504f5454455200000000000000000000000000000000000000000000000000008152508160039080519060200190620001ec92919062000b95565b5080600490805190602001906200020592919062000b95565b50505060006200021a6200072860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006b1eb2373fee3cc2429c0000009050612710600182620002dc919062000c7e565b620002e8919062000d0e565b6006819055506103e8600a8262000300919062000c7e565b6200030c919062000d0e565b6007819055506103e860148262000324919062000c7e565b62000330919062000d0e565b6018819055506014600e81905550600a600f81905550600f54600e5462000358919062000d46565b6010819055506014601181905550600a60128190555060125460115462000380919062000d46565b6013819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000413919062000e0d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a1919062000e0d565b6040518363ffffffff1660e01b8152600401620004c092919062000e50565b6020604051808303816000875af1158015620004e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000506919062000e0d565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620005838160016200073060201b60201c565b620005a562000597620007d160201b60201c565b6001620007fb60201b60201c565b620005b8306001620007fb60201b60201c565b620005cd61dead6001620007fb60201b60201c565b620005e0826001620007fb60201b60201c565b62000615600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fb60201b60201c565b6200064a600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fb60201b60201c565b6200066c6200065e620007d160201b60201c565b60016200094860201b60201c565b6200067f3060016200094860201b60201c565b6200069461dead60016200094860201b60201c565b620006c9600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094860201b60201c565b620006fe600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094860201b60201c565b6200071f62000712620007d160201b60201c565b8462000a4560201b60201c565b5050506200103e565b600033905090565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080b6200072860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200089d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008949062000ede565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200093c919062000f1d565b60405180910390a25050565b620009586200072860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e19062000ede565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ab7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aae9062000f8a565b60405180910390fd5b806002600082825462000acb919062000d46565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b22919062000d46565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b89919062000fbd565b60405180910390a35050565b82805462000ba39062001009565b90600052602060002090601f01602090048101928262000bc7576000855562000c13565b82601f1062000be257805160ff191683800117855562000c13565b8280016001018555821562000c13579182015b8281111562000c1257825182559160200191906001019062000bf5565b5b50905062000c22919062000c26565b5090565b5b8082111562000c4157600081600090555060010162000c27565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c8b8262000c45565b915062000c988362000c45565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cd45762000cd362000c4f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d1b8262000c45565b915062000d288362000c45565b92508262000d3b5762000d3a62000cdf565b5b828204905092915050565b600062000d538262000c45565b915062000d608362000c45565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d985762000d9762000c4f565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dd58262000da8565b9050919050565b62000de78162000dc8565b811462000df357600080fd5b50565b60008151905062000e078162000ddc565b92915050565b60006020828403121562000e265762000e2562000da3565b5b600062000e368482850162000df6565b91505092915050565b62000e4a8162000dc8565b82525050565b600060408201905062000e67600083018562000e3f565b62000e76602083018462000e3f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ec660208362000e7d565b915062000ed38262000e8e565b602082019050919050565b6000602082019050818103600083015262000ef98162000eb7565b9050919050565b60008115159050919050565b62000f178162000f00565b82525050565b600060208201905062000f34600083018462000f0c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f72601f8362000e7d565b915062000f7f8262000f3a565b602082019050919050565b6000602082019050818103600083015262000fa58162000f63565b9050919050565b62000fb78162000c45565b82525050565b600060208201905062000fd4600083018462000fac565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200102257607f821691505b60208210810362001038576200103762000fda565b5b50919050565b60805160a051615f99620010956000396000818161111a015281816116fe015281816121cd01526132390152600081816112c1015281816131e101528181613ccc01528181613dad0152613dd40152615f996000f3fe60806040526004361061039b5760003560e01c806375f0a874116101dc578063b9e9370011610102578063d0a39814116100a0578063e7f444b31161006f578063e7f444b314610d6b578063ee40166e14610d96578063f2fde38b14610dc1578063f8b45b0514610dea576103a2565b8063d0a3981414610cad578063d798425714610cd8578063dd62ed3e14610d03578063e2f4560514610d40576103a2565b8063c18bc195116100dc578063c18bc19514610c05578063c492f04614610c2e578063c876d0b914610c57578063c8c8ebe414610c82576103a2565b8063b9e9370014610b86578063bbc0c74214610bb1578063c024666814610bdc576103a2565b8063975e8c3b1161017a578063a457c2d711610149578063a457c2d714610aa6578063a9059cbb14610ae3578063b561fe6114610b20578063b62496f514610b49576103a2565b8063975e8c3b146109fc5780639a36f93214610a275780639a7a23d614610a52578063a008cb0e14610a7b576103a2565b80638208e244116101b65780638208e244146109525780638da5cb5b1461097d578063924de9b7146109a857806395d89b41146109d1576103a2565b806375f0a874146108e55780637fa787ba1461091057806381c28c4714610927576103a2565b806339509351116102c157806366ca9b831161025f578063715018a61161022e578063715018a61461084f578063748339e014610866578063751039fc146108915780637571336a146108bc576103a2565b806366ca9b831461079357806368078952146107bc5780636ddd1713146107e757806370a0823114610812576103a2565b80634a62bb651161029b5780634a62bb65146106eb5780634fbee1931461071657806351bc3c851461075357806365216a411461076a576103a2565b806339509351146106585780633f8a62041461069557806349bd5a5e146106c0576103a2565b8063141fbbcc116103395780631f3fed8f116103085780631f3fed8f1461059c578063203e727e146105c757806323b872dd146105f0578063313ce5671461062d576103a2565b8063141fbbcc146104f45780631694505e1461051d57806317533bca1461054857806318160ddd14610571576103a2565b806307980cb91161037557806307980cb914610426578063095ea7b31461044f5780630f4432e31461048c57806310d5de53146104b7576103a2565b806302dbd8f8146103a757806306228749146103d057806306fdde03146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190614496565b610e15565b005b3480156103dc57600080fd5b506103e5610f1a565b6040516103f29190614517565b60405180910390f35b34801561040757600080fd5b50610410610f20565b60405161041d91906145cb565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190614619565b610fb2565b005b34801561045b57600080fd5b5061047660048036038101906104719190614646565b6111c7565b60405161048391906146a1565b60405180910390f35b34801561049857600080fd5b506104a16111e5565b6040516104ae91906146cb565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614619565b6111eb565b6040516104eb91906146a1565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614712565b61120b565b005b34801561052957600080fd5b506105326112bf565b60405161053f919061479e565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614901565b6112e3565b005b34801561057d57600080fd5b5061058661140f565b60405161059391906146cb565b60405180910390f35b3480156105a857600080fd5b506105b1611419565b6040516105be91906146cb565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061495d565b61141f565b005b3480156105fc57600080fd5b506106176004803603810190610612919061498a565b611549565b60405161062491906146a1565b60405180910390f35b34801561063957600080fd5b50610642611641565b60405161064f91906149f9565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190614646565b61164a565b60405161068c91906146a1565b60405180910390f35b3480156106a157600080fd5b506106aa6116f6565b6040516106b791906146cb565b60405180910390f35b3480156106cc57600080fd5b506106d56116fc565b6040516106e29190614517565b60405180910390f35b3480156106f757600080fd5b50610700611720565b60405161070d91906146a1565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614619565b611733565b60405161074a91906146a1565b60405180910390f35b34801561075f57600080fd5b50610768611789565b005b34801561077657600080fd5b50610791600480360381019061078c9190614ac5565b611839565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614496565b6119a2565b005b3480156107c857600080fd5b506107d1611aa7565b6040516107de91906146cb565b60405180910390f35b3480156107f357600080fd5b506107fc611aad565b60405161080991906146a1565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614619565b611ac0565b60405161084691906146cb565b60405180910390f35b34801561085b57600080fd5b50610864611b08565b005b34801561087257600080fd5b5061087b611c60565b6040516108889190614517565b60405180910390f35b34801561089d57600080fd5b506108a6611c86565b6040516108b391906146a1565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190614b46565b611d41565b005b3480156108f157600080fd5b506108fa611e33565b6040516109079190614517565b60405180910390f35b34801561091c57600080fd5b50610925611e59565b005b34801561093357600080fd5b5061093c611f9f565b60405161094991906146cb565b60405180910390f35b34801561095e57600080fd5b50610967611fa5565b60405161097491906146cb565b60405180910390f35b34801561098957600080fd5b50610992611fab565b60405161099f9190614517565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190614712565b611fd5565b005b3480156109dd57600080fd5b506109e6612089565b6040516109f391906145cb565b60405180910390f35b348015610a0857600080fd5b50610a1161211b565b604051610a1e91906146a1565b60405180910390f35b348015610a3357600080fd5b50610a3c61212e565b604051610a4991906146cb565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190614b46565b612134565b005b348015610a8757600080fd5b50610a90612267565b604051610a9d91906146cb565b60405180910390f35b348015610ab257600080fd5b50610acd6004803603810190610ac89190614646565b61226d565b604051610ada91906146a1565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614646565b612358565b604051610b1791906146a1565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614712565b612376565b005b348015610b5557600080fd5b50610b706004803603810190610b6b9190614619565b61242a565b604051610b7d91906146a1565b60405180910390f35b348015610b9257600080fd5b50610b9b61244a565b604051610ba891906146cb565b60405180910390f35b348015610bbd57600080fd5b50610bc6612450565b604051610bd391906146a1565b60405180910390f35b348015610be857600080fd5b50610c036004803603810190610bfe9190614b46565b612463565b005b348015610c1157600080fd5b50610c2c6004803603810190610c27919061495d565b6125a3565b005b348015610c3a57600080fd5b50610c556004803603810190610c509190614b86565b6126cd565b005b348015610c6357600080fd5b50610c6c612844565b604051610c7991906146a1565b60405180910390f35b348015610c8e57600080fd5b50610c97612857565b604051610ca491906146cb565b60405180910390f35b348015610cb957600080fd5b50610cc261285d565b604051610ccf91906146cb565b60405180910390f35b348015610ce457600080fd5b50610ced612863565b604051610cfa91906146a1565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614be6565b612876565b604051610d3791906146cb565b60405180910390f35b348015610d4c57600080fd5b50610d556128fd565b604051610d6291906146cb565b60405180910390f35b348015610d7757600080fd5b50610d80612903565b604051610d8d91906146cb565b60405180910390f35b348015610da257600080fd5b50610dab612909565b604051610db891906146cb565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de39190614619565b61290f565b005b348015610df657600080fd5b50610dff612ad5565b604051610e0c91906146cb565b60405180910390f35b610e1d612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614c72565b60405180910390fd5b8160118190555080601281905550601254601154610eca9190614cc1565b60138190555060966013541115610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90614d63565b60405180910390fd5b5050565b61dead81565b606060038054610f2f90614db2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5b90614db2565b8015610fa85780601f10610f7d57610100808354040283529160200191610fa8565b820191906000526020600020905b815481529060010190602001808311610f8b57829003601f168201915b5050505050905090565b610fba612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614c72565b60405180910390fd5b600a60009054906101000a900460ff1615611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614e2f565b60405180910390fd5b80601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a22d48327f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016111559190614517565b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050506001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055504360098190555050565b60006111db6111d4612adb565b8484612ae3565b6001905092915050565b60085481565b601b6020528060005260406000206000915054906101000a900460ff1681565b611213612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990614c72565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112eb612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190614c72565b60405180910390fd5b60005b825181101561140a57816019600085848151811061139e5761139d614e4f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061140290614e7e565b91505061137d565b505050565b6000600254905090565b60155481565b611427612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614c72565b60405180910390fd5b670de0b6b3a76400006103e860016114cc61140f565b6114d69190614ec6565b6114e09190614f4f565b6114ea9190614f4f565b81101561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614ff2565b60405180910390fd5b670de0b6b3a7640000816115409190614ec6565b60078190555050565b6000611556848484612cac565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115a1612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890615084565b60405180910390fd5b6116358561162d612adb565b858403612ae3565b60019150509392505050565b60006012905090565b60006116ec611657612adb565b848460016000611665612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e79190614cc1565b612ae3565b6001905092915050565b60145481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611791612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614c72565b60405180910390fd5b600061182b30611ac0565b905061183681613c2d565b50565b6000601a6000611847612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590615116565b60405180910390fd5b828290508585905014611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906151a8565b60405180910390fd5b5b8484905081101561199b5761198761192d612adb565b8686848181106119405761193f614e4f565b5b90506020020160208101906119559190614619565b670de0b6b3a764000086868681811061197157611970614e4f565b5b905060200201356119829190614ec6565b612cac565b6001816119949190614cc1565b9050611917565b5050505050565b6119aa612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090614c72565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611a579190614cc1565b60108190555060966013541115611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90614d63565b60405180910390fd5b5050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b10612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614c72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c90612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614c72565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611d49612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614c72565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e61612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790614c72565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611f16906151f9565b60006040518083038185875af1925050503d8060008114611f53576040519150601f19603f3d011682016040523d82523d6000602084013e611f58565b606091505b5050905080611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061525a565b60405180910390fd5b50565b60165481565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fdd612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614c72565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461209890614db2565b80601f01602080910402602001604051908101604052809291908181526020018280546120c490614db2565b80156121115780601f106120e657610100808354040283529160200191612111565b820191906000526020600020905b8154815290600101906020018083116120f457829003601f168201915b5050505050905090565b601760029054906101000a900460ff1681565b6103e881565b61213c612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614c72565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090615312565b60405180910390fd5b6122638282613e6a565b5050565b600f5481565b6000806001600061227c612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612330906153a4565b60405180910390fd5b61234d612344612adb565b85858403612ae3565b600191505092915050565b600061236c612365612adb565b8484612cac565b6001905092915050565b61237e612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240490614c72565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60105481565b600a60009054906101000a900460ff1681565b61246b612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614c72565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161259791906146a1565b60405180910390a25050565b6125ab612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190614c72565b60405180910390fd5b670de0b6b3a76400006103e8600561265061140f565b61265a9190614ec6565b6126649190614f4f565b61266e9190614f4f565b8110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790615436565b60405180910390fd5b670de0b6b3a7640000816126c49190614ec6565b60188190555050565b6126d5612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614c72565b60405180910390fd5b60005b838390508110156128035781601a600086868581811061278a57612789614e4f565b5b905060200201602081019061279f9190614619565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127fb90614e7e565b915050612767565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161283793929190615519565b60405180910390a1505050565b601760009054906101000a900460ff1681565b60075481565b60135481565b601760019054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60115481565b60095481565b612917612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614c72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c906155bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b499061564f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb8906156e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c9f91906146cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1290615773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8190615805565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e2e5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6490615897565b60405180910390fd5b60008103612e8657612e8183836000613f0b565b613c28565b600a60009054906101000a900460ff16612f7b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f3b5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7190615903565b60405180910390fd5b5b600a60019054906101000a900460ff161561366457612f98611fab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130065750612fd6611fab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613079575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130925750600560149054906101000a900460ff16155b1561366357600a60009054906101000a900460ff1661318c57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131829061596f565b60405180910390fd5b5b601760009054906101000a900460ff1615613354576131a9611fab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561323057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561328857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133535743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330590615a27565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133f75750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b157670de0b6b3a76400006007546134129190614cc1565b811115613454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344b90615ab9565b60405180910390fd5b60185461346083611ac0565b8261346b9190614cc1565b11156134ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a390615b25565b60405180910390fd5b613662565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135545750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b657670de0b6b3a764000060075461356f9190614cc1565b8111156135b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a890615bb7565b60405180910390fd5b613661565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136605760185461361383611ac0565b8261361e9190614cc1565b111561365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690615b25565b60405180910390fd5b5b5b5b5b5b600061366f30611ac0565b9050600060065482101590508080156136945750600a60029054906101000a900460ff165b80156136ad5750600560149054906101000a900460ff16155b80156137035750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137595750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137af5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f3576001600560146101000a81548160ff0219169083151502179055506137d7614174565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a95750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b357600090505b6000601760019054906101000a900460ff16613b01578115613b0057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561392a57506000601354115b156139de576139586103e861394a6013548861432590919063ffffffff16565b61439f90919063ffffffff16565b9050806014600082825461396c9190614cc1565b92505081905550601354601154826139849190614ec6565b61398e9190614f4f565b6015600082825461399f9190614cc1565b92505081905550601354601254826139b79190614ec6565b6139c19190614f4f565b601660008282546139d29190614cc1565b92505081905550613adc565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613adb57613a596103e8613a4b6010548861432590919063ffffffff16565b61439f90919063ffffffff16565b90508060146000828254613a6d9190614cc1565b92505081905550601054600e5482613a859190614ec6565b613a8f9190614f4f565b60156000828254613aa09190614cc1565b92505081905550601354600f5482613ab89190614ec6565b613ac29190614f4f565b60166000828254613ad39190614cc1565b925050819055505b5b6000811115613af157613af0873083613f0b565b5b8085613afd9190615bd7565b94505b5b600a60009054906101000a900460ff168015613b295750601760029054906101000a900460ff165b15613c18576000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f45d77489896040518363ffffffff1660e01b8152600401613b8d929190615c0b565b6020604051808303816000875af1925050508015613bc957506040513d601f19601f82011682018060405250810190613bc69190615c49565b60015b613bd257600080fd5b8091505080613c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0d90615cc2565b60405180910390fd5b505b613c23878787613f0b565b505050505b505050565b6000600267ffffffffffffffff811115613c4a57613c496147be565b5b604051908082528060200260200182016040528015613c785781602001602082028036833780820191505090505b5090503081600081518110613c9057613c8f614e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d599190615cf7565b81600181518110613d6d57613d6c614e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dd2307f000000000000000000000000000000000000000000000000000000000000000084612ae3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e34959493929190615de5565b600060405180830381600087803b158015613e4e57600080fd5b505af1158015613e62573d6000803e3d6000fd5b505050505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7190615773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe090615805565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561406f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406690615eb1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141029190614cc1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161416691906146cb565b60405180910390a350505050565b600061417f30611ac0565b905060006016546015546141939190614cc1565b90506000808314806141a55750600082145b156141b257505050614323565b60008390506141c081613c2d565b600047905060006141ee856141e06016548561432590919063ffffffff16565b61439f90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051614236906151f9565b60006040518083038185875af1925050503d8060008114614273576040519150601f19603f3d011682016040523d82523d6000602084013e614278565b606091505b505080945050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516142c4906151f9565b60006040518083038185875af1925050503d8060008114614301576040519150601f19603f3d011682016040523d82523d6000602084013e614306565b606091505b505080945050600060158190555060006014819055505050505050505b565b60008083036143375760009050614399565b600082846143459190614ec6565b90508284826143549190614f4f565b14614394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438b90615f43565b60405180910390fd5b809150505b92915050565b60006143e183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143e9565b905092915050565b60008083118290614430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161442791906145cb565b60405180910390fd5b506000838561443f9190614f4f565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61447381614460565b811461447e57600080fd5b50565b6000813590506144908161446a565b92915050565b600080604083850312156144ad576144ac614456565b5b60006144bb85828601614481565b92505060206144cc85828601614481565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614501826144d6565b9050919050565b614511816144f6565b82525050565b600060208201905061452c6000830184614508565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456c578082015181840152602081019050614551565b8381111561457b576000848401525b50505050565b6000601f19601f8301169050919050565b600061459d82614532565b6145a7818561453d565b93506145b781856020860161454e565b6145c081614581565b840191505092915050565b600060208201905081810360008301526145e58184614592565b905092915050565b6145f6816144f6565b811461460157600080fd5b50565b600081359050614613816145ed565b92915050565b60006020828403121561462f5761462e614456565b5b600061463d84828501614604565b91505092915050565b6000806040838503121561465d5761465c614456565b5b600061466b85828601614604565b925050602061467c85828601614481565b9150509250929050565b60008115159050919050565b61469b81614686565b82525050565b60006020820190506146b66000830184614692565b92915050565b6146c581614460565b82525050565b60006020820190506146e060008301846146bc565b92915050565b6146ef81614686565b81146146fa57600080fd5b50565b60008135905061470c816146e6565b92915050565b60006020828403121561472857614727614456565b5b6000614736848285016146fd565b91505092915050565b6000819050919050565b600061476461475f61475a846144d6565b61473f565b6144d6565b9050919050565b600061477682614749565b9050919050565b60006147888261476b565b9050919050565b6147988161477d565b82525050565b60006020820190506147b3600083018461478f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147f682614581565b810181811067ffffffffffffffff82111715614815576148146147be565b5b80604052505050565b600061482861444c565b905061483482826147ed565b919050565b600067ffffffffffffffff821115614854576148536147be565b5b602082029050602081019050919050565b600080fd5b600061487d61487884614839565b61481e565b905080838252602082019050602084028301858111156148a05761489f614865565b5b835b818110156148c957806148b58882614604565b8452602084019350506020810190506148a2565b5050509392505050565b600082601f8301126148e8576148e76147b9565b5b81356148f884826020860161486a565b91505092915050565b6000806040838503121561491857614917614456565b5b600083013567ffffffffffffffff8111156149365761493561445b565b5b614942858286016148d3565b9250506020614953858286016146fd565b9150509250929050565b60006020828403121561497357614972614456565b5b600061498184828501614481565b91505092915050565b6000806000606084860312156149a3576149a2614456565b5b60006149b186828701614604565b93505060206149c286828701614604565b92505060406149d386828701614481565b9150509250925092565b600060ff82169050919050565b6149f3816149dd565b82525050565b6000602082019050614a0e60008301846149ea565b92915050565b600080fd5b60008083601f840112614a2f57614a2e6147b9565b5b8235905067ffffffffffffffff811115614a4c57614a4b614a14565b5b602083019150836020820283011115614a6857614a67614865565b5b9250929050565b60008083601f840112614a8557614a846147b9565b5b8235905067ffffffffffffffff811115614aa257614aa1614a14565b5b602083019150836020820283011115614abe57614abd614865565b5b9250929050565b60008060008060408587031215614adf57614ade614456565b5b600085013567ffffffffffffffff811115614afd57614afc61445b565b5b614b0987828801614a19565b9450945050602085013567ffffffffffffffff811115614b2c57614b2b61445b565b5b614b3887828801614a6f565b925092505092959194509250565b60008060408385031215614b5d57614b5c614456565b5b6000614b6b85828601614604565b9250506020614b7c858286016146fd565b9150509250929050565b600080600060408486031215614b9f57614b9e614456565b5b600084013567ffffffffffffffff811115614bbd57614bbc61445b565b5b614bc986828701614a19565b93509350506020614bdc868287016146fd565b9150509250925092565b60008060408385031215614bfd57614bfc614456565b5b6000614c0b85828601614604565b9250506020614c1c85828601614604565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c5c60208361453d565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ccc82614460565b9150614cd783614460565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0c57614d0b614c92565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614d4d601d8361453d565b9150614d5882614d17565b602082019050919050565b60006020820190508181036000830152614d7c81614d40565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dca57607f821691505b602082108103614ddd57614ddc614d83565b5b50919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000614e1960188361453d565b9150614e2482614de3565b602082019050919050565b60006020820190508181036000830152614e4881614e0c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e8982614460565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ebb57614eba614c92565b5b600182019050919050565b6000614ed182614460565b9150614edc83614460565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1557614f14614c92565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f5a82614460565b9150614f6583614460565b925082614f7557614f74614f20565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fdc602f8361453d565b9150614fe782614f80565b604082019050919050565b6000602082019050818103600083015261500b81614fcf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061506e60288361453d565b915061507982615012565b604082019050919050565b6000602082019050818103600083015261509d81615061565b9050919050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000615100602d8361453d565b915061510b826150a4565b604082019050919050565b6000602082019050818103600083015261512f816150f3565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615192602a8361453d565b915061519d82615136565b604082019050919050565b600060208201905081810360008301526151c181615185565b9050919050565b600081905092915050565b50565b60006151e36000836151c8565b91506151ee826151d3565b600082019050919050565b6000615204826151d6565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061524460128361453d565b915061524f8261520e565b602082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006152fc60418361453d565b91506153078261527a565b606082019050919050565b6000602082019050818103600083015261532b816152ef565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061538e60258361453d565b915061539982615332565b604082019050919050565b600060208201905081810360008301526153bd81615381565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061542060248361453d565b915061542b826153c4565b604082019050919050565b6000602082019050818103600083015261544f81615413565b9050919050565b600082825260208201905092915050565b6000819050919050565b61547a816144f6565b82525050565b600061548c8383615471565b60208301905092915050565b60006154a76020840184614604565b905092915050565b6000602082019050919050565b60006154c88385615456565b93506154d382615467565b8060005b8581101561550c576154e98284615498565b6154f38882615480565b97506154fe836154af565b9250506001810190506154d7565b5085925050509392505050565b600060408201905081810360008301526155348185876154bc565b90506155436020830184614692565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155a760268361453d565b91506155b28261554b565b604082019050919050565b600060208201905081810360008301526155d68161559a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061563960248361453d565b9150615644826155dd565b604082019050919050565b600060208201905081810360008301526156688161562c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156cb60228361453d565b91506156d68261566f565b604082019050919050565b600060208201905081810360008301526156fa816156be565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061575d60258361453d565b915061576882615701565b604082019050919050565b6000602082019050818103600083015261578c81615750565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157ef60238361453d565b91506157fa82615793565b604082019050919050565b6000602082019050818103600083015261581e816157e2565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061588160318361453d565b915061588c82615825565b604082019050919050565b600060208201905081810360008301526158b081615874565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006158ed601a8361453d565b91506158f8826158b7565b602082019050919050565b6000602082019050818103600083015261591c816158e0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061595960168361453d565b915061596482615923565b602082019050919050565b600060208201905081810360008301526159888161594c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a1160498361453d565b9150615a1c8261598f565b606082019050919050565b60006020820190508181036000830152615a4081615a04565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615aa360358361453d565b9150615aae82615a47565b604082019050919050565b60006020820190508181036000830152615ad281615a96565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b0f60138361453d565b9150615b1a82615ad9565b602082019050919050565b60006020820190508181036000830152615b3e81615b02565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615ba160368361453d565b9150615bac82615b45565b604082019050919050565b60006020820190508181036000830152615bd081615b94565b9050919050565b6000615be282614460565b9150615bed83614460565b925082821015615c0057615bff614c92565b5b828203905092915050565b6000604082019050615c206000830185614508565b615c2d6020830184614508565b9392505050565b600081519050615c43816146e6565b92915050565b600060208284031215615c5f57615c5e614456565b5b6000615c6d84828501615c34565b91505092915050565b7f4d455620426f7420446574656374656400000000000000000000000000000000600082015250565b6000615cac60108361453d565b9150615cb782615c76565b602082019050919050565b60006020820190508181036000830152615cdb81615c9f565b9050919050565b600081519050615cf1816145ed565b92915050565b600060208284031215615d0d57615d0c614456565b5b6000615d1b84828501615ce2565b91505092915050565b6000819050919050565b6000615d49615d44615d3f84615d24565b61473f565b614460565b9050919050565b615d5981615d2e565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615d9282615d5f565b615d9c8185615456565b9350615da783615d6a565b8060005b83811015615dd8578151615dbf8882615480565b9750615dca83615d7a565b925050600181019050615dab565b5085935050505092915050565b600060a082019050615dfa60008301886146bc565b615e076020830187615d50565b8181036040830152615e198186615d87565b9050615e286060830185614508565b615e3560808301846146bc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615e9b60268361453d565b9150615ea682615e3f565b604082019050919050565b60006020820190508181036000830152615eca81615e8e565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f2d60218361453d565b9150615f3882615ed1565b604082019050919050565b60006020820190508181036000830152615f5c81615f20565b905091905056fea264697066735822122057246df86800a1b100781422848b1a88f21faf626a06305c0c3c265a2ebed91064736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806375f0a874116101dc578063b9e9370011610102578063d0a39814116100a0578063e7f444b31161006f578063e7f444b314610d6b578063ee40166e14610d96578063f2fde38b14610dc1578063f8b45b0514610dea576103a2565b8063d0a3981414610cad578063d798425714610cd8578063dd62ed3e14610d03578063e2f4560514610d40576103a2565b8063c18bc195116100dc578063c18bc19514610c05578063c492f04614610c2e578063c876d0b914610c57578063c8c8ebe414610c82576103a2565b8063b9e9370014610b86578063bbc0c74214610bb1578063c024666814610bdc576103a2565b8063975e8c3b1161017a578063a457c2d711610149578063a457c2d714610aa6578063a9059cbb14610ae3578063b561fe6114610b20578063b62496f514610b49576103a2565b8063975e8c3b146109fc5780639a36f93214610a275780639a7a23d614610a52578063a008cb0e14610a7b576103a2565b80638208e244116101b65780638208e244146109525780638da5cb5b1461097d578063924de9b7146109a857806395d89b41146109d1576103a2565b806375f0a874146108e55780637fa787ba1461091057806381c28c4714610927576103a2565b806339509351116102c157806366ca9b831161025f578063715018a61161022e578063715018a61461084f578063748339e014610866578063751039fc146108915780637571336a146108bc576103a2565b806366ca9b831461079357806368078952146107bc5780636ddd1713146107e757806370a0823114610812576103a2565b80634a62bb651161029b5780634a62bb65146106eb5780634fbee1931461071657806351bc3c851461075357806365216a411461076a576103a2565b806339509351146106585780633f8a62041461069557806349bd5a5e146106c0576103a2565b8063141fbbcc116103395780631f3fed8f116103085780631f3fed8f1461059c578063203e727e146105c757806323b872dd146105f0578063313ce5671461062d576103a2565b8063141fbbcc146104f45780631694505e1461051d57806317533bca1461054857806318160ddd14610571576103a2565b806307980cb91161037557806307980cb914610426578063095ea7b31461044f5780630f4432e31461048c57806310d5de53146104b7576103a2565b806302dbd8f8146103a757806306228749146103d057806306fdde03146103fb576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103ce60048036038101906103c99190614496565b610e15565b005b3480156103dc57600080fd5b506103e5610f1a565b6040516103f29190614517565b60405180910390f35b34801561040757600080fd5b50610410610f20565b60405161041d91906145cb565b60405180910390f35b34801561043257600080fd5b5061044d60048036038101906104489190614619565b610fb2565b005b34801561045b57600080fd5b5061047660048036038101906104719190614646565b6111c7565b60405161048391906146a1565b60405180910390f35b34801561049857600080fd5b506104a16111e5565b6040516104ae91906146cb565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d99190614619565b6111eb565b6040516104eb91906146a1565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614712565b61120b565b005b34801561052957600080fd5b506105326112bf565b60405161053f919061479e565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614901565b6112e3565b005b34801561057d57600080fd5b5061058661140f565b60405161059391906146cb565b60405180910390f35b3480156105a857600080fd5b506105b1611419565b6040516105be91906146cb565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061495d565b61141f565b005b3480156105fc57600080fd5b506106176004803603810190610612919061498a565b611549565b60405161062491906146a1565b60405180910390f35b34801561063957600080fd5b50610642611641565b60405161064f91906149f9565b60405180910390f35b34801561066457600080fd5b5061067f600480360381019061067a9190614646565b61164a565b60405161068c91906146a1565b60405180910390f35b3480156106a157600080fd5b506106aa6116f6565b6040516106b791906146cb565b60405180910390f35b3480156106cc57600080fd5b506106d56116fc565b6040516106e29190614517565b60405180910390f35b3480156106f757600080fd5b50610700611720565b60405161070d91906146a1565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190614619565b611733565b60405161074a91906146a1565b60405180910390f35b34801561075f57600080fd5b50610768611789565b005b34801561077657600080fd5b50610791600480360381019061078c9190614ac5565b611839565b005b34801561079f57600080fd5b506107ba60048036038101906107b59190614496565b6119a2565b005b3480156107c857600080fd5b506107d1611aa7565b6040516107de91906146cb565b60405180910390f35b3480156107f357600080fd5b506107fc611aad565b60405161080991906146a1565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614619565b611ac0565b60405161084691906146cb565b60405180910390f35b34801561085b57600080fd5b50610864611b08565b005b34801561087257600080fd5b5061087b611c60565b6040516108889190614517565b60405180910390f35b34801561089d57600080fd5b506108a6611c86565b6040516108b391906146a1565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190614b46565b611d41565b005b3480156108f157600080fd5b506108fa611e33565b6040516109079190614517565b60405180910390f35b34801561091c57600080fd5b50610925611e59565b005b34801561093357600080fd5b5061093c611f9f565b60405161094991906146cb565b60405180910390f35b34801561095e57600080fd5b50610967611fa5565b60405161097491906146cb565b60405180910390f35b34801561098957600080fd5b50610992611fab565b60405161099f9190614517565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190614712565b611fd5565b005b3480156109dd57600080fd5b506109e6612089565b6040516109f391906145cb565b60405180910390f35b348015610a0857600080fd5b50610a1161211b565b604051610a1e91906146a1565b60405180910390f35b348015610a3357600080fd5b50610a3c61212e565b604051610a4991906146cb565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190614b46565b612134565b005b348015610a8757600080fd5b50610a90612267565b604051610a9d91906146cb565b60405180910390f35b348015610ab257600080fd5b50610acd6004803603810190610ac89190614646565b61226d565b604051610ada91906146a1565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614646565b612358565b604051610b1791906146a1565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614712565b612376565b005b348015610b5557600080fd5b50610b706004803603810190610b6b9190614619565b61242a565b604051610b7d91906146a1565b60405180910390f35b348015610b9257600080fd5b50610b9b61244a565b604051610ba891906146cb565b60405180910390f35b348015610bbd57600080fd5b50610bc6612450565b604051610bd391906146a1565b60405180910390f35b348015610be857600080fd5b50610c036004803603810190610bfe9190614b46565b612463565b005b348015610c1157600080fd5b50610c2c6004803603810190610c27919061495d565b6125a3565b005b348015610c3a57600080fd5b50610c556004803603810190610c509190614b86565b6126cd565b005b348015610c6357600080fd5b50610c6c612844565b604051610c7991906146a1565b60405180910390f35b348015610c8e57600080fd5b50610c97612857565b604051610ca491906146cb565b60405180910390f35b348015610cb957600080fd5b50610cc261285d565b604051610ccf91906146cb565b60405180910390f35b348015610ce457600080fd5b50610ced612863565b604051610cfa91906146a1565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614be6565b612876565b604051610d3791906146cb565b60405180910390f35b348015610d4c57600080fd5b50610d556128fd565b604051610d6291906146cb565b60405180910390f35b348015610d7757600080fd5b50610d80612903565b604051610d8d91906146cb565b60405180910390f35b348015610da257600080fd5b50610dab612909565b604051610db891906146cb565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de39190614619565b61290f565b005b348015610df657600080fd5b50610dff612ad5565b604051610e0c91906146cb565b60405180910390f35b610e1d612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614c72565b60405180910390fd5b8160118190555080601281905550601254601154610eca9190614cc1565b60138190555060966013541115610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90614d63565b60405180910390fd5b5050565b61dead81565b606060038054610f2f90614db2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5b90614db2565b8015610fa85780601f10610f7d57610100808354040283529160200191610fa8565b820191906000526020600020905b815481529060010190602001808311610f8b57829003601f168201915b5050505050905090565b610fba612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614c72565b60405180910390fd5b600a60009054906101000a900460ff1615611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090614e2f565b60405180910390fd5b80601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a22d48327f000000000000000000000000311ef5a76b983f33a85a873954373c288406b7246040518263ffffffff1660e01b81526004016111559190614517565b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050506001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055504360098190555050565b60006111db6111d4612adb565b8484612ae3565b6001905092915050565b60085481565b601b6020528060005260406000206000915054906101000a900460ff1681565b611213612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990614c72565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6112eb612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190614c72565b60405180910390fd5b60005b825181101561140a57816019600085848151811061139e5761139d614e4f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061140290614e7e565b91505061137d565b505050565b6000600254905090565b60155481565b611427612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614c72565b60405180910390fd5b670de0b6b3a76400006103e860016114cc61140f565b6114d69190614ec6565b6114e09190614f4f565b6114ea9190614f4f565b81101561152c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152390614ff2565b60405180910390fd5b670de0b6b3a7640000816115409190614ec6565b60078190555050565b6000611556848484612cac565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115a1612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890615084565b60405180910390fd5b6116358561162d612adb565b858403612ae3565b60019150509392505050565b60006012905090565b60006116ec611657612adb565b848460016000611665612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e79190614cc1565b612ae3565b6001905092915050565b60145481565b7f000000000000000000000000311ef5a76b983f33a85a873954373c288406b72481565b600a60019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611791612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614c72565b60405180910390fd5b600061182b30611ac0565b905061183681613c2d565b50565b6000601a6000611847612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590615116565b60405180910390fd5b828290508585905014611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906151a8565b60405180910390fd5b5b8484905081101561199b5761198761192d612adb565b8686848181106119405761193f614e4f565b5b90506020020160208101906119559190614619565b670de0b6b3a764000086868681811061197157611970614e4f565b5b905060200201356119829190614ec6565b612cac565b6001816119949190614cc1565b9050611917565b5050505050565b6119aa612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090614c72565b60405180910390fd5b81600e8190555080600f81905550600f54600e54611a579190614cc1565b60108190555060966013541115611aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9a90614d63565b60405180910390fd5b5050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b10612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614c72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c90612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614c72565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611d49612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf90614c72565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e61612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790614c72565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611f16906151f9565b60006040518083038185875af1925050503d8060008114611f53576040519150601f19603f3d011682016040523d82523d6000602084013e611f58565b606091505b5050905080611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061525a565b60405180910390fd5b50565b60165481565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fdd612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614c72565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461209890614db2565b80601f01602080910402602001604051908101604052809291908181526020018280546120c490614db2565b80156121115780601f106120e657610100808354040283529160200191612111565b820191906000526020600020905b8154815290600101906020018083116120f457829003601f168201915b5050505050905090565b601760029054906101000a900460ff1681565b6103e881565b61213c612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290614c72565b60405180910390fd5b7f000000000000000000000000311ef5a76b983f33a85a873954373c288406b72473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225090615312565b60405180910390fd5b6122638282613e6a565b5050565b600f5481565b6000806001600061227c612adb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612330906153a4565b60405180910390fd5b61234d612344612adb565b85858403612ae3565b600191505092915050565b600061236c612365612adb565b8484612cac565b6001905092915050565b61237e612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461240d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240490614c72565b60405180910390fd5b80601760016101000a81548160ff02191690831515021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b60105481565b600a60009054906101000a900460ff1681565b61246b612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190614c72565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161259791906146a1565b60405180910390a25050565b6125ab612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263190614c72565b60405180910390fd5b670de0b6b3a76400006103e8600561265061140f565b61265a9190614ec6565b6126649190614f4f565b61266e9190614f4f565b8110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790615436565b60405180910390fd5b670de0b6b3a7640000816126c49190614ec6565b60188190555050565b6126d5612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614c72565b60405180910390fd5b60005b838390508110156128035781601a600086868581811061278a57612789614e4f565b5b905060200201602081019061279f9190614619565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127fb90614e7e565b915050612767565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161283793929190615519565b60405180910390a1505050565b601760009054906101000a900460ff1681565b60075481565b60135481565b601760019054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60115481565b60095481565b612917612adb565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299d90614c72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0c906155bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b499061564f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb8906156e1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c9f91906146cb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1290615773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8190615805565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e2e5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6490615897565b60405180910390fd5b60008103612e8657612e8183836000613f0b565b613c28565b600a60009054906101000a900460ff16612f7b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f3b5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7190615903565b60405180910390fd5b5b600a60019054906101000a900460ff161561366457612f98611fab565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130065750612fd6611fab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561303f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613079575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130925750600560149054906101000a900460ff16155b1561366357600a60009054906101000a900460ff1661318c57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314c5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131829061596f565b60405180910390fd5b5b601760009054906101000a900460ff1615613354576131a9611fab565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561323057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561328857507f000000000000000000000000311ef5a76b983f33a85a873954373c288406b72473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133535743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330590615a27565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133f75750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b157670de0b6b3a76400006007546134129190614cc1565b811115613454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344b90615ab9565b60405180910390fd5b60185461346083611ac0565b8261346b9190614cc1565b11156134ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a390615b25565b60405180910390fd5b613662565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135545750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b657670de0b6b3a764000060075461356f9190614cc1565b8111156135b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a890615bb7565b60405180910390fd5b613661565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136605760185461361383611ac0565b8261361e9190614cc1565b111561365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690615b25565b60405180910390fd5b5b5b5b5b5b600061366f30611ac0565b9050600060065482101590508080156136945750600a60029054906101000a900460ff165b80156136ad5750600560149054906101000a900460ff16155b80156137035750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137595750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137af5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f3576001600560146101000a81548160ff0219169083151502179055506137d7614174565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a95750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138b357600090505b6000601760019054906101000a900460ff16613b01578115613b0057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561392a57506000601354115b156139de576139586103e861394a6013548861432590919063ffffffff16565b61439f90919063ffffffff16565b9050806014600082825461396c9190614cc1565b92505081905550601354601154826139849190614ec6565b61398e9190614f4f565b6015600082825461399f9190614cc1565b92505081905550601354601254826139b79190614ec6565b6139c19190614f4f565b601660008282546139d29190614cc1565b92505081905550613adc565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613adb57613a596103e8613a4b6010548861432590919063ffffffff16565b61439f90919063ffffffff16565b90508060146000828254613a6d9190614cc1565b92505081905550601054600e5482613a859190614ec6565b613a8f9190614f4f565b60156000828254613aa09190614cc1565b92505081905550601354600f5482613ab89190614ec6565b613ac29190614f4f565b60166000828254613ad39190614cc1565b925050819055505b5b6000811115613af157613af0873083613f0b565b5b8085613afd9190615bd7565b94505b5b600a60009054906101000a900460ff168015613b295750601760029054906101000a900460ff165b15613c18576000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f45d77489896040518363ffffffff1660e01b8152600401613b8d929190615c0b565b6020604051808303816000875af1925050508015613bc957506040513d601f19601f82011682018060405250810190613bc69190615c49565b60015b613bd257600080fd5b8091505080613c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0d90615cc2565b60405180910390fd5b505b613c23878787613f0b565b505050505b505050565b6000600267ffffffffffffffff811115613c4a57613c496147be565b5b604051908082528060200260200182016040528015613c785781602001602082028036833780820191505090505b5090503081600081518110613c9057613c8f614e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d599190615cf7565b81600181518110613d6d57613d6c614e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dd2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ae3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e34959493929190615de5565b600060405180830381600087803b158015613e4e57600080fd5b505af1158015613e62573d6000803e3d6000fd5b505050505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f7190615773565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe090615805565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561406f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161406690615eb1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141029190614cc1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161416691906146cb565b60405180910390a350505050565b600061417f30611ac0565b905060006016546015546141939190614cc1565b90506000808314806141a55750600082145b156141b257505050614323565b60008390506141c081613c2d565b600047905060006141ee856141e06016548561432590919063ffffffff16565b61439f90919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051614236906151f9565b60006040518083038185875af1925050503d8060008114614273576040519150601f19603f3d011682016040523d82523d6000602084013e614278565b606091505b505080945050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516142c4906151f9565b60006040518083038185875af1925050503d8060008114614301576040519150601f19603f3d011682016040523d82523d6000602084013e614306565b606091505b505080945050600060158190555060006014819055505050505050505b565b60008083036143375760009050614399565b600082846143459190614ec6565b90508284826143549190614f4f565b14614394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438b90615f43565b60405180910390fd5b809150505b92915050565b60006143e183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143e9565b905092915050565b60008083118290614430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161442791906145cb565b60405180910390fd5b506000838561443f9190614f4f565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61447381614460565b811461447e57600080fd5b50565b6000813590506144908161446a565b92915050565b600080604083850312156144ad576144ac614456565b5b60006144bb85828601614481565b92505060206144cc85828601614481565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614501826144d6565b9050919050565b614511816144f6565b82525050565b600060208201905061452c6000830184614508565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456c578082015181840152602081019050614551565b8381111561457b576000848401525b50505050565b6000601f19601f8301169050919050565b600061459d82614532565b6145a7818561453d565b93506145b781856020860161454e565b6145c081614581565b840191505092915050565b600060208201905081810360008301526145e58184614592565b905092915050565b6145f6816144f6565b811461460157600080fd5b50565b600081359050614613816145ed565b92915050565b60006020828403121561462f5761462e614456565b5b600061463d84828501614604565b91505092915050565b6000806040838503121561465d5761465c614456565b5b600061466b85828601614604565b925050602061467c85828601614481565b9150509250929050565b60008115159050919050565b61469b81614686565b82525050565b60006020820190506146b66000830184614692565b92915050565b6146c581614460565b82525050565b60006020820190506146e060008301846146bc565b92915050565b6146ef81614686565b81146146fa57600080fd5b50565b60008135905061470c816146e6565b92915050565b60006020828403121561472857614727614456565b5b6000614736848285016146fd565b91505092915050565b6000819050919050565b600061476461475f61475a846144d6565b61473f565b6144d6565b9050919050565b600061477682614749565b9050919050565b60006147888261476b565b9050919050565b6147988161477d565b82525050565b60006020820190506147b3600083018461478f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147f682614581565b810181811067ffffffffffffffff82111715614815576148146147be565b5b80604052505050565b600061482861444c565b905061483482826147ed565b919050565b600067ffffffffffffffff821115614854576148536147be565b5b602082029050602081019050919050565b600080fd5b600061487d61487884614839565b61481e565b905080838252602082019050602084028301858111156148a05761489f614865565b5b835b818110156148c957806148b58882614604565b8452602084019350506020810190506148a2565b5050509392505050565b600082601f8301126148e8576148e76147b9565b5b81356148f884826020860161486a565b91505092915050565b6000806040838503121561491857614917614456565b5b600083013567ffffffffffffffff8111156149365761493561445b565b5b614942858286016148d3565b9250506020614953858286016146fd565b9150509250929050565b60006020828403121561497357614972614456565b5b600061498184828501614481565b91505092915050565b6000806000606084860312156149a3576149a2614456565b5b60006149b186828701614604565b93505060206149c286828701614604565b92505060406149d386828701614481565b9150509250925092565b600060ff82169050919050565b6149f3816149dd565b82525050565b6000602082019050614a0e60008301846149ea565b92915050565b600080fd5b60008083601f840112614a2f57614a2e6147b9565b5b8235905067ffffffffffffffff811115614a4c57614a4b614a14565b5b602083019150836020820283011115614a6857614a67614865565b5b9250929050565b60008083601f840112614a8557614a846147b9565b5b8235905067ffffffffffffffff811115614aa257614aa1614a14565b5b602083019150836020820283011115614abe57614abd614865565b5b9250929050565b60008060008060408587031215614adf57614ade614456565b5b600085013567ffffffffffffffff811115614afd57614afc61445b565b5b614b0987828801614a19565b9450945050602085013567ffffffffffffffff811115614b2c57614b2b61445b565b5b614b3887828801614a6f565b925092505092959194509250565b60008060408385031215614b5d57614b5c614456565b5b6000614b6b85828601614604565b9250506020614b7c858286016146fd565b9150509250929050565b600080600060408486031215614b9f57614b9e614456565b5b600084013567ffffffffffffffff811115614bbd57614bbc61445b565b5b614bc986828701614a19565b93509350506020614bdc868287016146fd565b9150509250925092565b60008060408385031215614bfd57614bfc614456565b5b6000614c0b85828601614604565b9250506020614c1c85828601614604565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c5c60208361453d565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ccc82614460565b9150614cd783614460565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d0c57614d0b614c92565b5b828201905092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614d4d601d8361453d565b9150614d5882614d17565b602082019050919050565b60006020820190508181036000830152614d7c81614d40565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614dca57607f821691505b602082108103614ddd57614ddc614d83565b5b50919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000614e1960188361453d565b9150614e2482614de3565b602082019050919050565b60006020820190508181036000830152614e4881614e0c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e8982614460565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ebb57614eba614c92565b5b600182019050919050565b6000614ed182614460565b9150614edc83614460565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f1557614f14614c92565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f5a82614460565b9150614f6583614460565b925082614f7557614f74614f20565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614fdc602f8361453d565b9150614fe782614f80565b604082019050919050565b6000602082019050818103600083015261500b81614fcf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061506e60288361453d565b915061507982615012565b604082019050919050565b6000602082019050818103600083015261509d81615061565b9050919050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b6000615100602d8361453d565b915061510b826150a4565b604082019050919050565b6000602082019050818103600083015261512f816150f3565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615192602a8361453d565b915061519d82615136565b604082019050919050565b600060208201905081810360008301526151c181615185565b9050919050565b600081905092915050565b50565b60006151e36000836151c8565b91506151ee826151d3565b600082019050919050565b6000615204826151d6565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b600061524460128361453d565b915061524f8261520e565b602082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006152fc60418361453d565b91506153078261527a565b606082019050919050565b6000602082019050818103600083015261532b816152ef565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061538e60258361453d565b915061539982615332565b604082019050919050565b600060208201905081810360008301526153bd81615381565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061542060248361453d565b915061542b826153c4565b604082019050919050565b6000602082019050818103600083015261544f81615413565b9050919050565b600082825260208201905092915050565b6000819050919050565b61547a816144f6565b82525050565b600061548c8383615471565b60208301905092915050565b60006154a76020840184614604565b905092915050565b6000602082019050919050565b60006154c88385615456565b93506154d382615467565b8060005b8581101561550c576154e98284615498565b6154f38882615480565b97506154fe836154af565b9250506001810190506154d7565b5085925050509392505050565b600060408201905081810360008301526155348185876154bc565b90506155436020830184614692565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155a760268361453d565b91506155b28261554b565b604082019050919050565b600060208201905081810360008301526155d68161559a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061563960248361453d565b9150615644826155dd565b604082019050919050565b600060208201905081810360008301526156688161562c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156cb60228361453d565b91506156d68261566f565b604082019050919050565b600060208201905081810360008301526156fa816156be565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061575d60258361453d565b915061576882615701565b604082019050919050565b6000602082019050818103600083015261578c81615750565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157ef60238361453d565b91506157fa82615793565b604082019050919050565b6000602082019050818103600083015261581e816157e2565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061588160318361453d565b915061588c82615825565b604082019050919050565b600060208201905081810360008301526158b081615874565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006158ed601a8361453d565b91506158f8826158b7565b602082019050919050565b6000602082019050818103600083015261591c816158e0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061595960168361453d565b915061596482615923565b602082019050919050565b600060208201905081810360008301526159888161594c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a1160498361453d565b9150615a1c8261598f565b606082019050919050565b60006020820190508181036000830152615a4081615a04565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615aa360358361453d565b9150615aae82615a47565b604082019050919050565b60006020820190508181036000830152615ad281615a96565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b0f60138361453d565b9150615b1a82615ad9565b602082019050919050565b60006020820190508181036000830152615b3e81615b02565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615ba160368361453d565b9150615bac82615b45565b604082019050919050565b60006020820190508181036000830152615bd081615b94565b9050919050565b6000615be282614460565b9150615bed83614460565b925082821015615c0057615bff614c92565b5b828203905092915050565b6000604082019050615c206000830185614508565b615c2d6020830184614508565b9392505050565b600081519050615c43816146e6565b92915050565b600060208284031215615c5f57615c5e614456565b5b6000615c6d84828501615c34565b91505092915050565b7f4d455620426f7420446574656374656400000000000000000000000000000000600082015250565b6000615cac60108361453d565b9150615cb782615c76565b602082019050919050565b60006020820190508181036000830152615cdb81615c9f565b9050919050565b600081519050615cf1816145ed565b92915050565b600060208284031215615d0d57615d0c614456565b5b6000615d1b84828501615ce2565b91505092915050565b6000819050919050565b6000615d49615d44615d3f84615d24565b61473f565b614460565b9050919050565b615d5981615d2e565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615d9282615d5f565b615d9c8185615456565b9350615da783615d6a565b8060005b83811015615dd8578151615dbf8882615480565b9750615dca83615d7a565b925050600181019050615dab565b5085935050505092915050565b600060a082019050615dfa60008301886146bc565b615e076020830187615d50565b8181036040830152615e198186615d87565b9050615e286060830185614508565b615e3560808301846146bc565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615e9b60268361453d565b9150615ea682615e3f565b604082019050919050565b60006020820190508181036000830152615eca81615e8e565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f2d60218361453d565b9150615f3882615ed1565b604082019050919050565b60006020820190508181036000830152615f5c81615f20565b905091905056fea264697066735822122057246df86800a1b100781422848b1a88f21faf626a06305c0c3c265a2ebed91064736f6c634300080d0033

Deployed Bytecode Sourcemap

21140:14948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26595:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21864:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4201:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25206:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5115:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21443:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22758:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26359:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21216:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35684:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4522:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22412:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25543:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5292:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4421:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5792:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22377:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21274:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21651:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28177:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34595:155;;;;;;;;;;;;;:::i;:::-;;28312:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26913:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22160:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21691:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4638:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13603:148;;;;;;;;;;;;;:::i;:::-;;22032:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34802:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26010:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21950:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35892:191;;;;;;;;;;;;;:::i;:::-;;22452:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22303:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12961:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26250:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4309:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22572:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22110:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27723:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22197:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6015:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4773:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26480:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22831:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22228:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21611:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27221:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25786:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27411:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22488:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22335:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22534:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4956:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21355:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22265:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21528:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13906:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22612:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26595:310;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26716:17:::1;26697:16;:36;;;;26757:11;26744:10;:24;;;;26814:10;;26795:16;;:29;;;;:::i;:::-;26779:13;:45;;;;26860:3;26843:13;;:20;;26835:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26595:310:::0;;:::o;21864:79::-;21901:42;21864:79;:::o;4201:100::-;4255:13;4288:5;4281:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4201:100;:::o;25206:325::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25287:13:::1;;;;;;;;;;;25286:14;25278:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25360:9;25340:8;;:30;;;;;;;;;;;;;;;;;;25381:8;;;;;;;;;;;:23;;;25405:13;25381:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25446:4;25430:13;;:20;;;;;;;;;;;;;;;;;;25475:4;25461:11;;:18;;;;;;;;;;;;;;;;;;25511:12;25490:18;:33;;;;25206:325:::0;:::o;5115:169::-;5198:4;5215:39;5224:12;:10;:12::i;:::-;5238:7;5247:6;5215:8;:39::i;:::-;5272:4;5265:11;;5115:169;;;;:::o;21443:39::-;;;;:::o;22758:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;26359:113::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26449:15:::1;26432:14;;:32;;;;;;;;;;;;;;;;;;26359:113:::0;:::o;21216:51::-;;;:::o;35684:200::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35783:9:::1;35778:99;35802:5;:12;35798:1;:16;35778:99;;;35859:6;35836:10;:20;35847:5;35853:1;35847:8;;;;;;;;:::i;:::-;;;;;;;;35836:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35816:3;;;;;:::i;:::-;;;;35778:99;;;;35684:200:::0;;:::o;4522:108::-;4583:7;4610:12;;4603:19;;4522:108;:::o;22412:33::-;;;;:::o;25543:234::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25662:4:::1;25656;25652:1;25636:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25635:31;;;;:::i;:::-;25625:6;:41;;25617:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;25762:6;25752;:17;;;;:::i;:::-;25729:20;:40;;;;25543:234:::0;:::o;5292:492::-;5432:4;5449:36;5459:6;5467:9;5478:6;5449:9;:36::i;:::-;5498:24;5525:11;:19;5537:6;5525:19;;;;;;;;;;;;;;;:33;5545:12;:10;:12::i;:::-;5525:33;;;;;;;;;;;;;;;;5498:60;;5597:6;5577:16;:26;;5569:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5684:57;5693:6;5701:12;:10;:12::i;:::-;5734:6;5715:16;:25;5684:8;:57::i;:::-;5772:4;5765:11;;;5292:492;;;;;:::o;4421:93::-;4479:5;4504:2;4497:9;;4421:93;:::o;5792:215::-;5880:4;5897:80;5906:12;:10;:12::i;:::-;5920:7;5966:10;5929:11;:25;5941:12;:10;:12::i;:::-;5929:25;;;;;;;;;;;;;;;:34;5955:7;5929:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5897:8;:80::i;:::-;5995:4;5988:11;;5792:215;;;;:::o;22377:28::-;;;;:::o;21274:38::-;;;:::o;21651:33::-;;;;;;;;;;;;;:::o;28177:127::-;28244:4;28268:19;:28;28288:7;28268:28;;;;;;;;;;;;;;;;;;;;;;;;;28261:35;;28177:127;;;:::o;34595:155::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34647:23:::1;34673:24;34691:4;34673:9;:24::i;:::-;34647:50;;34708:33;34725:15;34708:16;:33::i;:::-;34636:114;34595:155::o:0;28312:505::-;28406:16;28446:19;:33;28466:12;:10;:12::i;:::-;28446:33;;;;;;;;;;;;;;;;;;;;;;;;;28438:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28570:7;;:14;;28549:10;;:17;;:35;28541:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;28641:167;28658:10;;:17;;28647:8;:28;28641:167;;;28692:73;28702:12;:10;:12::i;:::-;28716:10;;28727:8;28716:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28758:6;28738:7;;28746:8;28738:17;;;;;;;:::i;:::-;;;;;;;;:26;;;;:::i;:::-;28692:9;:73::i;:::-;28793:1;28781:13;;;;;:::i;:::-;;;28641:167;;;28397:420;28312:505;;;;:::o;26913:300::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27030:16:::1;27012:15;:34;;;;27069:10;27057:9;:22;;;;27123:9;;27105:15;;:27;;;;:::i;:::-;27090:12;:42;;;;27168:3;27151:13;;:20;;27143:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26913:300:::0;;:::o;22160:30::-;;;;:::o;21691:31::-;;;;;;;;;;;;;:::o;4638:127::-;4712:7;4739:9;:18;4749:7;4739:18;;;;;;;;;;;;;;;;4732:25;;4638:127;;;:::o;13603:148::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13710:1:::1;13673:40;;13694:6;;;;;;;;;;;13673:40;;;;;;;;;;;;13741:1;13724:6;;:19;;;;;;;;;;;;;;;;;;13603:148::o:0;22032:69::-;;;;;;;;;;;;;:::o;34802:120::-;34854:4;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34887:5:::1;34870:14;;:22;;;;;;;;;;;;;;;;;;34910:4;34903:11;;34802:120:::0;:::o;26010:144::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26142:4:::1;26100:31;:39;26132:6;26100:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26010:144:::0;;:::o;21950:75::-;;;;;;;;;;;;;:::o;35892:191::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35951:12:::1;35976:10;35968:24;;36000:21;35968:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35950:76;;;36045:7;36037:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35939:144;35892:191::o:0;22452:27::-;;;;:::o;22303:25::-;;;;:::o;12961:79::-;12999:7;13026:6;;;;;;;;;;;13019:13;;12961:79;:::o;26250:101::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26336:7:::1;26322:11;;:21;;;;;;;;;;;;;;;;;;26250:101:::0;:::o;4309:104::-;4365:13;4398:7;4391:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4309:104;:::o;22572:33::-;;;;;;;;;;;;;:::o;22110:41::-;22147:4;22110:41;:::o;27723:252::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27832:13:::1;27824:21;;:4;:21;;::::0;27816:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27926:41;27955:4;27961:5;27926:28;:41::i;:::-;27723:252:::0;;:::o;22197:24::-;;;;:::o;6015:413::-;6108:4;6125:24;6152:11;:25;6164:12;:10;:12::i;:::-;6152:25;;;;;;;;;;;;;;;:34;6178:7;6152:34;;;;;;;;;;;;;;;;6125:61;;6225:15;6205:16;:35;;6197:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6318:67;6327:12;:10;:12::i;:::-;6341:7;6369:15;6350:16;:34;6318:8;:67::i;:::-;6416:4;6409:11;;;6015:413;;;;:::o;4773:175::-;4859:4;4876:42;4886:12;:10;:12::i;:::-;4900:9;4911:6;4876:9;:42::i;:::-;4936:4;4929:11;;4773:175;;;;:::o;26480:107::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26567:12:::1;26553:11;;:26;;;;;;;;;;;;;;;;;;26480:107:::0;:::o;22831:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22228:27::-;;;;:::o;21611:33::-;;;;;;;;;;;;;:::o;27221:182::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27337:8:::1;27306:19;:28;27326:7;27306:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27377:7;27361:34;;;27386:8;27361:34;;;;;;:::i;:::-;;;;;;;;27221:182:::0;;:::o;25786:215::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25908:4:::1;25902;25898:1;25882:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25881:31;;;;:::i;:::-;25871:6;:41;;25863:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25986:6;25976;:17;;;;:::i;:::-;25964:9;:29;;;;25786:215:::0;:::o;27411:304::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27530:9:::1;27526:115;27549:8;;:15;;27545:1;:19;27526:115;;;27621:8;27586:19;:32;27606:8;;27615:1;27606:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27586:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;27566:3;;;;;:::i;:::-;;;;27526:115;;;;27656:51;27688:8;;27698;27656:51;;;;;;;;:::i;:::-;;;;;;;;27411:304:::0;;;:::o;22488:39::-;;;;;;;;;;;;;:::o;21395:35::-;;;;:::o;22335:28::-;;;;:::o;22534:31::-;;;;;;;;;;;;;:::o;4956:151::-;5045:7;5072:11;:18;5084:5;5072:18;;;;;;;;;;;;;;;:27;5091:7;5072:27;;;;;;;;;;;;;;;;5065:34;;4956:151;;;;:::o;21355:33::-;;;;:::o;22265:31::-;;;;:::o;21528:37::-;;;;:::o;13906:244::-;13183:12;:10;:12::i;:::-;13173:22;;:6;;;;;;;;;;;:22;;;13165:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14015:1:::1;13995:22;;:8;:22;;::::0;13987:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14105:8;14076:38;;14097:6;;;;;;;;;;;14076:38;;;;;;;;;;;;14134:8;14125:6;;:17;;;;;;;;;;;;;;;;;;13906:244:::0;:::o;22612:24::-;;;;:::o;209:98::-;262:7;289:10;282:17;;209:98;:::o;7355:380::-;7508:1;7491:19;;:5;:19;;;7483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7589:1;7570:21;;:7;:21;;;7562:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7673:6;7643:11;:18;7655:5;7643:18;;;;;;;;;;;;;;;:27;7662:7;7643:27;;;;;;;;;;;;;;;:36;;;;7711:7;7695:32;;7704:5;7695:32;;;7720:6;7695:32;;;;;;:::i;:::-;;;;;;;;7355:380;;;:::o;28831:4610::-;28979:1;28963:18;;:4;:18;;;28955:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29056:1;29042:16;;:2;:16;;;29034:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29118:10;:14;29129:2;29118:14;;;;;;;;;;;;;;;;;;;;;;;;;29117:15;:36;;;;;29137:10;:16;29148:4;29137:16;;;;;;;;;;;;;;;;;;;;;;;;;29136:17;29117:36;29109:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;29242:1;29232:6;:11;29229:92;;29260:28;29276:4;29282:2;29286:1;29260:15;:28::i;:::-;29303:7;;29229:92;29345:13;;;;;;;;;;;29341:136;;29382:19;:25;29402:4;29382:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29411:19;:23;29431:2;29411:23;;;;;;;;;;;;;;;;;;;;;;;;;29382:52;29374:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29341:136;29498:14;;;;;;;;;;;29495:1825;;;29558:7;:5;:7::i;:::-;29550:15;;:4;:15;;;;:49;;;;;29592:7;:5;:7::i;:::-;29586:13;;:2;:13;;;;29550:49;:86;;;;;29634:1;29620:16;;:2;:16;;;;29550:86;:128;;;;;29671:6;29657:21;;:2;:21;;;;29550:128;:158;;;;;29700:8;;;;;;;;;;;29699:9;29550:158;29528:1781;;;29746:13;;;;;;;;;;;29742:148;;29791:19;:25;29811:4;29791:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29820:19;:23;29840:2;29820:23;;;;;;;;;;;;;;;;;;;;;;;;;29791:52;29783:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29742:148;30049:20;;;;;;;;;;;30045:423;;;30103:7;:5;:7::i;:::-;30097:13;;:2;:13;;;;:47;;;;;30128:15;30114:30;;:2;:30;;;;30097:47;:79;;;;;30162:13;30148:28;;:2;:28;;;;30097:79;30093:356;;;30254:12;30212:28;:39;30241:9;30212:39;;;;;;;;;;;;;;;;:54;30204:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30413:12;30371:28;:39;30400:9;30371:39;;;;;;;;;;;;;;;:54;;;;30093:356;30045:423;30521:25;:31;30547:4;30521:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;30557:31;:35;30589:2;30557:35;;;;;;;;;;;;;;;;;;;;;;;;;30556:36;30521:71;30517:777;;;30660:6;30639:20;;:27;;;;:::i;:::-;30629:6;:37;;30621:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30785:9;;30768:13;30778:2;30768:9;:13::i;:::-;30759:6;:22;;;;:::i;:::-;:35;;30751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30517:777;;;30897:25;:29;30923:2;30897:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;30931:31;:37;30963:4;30931:37;;;;;;;;;;;;;;;;;;;;;;;;;30930:38;30897:71;30893:401;;;31036:6;31015:20;;:27;;;;:::i;:::-;31005:6;:37;;30997:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;30893:401;;;31148:31;:35;31180:2;31148:35;;;;;;;;;;;;;;;;;;;;;;;;;31144:150;;31241:9;;31224:13;31234:2;31224:9;:13::i;:::-;31215:6;:22;;;;:::i;:::-;:35;;31207:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31144:150;30893:401;30517:777;29528:1781;29495:1825;31326:28;31357:24;31375:4;31357:9;:24::i;:::-;31326:55;;31392:12;31431:18;;31407:20;:42;;31392:57;;31478:7;:35;;;;;31502:11;;;;;;;;;;;31478:35;:61;;;;;31531:8;;;;;;;;;;;31530:9;31478:61;:110;;;;;31557:25;:31;31583:4;31557:31;;;;;;;;;;;;;;;;;;;;;;;;;31556:32;31478:110;:153;;;;;31606:19;:25;31626:4;31606:25;;;;;;;;;;;;;;;;;;;;;;;;;31605:26;31478:153;:194;;;;;31649:19;:23;31669:2;31649:23;;;;;;;;;;;;;;;;;;;;;;;;;31648:24;31478:194;31460:322;;;31710:4;31699:8;;:15;;;;;;;;;;;;;;;;;;31729:10;:8;:10::i;:::-;31765:5;31754:8;;:16;;;;;;;;;;;;;;;;;;31460:322;31794:12;31810:8;;;;;;;;;;;31809:9;31794:24;;31919:19;:25;31939:4;31919:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31948:19;:23;31968:2;31948:23;;;;;;;;;;;;;;;;;;;;;;;;;31919:52;31916:99;;;31998:5;31988:15;;31916:99;32035:12;32128:11;;;;;;;;;;;32123:1005;;32159:7;32156:961;;;32254:25;:29;32280:2;32254:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;32303:1;32287:13;;:17;32254:50;32250:701;;;32333:41;22147:4;32333:25;32344:13;;32333:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;32326:48;;32411:4;32394:13;;:21;;;;;;;:::i;:::-;;;;;;;;32483:13;;32464:16;;32457:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;32435:18;;:61;;;;;;;:::i;:::-;;;;;;;;32552:13;;32539:10;;32532:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;32516:12;;:49;;;;;;;:::i;:::-;;;;;;;;32250:701;;;32645:25;:31;32671:4;32645:31;;;;;;;;;;;;;;;;;;;;;;;;;32642:309;;;32705:40;22147:4;32705:24;32716:12;;32705:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;32698:47;;32782:4;32765:13;;:21;;;;;;;:::i;:::-;;;;;;;;32853:12;;32835:15;;32828:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;32806:18;;:59;;;;;;;:::i;:::-;;;;;;;;32920:13;;32908:9;;32901:4;:16;;;;:::i;:::-;:32;;;;:::i;:::-;32885:12;;:48;;;;;;;:::i;:::-;;;;;;;;32642:309;32250:701;32980:1;32973:4;:8;32970:96;;;33006:42;33022:4;33036;33043;33006:15;:42::i;:::-;32970:96;33100:4;33090:14;;;;;:::i;:::-;;;32156:961;32123:1005;33144:13;;;;;;;;;;;:31;;;;;33161:14;;;;;;;;;;;33144:31;33140:246;;;33191:11;33220:8;;;;;;;;;;;:14;;;33235:4;33240:2;33220:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33216:111;;33316:8;;;33216:111;33289:3;33280:12;;33244:63;33347:6;33339:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;33177:209;33140:246;33398:33;33414:4;33420:2;33424:6;33398:15;:33::i;:::-;28944:4497;;;;28831:4610;;;;:::o;33453:599::-;33579:21;33617:1;33603:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33579:40;;33648:4;33630;33635:1;33630:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33674:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33664:4;33669:1;33664:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33709:62;33726:4;33741:15;33759:11;33709:8;:62::i;:::-;33810:15;:66;;;33891:11;33917:1;33961:4;33988;34008:15;33810:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33508:544;33453:599;:::o;27983:186::-;28100:5;28066:25;:31;28092:4;28066:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28155:5;28121:40;;28149:4;28121:40;;;;;;;;;;;;27983:186;;:::o;6436:614::-;6594:1;6576:20;;:6;:20;;;6568:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6678:1;6657:23;;:9;:23;;;6649:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6733:21;6757:9;:17;6767:6;6757:17;;;;;;;;;;;;;;;;6733:41;;6810:6;6793:13;:23;;6785:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6931:6;6915:13;:22;6895:9;:17;6905:6;6895:17;;;;;;;;;;;;;;;:42;;;;6983:6;6959:9;:20;6969:9;6959:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7024:9;7007:35;;7016:6;7007:35;;;7035:6;7007:35;;;;;;:::i;:::-;;;;;;;;6557:493;6436:614;;;:::o;34930:746::-;34969:23;34995:24;35013:4;34995:9;:24::i;:::-;34969:50;;35030:25;35079:12;;35058:18;;:33;;;;:::i;:::-;35030:61;;35102:12;35157:1;35138:15;:20;:46;;;;35183:1;35162:17;:22;35138:46;35135:60;;;35187:7;;;;;35135:60;35215:26;35244:15;35215:44;;35270:36;35287:18;35270:16;:36::i;:::-;35319:16;35338:21;35319:40;;35370:20;35393:49;35424:17;35393:26;35406:12;;35393:8;:12;;:26;;;;:::i;:::-;:30;;:49;;;;:::i;:::-;35370:72;;35476:9;;;;;;;;;;;35468:23;;35499:12;35468:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35455:61;;;;;35548:15;;;;;;;;;;;35540:29;;35577:21;35540:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35527:76;;;;;35635:1;35614:18;:22;;;;35663:1;35647:13;:17;;;;34958:718;;;;;;34930:746;:::o;9359:471::-;9417:7;9667:1;9662;:6;9658:47;;9692:1;9685:8;;;;9658:47;9717:9;9733:1;9729;:5;;;;:::i;:::-;9717:17;;9762:1;9757;9753;:5;;;;:::i;:::-;:10;9745:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9821:1;9814:8;;;9359:471;;;;;:::o;10306:132::-;10364:7;10391:39;10395:1;10398;10391:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10384:46;;10306:132;;;;:::o;10934:278::-;11020:7;11052:1;11048;:5;11055:12;11040:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11079:9;11095:1;11091;:5;;;;:::i;:::-;11079:17;;11203:1;11196:8;;;10934:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:307::-;2104:1;2114:113;2128:6;2125:1;2122:13;2114:113;;;2213:1;2208:3;2204:11;2198:18;2194:1;2189:3;2185:11;2178:39;2150:2;2147:1;2143:10;2138:15;;2114:113;;;2245:6;2242:1;2239:13;2236:101;;;2325:1;2316:6;2311:3;2307:16;2300:27;2236:101;2085:258;2036:307;;;:::o;2349:102::-;2390:6;2441:2;2437:7;2432:2;2425:5;2421:14;2417:28;2407:38;;2349:102;;;:::o;2457:364::-;2545:3;2573:39;2606:5;2573:39;:::i;:::-;2628:71;2692:6;2687:3;2628:71;:::i;:::-;2621:78;;2708:52;2753:6;2748:3;2741:4;2734:5;2730:16;2708:52;:::i;:::-;2785:29;2807:6;2785:29;:::i;:::-;2780:3;2776:39;2769:46;;2549:272;2457:364;;;;:::o;2827:313::-;2940:4;2978:2;2967:9;2963:18;2955:26;;3027:9;3021:4;3017:20;3013:1;3002:9;2998:17;2991:47;3055:78;3128:4;3119:6;3055:78;:::i;:::-;3047:86;;2827:313;;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:329::-;3478:6;3527:2;3515:9;3506:7;3502:23;3498:32;3495:119;;;3533:79;;:::i;:::-;3495:119;3653:1;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3624:117;3419:329;;;;:::o;3754:474::-;3822:6;3830;3879:2;3867:9;3858:7;3854:23;3850:32;3847:119;;;3885:79;;:::i;:::-;3847:119;4005:1;4030:53;4075:7;4066:6;4055:9;4051:22;4030:53;:::i;:::-;4020:63;;3976:117;4132:2;4158:53;4203:7;4194:6;4183:9;4179:22;4158:53;:::i;:::-;4148:63;;4103:118;3754:474;;;;;:::o;4234:90::-;4268:7;4311:5;4304:13;4297:21;4286:32;;4234:90;;;:::o;4330:109::-;4411:21;4426:5;4411:21;:::i;:::-;4406:3;4399:34;4330:109;;:::o;4445:210::-;4532:4;4570:2;4559:9;4555:18;4547:26;;4583:65;4645:1;4634:9;4630:17;4621:6;4583:65;:::i;:::-;4445:210;;;;:::o;4661:118::-;4748:24;4766:5;4748:24;:::i;:::-;4743:3;4736:37;4661:118;;:::o;4785:222::-;4878:4;4916:2;4905:9;4901:18;4893:26;;4929:71;4997:1;4986:9;4982:17;4973:6;4929:71;:::i;:::-;4785:222;;;;:::o;5013:116::-;5083:21;5098:5;5083:21;:::i;:::-;5076:5;5073:32;5063:60;;5119:1;5116;5109:12;5063:60;5013:116;:::o;5135:133::-;5178:5;5216:6;5203:20;5194:29;;5232:30;5256:5;5232:30;:::i;:::-;5135:133;;;;:::o;5274:323::-;5330:6;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:50;5572:7;5563:6;5552:9;5548:22;5530:50;:::i;:::-;5520:60;;5476:114;5274:323;;;;:::o;5603:60::-;5631:3;5652:5;5645:12;;5603:60;;;:::o;5669:142::-;5719:9;5752:53;5770:34;5779:24;5797:5;5779:24;:::i;:::-;5770:34;:::i;:::-;5752:53;:::i;:::-;5739:66;;5669:142;;;:::o;5817:126::-;5867:9;5900:37;5931:5;5900:37;:::i;:::-;5887:50;;5817:126;;;:::o;5949:153::-;6026:9;6059:37;6090:5;6059:37;:::i;:::-;6046:50;;5949:153;;;:::o;6108:185::-;6222:64;6280:5;6222:64;:::i;:::-;6217:3;6210:77;6108:185;;:::o;6299:276::-;6419:4;6457:2;6446:9;6442:18;6434:26;;6470:98;6565:1;6554:9;6550:17;6541:6;6470:98;:::i;:::-;6299:276;;;;:::o;6581:117::-;6690:1;6687;6680:12;6704:180;6752:77;6749:1;6742:88;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6890:281;6973:27;6995:4;6973:27;:::i;:::-;6965:6;6961:40;7103:6;7091:10;7088:22;7067:18;7055:10;7052:34;7049:62;7046:88;;;7114:18;;:::i;:::-;7046:88;7154:10;7150:2;7143:22;6933:238;6890:281;;:::o;7177:129::-;7211:6;7238:20;;:::i;:::-;7228:30;;7267:33;7295:4;7287:6;7267:33;:::i;:::-;7177:129;;;:::o;7312:311::-;7389:4;7479:18;7471:6;7468:30;7465:56;;;7501:18;;:::i;:::-;7465:56;7551:4;7543:6;7539:17;7531:25;;7611:4;7605;7601:15;7593:23;;7312:311;;;:::o;7629:117::-;7738:1;7735;7728:12;7769:710;7865:5;7890:81;7906:64;7963:6;7906:64;:::i;:::-;7890:81;:::i;:::-;7881:90;;7991:5;8020:6;8013:5;8006:21;8054:4;8047:5;8043:16;8036:23;;8107:4;8099:6;8095:17;8087:6;8083:30;8136:3;8128:6;8125:15;8122:122;;;8155:79;;:::i;:::-;8122:122;8270:6;8253:220;8287:6;8282:3;8279:15;8253:220;;;8362:3;8391:37;8424:3;8412:10;8391:37;:::i;:::-;8386:3;8379:50;8458:4;8453:3;8449:14;8442:21;;8329:144;8313:4;8308:3;8304:14;8297:21;;8253:220;;;8257:21;7871:608;;7769:710;;;;;:::o;8502:370::-;8573:5;8622:3;8615:4;8607:6;8603:17;8599:27;8589:122;;8630:79;;:::i;:::-;8589:122;8747:6;8734:20;8772:94;8862:3;8854:6;8847:4;8839:6;8835:17;8772:94;:::i;:::-;8763:103;;8579:293;8502:370;;;;:::o;8878:678::-;8968:6;8976;9025:2;9013:9;9004:7;9000:23;8996:32;8993:119;;;9031:79;;:::i;:::-;8993:119;9179:1;9168:9;9164:17;9151:31;9209:18;9201:6;9198:30;9195:117;;;9231:79;;:::i;:::-;9195:117;9336:78;9406:7;9397:6;9386:9;9382:22;9336:78;:::i;:::-;9326:88;;9122:302;9463:2;9489:50;9531:7;9522:6;9511:9;9507:22;9489:50;:::i;:::-;9479:60;;9434:115;8878:678;;;;;:::o;9562:329::-;9621:6;9670:2;9658:9;9649:7;9645:23;9641:32;9638:119;;;9676:79;;:::i;:::-;9638:119;9796:1;9821:53;9866:7;9857:6;9846:9;9842:22;9821:53;:::i;:::-;9811:63;;9767:117;9562:329;;;;:::o;9897:619::-;9974:6;9982;9990;10039:2;10027:9;10018:7;10014:23;10010:32;10007:119;;;10045:79;;:::i;:::-;10007:119;10165:1;10190:53;10235:7;10226:6;10215:9;10211:22;10190:53;:::i;:::-;10180:63;;10136:117;10292:2;10318:53;10363:7;10354:6;10343:9;10339:22;10318:53;:::i;:::-;10308:63;;10263:118;10420:2;10446:53;10491:7;10482:6;10471:9;10467:22;10446:53;:::i;:::-;10436:63;;10391:118;9897:619;;;;;:::o;10522:86::-;10557:7;10597:4;10590:5;10586:16;10575:27;;10522:86;;;:::o;10614:112::-;10697:22;10713:5;10697:22;:::i;:::-;10692:3;10685:35;10614:112;;:::o;10732:214::-;10821:4;10859:2;10848:9;10844:18;10836:26;;10872:67;10936:1;10925:9;10921:17;10912:6;10872:67;:::i;:::-;10732:214;;;;:::o;10952:117::-;11061:1;11058;11051:12;11092:568;11165:8;11175:6;11225:3;11218:4;11210:6;11206:17;11202:27;11192:122;;11233:79;;:::i;:::-;11192:122;11346:6;11333:20;11323:30;;11376:18;11368:6;11365:30;11362:117;;;11398:79;;:::i;:::-;11362:117;11512:4;11504:6;11500:17;11488:29;;11566:3;11558:4;11550:6;11546:17;11536:8;11532:32;11529:41;11526:128;;;11573:79;;:::i;:::-;11526:128;11092:568;;;;;:::o;11683:::-;11756:8;11766:6;11816:3;11809:4;11801:6;11797:17;11793:27;11783:122;;11824:79;;:::i;:::-;11783:122;11937:6;11924:20;11914:30;;11967:18;11959:6;11956:30;11953:117;;;11989:79;;:::i;:::-;11953:117;12103:4;12095:6;12091:17;12079:29;;12157:3;12149:4;12141:6;12137:17;12127:8;12123:32;12120:41;12117:128;;;12164:79;;:::i;:::-;12117:128;11683:568;;;;;:::o;12257:934::-;12379:6;12387;12395;12403;12452:2;12440:9;12431:7;12427:23;12423:32;12420:119;;;12458:79;;:::i;:::-;12420:119;12606:1;12595:9;12591:17;12578:31;12636:18;12628:6;12625:30;12622:117;;;12658:79;;:::i;:::-;12622:117;12771:80;12843:7;12834:6;12823:9;12819:22;12771:80;:::i;:::-;12753:98;;;;12549:312;12928:2;12917:9;12913:18;12900:32;12959:18;12951:6;12948:30;12945:117;;;12981:79;;:::i;:::-;12945:117;13094:80;13166:7;13157:6;13146:9;13142:22;13094:80;:::i;:::-;13076:98;;;;12871:313;12257:934;;;;;;;:::o;13197:468::-;13262:6;13270;13319:2;13307:9;13298:7;13294:23;13290:32;13287:119;;;13325:79;;:::i;:::-;13287:119;13445:1;13470:53;13515:7;13506:6;13495:9;13491:22;13470:53;:::i;:::-;13460:63;;13416:117;13572:2;13598:50;13640:7;13631:6;13620:9;13616:22;13598:50;:::i;:::-;13588:60;;13543:115;13197:468;;;;;:::o;13671:698::-;13763:6;13771;13779;13828:2;13816:9;13807:7;13803:23;13799:32;13796:119;;;13834:79;;:::i;:::-;13796:119;13982:1;13971:9;13967:17;13954:31;14012:18;14004:6;14001:30;13998:117;;;14034:79;;:::i;:::-;13998:117;14147:80;14219:7;14210:6;14199:9;14195:22;14147:80;:::i;:::-;14129:98;;;;13925:312;14276:2;14302:50;14344:7;14335:6;14324:9;14320:22;14302:50;:::i;:::-;14292:60;;14247:115;13671:698;;;;;:::o;14375:474::-;14443:6;14451;14500:2;14488:9;14479:7;14475:23;14471:32;14468:119;;;14506:79;;:::i;:::-;14468:119;14626:1;14651:53;14696:7;14687:6;14676:9;14672:22;14651:53;:::i;:::-;14641:63;;14597:117;14753:2;14779:53;14824:7;14815:6;14804:9;14800:22;14779:53;:::i;:::-;14769:63;;14724:118;14375:474;;;;;:::o;14855:182::-;14995:34;14991:1;14983:6;14979:14;14972:58;14855:182;:::o;15043:366::-;15185:3;15206:67;15270:2;15265:3;15206:67;:::i;:::-;15199:74;;15282:93;15371:3;15282:93;:::i;:::-;15400:2;15395:3;15391:12;15384:19;;15043:366;;;:::o;15415:419::-;15581:4;15619:2;15608:9;15604:18;15596:26;;15668:9;15662:4;15658:20;15654:1;15643:9;15639:17;15632:47;15696:131;15822:4;15696:131;:::i;:::-;15688:139;;15415:419;;;:::o;15840:180::-;15888:77;15885:1;15878:88;15985:4;15982:1;15975:15;16009:4;16006:1;15999:15;16026:305;16066:3;16085:20;16103:1;16085:20;:::i;:::-;16080:25;;16119:20;16137:1;16119:20;:::i;:::-;16114:25;;16273:1;16205:66;16201:74;16198:1;16195:81;16192:107;;;16279:18;;:::i;:::-;16192:107;16323:1;16320;16316:9;16309:16;;16026:305;;;;:::o;16337:179::-;16477:31;16473:1;16465:6;16461:14;16454:55;16337:179;:::o;16522:366::-;16664:3;16685:67;16749:2;16744:3;16685:67;:::i;:::-;16678:74;;16761:93;16850:3;16761:93;:::i;:::-;16879:2;16874:3;16870:12;16863:19;;16522:366;;;:::o;16894:419::-;17060:4;17098:2;17087:9;17083:18;17075:26;;17147:9;17141:4;17137:20;17133:1;17122:9;17118:17;17111:47;17175:131;17301:4;17175:131;:::i;:::-;17167:139;;16894:419;;;:::o;17319:180::-;17367:77;17364:1;17357:88;17464:4;17461:1;17454:15;17488:4;17485:1;17478:15;17505:320;17549:6;17586:1;17580:4;17576:12;17566:22;;17633:1;17627:4;17623:12;17654:18;17644:81;;17710:4;17702:6;17698:17;17688:27;;17644:81;17772:2;17764:6;17761:14;17741:18;17738:38;17735:84;;17791:18;;:::i;:::-;17735:84;17556:269;17505:320;;;:::o;17831:174::-;17971:26;17967:1;17959:6;17955:14;17948:50;17831:174;:::o;18011:366::-;18153:3;18174:67;18238:2;18233:3;18174:67;:::i;:::-;18167:74;;18250:93;18339:3;18250:93;:::i;:::-;18368:2;18363:3;18359:12;18352:19;;18011:366;;;:::o;18383:419::-;18549:4;18587:2;18576:9;18572:18;18564:26;;18636:9;18630:4;18626:20;18622:1;18611:9;18607:17;18600:47;18664:131;18790:4;18664:131;:::i;:::-;18656:139;;18383:419;;;:::o;18808:180::-;18856:77;18853:1;18846:88;18953:4;18950:1;18943:15;18977:4;18974:1;18967:15;18994:233;19033:3;19056:24;19074:5;19056:24;:::i;:::-;19047:33;;19102:66;19095:5;19092:77;19089:103;;19172:18;;:::i;:::-;19089:103;19219:1;19212:5;19208:13;19201:20;;18994:233;;;:::o;19233:348::-;19273:7;19296:20;19314:1;19296:20;:::i;:::-;19291:25;;19330:20;19348:1;19330:20;:::i;:::-;19325:25;;19518:1;19450:66;19446:74;19443:1;19440:81;19435:1;19428:9;19421:17;19417:105;19414:131;;;19525:18;;:::i;:::-;19414:131;19573:1;19570;19566:9;19555:20;;19233:348;;;;:::o;19587:180::-;19635:77;19632:1;19625:88;19732:4;19729:1;19722:15;19756:4;19753:1;19746:15;19773:185;19813:1;19830:20;19848:1;19830:20;:::i;:::-;19825:25;;19864:20;19882:1;19864:20;:::i;:::-;19859:25;;19903:1;19893:35;;19908:18;;:::i;:::-;19893:35;19950:1;19947;19943:9;19938:14;;19773:185;;;;:::o;19964:234::-;20104:34;20100:1;20092:6;20088:14;20081:58;20173:17;20168:2;20160:6;20156:15;20149:42;19964:234;:::o;20204:366::-;20346:3;20367:67;20431:2;20426:3;20367:67;:::i;:::-;20360:74;;20443:93;20532:3;20443:93;:::i;:::-;20561:2;20556:3;20552:12;20545:19;;20204:366;;;:::o;20576:419::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20576:419;;;:::o;21001:227::-;21141:34;21137:1;21129:6;21125:14;21118:58;21210:10;21205:2;21197:6;21193:15;21186:35;21001:227;:::o;21234:366::-;21376:3;21397:67;21461:2;21456:3;21397:67;:::i;:::-;21390:74;;21473:93;21562:3;21473:93;:::i;:::-;21591:2;21586:3;21582:12;21575:19;;21234:366;;;:::o;21606:419::-;21772:4;21810:2;21799:9;21795:18;21787:26;;21859:9;21853:4;21849:20;21845:1;21834:9;21830:17;21823:47;21887:131;22013:4;21887:131;:::i;:::-;21879:139;;21606:419;;;:::o;22031:232::-;22171:34;22167:1;22159:6;22155:14;22148:58;22240:15;22235:2;22227:6;22223:15;22216:40;22031:232;:::o;22269:366::-;22411:3;22432:67;22496:2;22491:3;22432:67;:::i;:::-;22425:74;;22508:93;22597:3;22508:93;:::i;:::-;22626:2;22621:3;22617:12;22610:19;;22269:366;;;:::o;22641:419::-;22807:4;22845:2;22834:9;22830:18;22822:26;;22894:9;22888:4;22884:20;22880:1;22869:9;22865:17;22858:47;22922:131;23048:4;22922:131;:::i;:::-;22914:139;;22641:419;;;:::o;23066:229::-;23206:34;23202:1;23194:6;23190:14;23183:58;23275:12;23270:2;23262:6;23258:15;23251:37;23066:229;:::o;23301:366::-;23443:3;23464:67;23528:2;23523:3;23464:67;:::i;:::-;23457:74;;23540:93;23629:3;23540:93;:::i;:::-;23658:2;23653:3;23649:12;23642:19;;23301:366;;;:::o;23673:419::-;23839:4;23877:2;23866:9;23862:18;23854:26;;23926:9;23920:4;23916:20;23912:1;23901:9;23897:17;23890:47;23954:131;24080:4;23954:131;:::i;:::-;23946:139;;23673:419;;;:::o;24098:147::-;24199:11;24236:3;24221:18;;24098:147;;;;:::o;24251:114::-;;:::o;24371:398::-;24530:3;24551:83;24632:1;24627:3;24551:83;:::i;:::-;24544:90;;24643:93;24732:3;24643:93;:::i;:::-;24761:1;24756:3;24752:11;24745:18;;24371:398;;;:::o;24775:379::-;24959:3;24981:147;25124:3;24981:147;:::i;:::-;24974:154;;25145:3;25138:10;;24775:379;;;:::o;25160:168::-;25300:20;25296:1;25288:6;25284:14;25277:44;25160:168;:::o;25334:366::-;25476:3;25497:67;25561:2;25556:3;25497:67;:::i;:::-;25490:74;;25573:93;25662:3;25573:93;:::i;:::-;25691:2;25686:3;25682:12;25675:19;;25334:366;;;:::o;25706:419::-;25872:4;25910:2;25899:9;25895:18;25887:26;;25959:9;25953:4;25949:20;25945:1;25934:9;25930:17;25923:47;25987:131;26113:4;25987:131;:::i;:::-;25979:139;;25706:419;;;:::o;26131:289::-;26271:34;26267:1;26259:6;26255:14;26248:58;26340:34;26335:2;26327:6;26323:15;26316:59;26409:3;26404:2;26396:6;26392:15;26385:28;26131:289;:::o;26426:366::-;26568:3;26589:67;26653:2;26648:3;26589:67;:::i;:::-;26582:74;;26665:93;26754:3;26665:93;:::i;:::-;26783:2;26778:3;26774:12;26767:19;;26426:366;;;:::o;26798:419::-;26964:4;27002:2;26991:9;26987:18;26979:26;;27051:9;27045:4;27041:20;27037:1;27026:9;27022:17;27015:47;27079:131;27205:4;27079:131;:::i;:::-;27071:139;;26798:419;;;:::o;27223:224::-;27363:34;27359:1;27351:6;27347:14;27340:58;27432:7;27427:2;27419:6;27415:15;27408:32;27223:224;:::o;27453:366::-;27595:3;27616:67;27680:2;27675:3;27616:67;:::i;:::-;27609:74;;27692:93;27781:3;27692:93;:::i;:::-;27810:2;27805:3;27801:12;27794:19;;27453:366;;;:::o;27825:419::-;27991:4;28029:2;28018:9;28014:18;28006:26;;28078:9;28072:4;28068:20;28064:1;28053:9;28049:17;28042:47;28106:131;28232:4;28106:131;:::i;:::-;28098:139;;27825:419;;;:::o;28250:223::-;28390:34;28386:1;28378:6;28374:14;28367:58;28459:6;28454:2;28446:6;28442:15;28435:31;28250:223;:::o;28479:366::-;28621:3;28642:67;28706:2;28701:3;28642:67;:::i;:::-;28635:74;;28718:93;28807:3;28718:93;:::i;:::-;28836:2;28831:3;28827:12;28820:19;;28479:366;;;:::o;28851:419::-;29017:4;29055:2;29044:9;29040:18;29032:26;;29104:9;29098:4;29094:20;29090:1;29079:9;29075:17;29068:47;29132:131;29258:4;29132:131;:::i;:::-;29124:139;;28851:419;;;:::o;29276:184::-;29375:11;29409:6;29404:3;29397:19;29449:4;29444:3;29440:14;29425:29;;29276:184;;;;:::o;29466:102::-;29535:4;29558:3;29550:11;;29466:102;;;:::o;29574:108::-;29651:24;29669:5;29651:24;:::i;:::-;29646:3;29639:37;29574:108;;:::o;29688:179::-;29757:10;29778:46;29820:3;29812:6;29778:46;:::i;:::-;29856:4;29851:3;29847:14;29833:28;;29688:179;;;;:::o;29873:122::-;29925:5;29950:39;29985:2;29980:3;29976:12;29971:3;29950:39;:::i;:::-;29941:48;;29873:122;;;;:::o;30001:115::-;30073:4;30105;30100:3;30096:14;30088:22;;30001:115;;;:::o;30152:699::-;30281:3;30304:86;30383:6;30378:3;30304:86;:::i;:::-;30297:93;;30414:58;30466:5;30414:58;:::i;:::-;30495:7;30526:1;30511:315;30536:6;30533:1;30530:13;30511:315;;;30606:42;30641:6;30632:7;30606:42;:::i;:::-;30668:63;30727:3;30712:13;30668:63;:::i;:::-;30661:70;;30754:62;30809:6;30754:62;:::i;:::-;30744:72;;30571:255;30558:1;30555;30551:9;30546:14;;30511:315;;;30515:14;30842:3;30835:10;;30286:565;;30152:699;;;;;:::o;30857:491::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:118;31260:4;31251:6;31243;31147:118;:::i;:::-;31139:126;;31275:66;31337:2;31326:9;31322:18;31313:6;31275:66;:::i;:::-;30857:491;;;;;;:::o;31354:225::-;31494:34;31490:1;31482:6;31478:14;31471:58;31563:8;31558:2;31550:6;31546:15;31539:33;31354:225;:::o;31585:366::-;31727:3;31748:67;31812:2;31807:3;31748:67;:::i;:::-;31741:74;;31824:93;31913:3;31824:93;:::i;:::-;31942:2;31937:3;31933:12;31926:19;;31585:366;;;:::o;31957:419::-;32123:4;32161:2;32150:9;32146:18;32138:26;;32210:9;32204:4;32200:20;32196:1;32185:9;32181:17;32174:47;32238:131;32364:4;32238:131;:::i;:::-;32230:139;;31957:419;;;:::o;32382:223::-;32522:34;32518:1;32510:6;32506:14;32499:58;32591:6;32586:2;32578:6;32574:15;32567:31;32382:223;:::o;32611:366::-;32753:3;32774:67;32838:2;32833:3;32774:67;:::i;:::-;32767:74;;32850:93;32939:3;32850:93;:::i;:::-;32968:2;32963:3;32959:12;32952:19;;32611:366;;;:::o;32983:419::-;33149:4;33187:2;33176:9;33172:18;33164:26;;33236:9;33230:4;33226:20;33222:1;33211:9;33207:17;33200:47;33264:131;33390:4;33264:131;:::i;:::-;33256:139;;32983:419;;;:::o;33408:221::-;33548:34;33544:1;33536:6;33532:14;33525:58;33617:4;33612:2;33604:6;33600:15;33593:29;33408:221;:::o;33635:366::-;33777:3;33798:67;33862:2;33857:3;33798:67;:::i;:::-;33791:74;;33874:93;33963:3;33874:93;:::i;:::-;33992:2;33987:3;33983:12;33976:19;;33635:366;;;:::o;34007:419::-;34173:4;34211:2;34200:9;34196:18;34188:26;;34260:9;34254:4;34250:20;34246:1;34235:9;34231:17;34224:47;34288:131;34414:4;34288:131;:::i;:::-;34280:139;;34007:419;;;:::o;34432:224::-;34572:34;34568:1;34560:6;34556:14;34549:58;34641:7;34636:2;34628:6;34624:15;34617:32;34432:224;:::o;34662:366::-;34804:3;34825:67;34889:2;34884:3;34825:67;:::i;:::-;34818:74;;34901:93;34990:3;34901:93;:::i;:::-;35019:2;35014:3;35010:12;35003:19;;34662:366;;;:::o;35034:419::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:222::-;35599:34;35595:1;35587:6;35583:14;35576:58;35668:5;35663:2;35655:6;35651:15;35644:30;35459:222;:::o;35687:366::-;35829:3;35850:67;35914:2;35909:3;35850:67;:::i;:::-;35843:74;;35926:93;36015:3;35926:93;:::i;:::-;36044:2;36039:3;36035:12;36028:19;;35687:366;;;:::o;36059:419::-;36225:4;36263:2;36252:9;36248:18;36240:26;;36312:9;36306:4;36302:20;36298:1;36287:9;36283:17;36276:47;36340:131;36466:4;36340:131;:::i;:::-;36332:139;;36059:419;;;:::o;36484:236::-;36624:34;36620:1;36612:6;36608:14;36601:58;36693:19;36688:2;36680:6;36676:15;36669:44;36484:236;:::o;36726:366::-;36868:3;36889:67;36953:2;36948:3;36889:67;:::i;:::-;36882:74;;36965:93;37054:3;36965:93;:::i;:::-;37083:2;37078:3;37074:12;37067:19;;36726:366;;;:::o;37098:419::-;37264:4;37302:2;37291:9;37287:18;37279:26;;37351:9;37345:4;37341:20;37337:1;37326:9;37322:17;37315:47;37379:131;37505:4;37379:131;:::i;:::-;37371:139;;37098:419;;;:::o;37523:176::-;37663:28;37659:1;37651:6;37647:14;37640:52;37523:176;:::o;37705:366::-;37847:3;37868:67;37932:2;37927:3;37868:67;:::i;:::-;37861:74;;37944:93;38033:3;37944:93;:::i;:::-;38062:2;38057:3;38053:12;38046:19;;37705:366;;;:::o;38077:419::-;38243:4;38281:2;38270:9;38266:18;38258:26;;38330:9;38324:4;38320:20;38316:1;38305:9;38301:17;38294:47;38358:131;38484:4;38358:131;:::i;:::-;38350:139;;38077:419;;;:::o;38502:172::-;38642:24;38638:1;38630:6;38626:14;38619:48;38502:172;:::o;38680:366::-;38822:3;38843:67;38907:2;38902:3;38843:67;:::i;:::-;38836:74;;38919:93;39008:3;38919:93;:::i;:::-;39037:2;39032:3;39028:12;39021:19;;38680:366;;;:::o;39052:419::-;39218:4;39256:2;39245:9;39241:18;39233:26;;39305:9;39299:4;39295:20;39291:1;39280:9;39276:17;39269:47;39333:131;39459:4;39333:131;:::i;:::-;39325:139;;39052:419;;;:::o;39477:297::-;39617:34;39613:1;39605:6;39601:14;39594:58;39686:34;39681:2;39673:6;39669:15;39662:59;39755:11;39750:2;39742:6;39738:15;39731:36;39477:297;:::o;39780:366::-;39922:3;39943:67;40007:2;40002:3;39943:67;:::i;:::-;39936:74;;40019:93;40108:3;40019:93;:::i;:::-;40137:2;40132:3;40128:12;40121:19;;39780:366;;;:::o;40152:419::-;40318:4;40356:2;40345:9;40341:18;40333:26;;40405:9;40399:4;40395:20;40391:1;40380:9;40376:17;40369:47;40433:131;40559:4;40433:131;:::i;:::-;40425:139;;40152:419;;;:::o;40577:240::-;40717:34;40713:1;40705:6;40701:14;40694:58;40786:23;40781:2;40773:6;40769:15;40762:48;40577:240;:::o;40823:366::-;40965:3;40986:67;41050:2;41045:3;40986:67;:::i;:::-;40979:74;;41062:93;41151:3;41062:93;:::i;:::-;41180:2;41175:3;41171:12;41164:19;;40823:366;;;:::o;41195:419::-;41361:4;41399:2;41388:9;41384:18;41376:26;;41448:9;41442:4;41438:20;41434:1;41423:9;41419:17;41412:47;41476:131;41602:4;41476:131;:::i;:::-;41468:139;;41195:419;;;:::o;41620:169::-;41760:21;41756:1;41748:6;41744:14;41737:45;41620:169;:::o;41795:366::-;41937:3;41958:67;42022:2;42017:3;41958:67;:::i;:::-;41951:74;;42034:93;42123:3;42034:93;:::i;:::-;42152:2;42147:3;42143:12;42136:19;;41795:366;;;:::o;42167:419::-;42333:4;42371:2;42360:9;42356:18;42348:26;;42420:9;42414:4;42410:20;42406:1;42395:9;42391:17;42384:47;42448:131;42574:4;42448:131;:::i;:::-;42440:139;;42167:419;;;:::o;42592:241::-;42732:34;42728:1;42720:6;42716:14;42709:58;42801:24;42796:2;42788:6;42784:15;42777:49;42592:241;:::o;42839:366::-;42981:3;43002:67;43066:2;43061:3;43002:67;:::i;:::-;42995:74;;43078:93;43167:3;43078:93;:::i;:::-;43196:2;43191:3;43187:12;43180:19;;42839:366;;;:::o;43211:419::-;43377:4;43415:2;43404:9;43400:18;43392:26;;43464:9;43458:4;43454:20;43450:1;43439:9;43435:17;43428:47;43492:131;43618:4;43492:131;:::i;:::-;43484:139;;43211:419;;;:::o;43636:191::-;43676:4;43696:20;43714:1;43696:20;:::i;:::-;43691:25;;43730:20;43748:1;43730:20;:::i;:::-;43725:25;;43769:1;43766;43763:8;43760:34;;;43774:18;;:::i;:::-;43760:34;43819:1;43816;43812:9;43804:17;;43636:191;;;;:::o;43833:332::-;43954:4;43992:2;43981:9;43977:18;43969:26;;44005:71;44073:1;44062:9;44058:17;44049:6;44005:71;:::i;:::-;44086:72;44154:2;44143:9;44139:18;44130:6;44086:72;:::i;:::-;43833:332;;;;;:::o;44171:137::-;44225:5;44256:6;44250:13;44241:22;;44272:30;44296:5;44272:30;:::i;:::-;44171:137;;;;:::o;44314:345::-;44381:6;44430:2;44418:9;44409:7;44405:23;44401:32;44398:119;;;44436:79;;:::i;:::-;44398:119;44556:1;44581:61;44634:7;44625:6;44614:9;44610:22;44581:61;:::i;:::-;44571:71;;44527:125;44314:345;;;;:::o;44665:166::-;44805:18;44801:1;44793:6;44789:14;44782:42;44665:166;:::o;44837:366::-;44979:3;45000:67;45064:2;45059:3;45000:67;:::i;:::-;44993:74;;45076:93;45165:3;45076:93;:::i;:::-;45194:2;45189:3;45185:12;45178:19;;44837:366;;;:::o;45209:419::-;45375:4;45413:2;45402:9;45398:18;45390:26;;45462:9;45456:4;45452:20;45448:1;45437:9;45433:17;45426:47;45490:131;45616:4;45490:131;:::i;:::-;45482:139;;45209:419;;;:::o;45634:143::-;45691:5;45722:6;45716:13;45707:22;;45738:33;45765:5;45738:33;:::i;:::-;45634:143;;;;:::o;45783:351::-;45853:6;45902:2;45890:9;45881:7;45877:23;45873:32;45870:119;;;45908:79;;:::i;:::-;45870:119;46028:1;46053:64;46109:7;46100:6;46089:9;46085:22;46053:64;:::i;:::-;46043:74;;45999:128;45783:351;;;;:::o;46140:85::-;46185:7;46214:5;46203:16;;46140:85;;;:::o;46231:158::-;46289:9;46322:61;46340:42;46349:32;46375:5;46349:32;:::i;:::-;46340:42;:::i;:::-;46322:61;:::i;:::-;46309:74;;46231:158;;;:::o;46395:147::-;46490:45;46529:5;46490:45;:::i;:::-;46485:3;46478:58;46395:147;;:::o;46548:114::-;46615:6;46649:5;46643:12;46633:22;;46548:114;;;:::o;46668:132::-;46735:4;46758:3;46750:11;;46788:4;46783:3;46779:14;46771:22;;46668:132;;;:::o;46806:113::-;46876:4;46908;46903:3;46899:14;46891:22;;46806:113;;;:::o;46955:732::-;47074:3;47103:54;47151:5;47103:54;:::i;:::-;47173:86;47252:6;47247:3;47173:86;:::i;:::-;47166:93;;47283:56;47333:5;47283:56;:::i;:::-;47362:7;47393:1;47378:284;47403:6;47400:1;47397:13;47378:284;;;47479:6;47473:13;47506:63;47565:3;47550:13;47506:63;:::i;:::-;47499:70;;47592:60;47645:6;47592:60;:::i;:::-;47582:70;;47438:224;47425:1;47422;47418:9;47413:14;;47378:284;;;47382:14;47678:3;47671:10;;47079:608;;;46955:732;;;;:::o;47693:831::-;47956:4;47994:3;47983:9;47979:19;47971:27;;48008:71;48076:1;48065:9;48061:17;48052:6;48008:71;:::i;:::-;48089:80;48165:2;48154:9;48150:18;48141:6;48089:80;:::i;:::-;48216:9;48210:4;48206:20;48201:2;48190:9;48186:18;48179:48;48244:108;48347:4;48338:6;48244:108;:::i;:::-;48236:116;;48362:72;48430:2;48419:9;48415:18;48406:6;48362:72;:::i;:::-;48444:73;48512:3;48501:9;48497:19;48488:6;48444:73;:::i;:::-;47693:831;;;;;;;;:::o;48530:225::-;48670:34;48666:1;48658:6;48654:14;48647:58;48739:8;48734:2;48726:6;48722:15;48715:33;48530:225;:::o;48761:366::-;48903:3;48924:67;48988:2;48983:3;48924:67;:::i;:::-;48917:74;;49000:93;49089:3;49000:93;:::i;:::-;49118:2;49113:3;49109:12;49102:19;;48761:366;;;:::o;49133:419::-;49299:4;49337:2;49326:9;49322:18;49314:26;;49386:9;49380:4;49376:20;49372:1;49361:9;49357:17;49350:47;49414:131;49540:4;49414:131;:::i;:::-;49406:139;;49133:419;;;:::o;49558:220::-;49698:34;49694:1;49686:6;49682:14;49675:58;49767:3;49762:2;49754:6;49750:15;49743:28;49558:220;:::o;49784:366::-;49926:3;49947:67;50011:2;50006:3;49947:67;:::i;:::-;49940:74;;50023:93;50112:3;50023:93;:::i;:::-;50141:2;50136:3;50132:12;50125:19;;49784:366;;;:::o;50156:419::-;50322:4;50360:2;50349:9;50345:18;50337:26;;50409:9;50403:4;50399:20;50395:1;50384:9;50380:17;50373:47;50437:131;50563:4;50437:131;:::i;:::-;50429:139;;50156:419;;;:::o

Swarm Source

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