ETH Price: $2,718.76 (+9.37%)
 

Overview

Max Total Supply

1,000,000,000,000 RAIN⛆

Holders

83

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
eye-2.eth
Balance
1,338,183,887.510709034651405695 RAIN⛆

Value
$0.00
0xd5fef45a9cd12e9a57906536960187e15a08e0da
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:
RAIN

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-13
*/

/**
 *Submitted for verification at Etherscan.io on 2022-10-13
*/

/**
 *Submitted for verification at Etherscan.io on 2022-10-13
*/

// Website: https://therainfor.est
// Telegram: https://t.me/yakushimaforest
// Twitter: https://twitter.com/ForestYakushima


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

contract RAIN 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 burnWallet = 0x000000000000000000000000000000000000dEaD;
    address public burnTokenAddress = 0x03CF23eFdB2A6cF6cf6eB8B5A3383966f5c6B6D5;
    address public marketingWallet = 0xfC0714Ac29b3Cd62e2B96935c8F5A4f8bE181b4e;

    uint256 public constant feeDivisor = 1000;

    uint256 public tokenburnBuyFee;
    uint256 public marketingBuyFee;
    uint256 public totalBuyFees;
 
    uint256 public tokenburnSellFee;
    uint256 public marketingSellFee;
    uint256 public totalSellFees;
     
    uint256 public tokensForFees;
    uint256 public tokensForMarketing;
    uint256 public tokensForBurn;
    uint256 public totalEthSpentBurning;

    bool public transferDelayEnabled = 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
    );

    constructor() ERC20("Rainforest", "RAIN\xE2\x9B\x86") {

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

        tokenburnBuyFee = 10; // 1%, being used to buy and burn FOREST
        marketingBuyFee = 40; // 4% being used for marketing
        totalBuyFees = 50; // 5%

        tokenburnSellFee = 10; // 1%, all being used to buy and burn FOREST
        marketingSellFee = 40; // 4% being used for marketing
        totalSellFees = tokenburnSellFee + marketingSellFee;

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(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);

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

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

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        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 updateSellFees(uint256 _tokenburnSellFee, uint256 _marketingSellFee) external onlyOwner {
        tokenburnSellFee = _tokenburnSellFee;
        marketingSellFee = _marketingSellFee;
        totalSellFees = tokenburnSellFee;
        require(totalSellFees <= 150, "Must keep fees at 15% or less");
    }

    function updateBuyFees(uint256 _tokenburnBuyFee, uint256 _marketingBuyFee) external onlyOwner {
        tokenburnBuyFee = _tokenburnBuyFee;
        marketingBuyFee = _marketingBuyFee;
        totalSellFees = tokenburnSellFee;
        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 _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(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;
                tokensForBurn += fees * tokenburnSellFee / totalSellFees;
            }
            
            // on buy
            else if(automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFees).div(feeDivisor);
                tokensForFees += fees;
                tokensForMarketing += fees * marketingBuyFee / totalBuyFees;
                tokensForBurn += fees * tokenburnBuyFee / totalBuyFees;
            }

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

        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 burnTargetToken(uint256 ethAmountInWei, address BurnToken) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = BurnToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            block.timestamp
        );
    }


      function manualBurnToken(uint256 ethAmountInWei, address BurnToken) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = BurnToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            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 = tokensForBurn + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 

        uint256 ethBalance = address(this).balance;

        uint256 ethForBurn = ethBalance.mul(tokensForBurn).div(totalTokensToSwap);

        // buy the FOREST token and burn it
        burnTargetToken(ethForBurn, burnTokenAddress);
        
        totalEthSpentBurning += ethForBurn; // in gwei
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");

        tokensForBurn = 0;
        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");
    }

    function serBurnTokenAddress(address _burnTokenAddress) external onlyOwner {
        require(_burnTokenAddress != address(0), "address cannot be 0");
        burnTokenAddress = _burnTokenAddress;
    }

}

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":"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":"burnTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"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":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"},{"internalType":"address","name":"BurnToken","type":"address"}],"name":"manualBurnToken","outputs":[],"stateMutability":"nonpayable","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":"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":"_burnTokenAddress","type":"address"}],"name":"serBurnTokenAddress","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":[],"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":"tokenburnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenburnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthSpentBurning","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":"_tokenburnBuyFee","type":"uint256"},{"internalType":"uint256","name":"_marketingBuyFee","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":"_tokenburnSellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060085560006009556000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff02191690831515021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507303cf23efdb2a6cf6cf6eb8b5a3383966f5c6b6d5600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fc0714ac29b3cd62e2b96935c8f5a4f8be181b4e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601960006101000a81548160ff0219169083151502179055503480156200017457600080fd5b506040518060400160405280600a81526020017f5261696e666f72657374000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f5241494ee29b86000000000000000000000000000000000000000000000000008152508160039080519060200190620001f992919062000b29565b5080600490805190602001906200021292919062000b29565b505050600062000227620006bc60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c0c9f2c9cd04674edea400000009050612710600182620002ea919062000c12565b620002f6919062000ca2565b6006819055506103e86014826200030e919062000c12565b6200031a919062000ca2565b6007819055506103e860148262000332919062000c12565b6200033e919062000ca2565b601a81905550600a600f8190555060286010819055506032601181905550600a60128190555060286013819055506013546012546200037e919062000cda565b6014819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000411919062000da1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000479573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049f919062000da1565b6040518363ffffffff1660e01b8152600401620004be92919062000de4565b6020604051808303816000875af1158015620004de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000504919062000da1565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505062000581816001620006c460201b60201c565b620005a3620005956200076560201b60201c565b60016200078f60201b60201c565b620005b63060016200078f60201b60201c565b620005cb61dead60016200078f60201b60201c565b620005de8260016200078f60201b60201c565b62000613600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078f60201b60201c565b62000635620006276200076560201b60201c565b6001620008dc60201b60201c565b62000648306001620008dc60201b60201c565b6200065d61dead6001620008dc60201b60201c565b62000692600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008dc60201b60201c565b620006b3620006a66200076560201b60201c565b84620009d960201b60201c565b50505062000fd2565b600033905090565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200079f620006bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008289062000e72565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008d0919062000eb1565b60405180910390a25050565b620008ec620006bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009759062000e72565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a429062000f1e565b60405180910390fd5b806002600082825462000a5f919062000cda565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab6919062000cda565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1d919062000f51565b60405180910390a35050565b82805462000b379062000f9d565b90600052602060002090601f01602090048101928262000b5b576000855562000ba7565b82601f1062000b7657805160ff191683800117855562000ba7565b8280016001018555821562000ba7579182015b8281111562000ba657825182559160200191906001019062000b89565b5b50905062000bb6919062000bba565b5090565b5b8082111562000bd557600081600090555060010162000bbb565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c1f8262000bd9565b915062000c2c8362000bd9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c685762000c6762000be3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000caf8262000bd9565b915062000cbc8362000bd9565b92508262000ccf5762000cce62000c73565b5b828204905092915050565b600062000ce78262000bd9565b915062000cf48362000bd9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d2c5762000d2b62000be3565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d698262000d3c565b9050919050565b62000d7b8162000d5c565b811462000d8757600080fd5b50565b60008151905062000d9b8162000d70565b92915050565b60006020828403121562000dba5762000db962000d37565b5b600062000dca8482850162000d8a565b91505092915050565b62000dde8162000d5c565b82525050565b600060408201905062000dfb600083018562000dd3565b62000e0a602083018462000dd3565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e5a60208362000e11565b915062000e678262000e22565b602082019050919050565b6000602082019050818103600083015262000e8d8162000e4b565b9050919050565b60008115159050919050565b62000eab8162000e94565b82525050565b600060208201905062000ec8600083018462000ea0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f06601f8362000e11565b915062000f138262000ece565b602082019050919050565b6000602082019050818103600083015262000f398162000ef7565b9050919050565b62000f4b8162000bd9565b82525050565b600060208201905062000f68600083018462000f40565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fb657607f821691505b60208210810362000fcc5762000fcb62000f6e565b5b50919050565b60805160a051615e456200103e600039600081816113d80152818161224d01526131f8015260008181610f8f01528181611bea01528181611d16015281816131a001528181613b5f01528181613c4001528181613c670152818161428b01526143b70152615e456000f3fe6080604052600436106103855760003560e01c80637df30749116101d1578063bbc0c74211610102578063dce484a0116100a0578063e88826921161006f578063e888269214610cef578063ee40166e14610d1a578063f2fde38b14610d45578063f8b45b0514610d6e5761038c565b8063dce484a014610c31578063dd62ed3e14610c5c578063e2f4560514610c99578063e7f444b314610cc45761038c565b8063c492f046116100dc578063c492f04614610b87578063c876d0b914610bb0578063c8c8ebe414610bdb578063d0a3981414610c065761038c565b8063bbc0c74214610b0a578063c024666814610b35578063c18bc19514610b5e5761038c565b8063975aa8bf1161016f578063a457c2d711610149578063a457c2d714610a28578063a9059cbb14610a65578063b62496f514610aa2578063b9e9370014610adf5761038c565b8063975aa8bf146109ab5780639a36f932146109d45780639a7a23d6146109ff5761038c565b80638a8c523c116101ab5780638a8c523c146109155780638da5cb5b1461092c578063924de9b71461095757806395d89b41146109805761038c565b80637df30749146108aa5780637fa787ba146108d557806380363a38146108ec5761038c565b8063313ce567116102b657806366ca9b8311610254578063715018a611610223578063715018a614610814578063751039fc1461082b5780637571336a1461085657806375f0a8741461087f5761038c565b806366ca9b831461075857806368078952146107815780636ddd1713146107ac57806370a08231146107d75761038c565b806349bd5a5e1161029057806349bd5a5e146106ae5780634a62bb65146106d95780634fbee1931461070457806351bc3c85146107415761038c565b8063313ce5671461061b57806339509351146106465780633f8a6204146106835761038c565b806317533bca116103235780631f3fed8f116102fd5780631f3fed8f1461055f578063203e727e1461058a57806323b872dd146105b3578063242d632a146105f05761038c565b806317533bca146104e057806318160ddd146105095780631d777856146105345761038c565b8063095ea7b31161035f578063095ea7b3146104105780630f4432e31461044d57806310d5de53146104785780631694505e146104b55761038c565b806302dbd8f81461039157806306228749146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061451c565b610d99565b005b3480156103c657600080fd5b506103cf610e91565b6040516103dc919061459d565b60405180910390f35b3480156103f157600080fd5b506103fa610eb7565b6040516104079190614651565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061469f565b610f49565b60405161044491906146fa565b60405180910390f35b34801561045957600080fd5b50610462610f67565b60405161046f9190614724565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061473f565b610f6d565b6040516104ac91906146fa565b60405180910390f35b3480156104c157600080fd5b506104ca610f8d565b6040516104d791906147cb565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061495a565b610fb1565b005b34801561051557600080fd5b5061051e6110dd565b60405161052b9190614724565b60405180910390f35b34801561054057600080fd5b506105496110e7565b6040516105569190614724565b60405180910390f35b34801561056b57600080fd5b506105746110ed565b6040516105819190614724565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906149b6565b6110f3565b005b3480156105bf57600080fd5b506105da60048036038101906105d591906149e3565b61121d565b6040516105e791906146fa565b60405180910390f35b3480156105fc57600080fd5b50610605611315565b6040516106129190614724565b60405180910390f35b34801561062757600080fd5b5061063061131b565b60405161063d9190614a52565b60405180910390f35b34801561065257600080fd5b5061066d6004803603810190610668919061469f565b611324565b60405161067a91906146fa565b60405180910390f35b34801561068f57600080fd5b506106986113d0565b6040516106a59190614724565b60405180910390f35b3480156106ba57600080fd5b506106c36113d6565b6040516106d0919061459d565b60405180910390f35b3480156106e557600080fd5b506106ee6113fa565b6040516106fb91906146fa565b60405180910390f35b34801561071057600080fd5b5061072b6004803603810190610726919061473f565b61140d565b60405161073891906146fa565b60405180910390f35b34801561074d57600080fd5b50610756611463565b005b34801561076457600080fd5b5061077f600480360381019061077a919061451c565b611513565b005b34801561078d57600080fd5b5061079661160b565b6040516107a39190614724565b60405180910390f35b3480156107b857600080fd5b506107c1611611565b6040516107ce91906146fa565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061473f565b611624565b60405161080b9190614724565b60405180910390f35b34801561082057600080fd5b5061082961166c565b005b34801561083757600080fd5b506108406117c4565b60405161084d91906146fa565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614a6d565b61187f565b005b34801561088b57600080fd5b50610894611971565b6040516108a1919061459d565b60405180910390f35b3480156108b657600080fd5b506108bf611997565b6040516108cc919061459d565b60405180910390f35b3480156108e157600080fd5b506108ea6119bd565b005b3480156108f857600080fd5b50610913600480360381019061090e9190614aad565b611b03565b005b34801561092157600080fd5b5061092a611dce565b005b34801561093857600080fd5b50610941611ef4565b60405161094e919061459d565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614aed565b611f1e565b005b34801561098c57600080fd5b50610995611fd2565b6040516109a29190614651565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd919061473f565b612064565b005b3480156109e057600080fd5b506109e96121ae565b6040516109f69190614724565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614a6d565b6121b4565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a919061469f565b6122e7565b604051610a5c91906146fa565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a87919061469f565b6123d2565b604051610a9991906146fa565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac4919061473f565b6123f0565b604051610ad691906146fa565b60405180910390f35b348015610aeb57600080fd5b50610af4612410565b604051610b019190614724565b60405180910390f35b348015610b1657600080fd5b50610b1f612416565b604051610b2c91906146fa565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614a6d565b612429565b005b348015610b6a57600080fd5b50610b856004803603810190610b8091906149b6565b612569565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190614b75565b612693565b005b348015610bbc57600080fd5b50610bc561280a565b604051610bd291906146fa565b60405180910390f35b348015610be757600080fd5b50610bf061281d565b604051610bfd9190614724565b60405180910390f35b348015610c1257600080fd5b50610c1b612823565b604051610c289190614724565b60405180910390f35b348015610c3d57600080fd5b50610c46612829565b604051610c539190614724565b60405180910390f35b348015610c6857600080fd5b50610c836004803603810190610c7e9190614bd5565b61282f565b604051610c909190614724565b60405180910390f35b348015610ca557600080fd5b50610cae6128b6565b604051610cbb9190614724565b60405180910390f35b348015610cd057600080fd5b50610cd96128bc565b604051610ce69190614724565b60405180910390f35b348015610cfb57600080fd5b50610d046128c2565b604051610d119190614724565b60405180910390f35b348015610d2657600080fd5b50610d2f6128c8565b604051610d3c9190614724565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061473f565b6128ce565b005b348015610d7a57600080fd5b50610d83612a94565b604051610d909190614724565b60405180910390f35b610da1612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614c61565b60405180910390fd5b816012819055508060138190555060125460148190555060966014541115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614ccd565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ec690614d1c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290614d1c565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b5050505050905090565b6000610f5d610f56612a9a565b8484612aa2565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fb9612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614c61565b60405180910390fd5b60005b82518110156110d85781601b600085848151811061106c5761106b614d4d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110d090614dab565b91505061104b565b505050565b6000600254905090565b60175481565b60165481565b6110fb612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614c61565b60405180910390fd5b670de0b6b3a76400006103e860016111a06110dd565b6111aa9190614df3565b6111b49190614e7c565b6111be9190614e7c565b811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614f1f565b60405180910390fd5b670de0b6b3a7640000816112149190614df3565b60078190555050565b600061122a848484612c6b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611275612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614fb1565b60405180910390fd5b61130985611301612a9a565b858403612aa2565b60019150509392505050565b600f5481565b60006012905090565b60006113c6611331612a9a565b84846001600061133f612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c19190614fd1565b612aa2565b6001905092915050565b60155481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61146b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614c61565b60405180910390fd5b600061150530611624565b905061151081613ac0565b50565b61151b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190614c61565b60405180910390fd5b81600f819055508060108190555060125460148190555060966014541115611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614ccd565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611674612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117ce612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490614c61565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611887612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90614c61565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c5612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90614c61565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611a7a90615058565b60006040518083038185875af1925050503d8060008114611ab7576040519150601f19603f3d011682016040523d82523d6000602084013e611abc565b606091505b5050905080611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906150b9565b60405180910390fd5b50565b611b0b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190614c61565b60405180910390fd5b6000600267ffffffffffffffff811115611bb757611bb66147eb565b5b604051908082528060200260200182016040528015611be55781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7791906150ee565b81600081518110611c8b57611c8a614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611cda57611cd9614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d979493929190615214565b6000604051808303818588803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b5050505050505050565b611dd6612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614c61565b60405180910390fd5b600a60009054906101000a900460ff1615611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac906152ac565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f26612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614c61565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611fe190614d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461200d90614d1c565b801561205a5780601f1061202f5761010080835404028352916020019161205a565b820191906000526020600020905b81548152906001019060200180831161203d57829003601f168201915b5050505050905090565b61206c612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190615318565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e881565b6121bc612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290614c61565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d0906153d0565b60405180910390fd5b6122e38282613cfd565b5050565b600080600160006122f6612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90615462565b60405180910390fd5b6123c76123be612a9a565b85858403612aa2565b600191505092915050565b60006123e66123df612a9a565b8484612c6b565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60115481565b600a60009054906101000a900460ff1681565b612431612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614c61565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255d91906146fa565b60405180910390a25050565b612571612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614c61565b60405180910390fd5b670de0b6b3a76400006103e860056126166110dd565b6126209190614df3565b61262a9190614e7c565b6126349190614e7c565b811015612676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d906154f4565b60405180910390fd5b670de0b6b3a76400008161268a9190614df3565b601a8190555050565b61269b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614c61565b60405180910390fd5b60005b838390508110156127c95781601c60008686858181106127505761274f614d4d565b5b9050602002016020810190612765919061473f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127c190614dab565b91505061272d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516127fd9392919061559f565b60405180910390a1505050565b601960009054906101000a900460ff1681565b60075481565b60145481565b60185481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60135481565b60125481565b60095481565b6128d6612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295c90614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb90615643565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b08906156d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615767565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c5e9190614724565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd1906157f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d409061588b565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ded5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e239061591d565b60405180910390fd5b60008103612e4557612e4083836000613d9e565b613abb565b600a60009054906101000a900460ff16612f3a57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efa5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3090615989565b60405180910390fd5b5b600a60019054906101000a900460ff161561362357612f57611ef4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc55750612f95611ef4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ffe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613038575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130515750600560149054906101000a900460ff16155b1561362257600a60009054906101000a900460ff1661314b57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61314a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613141906159f5565b60405180910390fd5b5b601960009054906101000a900460ff161561331357613168611ef4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131ef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561324757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133125743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c490615aad565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b65750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347057670de0b6b3a76400006007546133d19190614fd1565b811115613413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340a90615b3f565b60405180910390fd5b601a5461341f83611624565b8261342a9190614fd1565b111561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346290615bab565b60405180910390fd5b613621565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135135750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561357557670de0b6b3a764000060075461352e9190614fd1565b811115613570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356790615c3d565b60405180910390fd5b613620565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661361f57601a546135d283611624565b826135dd9190614fd1565b111561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361590615bab565b60405180910390fd5b5b5b5b5b5b600061362e30611624565b9050600060065482101590508080156136535750600a60029054906101000a900460ff165b801561366c5750600560149054906101000a900460ff16155b80156136c25750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137185750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561376e5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137b2576001600560146101000a81548160ff021916908315150217905550613796614007565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387257600090505b60008115613aab57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d557506000601454115b15613989576139036103e86138f56014548861417790919063ffffffff16565b6141f190919063ffffffff16565b905080601560008282546139179190614fd1565b925050819055506014546013548261392f9190614df3565b6139399190614e7c565b6016600082825461394a9190614fd1565b92505081905550601454601254826139629190614df3565b61396c9190614e7c565b6017600082825461397d9190614fd1565b92505081905550613a87565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8657613a046103e86139f66011548861417790919063ffffffff16565b6141f190919063ffffffff16565b90508060156000828254613a189190614fd1565b9250508190555060115460105482613a309190614df3565b613a3a9190614e7c565b60166000828254613a4b9190614fd1565b92505081905550601154600f5482613a639190614df3565b613a6d9190614e7c565b60176000828254613a7e9190614fd1565b925050819055505b5b6000811115613a9c57613a9b873083613d9e565b5b8085613aa89190615c5d565b94505b613ab6878787613d9e565b505050505b505050565b6000600267ffffffffffffffff811115613add57613adc6147eb565b5b604051908082528060200260200182016040528015613b0b5781602001602082028036833780820191505090505b5090503081600081518110613b2357613b22614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bec91906150ee565b81600181518110613c0057613bff614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c65307f000000000000000000000000000000000000000000000000000000000000000084612aa2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cc7959493929190615c91565b600060405180830381600087803b158015613ce157600080fd5b505af1158015613cf5573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e04906157f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e739061588b565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef990615d5d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f959190614fd1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ff99190614724565b60405180910390a350505050565b600061401230611624565b905060006016546017546140269190614fd1565b90506000808314806140385750600082145b1561404557505050614175565b600083905061405381613ac0565b60004790506000614081856140736017548561417790919063ffffffff16565b6141f190919063ffffffff16565b90506140af81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661423b565b80601860008282546140c19190614fd1565b92505081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161410e90615058565b60006040518083038185875af1925050503d806000811461414b576040519150601f19603f3d011682016040523d82523d6000602084013e614150565b606091505b5050809450506000601781905550600060168190555060006015819055505050505050505b565b600080830361418957600090506141eb565b600082846141979190614df3565b90508284826141a69190614e7c565b146141e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141dd90615def565b60405180910390fd5b809150505b92915050565b600061423383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061446f565b905092915050565b6000600267ffffffffffffffff811115614258576142576147eb565b5b6040519080825280602002602001820160405280156142865781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431891906150ee565b8160008151811061432c5761432b614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061437b5761437a614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016144389493929190615214565b6000604051808303818588803b15801561445157600080fd5b505af1158015614465573d6000803e3d6000fd5b5050505050505050565b600080831182906144b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ad9190614651565b60405180910390fd5b50600083856144c59190614e7c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6144f9816144e6565b811461450457600080fd5b50565b600081359050614516816144f0565b92915050565b60008060408385031215614533576145326144dc565b5b600061454185828601614507565b925050602061455285828601614507565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145878261455c565b9050919050565b6145978161457c565b82525050565b60006020820190506145b2600083018461458e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f25780820151818401526020810190506145d7565b83811115614601576000848401525b50505050565b6000601f19601f8301169050919050565b6000614623826145b8565b61462d81856145c3565b935061463d8185602086016145d4565b61464681614607565b840191505092915050565b6000602082019050818103600083015261466b8184614618565b905092915050565b61467c8161457c565b811461468757600080fd5b50565b60008135905061469981614673565b92915050565b600080604083850312156146b6576146b56144dc565b5b60006146c48582860161468a565b92505060206146d585828601614507565b9150509250929050565b60008115159050919050565b6146f4816146df565b82525050565b600060208201905061470f60008301846146eb565b92915050565b61471e816144e6565b82525050565b60006020820190506147396000830184614715565b92915050565b600060208284031215614755576147546144dc565b5b60006147638482850161468a565b91505092915050565b6000819050919050565b600061479161478c6147878461455c565b61476c565b61455c565b9050919050565b60006147a382614776565b9050919050565b60006147b582614798565b9050919050565b6147c5816147aa565b82525050565b60006020820190506147e060008301846147bc565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61482382614607565b810181811067ffffffffffffffff82111715614842576148416147eb565b5b80604052505050565b60006148556144d2565b9050614861828261481a565b919050565b600067ffffffffffffffff821115614881576148806147eb565b5b602082029050602081019050919050565b600080fd5b60006148aa6148a584614866565b61484b565b905080838252602082019050602084028301858111156148cd576148cc614892565b5b835b818110156148f657806148e2888261468a565b8452602084019350506020810190506148cf565b5050509392505050565b600082601f830112614915576149146147e6565b5b8135614925848260208601614897565b91505092915050565b614937816146df565b811461494257600080fd5b50565b6000813590506149548161492e565b92915050565b60008060408385031215614971576149706144dc565b5b600083013567ffffffffffffffff81111561498f5761498e6144e1565b5b61499b85828601614900565b92505060206149ac85828601614945565b9150509250929050565b6000602082840312156149cc576149cb6144dc565b5b60006149da84828501614507565b91505092915050565b6000806000606084860312156149fc576149fb6144dc565b5b6000614a0a8682870161468a565b9350506020614a1b8682870161468a565b9250506040614a2c86828701614507565b9150509250925092565b600060ff82169050919050565b614a4c81614a36565b82525050565b6000602082019050614a676000830184614a43565b92915050565b60008060408385031215614a8457614a836144dc565b5b6000614a928582860161468a565b9250506020614aa385828601614945565b9150509250929050565b60008060408385031215614ac457614ac36144dc565b5b6000614ad285828601614507565b9250506020614ae38582860161468a565b9150509250929050565b600060208284031215614b0357614b026144dc565b5b6000614b1184828501614945565b91505092915050565b600080fd5b60008083601f840112614b3557614b346147e6565b5b8235905067ffffffffffffffff811115614b5257614b51614b1a565b5b602083019150836020820283011115614b6e57614b6d614892565b5b9250929050565b600080600060408486031215614b8e57614b8d6144dc565b5b600084013567ffffffffffffffff811115614bac57614bab6144e1565b5b614bb886828701614b1f565b93509350506020614bcb86828701614945565b9150509250925092565b60008060408385031215614bec57614beb6144dc565b5b6000614bfa8582860161468a565b9250506020614c0b8582860161468a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c4b6020836145c3565b9150614c5682614c15565b602082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614cb7601d836145c3565b9150614cc282614c81565b602082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3457607f821691505b602082108103614d4757614d46614ced565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db6826144e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614de857614de7614d7c565b5b600182019050919050565b6000614dfe826144e6565b9150614e09836144e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e4257614e41614d7c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e87826144e6565b9150614e92836144e6565b925082614ea257614ea1614e4d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f09602f836145c3565b9150614f1482614ead565b604082019050919050565b60006020820190508181036000830152614f3881614efc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9b6028836145c3565b9150614fa682614f3f565b604082019050919050565b60006020820190508181036000830152614fca81614f8e565b9050919050565b6000614fdc826144e6565b9150614fe7836144e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501c5761501b614d7c565b5b828201905092915050565b600081905092915050565b50565b6000615042600083615027565b915061504d82615032565b600082019050919050565b600061506382615035565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150a36012836145c3565b91506150ae8261506d565b602082019050919050565b600060208201905081810360008301526150d281615096565b9050919050565b6000815190506150e881614673565b92915050565b600060208284031215615104576151036144dc565b5b6000615112848285016150d9565b91505092915050565b6000819050919050565b600061514061513b6151368461511b565b61476c565b6144e6565b9050919050565b61515081615125565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61518b8161457c565b82525050565b600061519d8383615182565b60208301905092915050565b6000602082019050919050565b60006151c182615156565b6151cb8185615161565b93506151d683615172565b8060005b838110156152075781516151ee8882615191565b97506151f9836151a9565b9250506001810190506151da565b5085935050505092915050565b60006080820190506152296000830187615147565b818103602083015261523b81866151b6565b905061524a604083018561458e565b6152576060830184614715565b95945050505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006152966018836145c3565b91506152a182615260565b602082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b60006153026013836145c3565b915061530d826152cc565b602082019050919050565b60006020820190508181036000830152615331816152f5565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006153ba6041836145c3565b91506153c582615338565b606082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061544c6025836145c3565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006154de6024836145c3565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b6000819050919050565b600061552d602084018461468a565b905092915050565b6000602082019050919050565b600061554e8385615161565b935061555982615514565b8060005b858110156155925761556f828461551e565b6155798882615191565b975061558483615535565b92505060018101905061555d565b5085925050509392505050565b600060408201905081810360008301526155ba818587615542565b90506155c960208301846146eb565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061562d6026836145c3565b9150615638826155d1565b604082019050919050565b6000602082019050818103600083015261565c81615620565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156bf6024836145c3565b91506156ca82615663565b604082019050919050565b600060208201905081810360008301526156ee816156b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157516022836145c3565b915061575c826156f5565b604082019050919050565b6000602082019050818103600083015261578081615744565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157e36025836145c3565b91506157ee82615787565b604082019050919050565b60006020820190508181036000830152615812816157d6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158756023836145c3565b915061588082615819565b604082019050919050565b600060208201905081810360008301526158a481615868565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006159076031836145c3565b9150615912826158ab565b604082019050919050565b60006020820190508181036000830152615936816158fa565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000615973601a836145c3565b915061597e8261593d565b602082019050919050565b600060208201905081810360008301526159a281615966565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159df6016836145c3565b91506159ea826159a9565b602082019050919050565b60006020820190508181036000830152615a0e816159d2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a976049836145c3565b9150615aa282615a15565b606082019050919050565b60006020820190508181036000830152615ac681615a8a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b296035836145c3565b9150615b3482615acd565b604082019050919050565b60006020820190508181036000830152615b5881615b1c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b956013836145c3565b9150615ba082615b5f565b602082019050919050565b60006020820190508181036000830152615bc481615b88565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c276036836145c3565b9150615c3282615bcb565b604082019050919050565b60006020820190508181036000830152615c5681615c1a565b9050919050565b6000615c68826144e6565b9150615c73836144e6565b925082821015615c8657615c85614d7c565b5b828203905092915050565b600060a082019050615ca66000830188614715565b615cb36020830187615147565b8181036040830152615cc581866151b6565b9050615cd4606083018561458e565b615ce16080830184614715565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615d476026836145c3565b9150615d5282615ceb565b604082019050919050565b60006020820190508181036000830152615d7681615d3a565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615dd96021836145c3565b9150615de482615d7d565b604082019050919050565b60006020820190508181036000830152615e0881615dcc565b905091905056fea264697066735822122010a221af7703ebd4d0d05767da89dfa803dd51538e84343971ced2683c82dfb564736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80637df30749116101d1578063bbc0c74211610102578063dce484a0116100a0578063e88826921161006f578063e888269214610cef578063ee40166e14610d1a578063f2fde38b14610d45578063f8b45b0514610d6e5761038c565b8063dce484a014610c31578063dd62ed3e14610c5c578063e2f4560514610c99578063e7f444b314610cc45761038c565b8063c492f046116100dc578063c492f04614610b87578063c876d0b914610bb0578063c8c8ebe414610bdb578063d0a3981414610c065761038c565b8063bbc0c74214610b0a578063c024666814610b35578063c18bc19514610b5e5761038c565b8063975aa8bf1161016f578063a457c2d711610149578063a457c2d714610a28578063a9059cbb14610a65578063b62496f514610aa2578063b9e9370014610adf5761038c565b8063975aa8bf146109ab5780639a36f932146109d45780639a7a23d6146109ff5761038c565b80638a8c523c116101ab5780638a8c523c146109155780638da5cb5b1461092c578063924de9b71461095757806395d89b41146109805761038c565b80637df30749146108aa5780637fa787ba146108d557806380363a38146108ec5761038c565b8063313ce567116102b657806366ca9b8311610254578063715018a611610223578063715018a614610814578063751039fc1461082b5780637571336a1461085657806375f0a8741461087f5761038c565b806366ca9b831461075857806368078952146107815780636ddd1713146107ac57806370a08231146107d75761038c565b806349bd5a5e1161029057806349bd5a5e146106ae5780634a62bb65146106d95780634fbee1931461070457806351bc3c85146107415761038c565b8063313ce5671461061b57806339509351146106465780633f8a6204146106835761038c565b806317533bca116103235780631f3fed8f116102fd5780631f3fed8f1461055f578063203e727e1461058a57806323b872dd146105b3578063242d632a146105f05761038c565b806317533bca146104e057806318160ddd146105095780631d777856146105345761038c565b8063095ea7b31161035f578063095ea7b3146104105780630f4432e31461044d57806310d5de53146104785780631694505e146104b55761038c565b806302dbd8f81461039157806306228749146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061451c565b610d99565b005b3480156103c657600080fd5b506103cf610e91565b6040516103dc919061459d565b60405180910390f35b3480156103f157600080fd5b506103fa610eb7565b6040516104079190614651565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061469f565b610f49565b60405161044491906146fa565b60405180910390f35b34801561045957600080fd5b50610462610f67565b60405161046f9190614724565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a919061473f565b610f6d565b6040516104ac91906146fa565b60405180910390f35b3480156104c157600080fd5b506104ca610f8d565b6040516104d791906147cb565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061495a565b610fb1565b005b34801561051557600080fd5b5061051e6110dd565b60405161052b9190614724565b60405180910390f35b34801561054057600080fd5b506105496110e7565b6040516105569190614724565b60405180910390f35b34801561056b57600080fd5b506105746110ed565b6040516105819190614724565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906149b6565b6110f3565b005b3480156105bf57600080fd5b506105da60048036038101906105d591906149e3565b61121d565b6040516105e791906146fa565b60405180910390f35b3480156105fc57600080fd5b50610605611315565b6040516106129190614724565b60405180910390f35b34801561062757600080fd5b5061063061131b565b60405161063d9190614a52565b60405180910390f35b34801561065257600080fd5b5061066d6004803603810190610668919061469f565b611324565b60405161067a91906146fa565b60405180910390f35b34801561068f57600080fd5b506106986113d0565b6040516106a59190614724565b60405180910390f35b3480156106ba57600080fd5b506106c36113d6565b6040516106d0919061459d565b60405180910390f35b3480156106e557600080fd5b506106ee6113fa565b6040516106fb91906146fa565b60405180910390f35b34801561071057600080fd5b5061072b6004803603810190610726919061473f565b61140d565b60405161073891906146fa565b60405180910390f35b34801561074d57600080fd5b50610756611463565b005b34801561076457600080fd5b5061077f600480360381019061077a919061451c565b611513565b005b34801561078d57600080fd5b5061079661160b565b6040516107a39190614724565b60405180910390f35b3480156107b857600080fd5b506107c1611611565b6040516107ce91906146fa565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f9919061473f565b611624565b60405161080b9190614724565b60405180910390f35b34801561082057600080fd5b5061082961166c565b005b34801561083757600080fd5b506108406117c4565b60405161084d91906146fa565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614a6d565b61187f565b005b34801561088b57600080fd5b50610894611971565b6040516108a1919061459d565b60405180910390f35b3480156108b657600080fd5b506108bf611997565b6040516108cc919061459d565b60405180910390f35b3480156108e157600080fd5b506108ea6119bd565b005b3480156108f857600080fd5b50610913600480360381019061090e9190614aad565b611b03565b005b34801561092157600080fd5b5061092a611dce565b005b34801561093857600080fd5b50610941611ef4565b60405161094e919061459d565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614aed565b611f1e565b005b34801561098c57600080fd5b50610995611fd2565b6040516109a29190614651565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd919061473f565b612064565b005b3480156109e057600080fd5b506109e96121ae565b6040516109f69190614724565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614a6d565b6121b4565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a919061469f565b6122e7565b604051610a5c91906146fa565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a87919061469f565b6123d2565b604051610a9991906146fa565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac4919061473f565b6123f0565b604051610ad691906146fa565b60405180910390f35b348015610aeb57600080fd5b50610af4612410565b604051610b019190614724565b60405180910390f35b348015610b1657600080fd5b50610b1f612416565b604051610b2c91906146fa565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614a6d565b612429565b005b348015610b6a57600080fd5b50610b856004803603810190610b8091906149b6565b612569565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190614b75565b612693565b005b348015610bbc57600080fd5b50610bc561280a565b604051610bd291906146fa565b60405180910390f35b348015610be757600080fd5b50610bf061281d565b604051610bfd9190614724565b60405180910390f35b348015610c1257600080fd5b50610c1b612823565b604051610c289190614724565b60405180910390f35b348015610c3d57600080fd5b50610c46612829565b604051610c539190614724565b60405180910390f35b348015610c6857600080fd5b50610c836004803603810190610c7e9190614bd5565b61282f565b604051610c909190614724565b60405180910390f35b348015610ca557600080fd5b50610cae6128b6565b604051610cbb9190614724565b60405180910390f35b348015610cd057600080fd5b50610cd96128bc565b604051610ce69190614724565b60405180910390f35b348015610cfb57600080fd5b50610d046128c2565b604051610d119190614724565b60405180910390f35b348015610d2657600080fd5b50610d2f6128c8565b604051610d3c9190614724565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061473f565b6128ce565b005b348015610d7a57600080fd5b50610d83612a94565b604051610d909190614724565b60405180910390f35b610da1612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614c61565b60405180910390fd5b816012819055508060138190555060125460148190555060966014541115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614ccd565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ec690614d1c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290614d1c565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b5050505050905090565b6000610f5d610f56612a9a565b8484612aa2565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610fb9612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614c61565b60405180910390fd5b60005b82518110156110d85781601b600085848151811061106c5761106b614d4d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110d090614dab565b91505061104b565b505050565b6000600254905090565b60175481565b60165481565b6110fb612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614c61565b60405180910390fd5b670de0b6b3a76400006103e860016111a06110dd565b6111aa9190614df3565b6111b49190614e7c565b6111be9190614e7c565b811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614f1f565b60405180910390fd5b670de0b6b3a7640000816112149190614df3565b60078190555050565b600061122a848484612c6b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611275612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614fb1565b60405180910390fd5b61130985611301612a9a565b858403612aa2565b60019150509392505050565b600f5481565b60006012905090565b60006113c6611331612a9a565b84846001600061133f612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c19190614fd1565b612aa2565b6001905092915050565b60155481565b7f0000000000000000000000004984ae29f2b7b5e110c1e1dcba25848d864fdc4c81565b600a60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61146b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614c61565b60405180910390fd5b600061150530611624565b905061151081613ac0565b50565b61151b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190614c61565b60405180910390fd5b81600f819055508060108190555060125460148190555060966014541115611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90614ccd565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611674612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117ce612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490614c61565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611887612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d90614c61565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c5612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b90614c61565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611a7a90615058565b60006040518083038185875af1925050503d8060008114611ab7576040519150601f19603f3d011682016040523d82523d6000602084013e611abc565b606091505b5050905080611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af7906150b9565b60405180910390fd5b50565b611b0b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190614c61565b60405180910390fd5b6000600267ffffffffffffffff811115611bb757611bb66147eb565b5b604051908082528060200260200182016040528015611be55781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7791906150ee565b81600081518110611c8b57611c8a614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611cda57611cd9614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d979493929190615214565b6000604051808303818588803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b5050505050505050565b611dd6612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614c61565b60405180910390fd5b600a60009054906101000a900460ff1615611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac906152ac565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f26612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614c61565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611fe190614d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461200d90614d1c565b801561205a5780601f1061202f5761010080835404028352916020019161205a565b820191906000526020600020905b81548152906001019060200180831161203d57829003601f168201915b5050505050905090565b61206c612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f290614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216190615318565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e881565b6121bc612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290614c61565b60405180910390fd5b7f0000000000000000000000004984ae29f2b7b5e110c1e1dcba25848d864fdc4c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d0906153d0565b60405180910390fd5b6122e38282613cfd565b5050565b600080600160006122f6612a9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90615462565b60405180910390fd5b6123c76123be612a9a565b85858403612aa2565b600191505092915050565b60006123e66123df612a9a565b8484612c6b565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60115481565b600a60009054906101000a900460ff1681565b612431612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614c61565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255d91906146fa565b60405180910390a25050565b612571612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614c61565b60405180910390fd5b670de0b6b3a76400006103e860056126166110dd565b6126209190614df3565b61262a9190614e7c565b6126349190614e7c565b811015612676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266d906154f4565b60405180910390fd5b670de0b6b3a76400008161268a9190614df3565b601a8190555050565b61269b612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614c61565b60405180910390fd5b60005b838390508110156127c95781601c60008686858181106127505761274f614d4d565b5b9050602002016020810190612765919061473f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127c190614dab565b91505061272d565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516127fd9392919061559f565b60405180910390a1505050565b601960009054906101000a900460ff1681565b60075481565b60145481565b60185481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60135481565b60125481565b60095481565b6128d6612a9a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295c90614c61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cb90615643565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b08906156d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615767565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c5e9190614724565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd1906157f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d409061588b565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ded5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e239061591d565b60405180910390fd5b60008103612e4557612e4083836000613d9e565b613abb565b600a60009054906101000a900460ff16612f3a57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efa5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3090615989565b60405180910390fd5b5b600a60019054906101000a900460ff161561362357612f57611ef4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc55750612f95611ef4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ffe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613038575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130515750600560149054906101000a900460ff16155b1561362257600a60009054906101000a900460ff1661314b57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61314a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613141906159f5565b60405180910390fd5b5b601960009054906101000a900460ff161561331357613168611ef4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131ef57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561324757507f0000000000000000000000004984ae29f2b7b5e110c1e1dcba25848d864fdc4c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133125743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c490615aad565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b65750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347057670de0b6b3a76400006007546133d19190614fd1565b811115613413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340a90615b3f565b60405180910390fd5b601a5461341f83611624565b8261342a9190614fd1565b111561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346290615bab565b60405180910390fd5b613621565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135135750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561357557670de0b6b3a764000060075461352e9190614fd1565b811115613570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356790615c3d565b60405180910390fd5b613620565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661361f57601a546135d283611624565b826135dd9190614fd1565b111561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361590615bab565b60405180910390fd5b5b5b5b5b5b600061362e30611624565b9050600060065482101590508080156136535750600a60029054906101000a900460ff165b801561366c5750600560149054906101000a900460ff16155b80156136c25750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137185750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561376e5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137b2576001600560146101000a81548160ff021916908315150217905550613796614007565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138685750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387257600090505b60008115613aab57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d557506000601454115b15613989576139036103e86138f56014548861417790919063ffffffff16565b6141f190919063ffffffff16565b905080601560008282546139179190614fd1565b925050819055506014546013548261392f9190614df3565b6139399190614e7c565b6016600082825461394a9190614fd1565b92505081905550601454601254826139629190614df3565b61396c9190614e7c565b6017600082825461397d9190614fd1565b92505081905550613a87565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8657613a046103e86139f66011548861417790919063ffffffff16565b6141f190919063ffffffff16565b90508060156000828254613a189190614fd1565b9250508190555060115460105482613a309190614df3565b613a3a9190614e7c565b60166000828254613a4b9190614fd1565b92505081905550601154600f5482613a639190614df3565b613a6d9190614e7c565b60176000828254613a7e9190614fd1565b925050819055505b5b6000811115613a9c57613a9b873083613d9e565b5b8085613aa89190615c5d565b94505b613ab6878787613d9e565b505050505b505050565b6000600267ffffffffffffffff811115613add57613adc6147eb565b5b604051908082528060200260200182016040528015613b0b5781602001602082028036833780820191505090505b5090503081600081518110613b2357613b22614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bec91906150ee565b81600181518110613c0057613bff614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c65307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612aa2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cc7959493929190615c91565b600060405180830381600087803b158015613ce157600080fd5b505af1158015613cf5573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e04906157f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e739061588b565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef990615d5d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f959190614fd1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ff99190614724565b60405180910390a350505050565b600061401230611624565b905060006016546017546140269190614fd1565b90506000808314806140385750600082145b1561404557505050614175565b600083905061405381613ac0565b60004790506000614081856140736017548561417790919063ffffffff16565b6141f190919063ffffffff16565b90506140af81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661423b565b80601860008282546140c19190614fd1565b92505081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161410e90615058565b60006040518083038185875af1925050503d806000811461414b576040519150601f19603f3d011682016040523d82523d6000602084013e614150565b606091505b5050809450506000601781905550600060168190555060006015819055505050505050505b565b600080830361418957600090506141eb565b600082846141979190614df3565b90508284826141a69190614e7c565b146141e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141dd90615def565b60405180910390fd5b809150505b92915050565b600061423383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061446f565b905092915050565b6000600267ffffffffffffffff811115614258576142576147eb565b5b6040519080825280602002602001820160405280156142865781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431891906150ee565b8160008151811061432c5761432b614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061437b5761437a614d4d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016144389493929190615214565b6000604051808303818588803b15801561445157600080fd5b505af1158015614465573d6000803e3d6000fd5b5050505050505050565b600080831182906144b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ad9190614651565b60405180910390fd5b50600083856144c59190614e7c565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6144f9816144e6565b811461450457600080fd5b50565b600081359050614516816144f0565b92915050565b60008060408385031215614533576145326144dc565b5b600061454185828601614507565b925050602061455285828601614507565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145878261455c565b9050919050565b6145978161457c565b82525050565b60006020820190506145b2600083018461458e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f25780820151818401526020810190506145d7565b83811115614601576000848401525b50505050565b6000601f19601f8301169050919050565b6000614623826145b8565b61462d81856145c3565b935061463d8185602086016145d4565b61464681614607565b840191505092915050565b6000602082019050818103600083015261466b8184614618565b905092915050565b61467c8161457c565b811461468757600080fd5b50565b60008135905061469981614673565b92915050565b600080604083850312156146b6576146b56144dc565b5b60006146c48582860161468a565b92505060206146d585828601614507565b9150509250929050565b60008115159050919050565b6146f4816146df565b82525050565b600060208201905061470f60008301846146eb565b92915050565b61471e816144e6565b82525050565b60006020820190506147396000830184614715565b92915050565b600060208284031215614755576147546144dc565b5b60006147638482850161468a565b91505092915050565b6000819050919050565b600061479161478c6147878461455c565b61476c565b61455c565b9050919050565b60006147a382614776565b9050919050565b60006147b582614798565b9050919050565b6147c5816147aa565b82525050565b60006020820190506147e060008301846147bc565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61482382614607565b810181811067ffffffffffffffff82111715614842576148416147eb565b5b80604052505050565b60006148556144d2565b9050614861828261481a565b919050565b600067ffffffffffffffff821115614881576148806147eb565b5b602082029050602081019050919050565b600080fd5b60006148aa6148a584614866565b61484b565b905080838252602082019050602084028301858111156148cd576148cc614892565b5b835b818110156148f657806148e2888261468a565b8452602084019350506020810190506148cf565b5050509392505050565b600082601f830112614915576149146147e6565b5b8135614925848260208601614897565b91505092915050565b614937816146df565b811461494257600080fd5b50565b6000813590506149548161492e565b92915050565b60008060408385031215614971576149706144dc565b5b600083013567ffffffffffffffff81111561498f5761498e6144e1565b5b61499b85828601614900565b92505060206149ac85828601614945565b9150509250929050565b6000602082840312156149cc576149cb6144dc565b5b60006149da84828501614507565b91505092915050565b6000806000606084860312156149fc576149fb6144dc565b5b6000614a0a8682870161468a565b9350506020614a1b8682870161468a565b9250506040614a2c86828701614507565b9150509250925092565b600060ff82169050919050565b614a4c81614a36565b82525050565b6000602082019050614a676000830184614a43565b92915050565b60008060408385031215614a8457614a836144dc565b5b6000614a928582860161468a565b9250506020614aa385828601614945565b9150509250929050565b60008060408385031215614ac457614ac36144dc565b5b6000614ad285828601614507565b9250506020614ae38582860161468a565b9150509250929050565b600060208284031215614b0357614b026144dc565b5b6000614b1184828501614945565b91505092915050565b600080fd5b60008083601f840112614b3557614b346147e6565b5b8235905067ffffffffffffffff811115614b5257614b51614b1a565b5b602083019150836020820283011115614b6e57614b6d614892565b5b9250929050565b600080600060408486031215614b8e57614b8d6144dc565b5b600084013567ffffffffffffffff811115614bac57614bab6144e1565b5b614bb886828701614b1f565b93509350506020614bcb86828701614945565b9150509250925092565b60008060408385031215614bec57614beb6144dc565b5b6000614bfa8582860161468a565b9250506020614c0b8582860161468a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c4b6020836145c3565b9150614c5682614c15565b602082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614cb7601d836145c3565b9150614cc282614c81565b602082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3457607f821691505b602082108103614d4757614d46614ced565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db6826144e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614de857614de7614d7c565b5b600182019050919050565b6000614dfe826144e6565b9150614e09836144e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e4257614e41614d7c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e87826144e6565b9150614e92836144e6565b925082614ea257614ea1614e4d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f09602f836145c3565b9150614f1482614ead565b604082019050919050565b60006020820190508181036000830152614f3881614efc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9b6028836145c3565b9150614fa682614f3f565b604082019050919050565b60006020820190508181036000830152614fca81614f8e565b9050919050565b6000614fdc826144e6565b9150614fe7836144e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501c5761501b614d7c565b5b828201905092915050565b600081905092915050565b50565b6000615042600083615027565b915061504d82615032565b600082019050919050565b600061506382615035565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006150a36012836145c3565b91506150ae8261506d565b602082019050919050565b600060208201905081810360008301526150d281615096565b9050919050565b6000815190506150e881614673565b92915050565b600060208284031215615104576151036144dc565b5b6000615112848285016150d9565b91505092915050565b6000819050919050565b600061514061513b6151368461511b565b61476c565b6144e6565b9050919050565b61515081615125565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61518b8161457c565b82525050565b600061519d8383615182565b60208301905092915050565b6000602082019050919050565b60006151c182615156565b6151cb8185615161565b93506151d683615172565b8060005b838110156152075781516151ee8882615191565b97506151f9836151a9565b9250506001810190506151da565b5085935050505092915050565b60006080820190506152296000830187615147565b818103602083015261523b81866151b6565b905061524a604083018561458e565b6152576060830184614715565b95945050505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006152966018836145c3565b91506152a182615260565b602082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b60006153026013836145c3565b915061530d826152cc565b602082019050919050565b60006020820190508181036000830152615331816152f5565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006153ba6041836145c3565b91506153c582615338565b606082019050919050565b600060208201905081810360008301526153e9816153ad565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061544c6025836145c3565b9150615457826153f0565b604082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006154de6024836145c3565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b6000819050919050565b600061552d602084018461468a565b905092915050565b6000602082019050919050565b600061554e8385615161565b935061555982615514565b8060005b858110156155925761556f828461551e565b6155798882615191565b975061558483615535565b92505060018101905061555d565b5085925050509392505050565b600060408201905081810360008301526155ba818587615542565b90506155c960208301846146eb565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061562d6026836145c3565b9150615638826155d1565b604082019050919050565b6000602082019050818103600083015261565c81615620565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156bf6024836145c3565b91506156ca82615663565b604082019050919050565b600060208201905081810360008301526156ee816156b2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157516022836145c3565b915061575c826156f5565b604082019050919050565b6000602082019050818103600083015261578081615744565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157e36025836145c3565b91506157ee82615787565b604082019050919050565b60006020820190508181036000830152615812816157d6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158756023836145c3565b915061588082615819565b604082019050919050565b600060208201905081810360008301526158a481615868565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006159076031836145c3565b9150615912826158ab565b604082019050919050565b60006020820190508181036000830152615936816158fa565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000615973601a836145c3565b915061597e8261593d565b602082019050919050565b600060208201905081810360008301526159a281615966565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159df6016836145c3565b91506159ea826159a9565b602082019050919050565b60006020820190508181036000830152615a0e816159d2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a976049836145c3565b9150615aa282615a15565b606082019050919050565b60006020820190508181036000830152615ac681615a8a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b296035836145c3565b9150615b3482615acd565b604082019050919050565b60006020820190508181036000830152615b5881615b1c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b956013836145c3565b9150615ba082615b5f565b602082019050919050565b60006020820190508181036000830152615bc481615b88565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c276036836145c3565b9150615c3282615bcb565b604082019050919050565b60006020820190508181036000830152615c5681615c1a565b9050919050565b6000615c68826144e6565b9150615c73836144e6565b925082821015615c8657615c85614d7c565b5b828203905092915050565b600060a082019050615ca66000830188614715565b615cb36020830187615147565b8181036040830152615cc581866151b6565b9050615cd4606083018561458e565b615ce16080830184614715565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615d476026836145c3565b9150615d5282615ceb565b604082019050919050565b60006020820190508181036000830152615d7681615d3a565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615dd96021836145c3565b9150615de482615d7d565b604082019050919050565b60006020820190508181036000830152615e0881615dcc565b905091905056fea264697066735822122010a221af7703ebd4d0d05767da89dfa803dd51538e84343971ced2683c82dfb564736f6c634300080d0033

Deployed Bytecode Sourcemap

21221:15170:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26261:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21943:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4440:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5354:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21522:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22812:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21295:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35775:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4761:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22541:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22501:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25441:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22237:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4660:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6031:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22466:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21353:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27862:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34538:155;;;;;;;;;;;;;:::i;:::-;;26584:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22274:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21770:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4877:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13842:148;;;;;;;;;;;;;:::i;:::-;;34745:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25908:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22103:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22020:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35983:191;;;;;;;;;;;;;:::i;:::-;;33991:539;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25211:218;;;;;;;;;;;;;:::i;:::-;;13200:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26148:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4548:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36182:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22187:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27406:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6254:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5012:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22885:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22311:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21690:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26900:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25684:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27092:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22620:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21474:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22424:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22576:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5195:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21434:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22386:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22348;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21607:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14145:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22666:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26261:315;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26388:17:::1;26369:16;:36;;;;26435:17;26416:16;:36;;;;26479:16;;26463:13;:32;;;;26531:3;26514:13;;:20;;26506:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26261:315:::0;;:::o;21943:70::-;;;;;;;;;;;;;:::o;4440:100::-;4494:13;4527:5;4520:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4440:100;:::o;5354:169::-;5437:4;5454:39;5463:12;:10;:12::i;:::-;5477:7;5486:6;5454:8;:39::i;:::-;5511:4;5504:11;;5354:169;;;;:::o;21522:39::-;;;;:::o;22812:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;21295:51::-;;;:::o;35775:200::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35874:9:::1;35869:99;35893:5;:12;35889:1;:16;35869:99;;;35950:6;35927:10;:20;35938:5;35944:1;35938:8;;;;;;;;:::i;:::-;;;;;;;;35927:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35907:3;;;;;:::i;:::-;;;;35869:99;;;;35775:200:::0;;:::o;4761:108::-;4822:7;4849:12;;4842:19;;4761:108;:::o;22541:28::-;;;;:::o;22501:33::-;;;;:::o;25441:234::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25560:4:::1;25554;25550:1;25534:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25533:31;;;;:::i;:::-;25523:6;:41;;25515:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:6;25650;:17;;;;:::i;:::-;25627:20;:40;;;;25441:234:::0;:::o;5531:492::-;5671:4;5688:36;5698:6;5706:9;5717:6;5688:9;:36::i;:::-;5737:24;5764:11;:19;5776:6;5764:19;;;;;;;;;;;;;;;:33;5784:12;:10;:12::i;:::-;5764:33;;;;;;;;;;;;;;;;5737:60;;5836:6;5816:16;:26;;5808:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5923:57;5932:6;5940:12;:10;:12::i;:::-;5973:6;5954:16;:25;5923:8;:57::i;:::-;6011:4;6004:11;;;5531:492;;;;;:::o;22237:30::-;;;;:::o;4660:93::-;4718:5;4743:2;4736:9;;4660:93;:::o;6031:215::-;6119:4;6136:80;6145:12;:10;:12::i;:::-;6159:7;6205:10;6168:11;:25;6180:12;:10;:12::i;:::-;6168:25;;;;;;;;;;;;;;;:34;6194:7;6168:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6136:8;:80::i;:::-;6234:4;6227:11;;6031:215;;;;:::o;22466:28::-;;;;:::o;21353:38::-;;;:::o;21730:33::-;;;;;;;;;;;;;:::o;27862:127::-;27929:4;27953:19;:28;27973:7;27953:28;;;;;;;;;;;;;;;;;;;;;;;;;27946:35;;27862:127;;;:::o;34538:155::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34590:23:::1;34616:24;34634:4;34616:9;:24::i;:::-;34590:50;;34651:33;34668:15;34651:16;:33::i;:::-;34579:114;34538:155::o:0;26584:308::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26707:16:::1;26689:15;:34;;;;26752:16;26734:15;:34;;;;26795:16;;26779:13;:32;;;;26847:3;26830:13;;:20;;26822:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26584:308:::0;;:::o;22274:30::-;;;;:::o;21770:31::-;;;;;;;;;;;;;:::o;4877:127::-;4951:7;4978:9;:18;4988:7;4978:18;;;;;;;;;;;;;;;;4971:25;;4877:127;;;:::o;13842:148::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13949:1:::1;13912:40;;13933:6;;;;;;;;;;;13912:40;;;;;;;;;;;;13980:1;13963:6;;:19;;;;;;;;;;;;;;;;;;13842:148::o:0;34745:120::-;34797:4;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34830:5:::1;34813:14;;:22;;;;;;;;;;;;;;;;;;34853:4;34846:11;;34745:120:::0;:::o;25908:144::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26040:4:::1;25998:31;:39;26030:6;25998:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25908:144:::0;;:::o;22103:75::-;;;;;;;;;;;;;:::o;22020:76::-;;;;;;;;;;;;;:::o;35983:191::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36042:12:::1;36067:10;36059:24;;36091:21;36059:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36041:76;;;36136:7;36128:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36030:144;35983:191::o:0;33991:539::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34147:21:::1;34185:1;34171:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34147:40;;34208:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34198:4;34203:1;34198:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34251:9;34241:4;34246:1;34241:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;::::0;::::1;34299:15;:66;;;34373:14;34403:1;34452:4;34471:10;;;;;;;;;;;34496:15;34299:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;34078:452;33991:539:::0;;:::o;25211:218::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25275:13:::1;;;;;;;;;;;25274:14;25266:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25344:4;25328:13;;:20;;;;;;;;;;;;;;;;;;25373:4;25359:11;;:18;;;;;;;;;;;;;;;;;;25409:12;25388:18;:33;;;;25211:218::o:0;13200:79::-;13238:7;13265:6;;;;;;;;;;;13258:13;;13200:79;:::o;26148:101::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26234:7:::1;26220:11;;:21;;;;;;;;;;;;;;;;;;26148:101:::0;:::o;4548:104::-;4604:13;4637:7;4630:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:104;:::o;36182:204::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36305:1:::1;36276:31;;:17;:31;;::::0;36268:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:17;36342:16;;:36;;;;;;;;;;;;;;;;;;36182:204:::0;:::o;22187:41::-;22224:4;22187:41;:::o;27406:254::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27515:13:::1;27507:21;;:4;:21;;::::0;27499:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:41;27640:4;27646:5;27611:28;:41::i;:::-;27406:254:::0;;:::o;6254:413::-;6347:4;6364:24;6391:11;:25;6403:12;:10;:12::i;:::-;6391:25;;;;;;;;;;;;;;;:34;6417:7;6391:34;;;;;;;;;;;;;;;;6364:61;;6464:15;6444:16;:35;;6436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6557:67;6566:12;:10;:12::i;:::-;6580:7;6608:15;6589:16;:34;6557:8;:67::i;:::-;6655:4;6648:11;;;6254:413;;;;:::o;5012:175::-;5098:4;5115:42;5125:12;:10;:12::i;:::-;5139:9;5150:6;5115:9;:42::i;:::-;5175:4;5168:11;;5012:175;;;;:::o;22885:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22311:27::-;;;;:::o;21690:33::-;;;;;;;;;;;;;:::o;26900:184::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27016:8:::1;26985:19;:28;27005:7;26985:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27058:7;27042:34;;;27067:8;27042:34;;;;;;:::i;:::-;;;;;;;;26900:184:::0;;:::o;25684:215::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25806:4:::1;25800;25796:1;25780:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25779:31;;;;:::i;:::-;25769:6;:41;;25761:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:6;25874;:17;;;;:::i;:::-;25862:9;:29;;;;25684:215:::0;:::o;27092:306::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27211:9:::1;27207:115;27230:8;;:15;;27226:1;:19;27207:115;;;27302:8;27267:19;:32;27287:8;;27296:1;27287:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27267:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;27247:3;;;;;:::i;:::-;;;;27207:115;;;;27339:51;27371:8;;27381;27339:51;;;;;;;;:::i;:::-;;;;;;;;27092:306:::0;;;:::o;22620:39::-;;;;;;;;;;;;;:::o;21474:35::-;;;;:::o;22424:28::-;;;;:::o;22576:35::-;;;;:::o;5195:151::-;5284:7;5311:11;:18;5323:5;5311:18;;;;;;;;;;;;;;;:27;5330:7;5311:27;;;;;;;;;;;;;;;;5304:34;;5195:151;;;;:::o;21434:33::-;;;;:::o;22386:31::-;;;;:::o;22348:::-;;;;:::o;21607:37::-;;;;:::o;14145:244::-;13422:12;:10;:12::i;:::-;13412:22;;:6;;;;;;;;;;;:22;;;13404:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14254:1:::1;14234:22;;:8;:22;;::::0;14226:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14344:8;14315:38;;14336:6;;;;;;;;;;;14315:38;;;;;;;;;;;;14373:8;14364:6;;:17;;;;;;;;;;;;;;;;;;14145:244:::0;:::o;22666:24::-;;;;:::o;448:98::-;501:7;528:10;521:17;;448:98;:::o;7594:380::-;7747:1;7730:19;;:5;:19;;;7722:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7828:1;7809:21;;:7;:21;;;7801:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7912:6;7882:11;:18;7894:5;7882:18;;;;;;;;;;;;;;;:27;7901:7;7882:27;;;;;;;;;;;;;;;:36;;;;7950:7;7934:32;;7943:5;7934:32;;;7959:6;7934:32;;;;;;:::i;:::-;;;;;;;;7594:380;;;:::o;28001:4294::-;28149:1;28133:18;;:4;:18;;;28125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28226:1;28212:16;;:2;:16;;;28204:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28288:10;:14;28299:2;28288:14;;;;;;;;;;;;;;;;;;;;;;;;;28287:15;:36;;;;;28307:10;:16;28318:4;28307:16;;;;;;;;;;;;;;;;;;;;;;;;;28306:17;28287:36;28279:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;28412:1;28402:6;:11;28399:92;;28430:28;28446:4;28452:2;28456:1;28430:15;:28::i;:::-;28473:7;;28399:92;28515:13;;;;;;;;;;;28511:136;;28552:19;:25;28572:4;28552:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28581:19;:23;28601:2;28581:23;;;;;;;;;;;;;;;;;;;;;;;;;28552:52;28544:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28511:136;28668:14;;;;;;;;;;;28665:1825;;;28728:7;:5;:7::i;:::-;28720:15;;:4;:15;;;;:49;;;;;28762:7;:5;:7::i;:::-;28756:13;;:2;:13;;;;28720:49;:86;;;;;28804:1;28790:16;;:2;:16;;;;28720:86;:128;;;;;28841:6;28827:21;;:2;:21;;;;28720:128;:158;;;;;28870:8;;;;;;;;;;;28869:9;28720:158;28698:1781;;;28916:13;;;;;;;;;;;28912:148;;28961:19;:25;28981:4;28961:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28990:19;:23;29010:2;28990:23;;;;;;;;;;;;;;;;;;;;;;;;;28961:52;28953:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28912:148;29219:20;;;;;;;;;;;29215:423;;;29273:7;:5;:7::i;:::-;29267:13;;:2;:13;;;;:47;;;;;29298:15;29284:30;;:2;:30;;;;29267:47;:79;;;;;29332:13;29318:28;;:2;:28;;;;29267:79;29263:356;;;29424:12;29382:28;:39;29411:9;29382:39;;;;;;;;;;;;;;;;:54;29374:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29583:12;29541:28;:39;29570:9;29541:39;;;;;;;;;;;;;;;:54;;;;29263:356;29215:423;29691:25;:31;29717:4;29691:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;29727:31;:35;29759:2;29727:35;;;;;;;;;;;;;;;;;;;;;;;;;29726:36;29691:71;29687:777;;;29830:6;29809:20;;:27;;;;:::i;:::-;29799:6;:37;;29791:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29955:9;;29938:13;29948:2;29938:9;:13::i;:::-;29929:6;:22;;;;:::i;:::-;:35;;29921:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29687:777;;;30067:25;:29;30093:2;30067:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;30101:31;:37;30133:4;30101:37;;;;;;;;;;;;;;;;;;;;;;;;;30100:38;30067:71;30063:401;;;30206:6;30185:20;;:27;;;;:::i;:::-;30175:6;:37;;30167:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;30063:401;;;30318:31;:35;30350:2;30318:35;;;;;;;;;;;;;;;;;;;;;;;;;30314:150;;30411:9;;30394:13;30404:2;30394:9;:13::i;:::-;30385:6;:22;;;;:::i;:::-;:35;;30377:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30314:150;30063:401;29687:777;28698:1781;28665:1825;30498:28;30529:24;30547:4;30529:9;:24::i;:::-;30498:55;;30564:12;30603:18;;30579:20;:42;;30564:57;;30652:7;:35;;;;;30676:11;;;;;;;;;;;30652:35;:61;;;;;30705:8;;;;;;;;;;;30704:9;30652:61;:110;;;;;30731:25;:31;30757:4;30731:31;;;;;;;;;;;;;;;;;;;;;;;;;30730:32;30652:110;:153;;;;;30780:19;:25;30800:4;30780:25;;;;;;;;;;;;;;;;;;;;;;;;;30779:26;30652:153;:194;;;;;30823:19;:23;30843:2;30823:23;;;;;;;;;;;;;;;;;;;;;;;;;30822:24;30652:194;30634:322;;;30884:4;30873:8;;:15;;;;;;;;;;;;;;;;;;30903:10;:8;:10::i;:::-;30939:5;30928:8;;:16;;;;;;;;;;;;;;;;;;30634:322;30968:12;30984:8;;;;;;;;;;;30983:9;30968:24;;31093:19;:25;31113:4;31093:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31122:19;:23;31142:2;31122:23;;;;;;;;;;;;;;;;;;;;;;;;;31093:52;31090:99;;;31172:5;31162:15;;31090:99;31209:12;31300:7;31297:943;;;31389:25;:29;31415:2;31389:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31438:1;31422:13;;:17;31389:50;31385:698;;;31466:41;22224:4;31466:25;31477:13;;31466:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;31459:48;;31543:4;31526:13;;:21;;;;;;;:::i;:::-;;;;;;;;31614:13;;31595:16;;31588:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31566:18;;:61;;;;;;;:::i;:::-;;;;;;;;31689:13;;31670:16;;31663:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31646:13;;:56;;;;;;;:::i;:::-;;;;;;;;31385:698;;;31777:25;:31;31803:4;31777:31;;;;;;;;;;;;;;;;;;;;;;;;;31774:309;;;31836:40;22224:4;31836:24;31847:12;;31836:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;31829:47;;31912:4;31895:13;;:21;;;;;;;:::i;:::-;;;;;;;;31982:12;;31964:15;;31957:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;31935:18;;:59;;;;;;;:::i;:::-;;;;;;;;32055:12;;32037:15;;32030:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;32013:13;;:54;;;;;;;:::i;:::-;;;;;;;;31774:309;31385:698;32109:1;32102:4;:8;32099:93;;;32134:42;32150:4;32164;32171;32134:15;:42::i;:::-;32099:93;32224:4;32214:14;;;;;:::i;:::-;;;31297:943;32252:33;32268:4;32274:2;32278:6;32252:15;:33::i;:::-;28114:4181;;;;28001:4294;;;;:::o;32307:601::-;32435:21;32473:1;32459:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32435:40;;32504:4;32486;32491:1;32486:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32530:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32520:4;32525:1;32520:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32565:62;32582:4;32597:15;32615:11;32565:8;:62::i;:::-;32666:15;:66;;;32747:11;32773:1;32817:4;32844;32864:15;32666:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32362:546;32307:601;:::o;27668:186::-;27785:5;27751:25;:31;27777:4;27751:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27840:5;27806:40;;27834:4;27806:40;;;;;;;;;;;;27668:186;;:::o;6675:614::-;6833:1;6815:20;;:6;:20;;;6807:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6917:1;6896:23;;:9;:23;;;6888:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6972:21;6996:9;:17;7006:6;6996:17;;;;;;;;;;;;;;;;6972:41;;7049:6;7032:13;:23;;7024:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7170:6;7154:13;:22;7134:9;:17;7144:6;7134:17;;;;;;;;;;;;;;;:42;;;;7222:6;7198:9;:20;7208:9;7198:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7263:9;7246:35;;7255:6;7246:35;;;7274:6;7246:35;;;;;;:::i;:::-;;;;;;;;6796:493;6675:614;;;:::o;34873:894::-;34912:23;34938:24;34956:4;34938:9;:24::i;:::-;34912:50;;34973:25;35017:18;;35001:13;;:34;;;;:::i;:::-;34973:62;;35046:12;35101:1;35082:15;:20;:46;;;;35127:1;35106:17;:22;35082:46;35079:60;;;35131:7;;;;;35079:60;35159:26;35188:15;35159:44;;35214:36;35231:18;35214:16;:36::i;:::-;35264:18;35285:21;35264:42;;35319:18;35340:52;35374:17;35340:29;35355:13;;35340:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;35319:73;;35450:45;35466:10;35478:16;;;;;;;;;;;35450:15;:45::i;:::-;35540:10;35516:20;;:34;;;;;;;:::i;:::-;;;;;;;;35603:15;;;;;;;;;;;35595:29;;35632:21;35595:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35582:76;;;;;35687:1;35671:13;:17;;;;35720:1;35699:18;:22;;;;35748:1;35732:13;:17;;;;34901:866;;;;;;34873:894;:::o;9598:471::-;9656:7;9906:1;9901;:6;9897:47;;9931:1;9924:8;;;;9897:47;9956:9;9972:1;9968;:5;;;;:::i;:::-;9956:17;;10001:1;9996;9992;:5;;;;:::i;:::-;:10;9984:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10060:1;10053:8;;;9598:471;;;;;:::o;10545:132::-;10603:7;10630:39;10634:1;10637;10630:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10623:46;;10545:132;;;;:::o;33450:529::-;33596:21;33634:1;33620:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33596:40;;33657:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33647:4;33652:1;33647:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33700:9;33690:4;33695:1;33690:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;;;33748:15;:66;;;33822:14;33852:1;33901:4;33920:10;;;;;;;;;;;33945:15;33748:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33527:452;33450:529;;:::o;11173:278::-;11259:7;11291:1;11287;:5;11294:12;11279:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11318:9;11334:1;11330;:5;;;;:::i;:::-;11318:17;;11442:1;11435:8;;;11173: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:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:118::-;4413:24;4431:5;4413:24;:::i;:::-;4408:3;4401:37;4326:118;;:::o;4450:222::-;4543:4;4581:2;4570:9;4566:18;4558:26;;4594:71;4662:1;4651:9;4647:17;4638:6;4594:71;:::i;:::-;4450:222;;;;:::o;4678:329::-;4737:6;4786:2;4774:9;4765:7;4761:23;4757:32;4754:119;;;4792:79;;:::i;:::-;4754:119;4912:1;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4883:117;4678:329;;;;:::o;5013:60::-;5041:3;5062:5;5055:12;;5013:60;;;:::o;5079:142::-;5129:9;5162:53;5180:34;5189:24;5207:5;5189:24;:::i;:::-;5180:34;:::i;:::-;5162:53;:::i;:::-;5149:66;;5079:142;;;:::o;5227:126::-;5277:9;5310:37;5341:5;5310:37;:::i;:::-;5297:50;;5227:126;;;:::o;5359:153::-;5436:9;5469:37;5500:5;5469:37;:::i;:::-;5456:50;;5359:153;;;:::o;5518:185::-;5632:64;5690:5;5632:64;:::i;:::-;5627:3;5620:77;5518:185;;:::o;5709:276::-;5829:4;5867:2;5856:9;5852:18;5844:26;;5880:98;5975:1;5964:9;5960:17;5951:6;5880:98;:::i;:::-;5709:276;;;;:::o;5991:117::-;6100:1;6097;6090:12;6114:180;6162:77;6159:1;6152:88;6259:4;6256:1;6249:15;6283:4;6280:1;6273:15;6300:281;6383:27;6405:4;6383:27;:::i;:::-;6375:6;6371:40;6513:6;6501:10;6498:22;6477:18;6465:10;6462:34;6459:62;6456:88;;;6524:18;;:::i;:::-;6456:88;6564:10;6560:2;6553:22;6343:238;6300:281;;:::o;6587:129::-;6621:6;6648:20;;:::i;:::-;6638:30;;6677:33;6705:4;6697:6;6677:33;:::i;:::-;6587:129;;;:::o;6722:311::-;6799:4;6889:18;6881:6;6878:30;6875:56;;;6911:18;;:::i;:::-;6875:56;6961:4;6953:6;6949:17;6941:25;;7021:4;7015;7011:15;7003:23;;6722:311;;;:::o;7039:117::-;7148:1;7145;7138:12;7179:710;7275:5;7300:81;7316:64;7373:6;7316:64;:::i;:::-;7300:81;:::i;:::-;7291:90;;7401:5;7430:6;7423:5;7416:21;7464:4;7457:5;7453:16;7446:23;;7517:4;7509:6;7505:17;7497:6;7493:30;7546:3;7538:6;7535:15;7532:122;;;7565:79;;:::i;:::-;7532:122;7680:6;7663:220;7697:6;7692:3;7689:15;7663:220;;;7772:3;7801:37;7834:3;7822:10;7801:37;:::i;:::-;7796:3;7789:50;7868:4;7863:3;7859:14;7852:21;;7739:144;7723:4;7718:3;7714:14;7707:21;;7663:220;;;7667:21;7281:608;;7179:710;;;;;:::o;7912:370::-;7983:5;8032:3;8025:4;8017:6;8013:17;8009:27;7999:122;;8040:79;;:::i;:::-;7999:122;8157:6;8144:20;8182:94;8272:3;8264:6;8257:4;8249:6;8245:17;8182:94;:::i;:::-;8173:103;;7989:293;7912:370;;;;:::o;8288:116::-;8358:21;8373:5;8358:21;:::i;:::-;8351:5;8348:32;8338:60;;8394:1;8391;8384:12;8338:60;8288:116;:::o;8410:133::-;8453:5;8491:6;8478:20;8469:29;;8507:30;8531:5;8507:30;:::i;:::-;8410:133;;;;:::o;8549:678::-;8639:6;8647;8696:2;8684:9;8675:7;8671:23;8667:32;8664:119;;;8702:79;;:::i;:::-;8664:119;8850:1;8839:9;8835:17;8822:31;8880:18;8872:6;8869:30;8866:117;;;8902:79;;:::i;:::-;8866:117;9007:78;9077:7;9068:6;9057:9;9053:22;9007:78;:::i;:::-;8997:88;;8793:302;9134:2;9160:50;9202:7;9193:6;9182:9;9178:22;9160:50;:::i;:::-;9150:60;;9105:115;8549:678;;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:619::-;9645:6;9653;9661;9710:2;9698:9;9689:7;9685:23;9681:32;9678:119;;;9716:79;;:::i;:::-;9678:119;9836:1;9861:53;9906:7;9897:6;9886:9;9882:22;9861:53;:::i;:::-;9851:63;;9807:117;9963:2;9989:53;10034:7;10025:6;10014:9;10010:22;9989:53;:::i;:::-;9979:63;;9934:118;10091:2;10117:53;10162:7;10153:6;10142:9;10138:22;10117:53;:::i;:::-;10107:63;;10062:118;9568:619;;;;;:::o;10193:86::-;10228:7;10268:4;10261:5;10257:16;10246:27;;10193:86;;;:::o;10285:112::-;10368:22;10384:5;10368:22;:::i;:::-;10363:3;10356:35;10285:112;;:::o;10403:214::-;10492:4;10530:2;10519:9;10515:18;10507:26;;10543:67;10607:1;10596:9;10592:17;10583:6;10543:67;:::i;:::-;10403:214;;;;:::o;10623:468::-;10688:6;10696;10745:2;10733:9;10724:7;10720:23;10716:32;10713:119;;;10751:79;;:::i;:::-;10713:119;10871:1;10896:53;10941:7;10932:6;10921:9;10917:22;10896:53;:::i;:::-;10886:63;;10842:117;10998:2;11024:50;11066:7;11057:6;11046:9;11042:22;11024:50;:::i;:::-;11014:60;;10969:115;10623:468;;;;;:::o;11097:474::-;11165:6;11173;11222:2;11210:9;11201:7;11197:23;11193:32;11190:119;;;11228:79;;:::i;:::-;11190:119;11348:1;11373:53;11418:7;11409:6;11398:9;11394:22;11373:53;:::i;:::-;11363:63;;11319:117;11475:2;11501:53;11546:7;11537:6;11526:9;11522:22;11501:53;:::i;:::-;11491:63;;11446:118;11097:474;;;;;:::o;11577:323::-;11633:6;11682:2;11670:9;11661:7;11657:23;11653:32;11650:119;;;11688:79;;:::i;:::-;11650:119;11808:1;11833:50;11875:7;11866:6;11855:9;11851:22;11833:50;:::i;:::-;11823:60;;11779:114;11577:323;;;;:::o;11906:117::-;12015:1;12012;12005:12;12046:568;12119:8;12129:6;12179:3;12172:4;12164:6;12160:17;12156:27;12146:122;;12187:79;;:::i;:::-;12146:122;12300:6;12287:20;12277:30;;12330:18;12322:6;12319:30;12316:117;;;12352:79;;:::i;:::-;12316:117;12466:4;12458:6;12454:17;12442:29;;12520:3;12512:4;12504:6;12500:17;12490:8;12486:32;12483:41;12480:128;;;12527:79;;:::i;:::-;12480:128;12046:568;;;;;:::o;12620:698::-;12712:6;12720;12728;12777:2;12765:9;12756:7;12752:23;12748:32;12745:119;;;12783:79;;:::i;:::-;12745:119;12931:1;12920:9;12916:17;12903:31;12961:18;12953:6;12950:30;12947:117;;;12983:79;;:::i;:::-;12947:117;13096:80;13168:7;13159:6;13148:9;13144:22;13096:80;:::i;:::-;13078:98;;;;12874:312;13225:2;13251:50;13293:7;13284:6;13273:9;13269:22;13251:50;:::i;:::-;13241:60;;13196:115;12620:698;;;;;:::o;13324:474::-;13392:6;13400;13449:2;13437:9;13428:7;13424:23;13420:32;13417:119;;;13455:79;;:::i;:::-;13417:119;13575:1;13600:53;13645:7;13636:6;13625:9;13621:22;13600:53;:::i;:::-;13590:63;;13546:117;13702:2;13728:53;13773:7;13764:6;13753:9;13749:22;13728:53;:::i;:::-;13718:63;;13673:118;13324:474;;;;;:::o;13804:182::-;13944:34;13940:1;13932:6;13928:14;13921:58;13804:182;:::o;13992:366::-;14134:3;14155:67;14219:2;14214:3;14155:67;:::i;:::-;14148:74;;14231:93;14320:3;14231:93;:::i;:::-;14349:2;14344:3;14340:12;14333:19;;13992:366;;;:::o;14364:419::-;14530:4;14568:2;14557:9;14553:18;14545:26;;14617:9;14611:4;14607:20;14603:1;14592:9;14588:17;14581:47;14645:131;14771:4;14645:131;:::i;:::-;14637:139;;14364:419;;;:::o;14789:179::-;14929:31;14925:1;14917:6;14913:14;14906:55;14789:179;:::o;14974:366::-;15116:3;15137:67;15201:2;15196:3;15137:67;:::i;:::-;15130:74;;15213:93;15302:3;15213:93;:::i;:::-;15331:2;15326:3;15322:12;15315:19;;14974:366;;;:::o;15346:419::-;15512:4;15550:2;15539:9;15535:18;15527:26;;15599:9;15593:4;15589:20;15585:1;15574:9;15570:17;15563:47;15627:131;15753:4;15627:131;:::i;:::-;15619:139;;15346:419;;;:::o;15771:180::-;15819:77;15816:1;15809:88;15916:4;15913:1;15906:15;15940:4;15937:1;15930:15;15957:320;16001:6;16038:1;16032:4;16028:12;16018:22;;16085:1;16079:4;16075:12;16106:18;16096:81;;16162:4;16154:6;16150:17;16140:27;;16096:81;16224:2;16216:6;16213:14;16193:18;16190:38;16187:84;;16243:18;;:::i;:::-;16187:84;16008:269;15957:320;;;:::o;16283:180::-;16331:77;16328:1;16321:88;16428:4;16425:1;16418:15;16452:4;16449:1;16442:15;16469:180;16517:77;16514:1;16507:88;16614:4;16611:1;16604:15;16638:4;16635:1;16628:15;16655:233;16694:3;16717:24;16735:5;16717:24;:::i;:::-;16708:33;;16763:66;16756:5;16753:77;16750:103;;16833:18;;:::i;:::-;16750:103;16880:1;16873:5;16869:13;16862:20;;16655:233;;;:::o;16894:348::-;16934:7;16957:20;16975:1;16957:20;:::i;:::-;16952:25;;16991:20;17009:1;16991:20;:::i;:::-;16986:25;;17179:1;17111:66;17107:74;17104:1;17101:81;17096:1;17089:9;17082:17;17078:105;17075:131;;;17186:18;;:::i;:::-;17075:131;17234:1;17231;17227:9;17216:20;;16894:348;;;;:::o;17248:180::-;17296:77;17293:1;17286:88;17393:4;17390:1;17383:15;17417:4;17414:1;17407:15;17434:185;17474:1;17491:20;17509:1;17491:20;:::i;:::-;17486:25;;17525:20;17543:1;17525:20;:::i;:::-;17520:25;;17564:1;17554:35;;17569:18;;:::i;:::-;17554:35;17611:1;17608;17604:9;17599:14;;17434:185;;;;:::o;17625:234::-;17765:34;17761:1;17753:6;17749:14;17742:58;17834:17;17829:2;17821:6;17817:15;17810:42;17625:234;:::o;17865:366::-;18007:3;18028:67;18092:2;18087:3;18028:67;:::i;:::-;18021:74;;18104:93;18193:3;18104:93;:::i;:::-;18222:2;18217:3;18213:12;18206:19;;17865:366;;;:::o;18237:419::-;18403:4;18441:2;18430:9;18426:18;18418:26;;18490:9;18484:4;18480:20;18476:1;18465:9;18461:17;18454:47;18518:131;18644:4;18518:131;:::i;:::-;18510:139;;18237:419;;;:::o;18662:227::-;18802:34;18798:1;18790:6;18786:14;18779:58;18871:10;18866:2;18858:6;18854:15;18847:35;18662:227;:::o;18895:366::-;19037:3;19058:67;19122:2;19117:3;19058:67;:::i;:::-;19051:74;;19134:93;19223:3;19134:93;:::i;:::-;19252:2;19247:3;19243:12;19236:19;;18895:366;;;:::o;19267:419::-;19433:4;19471:2;19460:9;19456:18;19448:26;;19520:9;19514:4;19510:20;19506:1;19495:9;19491:17;19484:47;19548:131;19674:4;19548:131;:::i;:::-;19540:139;;19267:419;;;:::o;19692:305::-;19732:3;19751:20;19769:1;19751:20;:::i;:::-;19746:25;;19785:20;19803:1;19785:20;:::i;:::-;19780:25;;19939:1;19871:66;19867:74;19864:1;19861:81;19858:107;;;19945:18;;:::i;:::-;19858:107;19989:1;19986;19982:9;19975:16;;19692:305;;;;:::o;20003:147::-;20104:11;20141:3;20126:18;;20003:147;;;;:::o;20156:114::-;;:::o;20276:398::-;20435:3;20456:83;20537:1;20532:3;20456:83;:::i;:::-;20449:90;;20548:93;20637:3;20548:93;:::i;:::-;20666:1;20661:3;20657:11;20650:18;;20276:398;;;:::o;20680:379::-;20864:3;20886:147;21029:3;20886:147;:::i;:::-;20879:154;;21050:3;21043:10;;20680:379;;;:::o;21065:168::-;21205:20;21201:1;21193:6;21189:14;21182:44;21065:168;:::o;21239:366::-;21381:3;21402:67;21466:2;21461:3;21402:67;:::i;:::-;21395:74;;21478:93;21567:3;21478:93;:::i;:::-;21596:2;21591:3;21587:12;21580:19;;21239:366;;;:::o;21611:419::-;21777:4;21815:2;21804:9;21800:18;21792:26;;21864:9;21858:4;21854:20;21850:1;21839:9;21835:17;21828:47;21892:131;22018:4;21892:131;:::i;:::-;21884:139;;21611:419;;;:::o;22036:143::-;22093:5;22124:6;22118:13;22109:22;;22140:33;22167:5;22140:33;:::i;:::-;22036:143;;;;:::o;22185:351::-;22255:6;22304:2;22292:9;22283:7;22279:23;22275:32;22272:119;;;22310:79;;:::i;:::-;22272:119;22430:1;22455:64;22511:7;22502:6;22491:9;22487:22;22455:64;:::i;:::-;22445:74;;22401:128;22185:351;;;;:::o;22542:85::-;22587:7;22616:5;22605:16;;22542:85;;;:::o;22633:158::-;22691:9;22724:61;22742:42;22751:32;22777:5;22751:32;:::i;:::-;22742:42;:::i;:::-;22724:61;:::i;:::-;22711:74;;22633:158;;;:::o;22797:147::-;22892:45;22931:5;22892:45;:::i;:::-;22887:3;22880:58;22797:147;;:::o;22950:114::-;23017:6;23051:5;23045:12;23035:22;;22950:114;;;:::o;23070:184::-;23169:11;23203:6;23198:3;23191:19;23243:4;23238:3;23234:14;23219:29;;23070:184;;;;:::o;23260:132::-;23327:4;23350:3;23342:11;;23380:4;23375:3;23371:14;23363:22;;23260:132;;;:::o;23398:108::-;23475:24;23493:5;23475:24;:::i;:::-;23470:3;23463:37;23398:108;;:::o;23512:179::-;23581:10;23602:46;23644:3;23636:6;23602:46;:::i;:::-;23680:4;23675:3;23671:14;23657:28;;23512:179;;;;:::o;23697:113::-;23767:4;23799;23794:3;23790:14;23782:22;;23697:113;;;:::o;23846:732::-;23965:3;23994:54;24042:5;23994:54;:::i;:::-;24064:86;24143:6;24138:3;24064:86;:::i;:::-;24057:93;;24174:56;24224:5;24174:56;:::i;:::-;24253:7;24284:1;24269:284;24294:6;24291:1;24288:13;24269:284;;;24370:6;24364:13;24397:63;24456:3;24441:13;24397:63;:::i;:::-;24390:70;;24483:60;24536:6;24483:60;:::i;:::-;24473:70;;24329:224;24316:1;24313;24309:9;24304:14;;24269:284;;;24273:14;24569:3;24562:10;;23970:608;;;23846:732;;;;:::o;24584:720::-;24819:4;24857:3;24846:9;24842:19;24834:27;;24871:79;24947:1;24936:9;24932:17;24923:6;24871:79;:::i;:::-;24997:9;24991:4;24987:20;24982:2;24971:9;24967:18;24960:48;25025:108;25128:4;25119:6;25025:108;:::i;:::-;25017:116;;25143:72;25211:2;25200:9;25196:18;25187:6;25143:72;:::i;:::-;25225;25293:2;25282:9;25278:18;25269:6;25225:72;:::i;:::-;24584:720;;;;;;;:::o;25310:174::-;25450:26;25446:1;25438:6;25434:14;25427:50;25310:174;:::o;25490:366::-;25632:3;25653:67;25717:2;25712:3;25653:67;:::i;:::-;25646:74;;25729:93;25818:3;25729:93;:::i;:::-;25847:2;25842:3;25838:12;25831:19;;25490:366;;;:::o;25862:419::-;26028:4;26066:2;26055:9;26051:18;26043:26;;26115:9;26109:4;26105:20;26101:1;26090:9;26086:17;26079:47;26143:131;26269:4;26143:131;:::i;:::-;26135:139;;25862:419;;;:::o;26287:169::-;26427:21;26423:1;26415:6;26411:14;26404:45;26287:169;:::o;26462:366::-;26604:3;26625:67;26689:2;26684:3;26625:67;:::i;:::-;26618:74;;26701:93;26790:3;26701:93;:::i;:::-;26819:2;26814:3;26810:12;26803:19;;26462:366;;;:::o;26834:419::-;27000:4;27038:2;27027:9;27023:18;27015:26;;27087:9;27081:4;27077:20;27073:1;27062:9;27058:17;27051:47;27115:131;27241:4;27115:131;:::i;:::-;27107:139;;26834:419;;;:::o;27259:289::-;27399:34;27395:1;27387:6;27383:14;27376:58;27468:34;27463:2;27455:6;27451:15;27444:59;27537:3;27532:2;27524:6;27520:15;27513:28;27259:289;:::o;27554:366::-;27696:3;27717:67;27781:2;27776:3;27717:67;:::i;:::-;27710:74;;27793:93;27882:3;27793:93;:::i;:::-;27911:2;27906:3;27902:12;27895:19;;27554:366;;;:::o;27926:419::-;28092:4;28130:2;28119:9;28115:18;28107:26;;28179:9;28173:4;28169:20;28165:1;28154:9;28150:17;28143:47;28207:131;28333:4;28207:131;:::i;:::-;28199:139;;27926:419;;;:::o;28351:224::-;28491:34;28487:1;28479:6;28475:14;28468:58;28560:7;28555:2;28547:6;28543:15;28536:32;28351:224;:::o;28581:366::-;28723:3;28744:67;28808:2;28803:3;28744:67;:::i;:::-;28737:74;;28820:93;28909:3;28820:93;:::i;:::-;28938:2;28933:3;28929:12;28922:19;;28581:366;;;:::o;28953:419::-;29119:4;29157:2;29146:9;29142:18;29134:26;;29206:9;29200:4;29196:20;29192:1;29181:9;29177:17;29170:47;29234:131;29360:4;29234:131;:::i;:::-;29226:139;;28953:419;;;:::o;29378:223::-;29518:34;29514:1;29506:6;29502:14;29495:58;29587:6;29582:2;29574:6;29570:15;29563:31;29378:223;:::o;29607:366::-;29749:3;29770:67;29834:2;29829:3;29770:67;:::i;:::-;29763:74;;29846:93;29935:3;29846:93;:::i;:::-;29964:2;29959:3;29955:12;29948:19;;29607:366;;;:::o;29979:419::-;30145:4;30183:2;30172:9;30168:18;30160:26;;30232:9;30226:4;30222:20;30218:1;30207:9;30203:17;30196:47;30260:131;30386:4;30260:131;:::i;:::-;30252:139;;29979:419;;;:::o;30404:102::-;30473:4;30496:3;30488:11;;30404:102;;;:::o;30512:122::-;30564:5;30589:39;30624:2;30619:3;30615:12;30610:3;30589:39;:::i;:::-;30580:48;;30512:122;;;;:::o;30640:115::-;30712:4;30744;30739:3;30735:14;30727:22;;30640:115;;;:::o;30791:699::-;30920:3;30943:86;31022:6;31017:3;30943:86;:::i;:::-;30936:93;;31053:58;31105:5;31053:58;:::i;:::-;31134:7;31165:1;31150:315;31175:6;31172:1;31169:13;31150:315;;;31245:42;31280:6;31271:7;31245:42;:::i;:::-;31307:63;31366:3;31351:13;31307:63;:::i;:::-;31300:70;;31393:62;31448:6;31393:62;:::i;:::-;31383:72;;31210:255;31197:1;31194;31190:9;31185:14;;31150:315;;;31154:14;31481:3;31474:10;;30925:565;;30791:699;;;;;:::o;31496:491::-;31671:4;31709:2;31698:9;31694:18;31686:26;;31758:9;31752:4;31748:20;31744:1;31733:9;31729:17;31722:47;31786:118;31899:4;31890:6;31882;31786:118;:::i;:::-;31778:126;;31914:66;31976:2;31965:9;31961:18;31952:6;31914:66;:::i;:::-;31496:491;;;;;;:::o;31993:225::-;32133:34;32129:1;32121:6;32117:14;32110:58;32202:8;32197:2;32189:6;32185:15;32178:33;31993:225;:::o;32224:366::-;32366:3;32387:67;32451:2;32446:3;32387:67;:::i;:::-;32380:74;;32463:93;32552:3;32463:93;:::i;:::-;32581:2;32576:3;32572:12;32565:19;;32224:366;;;:::o;32596:419::-;32762:4;32800:2;32789:9;32785:18;32777:26;;32849:9;32843:4;32839:20;32835:1;32824:9;32820:17;32813:47;32877:131;33003:4;32877:131;:::i;:::-;32869:139;;32596:419;;;:::o;33021:223::-;33161:34;33157:1;33149:6;33145:14;33138:58;33230:6;33225:2;33217:6;33213:15;33206:31;33021:223;:::o;33250:366::-;33392:3;33413:67;33477:2;33472:3;33413:67;:::i;:::-;33406:74;;33489:93;33578:3;33489:93;:::i;:::-;33607:2;33602:3;33598:12;33591:19;;33250:366;;;:::o;33622:419::-;33788:4;33826:2;33815:9;33811:18;33803:26;;33875:9;33869:4;33865:20;33861:1;33850:9;33846:17;33839:47;33903:131;34029:4;33903:131;:::i;:::-;33895:139;;33622:419;;;:::o;34047:221::-;34187:34;34183:1;34175:6;34171:14;34164:58;34256:4;34251:2;34243:6;34239:15;34232:29;34047:221;:::o;34274:366::-;34416:3;34437:67;34501:2;34496:3;34437:67;:::i;:::-;34430:74;;34513:93;34602:3;34513:93;:::i;:::-;34631:2;34626:3;34622:12;34615:19;;34274:366;;;:::o;34646:419::-;34812:4;34850:2;34839:9;34835:18;34827:26;;34899:9;34893:4;34889:20;34885:1;34874:9;34870:17;34863:47;34927:131;35053:4;34927:131;:::i;:::-;34919:139;;34646:419;;;:::o;35071:224::-;35211:34;35207:1;35199:6;35195:14;35188:58;35280:7;35275:2;35267:6;35263:15;35256:32;35071:224;:::o;35301:366::-;35443:3;35464:67;35528:2;35523:3;35464:67;:::i;:::-;35457:74;;35540:93;35629:3;35540:93;:::i;:::-;35658:2;35653:3;35649:12;35642:19;;35301:366;;;:::o;35673:419::-;35839:4;35877:2;35866:9;35862:18;35854:26;;35926:9;35920:4;35916:20;35912:1;35901:9;35897:17;35890:47;35954:131;36080:4;35954:131;:::i;:::-;35946:139;;35673:419;;;:::o;36098:222::-;36238:34;36234:1;36226:6;36222:14;36215:58;36307:5;36302:2;36294:6;36290:15;36283:30;36098:222;:::o;36326:366::-;36468:3;36489:67;36553:2;36548:3;36489:67;:::i;:::-;36482:74;;36565:93;36654:3;36565:93;:::i;:::-;36683:2;36678:3;36674:12;36667:19;;36326:366;;;:::o;36698:419::-;36864:4;36902:2;36891:9;36887:18;36879:26;;36951:9;36945:4;36941:20;36937:1;36926:9;36922:17;36915:47;36979:131;37105:4;36979:131;:::i;:::-;36971:139;;36698:419;;;:::o;37123:236::-;37263:34;37259:1;37251:6;37247:14;37240:58;37332:19;37327:2;37319:6;37315:15;37308:44;37123:236;:::o;37365:366::-;37507:3;37528:67;37592:2;37587:3;37528:67;:::i;:::-;37521:74;;37604:93;37693:3;37604:93;:::i;:::-;37722:2;37717:3;37713:12;37706:19;;37365:366;;;:::o;37737:419::-;37903:4;37941:2;37930:9;37926:18;37918:26;;37990:9;37984:4;37980:20;37976:1;37965:9;37961:17;37954:47;38018:131;38144:4;38018:131;:::i;:::-;38010:139;;37737:419;;;:::o;38162:176::-;38302:28;38298:1;38290:6;38286:14;38279:52;38162:176;:::o;38344:366::-;38486:3;38507:67;38571:2;38566:3;38507:67;:::i;:::-;38500:74;;38583:93;38672:3;38583:93;:::i;:::-;38701:2;38696:3;38692:12;38685:19;;38344:366;;;:::o;38716:419::-;38882:4;38920:2;38909:9;38905:18;38897:26;;38969:9;38963:4;38959:20;38955:1;38944:9;38940:17;38933:47;38997:131;39123:4;38997:131;:::i;:::-;38989:139;;38716:419;;;:::o;39141:172::-;39281:24;39277:1;39269:6;39265:14;39258:48;39141:172;:::o;39319:366::-;39461:3;39482:67;39546:2;39541:3;39482:67;:::i;:::-;39475:74;;39558:93;39647:3;39558:93;:::i;:::-;39676:2;39671:3;39667:12;39660:19;;39319:366;;;:::o;39691:419::-;39857:4;39895:2;39884:9;39880:18;39872:26;;39944:9;39938:4;39934:20;39930:1;39919:9;39915:17;39908:47;39972:131;40098:4;39972:131;:::i;:::-;39964:139;;39691:419;;;:::o;40116:297::-;40256:34;40252:1;40244:6;40240:14;40233:58;40325:34;40320:2;40312:6;40308:15;40301:59;40394:11;40389:2;40381:6;40377:15;40370:36;40116:297;:::o;40419:366::-;40561:3;40582:67;40646:2;40641:3;40582:67;:::i;:::-;40575:74;;40658:93;40747:3;40658:93;:::i;:::-;40776:2;40771:3;40767:12;40760:19;;40419:366;;;:::o;40791:419::-;40957:4;40995:2;40984:9;40980:18;40972:26;;41044:9;41038:4;41034:20;41030:1;41019:9;41015:17;41008:47;41072:131;41198:4;41072:131;:::i;:::-;41064:139;;40791:419;;;:::o;41216:240::-;41356:34;41352:1;41344:6;41340:14;41333:58;41425:23;41420:2;41412:6;41408:15;41401:48;41216:240;:::o;41462:366::-;41604:3;41625:67;41689:2;41684:3;41625:67;:::i;:::-;41618:74;;41701:93;41790:3;41701:93;:::i;:::-;41819:2;41814:3;41810:12;41803:19;;41462:366;;;:::o;41834:419::-;42000:4;42038:2;42027:9;42023:18;42015:26;;42087:9;42081:4;42077:20;42073:1;42062:9;42058:17;42051:47;42115:131;42241:4;42115:131;:::i;:::-;42107:139;;41834:419;;;:::o;42259:169::-;42399:21;42395:1;42387:6;42383:14;42376:45;42259:169;:::o;42434:366::-;42576:3;42597:67;42661:2;42656:3;42597:67;:::i;:::-;42590:74;;42673:93;42762:3;42673:93;:::i;:::-;42791:2;42786:3;42782:12;42775:19;;42434:366;;;:::o;42806:419::-;42972:4;43010:2;42999:9;42995:18;42987:26;;43059:9;43053:4;43049:20;43045:1;43034:9;43030:17;43023:47;43087:131;43213:4;43087:131;:::i;:::-;43079:139;;42806:419;;;:::o;43231:241::-;43371:34;43367:1;43359:6;43355:14;43348:58;43440:24;43435:2;43427:6;43423:15;43416:49;43231:241;:::o;43478:366::-;43620:3;43641:67;43705:2;43700:3;43641:67;:::i;:::-;43634:74;;43717:93;43806:3;43717:93;:::i;:::-;43835:2;43830:3;43826:12;43819:19;;43478:366;;;:::o;43850:419::-;44016:4;44054:2;44043:9;44039:18;44031:26;;44103:9;44097:4;44093:20;44089:1;44078:9;44074:17;44067:47;44131:131;44257:4;44131:131;:::i;:::-;44123:139;;43850:419;;;:::o;44275:191::-;44315:4;44335:20;44353:1;44335:20;:::i;:::-;44330:25;;44369:20;44387:1;44369:20;:::i;:::-;44364:25;;44408:1;44405;44402:8;44399:34;;;44413:18;;:::i;:::-;44399:34;44458:1;44455;44451:9;44443:17;;44275:191;;;;:::o;44472:831::-;44735:4;44773:3;44762:9;44758:19;44750:27;;44787:71;44855:1;44844:9;44840:17;44831:6;44787:71;:::i;:::-;44868:80;44944:2;44933:9;44929:18;44920:6;44868:80;:::i;:::-;44995:9;44989:4;44985:20;44980:2;44969:9;44965:18;44958:48;45023:108;45126:4;45117:6;45023:108;:::i;:::-;45015:116;;45141:72;45209:2;45198:9;45194:18;45185:6;45141:72;:::i;:::-;45223:73;45291:3;45280:9;45276:19;45267:6;45223:73;:::i;:::-;44472:831;;;;;;;;:::o;45309:225::-;45449:34;45445:1;45437:6;45433:14;45426:58;45518:8;45513:2;45505:6;45501:15;45494:33;45309:225;:::o;45540:366::-;45682:3;45703:67;45767:2;45762:3;45703:67;:::i;:::-;45696:74;;45779:93;45868:3;45779:93;:::i;:::-;45897:2;45892:3;45888:12;45881:19;;45540:366;;;:::o;45912:419::-;46078:4;46116:2;46105:9;46101:18;46093:26;;46165:9;46159:4;46155:20;46151:1;46140:9;46136:17;46129:47;46193:131;46319:4;46193:131;:::i;:::-;46185:139;;45912:419;;;:::o;46337:220::-;46477:34;46473:1;46465:6;46461:14;46454:58;46546:3;46541:2;46533:6;46529:15;46522:28;46337:220;:::o;46563:366::-;46705:3;46726:67;46790:2;46785:3;46726:67;:::i;:::-;46719:74;;46802:93;46891:3;46802:93;:::i;:::-;46920:2;46915:3;46911:12;46904:19;;46563:366;;;:::o;46935:419::-;47101:4;47139:2;47128:9;47124:18;47116:26;;47188:9;47182:4;47178:20;47174:1;47163:9;47159:17;47152:47;47216:131;47342:4;47216:131;:::i;:::-;47208:139;;46935:419;;;:::o

Swarm Source

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