ETH Price: $3,363.48 (-3.22%)

Token

Deep X (DEEPX)
 

Overview

Max Total Supply

100,000,000 DEEPX

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,015.32320154897464282 DEEPX

Value
$0.00
0x2813d7166f7f5f32d6fa816ebae1f6b72b1a80fb
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:
DEEPX

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance 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 spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

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

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

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

pragma solidity >=0.6.2;

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

pragma solidity >=0.6.2;

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 DEEPX is Context, IERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router;

    mapping (address => uint) private _cooldown;

    mapping (address => uint256) private _balances;

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

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

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;

    string private constant _name = "Deep X";
    string private constant _symbol = "DEEPX";

    uint8 private constant _decimals = 18;

    uint256 private constant _totalSupply = 100_000_000 * (10**_decimals);
    uint256 public maxBuyAmount = _totalSupply;
    uint256 public maxSellAmount = _totalSupply;
    uint256 public maxWalletAmount = _totalSupply;
    uint256 public tradingOpenBlock = 0;
    uint256 private _blocksToBlacklist = 0;
    uint256 private _cooldownBlocks = 1;
    uint256 public constant FEE_DIVISOR = 1000;
    uint256 public buyTreasuryFee = 30;
    uint256 private _previousBuyTreasuryFee = buyTreasuryFee;
    uint256 public buyOpsFee = 20;
    uint256 private _previousBuyOpsFee = buyOpsFee;
    uint256 public sellTreasuryFee = 30;
    uint256 private _previousSellTreasuryFee = sellTreasuryFee;
    uint256 public sellOpsFee = 20;
    uint256 private _previousSellOpsFee = sellOpsFee;
    uint256 private _tokensForTreasury;
    uint256 private _tokensForOps;
    uint256 private _swapTokensAtAmount = 0;

    address payable private _treasuryWallet = payable(0xBD63B269829dEDb101Bcd90C4150d2AC60e76Ed4);
    address payable private _opsWallet = payable(0xBD63B269829dEDb101Bcd90C4150d2AC60e76Ed4);
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    constructor () {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _totalSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);

        _balances[_msgSender()] = _totalSupply;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedFromFees[_opsWallet] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[_opsWallet] = true;

        emit Transfer(ZERO, _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

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

    function setCooldownEnabled(bool onoff) public onlyOwner {
        cooldownEnabled = onoff;
    }

    function setSwapEnabled(bool onoff) public onlyOwner {
        swapEnabled = onoff;
    }

    function setFeesEnabled(bool onoff) public onlyOwner {
        feesEnabled = onoff;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != ZERO, "ERC20: approve from the zero address");
        require(spender != ZERO, "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != ZERO, "ERC20: transfer from the zero address");
        require(to != ZERO, "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to]);

            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not allowed yet.");

            if (cooldownEnabled) {
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)) {
                    require(_cooldown[tx.origin] < block.number - _cooldownBlocks && _cooldown[to] < block.number - _cooldownBlocks, "Transfer delay enabled. Try again later.");
                    _cooldown[tx.origin] = block.number;
                    _cooldown[to] = block.number;
                }
            }

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) takeFee = false;

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > _swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        _tokenTransfer(from, to, amount, takeFee, shouldSwap);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap =  _tokensForTreasury.add(_tokensForOps);
        bool success;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;

        if (contractBalance > _swapTokensAtAmount.mul(5)) contractBalance = _swapTokensAtAmount.mul(5);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(contractBalance);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForTreasury = ethBalance.mul(_tokensForTreasury).div(totalTokensToSwap);
        
        _tokensForTreasury = 0;
        _tokensForOps = 0;

        (success,) = address(_treasuryWallet).call{value: ethForTreasury}("");
        (success,) = address(_opsWallet).call{value: address(this).balance}("");
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        _treasuryWallet.transfer(amount.div(2));
        _opsWallet.transfer(amount.div(2));
    }

    function isBlacklisted(address wallet) external view returns (bool) {
        return _isBlacklisted[wallet];
    }

    function openTrading(uint256 blocks) public onlyOwner() {
        require(!tradingOpen, "Trading is already open");
        swapEnabled = true;
        cooldownEnabled = true;
        maxSellAmount = _totalSupply.mul(25).div(10000);
        _swapTokensAtAmount = _totalSupply.mul(10).div(10000);
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksToBlacklist = blocks;
    }

    function setMaxBuyAmount(uint256 maxBuy) public onlyOwner {
        require(maxBuy >= (totalSupply().mul(1).div(10000)), "Max buy amount cannot be lower than 0.01% total supply.");
        maxBuyAmount = maxBuy;
    }

    function setMaxSellAmount(uint256 maxSell) public onlyOwner {
        require(maxSell >= (totalSupply().mul(1).div(10000)), "Max sell amount cannot be lower than 0.01% total supply.");
        maxSellAmount = maxSell;
    }
    
    function setMaxWalletAmount(uint256 maxToken) public onlyOwner {
        require(maxToken >= (totalSupply().mul(1).div(1000)), "Max wallet amount cannot be lower than 0.1% total supply.");
        maxWalletAmount = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 swapAmount) public onlyOwner {
        require(swapAmount >= (totalSupply().mul(1).div(100000)), "Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= (totalSupply().mul(5).div(1000)), "Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function setTreasuryWallet(address _treasuryWalletAddy) public onlyOwner {
        require(_treasuryWalletAddy != ZERO, "_treasuryWallet address cannot be 0");
        _isExcludedFromFees[_treasuryWallet] = false;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = false;
        _treasuryWallet = payable(_treasuryWalletAddy);
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = true;
    }

    function setOpsWallet(address _opsWalletAddy) public onlyOwner {
        require(_opsWalletAddy != ZERO, "_opsWallet address cannot be 0");
        _isExcludedFromFees[_opsWallet] = false;
        _isExcludedMaxTransactionAmount[_opsWallet] = false;
        _opsWallet = payable(_opsWalletAddy);
        _isExcludedFromFees[_opsWallet] = true;
        _isExcludedMaxTransactionAmount[_opsWallet] = true;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }
    
    function setBlacklisted(address[] memory accounts, bool exempt) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            if(accounts[i] != _uniswapV2Pair) _isBlacklisted[accounts[i]] = exempt;
        }
    }

    function setBuyFee(uint256 newBuyTreasuryFee, uint256 newBuyOpsFee) public onlyOwner {
        require(newBuyTreasuryFee.add(newBuyOpsFee) <= 300, "Must keep buy taxes below 30%");
        buyTreasuryFee = newBuyTreasuryFee;
        buyOpsFee = newBuyOpsFee;
    }

    function setSellFee(uint256 newSellTreasuryFee, uint256 newSellOpsFee) public onlyOwner {
        require(newSellTreasuryFee.add(newSellOpsFee) <= 300, "Must keep sell taxes below 30%");
        sellTreasuryFee = newSellTreasuryFee;
        sellOpsFee = newSellOpsFee;
    }

    function setCooldownBlocks(uint256 blocks) public onlyOwner {
        require(blocks >= 0 && blocks <= 10, "Invalid blocks count.");
        _cooldownBlocks = blocks;
    }

    function removeAllFee() private {
        if (buyTreasuryFee == 0 && buyOpsFee == 0 && sellTreasuryFee == 0 && sellOpsFee == 0) return;

        _previousBuyTreasuryFee = buyTreasuryFee;
        _previousBuyOpsFee = buyOpsFee;
        _previousSellTreasuryFee = sellTreasuryFee;
        _previousSellOpsFee = sellOpsFee;
        
        buyTreasuryFee = 0;
        buyOpsFee = 0;
        sellTreasuryFee = 0;
        sellOpsFee = 0;
    }
    
    function restoreAllFee() private {
        buyTreasuryFee = _previousBuyTreasuryFee;
        buyOpsFee = _previousBuyOpsFee;
        sellTreasuryFee = _previousSellTreasuryFee;
        sellOpsFee = _previousSellOpsFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, bool isSell) private {
        if (!takeFee) removeAllFee();
        else amount = _takeFees(sender, amount, isSell);

        _transferStandard(sender, recipient, amount);
        
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _balances[sender] = _balances[sender].sub(tAmount);
        _balances[recipient] = _balances[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount, bool isSell) private returns (uint256) {
        uint256 _totalFees;
        uint treasury;
        uint ops;
        if(tradingOpenBlock + _blocksToBlacklist >= block.number) {
            _totalFees = _getBotFees();
            treasury = _getBotTreasuryFees();
            ops = _getBotOpsFees();
        } else {
            _totalFees = _getTotalFees(isSell);
            if (isSell) {
                treasury = sellTreasuryFee;
                ops = sellOpsFee;
            } else {
                treasury = buyTreasuryFee;
                ops = buyOpsFee;
            }
        }
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForTreasury += fees * treasury / _totalFees;
            _tokensForOps += fees * ops / _totalFees;
        }

        if (fees > 0) _transferStandard(sender, address(this), fees);

        return amount -= fees;
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) return sellTreasuryFee.add(sellOpsFee);
        return buyTreasuryFee.add(buyOpsFee);
    }

    function _getBotFees() private pure returns(uint256) {
        return 998;
    }

    function _getBotTreasuryFees() private pure returns(uint256) {
        return 499;
    }

    function _getBotOpsFees() private pure returns(uint256) {
        return 499;
    }

    receive() external payable {}
    fallback() external payable {}
    
    function unclog() public onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }
    
    function distributeFees() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(tkn != address(this), "Cannot withdraw this token");
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

    function removeLimits() public onlyOwner {
        maxBuyAmount = _totalSupply;
        maxSellAmount = _totalSupply;
        maxWalletAmount = _totalSupply;
        cooldownEnabled = false;
    }

}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newBuyOpsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_opsWalletAddy","type":"address"}],"name":"setOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newSellOpsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWalletAddy","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpenBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600860026101000a81548160ff0219169083151502179055506000600860036101000a81548160ff0219169083151502179055506001600860046101000a81548160ff0219169083151502179055506012600a6200006591906200114d565b6305f5e1006200007691906200128a565b6009556012600a6200008991906200114d565b6305f5e1006200009a91906200128a565b600a556012600a620000ad91906200114d565b6305f5e100620000be91906200128a565b600b556000600c556000600d556001600e55601e600f55600f546010556014601155601154601255601e6013556013546014556014601555601554601655600060195573bd63b269829dedb101bcd90c4150d2ac60e76ed4601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bd63b269829dedb101bcd90c4150d2ac60e76ed4601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200023d57600080fd5b506200025e6200025262000ba460201b60201c565b62000bac60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166012600a620002eb91906200114d565b6305f5e100620002fc91906200128a565b62000c7060201b60201c565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037157600080fd5b505afa15801562000386573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ac919062000edc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043157600080fd5b505afa15801562000446573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046c919062000edc565b6040518363ffffffff1660e01b81526004016200048b92919062001026565b602060405180830381600087803b158015620004a657600080fd5b505af1158015620004bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e1919062000edc565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005c292919062001053565b602060405180830381600087803b158015620005dd57600080fd5b505af1158015620005f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000618919062000f08565b506012600a6200062991906200114d565b6305f5e1006200063a91906200128a565b600360006200064e62000ba460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620006a262000e8560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620008cf62000e8560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000af662000ba460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a62000b7691906200114d565b6305f5e10062000b8791906200128a565b60405162000b969190620010c4565b60405180910390a3620013b2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cfb90620010a2565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d8f9062001080565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000e789190620010c4565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008151905062000ebf816200137e565b92915050565b60008151905062000ed68162001398565b92915050565b60006020828403121562000eef57600080fd5b600062000eff8482850162000eae565b91505092915050565b60006020828403121562000f1b57600080fd5b600062000f2b8482850162000ec5565b91505092915050565b62000f3f81620012eb565b82525050565b600062000f54602283620010e1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000fbc602483620010e1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b62001020816200132b565b82525050565b60006040820190506200103d600083018562000f34565b6200104c602083018462000f34565b9392505050565b60006040820190506200106a600083018562000f34565b62001079602083018462001015565b9392505050565b600060208201905081810360008301526200109b8162000f45565b9050919050565b60006020820190508181036000830152620010bd8162000fad565b9050919050565b6000602082019050620010db600083018462001015565b92915050565b600082825260208201905092915050565b6000808291508390505b600185111562001144578086048111156200111c576200111b62001342565b5b60018516156200112c5780820291505b80810290506200113c8562001371565b9450620010fc565b94509492505050565b60006200115a826200132b565b9150620011678362001335565b9250620011967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200119e565b905092915050565b600082620011b0576001905062001283565b81620011c0576000905062001283565b8160018114620011d95760028114620011e4576200121a565b600191505062001283565b60ff841115620011f957620011f862001342565b5b8360020a91508482111562001213576200121262001342565b5b5062001283565b5060208310610133831016604e8410600b8410161715620012545782820a9050838111156200124e576200124d62001342565b5b62001283565b620012638484846001620010f2565b925090508184048111156200127d576200127c62001342565b5b81810290505b9392505050565b600062001297826200132b565b9150620012a4836200132b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012e057620012df62001342565b5b828202905092915050565b6000620012f8826200130b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6200138981620012eb565b81146200139557600080fd5b50565b620013a381620012ff565b8114620013af57600080fd5b50565b61505680620013c26000396000f3fe60806040526004361061028c5760003560e01c806395d89b411161015a578063d1633649116100c1578063f34eb0b81161007a578063f34eb0b814610964578063f5648a4f1461098d578063f5a6682f146109a4578063fb0ecfa4146109cd578063fe575a87146109f6578063ffb54a9914610a3357610293565b8063d16336491461085a578063dd62ed3e14610883578063e01af92c146108c0578063e1baae1f146108e9578063e99c9d0914610912578063f2fde38b1461093b57610293565b8063a985ceef11610113578063a985ceef14610772578063aa4bde281461079d578063afa4f3b2146107c8578063ba8f63c9146107f1578063bb57ad201461081a578063cb9637281461083157610293565b806395d89b41146106625780639e93ad8e1461068d578063a64e4f8a146106b8578063a8602fea146106e3578063a901dd921461070c578063a9059cbb1461073557610293565b8063659ffb9c116101fe57806370a08231116101b757806370a0823114610576578063715018a6146105b3578063751039fc146105ca57806378dd7d41146105e157806388e765ff1461060c5780638da5cb5b1461063757610293565b8063659ffb9c1461048a57806366d602ae146104b557806367c45349146104e05780636ac9a870146104f75780636b2fb124146105205780636ddd17131461054b57610293565b806318160ddd1161025057806318160ddd1461037a57806323b872dd146103a557806327a14fc2146103e2578063313ce5671461040b5780635932ead1146104365780635c068a8c1461045f57610293565b806306fdde0314610295578063095ea7b3146102c05780630e23500e146102fd578063105222f91461032857806314626dc61461035157610293565b3661029357005b005b3480156102a157600080fd5b506102aa610a5e565b6040516102b79190614710565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190613b69565b610a9b565b6040516102f491906146f5565b60405180910390f35b34801561030957600080fd5b50610312610ab9565b60405161031f9190614a52565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613ba5565b610abf565b005b34801561035d57600080fd5b5061037860048036038101906103739190613c4b565b610b82565b005b34801561038657600080fd5b5061038f610be5565b60405161039c9190614a52565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613b1a565b610c09565b6040516103d991906146f5565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613c4b565b610ce2565b005b34801561041757600080fd5b50610420610d65565b60405161042d9190614ac7565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613bf9565b610d6e565b005b34801561046b57600080fd5b50610474610d93565b6040516104819190614a52565b60405180910390f35b34801561049657600080fd5b5061049f610d99565b6040516104ac9190614a52565b60405180910390f35b3480156104c157600080fd5b506104ca610d9f565b6040516104d79190614a52565b60405180910390f35b3480156104ec57600080fd5b506104f5610da5565b005b34801561050357600080fd5b5061051e60048036038101906105199190613c9d565b610dc6565b005b34801561052c57600080fd5b50610535610e37565b6040516105429190614a52565b60405180910390f35b34801561055757600080fd5b50610560610e3d565b60405161056d91906146f5565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613a8c565b610e50565b6040516105aa9190614a52565b60405180910390f35b3480156105bf57600080fd5b506105c8610e99565b005b3480156105d657600080fd5b506105df610ead565b005b3480156105ed57600080fd5b506105f6610f3b565b6040516106039190614a52565b60405180910390f35b34801561061857600080fd5b50610621610f41565b60405161062e9190614a52565b60405180910390f35b34801561064357600080fd5b5061064c610f47565b60405161065991906146b1565b60405180910390f35b34801561066e57600080fd5b50610677610f70565b6040516106849190614710565b60405180910390f35b34801561069957600080fd5b506106a2610fad565b6040516106af9190614a52565b60405180910390f35b3480156106c457600080fd5b506106cd610fb3565b6040516106da91906146f5565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613a8c565b610fc6565b005b34801561071857600080fd5b50610733600480360381019061072e9190613bf9565b61128b565b005b34801561074157600080fd5b5061075c60048036038101906107579190613b69565b6112b0565b60405161076991906146f5565b60405180910390f35b34801561077e57600080fd5b506107876112ce565b60405161079491906146f5565b60405180910390f35b3480156107a957600080fd5b506107b26112e1565b6040516107bf9190614a52565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613c4b565b6112e7565b005b3480156107fd57600080fd5b5061081860048036038101906108139190613a8c565b6113dc565b005b34801561082657600080fd5b5061082f6116a1565b005b34801561083d57600080fd5b5061085860048036038101906108539190613a8c565b6116ba565b005b34801561086657600080fd5b50610881600480360381019061087c9190613c4b565b61191b565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613ade565b611a69565b6040516108b79190614a52565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190613bf9565b611af0565b005b3480156108f557600080fd5b50610910600480360381019061090b9190613ba5565b611b15565b005b34801561091e57600080fd5b5061093960048036038101906109349190613c4b565b611c6e565b005b34801561094757600080fd5b50610962600480360381019061095d9190613a8c565b611cf1565b005b34801561097057600080fd5b5061098b60048036038101906109869190613c4b565b611d75565b005b34801561099957600080fd5b506109a2611df8565b005b3480156109b057600080fd5b506109cb60048036038101906109c69190613ba5565b611e71565b005b3480156109d957600080fd5b506109f460048036038101906109ef9190613c9d565b611f34565b005b348015610a0257600080fd5b50610a1d6004803603810190610a189190613a8c565b611fa5565b604051610a2a91906146f5565b60405180910390f35b348015610a3f57600080fd5b50610a48611ffb565b604051610a5591906146f5565b60405180910390f35b60606040518060400160405280600681526020017f4465657020580000000000000000000000000000000000000000000000000000815250905090565b6000610aaf610aa861200e565b8484612016565b6001905092915050565b600c5481565b610ac7612223565b60005b8251811015610b7d578160056000858481518110610b11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b7590614ebf565b915050610aca565b505050565b610b8a612223565b60008110158015610b9c5750600a8111155b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290614a12565b60405180910390fd5b80600e8190555050565b60006012600a610bf59190614c79565b6305f5e100610c049190614d97565b905090565b6000610c168484846122a1565b610cd784610c2261200e565b610cd285604051806060016040528060288152602001614ff960289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c8861200e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3c9092919063ffffffff16565b612016565b600190509392505050565b610cea612223565b610d196103e8610d0b6001610cfd610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614852565b60405180910390fd5b80600b8190555050565b60006012905090565b610d76612223565b80600860036101000a81548160ff02191690831515021790555050565b600f5481565b60155481565b600a5481565b610dad612223565b6000610db830610e50565b9050610dc381612ebd565b50565b610dce612223565b61012c610de4828461318190919063ffffffff16565b1115610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614872565b60405180910390fd5b81601381905550806015819055505050565b60135481565b600860029054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea1612223565b610eab6000613197565b565b610eb5612223565b6012600a610ec39190614c79565b6305f5e100610ed29190614d97565b6009819055506012600a610ee69190614c79565b6305f5e100610ef59190614d97565b600a819055506012600a610f099190614c79565b6305f5e100610f189190614d97565b600b819055506000600860036101000a81548160ff021916908315150217905550565b60115481565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4445455058000000000000000000000000000000000000000000000000000000815250905090565b6103e881565b600860049054906101000a900460ff1681565b610fce612223565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906148d2565b60405180910390fd5b600060056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611293612223565b80600860046101000a81548160ff02191690831515021790555050565b60006112c46112bd61200e565b84846122a1565b6001905092915050565b600860039054906101000a900460ff1681565b600b5481565b6112ef612223565b61131f620186a06113116001611303610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890614892565b60405180910390fd5b6113906103e86113826005611374610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b8111156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906148b2565b60405180910390fd5b8060198190555050565b6113e4612223565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90614772565b60405180910390fd5b600060056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116a9612223565b60004790506116b78161325b565b50565b6116c2612223565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614972565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161176c91906146b1565b60206040518083038186803b15801561178457600080fd5b505afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613c74565b116117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614732565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161183791906146b1565b60206040518083038186803b15801561184f57600080fd5b505afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118879190613c74565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016118c49291906146cc565b602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190613c22565b505050565b611923612223565b600860009054906101000a900460ff1615611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906147f2565b60405180910390fd5b6001600860026101000a81548160ff0219169083151502179055506001600860036101000a81548160ff0219169083151502179055506119ed6127106119df60196012600a6119c29190614c79565b6305f5e1006119d19190614d97565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b600a81905550611a37612710611a29600a6012600a611a0c9190614c79565b6305f5e100611a1b9190614d97565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b6019819055506001600860006101000a81548160ff02191690831515021790555043600c8190555080600d8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611af8612223565b80600860026101000a81548160ff02191690831515021790555050565b611b1d612223565b60005b8251811015611c6957601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838281518110611b9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614611c56578160076000858481518110611bfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611c6190614ebf565b915050611b20565b505050565b611c76612223565b611ca5612710611c976001611c89610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde906147d2565b60405180910390fd5b80600a8190555050565b611cf9612223565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614792565b60405180910390fd5b611d7281613197565b50565b611d7d612223565b611dac612710611d9e6001611d90610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de5906149d2565b60405180910390fd5b8060098190555050565b611e00612223565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611e269061469c565b60006040518083038185875af1925050503d8060008114611e63576040519150601f19603f3d011682016040523d82523d6000602084013e611e68565b606091505b50508091505050565b611e79612223565b60005b8251811015611f2f578160066000858481518110611ec3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2790614ebf565b915050611e7c565b505050565b611f3c612223565b61012c611f52828461318190919063ffffffff16565b1115611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90614932565b60405180910390fd5b81600f81905550806011819055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900460ff1681565b600033905090565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e906149f2565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906147b2565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122169190614a52565b60405180910390a3505050565b61222b61200e565b73ffffffffffffffffffffffffffffffffffffffff16612249610f47565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690614952565b60405180910390fd5b565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612332576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612329906149b2565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614752565b60405180910390fd5b60008111612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614992565b60405180910390fd5b6000600190506000612416610f47565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156124845750612454610f47565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124de5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125385750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125515750600860019054906101000a900460ff16155b15612c2257600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fa5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61260357600080fd5b600860009054906101000a900460ff166126f857600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126b85750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90614832565b60405180910390fd5b5b600860039054906101000a900460ff161561292d57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156127b95750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561292c57600e54436127cc9190614df1565b600260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156128645750600e54436128229190614df1565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90614812565b60405180910390fd5b43600260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156129d85750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a2e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ad157600954831115612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614912565b60405180910390fd5b600b5483612a8586610e50565b612a8f9190614b9f565b1115612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac7906148f2565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b7c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bd25750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2157600a54831115612c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1390614a32565b60405180910390fd5b600190505b5b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cc35750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612cdb5750600860049054906101000a900460ff16155b15612ce557600091505b6000612cf030610e50565b9050600060195482118015612d025750825b9050808015612d1d5750600860029054906101000a900460ff165b8015612d365750600860019054906101000a900460ff16155b8015612d8c5750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612de25750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e26576001600860016101000a81548160ff021916908315150217905550612e0a613356565b6000600860016101000a81548160ff0219169083151502179055505b612e338787878787613556565b50505050505050565b6000838311158290612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b9190614710565b60405180910390fd5b5082840390509392505050565b60008183612e9f9190614d97565b905092915050565b60008183612eb59190614bf5565b905092915050565b6000600267ffffffffffffffff811115612f00577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f2e5781602001602082028036833780820191505090505b5090503081600081518110612f6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561300e57600080fd5b505afa158015613022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130469190613ab5565b81600181518110613080577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130e730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612016565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161314b959493929190614a6d565b600060405180830381600087803b15801561316557600080fd5b505af1158015613179573d6000803e3d6000fd5b505050505050565b6000818361318f9190614b9f565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6132ab600284612ea790919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156132d6573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613327600284612ea790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613352573d6000803e3d6000fd5b5050565b600061336130610e50565b9050600061337c60185460175461318190919063ffffffff16565b905060008083148061338e5750600082145b1561339b57505050613554565b6133b16005601954612e9190919063ffffffff16565b8311156133d1576133ce6005601954612e9190919063ffffffff16565b92505b60004790506133df84612ebd565b60006133f4824761359690919063ffffffff16565b9050600061341f8561341160175485612e9190919063ffffffff16565b612ea790919063ffffffff16565b905060006017819055506000601881905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516134779061469c565b60006040518083038185875af1925050503d80600081146134b4576040519150601f19603f3d011682016040523d82523d6000602084013e6134b9565b606091505b505080945050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135059061469c565b60006040518083038185875af1925050503d8060008114613542576040519150601f19603f3d011682016040523d82523d6000602084013e613547565b606091505b5050809450505050505050505b565b81613568576135636135ac565b613576565b61357385848361362d565b92505b61358185858561375b565b8161358f5761358e6138ef565b5b5050505050565b600081836135a49190614df1565b905092915050565b6000600f541480156135c057506000601154145b80156135ce57506000601354145b80156135dc57506000601554145b156135e65761362b565b600f546010819055506011546012819055506013546014819055506015546016819055506000600f819055506000601181905550600060138190555060006015819055505b565b60008060008043600d54600c546136449190614b9f565b1061366c57613651613915565b925061365b61391f565b9150613665613929565b9050613698565b61367585613933565b9250841561368c5760135491506015549050613697565b600f54915060115490505b5b60008084111561372a576136c96103e86136bb868a612e9190919063ffffffff16565b612ea790919063ffffffff16565b90508383826136d89190614d97565b6136e29190614bf5565b601760008282546136f39190614b9f565b925050819055508382826137079190614d97565b6137119190614bf5565b601860008282546137229190614b9f565b925050819055505b600081111561373f5761373e88308361375b565b5b808761374b9190614df1565b9650869450505050509392505050565b6137ad81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461359690919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461318190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138e29190614a52565b60405180910390a3505050565b601054600f81905550601254601181905550601454601381905550601654601581905550565b60006103e6905090565b60006101f3905090565b60006101f3905090565b600081156139595761395260155460135461318190919063ffffffff16565b9050613973565b613970601154600f5461318190919063ffffffff16565b90505b919050565b600061398b61398684614b13565b614ae2565b905080838252602082019050828560208602820111156139aa57600080fd5b60005b858110156139da57816139c088826139e4565b8452602084019350602083019250506001810190506139ad565b5050509392505050565b6000813590506139f381614fb3565b92915050565b600081519050613a0881614fb3565b92915050565b600082601f830112613a1f57600080fd5b8135613a2f848260208601613978565b91505092915050565b600081359050613a4781614fca565b92915050565b600081519050613a5c81614fca565b92915050565b600081359050613a7181614fe1565b92915050565b600081519050613a8681614fe1565b92915050565b600060208284031215613a9e57600080fd5b6000613aac848285016139e4565b91505092915050565b600060208284031215613ac757600080fd5b6000613ad5848285016139f9565b91505092915050565b60008060408385031215613af157600080fd5b6000613aff858286016139e4565b9250506020613b10858286016139e4565b9150509250929050565b600080600060608486031215613b2f57600080fd5b6000613b3d868287016139e4565b9350506020613b4e868287016139e4565b9250506040613b5f86828701613a62565b9150509250925092565b60008060408385031215613b7c57600080fd5b6000613b8a858286016139e4565b9250506020613b9b85828601613a62565b9150509250929050565b60008060408385031215613bb857600080fd5b600083013567ffffffffffffffff811115613bd257600080fd5b613bde85828601613a0e565b9250506020613bef85828601613a38565b9150509250929050565b600060208284031215613c0b57600080fd5b6000613c1984828501613a38565b91505092915050565b600060208284031215613c3457600080fd5b6000613c4284828501613a4d565b91505092915050565b600060208284031215613c5d57600080fd5b6000613c6b84828501613a62565b91505092915050565b600060208284031215613c8657600080fd5b6000613c9484828501613a77565b91505092915050565b60008060408385031215613cb057600080fd5b6000613cbe85828601613a62565b9250506020613ccf85828601613a62565b9150509250929050565b6000613ce58383613cf1565b60208301905092915050565b613cfa81614e25565b82525050565b613d0981614e25565b82525050565b6000613d1a82614b4f565b613d248185614b72565b9350613d2f83614b3f565b8060005b83811015613d60578151613d478882613cd9565b9750613d5283614b65565b925050600181019050613d33565b5085935050505092915050565b613d7681614e37565b82525050565b613d8581614e7a565b82525050565b6000613d9682614b5a565b613da08185614b8e565b9350613db0818560208601614e8c565b613db981614f95565b840191505092915050565b6000613dd1600983614b8e565b91507f4e6f20746f6b656e7300000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e11602383614b8e565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e77601e83614b8e565b91507f5f6f707357616c6c657420616464726573732063616e6e6f74206265203000006000830152602082019050919050565b6000613eb7602683614b8e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f1d602283614b8e565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f83603883614b8e565b91507f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060008301527f7468616e20302e30312520746f74616c20737570706c792e00000000000000006020830152604082019050919050565b6000613fe9601783614b8e565b91507f54726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000614029602883614b8e565b91507f5472616e736665722064656c617920656e61626c65642e20547279206167616960008301527f6e206c617465722e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061408f601b83614b8e565b91507f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006000830152602082019050919050565b60006140cf603983614b8e565b91507f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560008301527f72207468616e20302e312520746f74616c20737570706c792e000000000000006020830152604082019050919050565b6000614135601e83614b8e565b91507f4d757374206b6565702073656c6c2074617865732062656c6f772033302500006000830152602082019050919050565b6000614175603583614b8e565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006141db603483614b8e565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614241602383614b8e565b91507f5f747265617375727957616c6c657420616464726573732063616e6e6f74206260008301527f65203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142a7602483614b8e565b91507f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008301527f756e742e000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430d602983614b8e565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61784260008301527f7579416d6f756e742e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614373601d83614b8e565b91507f4d757374206b656570206275792074617865732062656c6f77203330250000006000830152602082019050919050565b60006143b3602083614b8e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006143f3601a83614b8e565b91507f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006000830152602082019050919050565b6000614433602983614b8e565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614499602583614b8e565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144ff600083614b83565b9150600082019050919050565b6000614519603783614b8e565b91507f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460008301527f68616e20302e30312520746f74616c20737570706c792e0000000000000000006020830152604082019050919050565b600061457f602483614b8e565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145e5601583614b8e565b91507f496e76616c696420626c6f636b7320636f756e742e00000000000000000000006000830152602082019050919050565b6000614625602a83614b8e565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785360008301527f656c6c416d6f756e742e000000000000000000000000000000000000000000006020830152604082019050919050565b61468781614e63565b82525050565b61469681614e6d565b82525050565b60006146a7826144f2565b9150819050919050565b60006020820190506146c66000830184613d00565b92915050565b60006040820190506146e16000830185613d00565b6146ee602083018461467e565b9392505050565b600060208201905061470a6000830184613d6d565b92915050565b6000602082019050818103600083015261472a8184613d8b565b905092915050565b6000602082019050818103600083015261474b81613dc4565b9050919050565b6000602082019050818103600083015261476b81613e04565b9050919050565b6000602082019050818103600083015261478b81613e6a565b9050919050565b600060208201905081810360008301526147ab81613eaa565b9050919050565b600060208201905081810360008301526147cb81613f10565b9050919050565b600060208201905081810360008301526147eb81613f76565b9050919050565b6000602082019050818103600083015261480b81613fdc565b9050919050565b6000602082019050818103600083015261482b8161401c565b9050919050565b6000602082019050818103600083015261484b81614082565b9050919050565b6000602082019050818103600083015261486b816140c2565b9050919050565b6000602082019050818103600083015261488b81614128565b9050919050565b600060208201905081810360008301526148ab81614168565b9050919050565b600060208201905081810360008301526148cb816141ce565b9050919050565b600060208201905081810360008301526148eb81614234565b9050919050565b6000602082019050818103600083015261490b8161429a565b9050919050565b6000602082019050818103600083015261492b81614300565b9050919050565b6000602082019050818103600083015261494b81614366565b9050919050565b6000602082019050818103600083015261496b816143a6565b9050919050565b6000602082019050818103600083015261498b816143e6565b9050919050565b600060208201905081810360008301526149ab81614426565b9050919050565b600060208201905081810360008301526149cb8161448c565b9050919050565b600060208201905081810360008301526149eb8161450c565b9050919050565b60006020820190508181036000830152614a0b81614572565b9050919050565b60006020820190508181036000830152614a2b816145d8565b9050919050565b60006020820190508181036000830152614a4b81614618565b9050919050565b6000602082019050614a67600083018461467e565b92915050565b600060a082019050614a82600083018861467e565b614a8f6020830187613d7c565b8181036040830152614aa18186613d0f565b9050614ab06060830185613d00565b614abd608083018461467e565b9695505050505050565b6000602082019050614adc600083018461468d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614b0957614b08614f66565b5b8060405250919050565b600067ffffffffffffffff821115614b2e57614b2d614f66565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614baa82614e63565b9150614bb583614e63565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bea57614be9614f08565b5b828201905092915050565b6000614c0082614e63565b9150614c0b83614e63565b925082614c1b57614c1a614f37565b5b828204905092915050565b6000808291508390505b6001851115614c7057808604811115614c4c57614c4b614f08565b5b6001851615614c5b5780820291505b8081029050614c6985614fa6565b9450614c30565b94509492505050565b6000614c8482614e63565b9150614c8f83614e6d565b9250614cbc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614cc4565b905092915050565b600082614cd45760019050614d90565b81614ce25760009050614d90565b8160018114614cf85760028114614d0257614d31565b6001915050614d90565b60ff841115614d1457614d13614f08565b5b8360020a915084821115614d2b57614d2a614f08565b5b50614d90565b5060208310610133831016604e8410600b8410161715614d665782820a905083811115614d6157614d60614f08565b5b614d90565b614d738484846001614c26565b92509050818404811115614d8a57614d89614f08565b5b81810290505b9392505050565b6000614da282614e63565b9150614dad83614e63565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de657614de5614f08565b5b828202905092915050565b6000614dfc82614e63565b9150614e0783614e63565b925082821015614e1a57614e19614f08565b5b828203905092915050565b6000614e3082614e43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e8582614e63565b9050919050565b60005b83811015614eaa578082015181840152602081019050614e8f565b83811115614eb9576000848401525b50505050565b6000614eca82614e63565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614efd57614efc614f08565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b614fbc81614e25565b8114614fc757600080fd5b50565b614fd381614e37565b8114614fde57600080fd5b50565b614fea81614e63565b8114614ff557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a11ffc2b06e0e9fe34ea93fec7381e6c356daec0a0d2ca49dea29b91b34a2b2b64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806395d89b411161015a578063d1633649116100c1578063f34eb0b81161007a578063f34eb0b814610964578063f5648a4f1461098d578063f5a6682f146109a4578063fb0ecfa4146109cd578063fe575a87146109f6578063ffb54a9914610a3357610293565b8063d16336491461085a578063dd62ed3e14610883578063e01af92c146108c0578063e1baae1f146108e9578063e99c9d0914610912578063f2fde38b1461093b57610293565b8063a985ceef11610113578063a985ceef14610772578063aa4bde281461079d578063afa4f3b2146107c8578063ba8f63c9146107f1578063bb57ad201461081a578063cb9637281461083157610293565b806395d89b41146106625780639e93ad8e1461068d578063a64e4f8a146106b8578063a8602fea146106e3578063a901dd921461070c578063a9059cbb1461073557610293565b8063659ffb9c116101fe57806370a08231116101b757806370a0823114610576578063715018a6146105b3578063751039fc146105ca57806378dd7d41146105e157806388e765ff1461060c5780638da5cb5b1461063757610293565b8063659ffb9c1461048a57806366d602ae146104b557806367c45349146104e05780636ac9a870146104f75780636b2fb124146105205780636ddd17131461054b57610293565b806318160ddd1161025057806318160ddd1461037a57806323b872dd146103a557806327a14fc2146103e2578063313ce5671461040b5780635932ead1146104365780635c068a8c1461045f57610293565b806306fdde0314610295578063095ea7b3146102c05780630e23500e146102fd578063105222f91461032857806314626dc61461035157610293565b3661029357005b005b3480156102a157600080fd5b506102aa610a5e565b6040516102b79190614710565b60405180910390f35b3480156102cc57600080fd5b506102e760048036038101906102e29190613b69565b610a9b565b6040516102f491906146f5565b60405180910390f35b34801561030957600080fd5b50610312610ab9565b60405161031f9190614a52565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613ba5565b610abf565b005b34801561035d57600080fd5b5061037860048036038101906103739190613c4b565b610b82565b005b34801561038657600080fd5b5061038f610be5565b60405161039c9190614a52565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190613b1a565b610c09565b6040516103d991906146f5565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613c4b565b610ce2565b005b34801561041757600080fd5b50610420610d65565b60405161042d9190614ac7565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613bf9565b610d6e565b005b34801561046b57600080fd5b50610474610d93565b6040516104819190614a52565b60405180910390f35b34801561049657600080fd5b5061049f610d99565b6040516104ac9190614a52565b60405180910390f35b3480156104c157600080fd5b506104ca610d9f565b6040516104d79190614a52565b60405180910390f35b3480156104ec57600080fd5b506104f5610da5565b005b34801561050357600080fd5b5061051e60048036038101906105199190613c9d565b610dc6565b005b34801561052c57600080fd5b50610535610e37565b6040516105429190614a52565b60405180910390f35b34801561055757600080fd5b50610560610e3d565b60405161056d91906146f5565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190613a8c565b610e50565b6040516105aa9190614a52565b60405180910390f35b3480156105bf57600080fd5b506105c8610e99565b005b3480156105d657600080fd5b506105df610ead565b005b3480156105ed57600080fd5b506105f6610f3b565b6040516106039190614a52565b60405180910390f35b34801561061857600080fd5b50610621610f41565b60405161062e9190614a52565b60405180910390f35b34801561064357600080fd5b5061064c610f47565b60405161065991906146b1565b60405180910390f35b34801561066e57600080fd5b50610677610f70565b6040516106849190614710565b60405180910390f35b34801561069957600080fd5b506106a2610fad565b6040516106af9190614a52565b60405180910390f35b3480156106c457600080fd5b506106cd610fb3565b6040516106da91906146f5565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613a8c565b610fc6565b005b34801561071857600080fd5b50610733600480360381019061072e9190613bf9565b61128b565b005b34801561074157600080fd5b5061075c60048036038101906107579190613b69565b6112b0565b60405161076991906146f5565b60405180910390f35b34801561077e57600080fd5b506107876112ce565b60405161079491906146f5565b60405180910390f35b3480156107a957600080fd5b506107b26112e1565b6040516107bf9190614a52565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613c4b565b6112e7565b005b3480156107fd57600080fd5b5061081860048036038101906108139190613a8c565b6113dc565b005b34801561082657600080fd5b5061082f6116a1565b005b34801561083d57600080fd5b5061085860048036038101906108539190613a8c565b6116ba565b005b34801561086657600080fd5b50610881600480360381019061087c9190613c4b565b61191b565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613ade565b611a69565b6040516108b79190614a52565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e29190613bf9565b611af0565b005b3480156108f557600080fd5b50610910600480360381019061090b9190613ba5565b611b15565b005b34801561091e57600080fd5b5061093960048036038101906109349190613c4b565b611c6e565b005b34801561094757600080fd5b50610962600480360381019061095d9190613a8c565b611cf1565b005b34801561097057600080fd5b5061098b60048036038101906109869190613c4b565b611d75565b005b34801561099957600080fd5b506109a2611df8565b005b3480156109b057600080fd5b506109cb60048036038101906109c69190613ba5565b611e71565b005b3480156109d957600080fd5b506109f460048036038101906109ef9190613c9d565b611f34565b005b348015610a0257600080fd5b50610a1d6004803603810190610a189190613a8c565b611fa5565b604051610a2a91906146f5565b60405180910390f35b348015610a3f57600080fd5b50610a48611ffb565b604051610a5591906146f5565b60405180910390f35b60606040518060400160405280600681526020017f4465657020580000000000000000000000000000000000000000000000000000815250905090565b6000610aaf610aa861200e565b8484612016565b6001905092915050565b600c5481565b610ac7612223565b60005b8251811015610b7d578160056000858481518110610b11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b7590614ebf565b915050610aca565b505050565b610b8a612223565b60008110158015610b9c5750600a8111155b610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd290614a12565b60405180910390fd5b80600e8190555050565b60006012600a610bf59190614c79565b6305f5e100610c049190614d97565b905090565b6000610c168484846122a1565b610cd784610c2261200e565b610cd285604051806060016040528060288152602001614ff960289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c8861200e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3c9092919063ffffffff16565b612016565b600190509392505050565b610cea612223565b610d196103e8610d0b6001610cfd610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614852565b60405180910390fd5b80600b8190555050565b60006012905090565b610d76612223565b80600860036101000a81548160ff02191690831515021790555050565b600f5481565b60155481565b600a5481565b610dad612223565b6000610db830610e50565b9050610dc381612ebd565b50565b610dce612223565b61012c610de4828461318190919063ffffffff16565b1115610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90614872565b60405180910390fd5b81601381905550806015819055505050565b60135481565b600860029054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ea1612223565b610eab6000613197565b565b610eb5612223565b6012600a610ec39190614c79565b6305f5e100610ed29190614d97565b6009819055506012600a610ee69190614c79565b6305f5e100610ef59190614d97565b600a819055506012600a610f099190614c79565b6305f5e100610f189190614d97565b600b819055506000600860036101000a81548160ff021916908315150217905550565b60115481565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4445455058000000000000000000000000000000000000000000000000000000815250905090565b6103e881565b600860049054906101000a900460ff1681565b610fce612223565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561105f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611056906148d2565b60405180910390fd5b600060056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611293612223565b80600860046101000a81548160ff02191690831515021790555050565b60006112c46112bd61200e565b84846122a1565b6001905092915050565b600860039054906101000a900460ff1681565b600b5481565b6112ef612223565b61131f620186a06113116001611303610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890614892565b60405180910390fd5b6113906103e86113826005611374610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b8111156113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906148b2565b60405180910390fd5b8060198190555050565b6113e4612223565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c90614772565b60405180910390fd5b600060056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116a9612223565b60004790506116b78161325b565b50565b6116c2612223565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172890614972565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161176c91906146b1565b60206040518083038186803b15801561178457600080fd5b505afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190613c74565b116117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614732565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161183791906146b1565b60206040518083038186803b15801561184f57600080fd5b505afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118879190613c74565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016118c49291906146cc565b602060405180830381600087803b1580156118de57600080fd5b505af11580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190613c22565b505050565b611923612223565b600860009054906101000a900460ff1615611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906147f2565b60405180910390fd5b6001600860026101000a81548160ff0219169083151502179055506001600860036101000a81548160ff0219169083151502179055506119ed6127106119df60196012600a6119c29190614c79565b6305f5e1006119d19190614d97565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b600a81905550611a37612710611a29600a6012600a611a0c9190614c79565b6305f5e100611a1b9190614d97565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b6019819055506001600860006101000a81548160ff02191690831515021790555043600c8190555080600d8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611af8612223565b80600860026101000a81548160ff02191690831515021790555050565b611b1d612223565b60005b8251811015611c6957601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838281518110611b9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614611c56578160076000858481518110611bfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611c6190614ebf565b915050611b20565b505050565b611c76612223565b611ca5612710611c976001611c89610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde906147d2565b60405180910390fd5b80600a8190555050565b611cf9612223565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090614792565b60405180910390fd5b611d7281613197565b50565b611d7d612223565b611dac612710611d9e6001611d90610be5565b612e9190919063ffffffff16565b612ea790919063ffffffff16565b811015611dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de5906149d2565b60405180910390fd5b8060098190555050565b611e00612223565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611e269061469c565b60006040518083038185875af1925050503d8060008114611e63576040519150601f19603f3d011682016040523d82523d6000602084013e611e68565b606091505b50508091505050565b611e79612223565b60005b8251811015611f2f578160066000858481518110611ec3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2790614ebf565b915050611e7c565b505050565b611f3c612223565b61012c611f52828461318190919063ffffffff16565b1115611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90614932565b60405180910390fd5b81600f81905550806011819055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900460ff1681565b600033905090565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e906149f2565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f906147b2565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122169190614a52565b60405180910390a3505050565b61222b61200e565b73ffffffffffffffffffffffffffffffffffffffff16612249610f47565b73ffffffffffffffffffffffffffffffffffffffff161461229f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229690614952565b60405180910390fd5b565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612332576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612329906149b2565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614752565b60405180910390fd5b60008111612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90614992565b60405180910390fd5b6000600190506000612416610f47565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156124845750612454610f47565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124de5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125385750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125515750600860019054906101000a900460ff16155b15612c2257600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fa5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61260357600080fd5b600860009054906101000a900460ff166126f857600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126b85750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee90614832565b60405180910390fd5b5b600860039054906101000a900460ff161561292d57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156127b95750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561292c57600e54436127cc9190614df1565b600260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541080156128645750600e54436128229190614df1565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289a90614812565b60405180910390fd5b43600260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156129d85750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a2e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ad157600954831115612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614912565b60405180910390fd5b600b5483612a8586610e50565b612a8f9190614b9f565b1115612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac7906148f2565b60405180910390fd5b5b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612b7c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612bd25750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c2157600a54831115612c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1390614a32565b60405180910390fd5b600190505b5b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cc35750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612cdb5750600860049054906101000a900460ff16155b15612ce557600091505b6000612cf030610e50565b9050600060195482118015612d025750825b9050808015612d1d5750600860029054906101000a900460ff165b8015612d365750600860019054906101000a900460ff16155b8015612d8c5750600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612de25750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e26576001600860016101000a81548160ff021916908315150217905550612e0a613356565b6000600860016101000a81548160ff0219169083151502179055505b612e338787878787613556565b50505050505050565b6000838311158290612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b9190614710565b60405180910390fd5b5082840390509392505050565b60008183612e9f9190614d97565b905092915050565b60008183612eb59190614bf5565b905092915050565b6000600267ffffffffffffffff811115612f00577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612f2e5781602001602082028036833780820191505090505b5090503081600081518110612f6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561300e57600080fd5b505afa158015613022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130469190613ab5565b81600181518110613080577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130e730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612016565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161314b959493929190614a6d565b600060405180830381600087803b15801561316557600080fd5b505af1158015613179573d6000803e3d6000fd5b505050505050565b6000818361318f9190614b9f565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6132ab600284612ea790919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156132d6573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613327600284612ea790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613352573d6000803e3d6000fd5b5050565b600061336130610e50565b9050600061337c60185460175461318190919063ffffffff16565b905060008083148061338e5750600082145b1561339b57505050613554565b6133b16005601954612e9190919063ffffffff16565b8311156133d1576133ce6005601954612e9190919063ffffffff16565b92505b60004790506133df84612ebd565b60006133f4824761359690919063ffffffff16565b9050600061341f8561341160175485612e9190919063ffffffff16565b612ea790919063ffffffff16565b905060006017819055506000601881905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516134779061469c565b60006040518083038185875af1925050503d80600081146134b4576040519150601f19603f3d011682016040523d82523d6000602084013e6134b9565b606091505b505080945050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135059061469c565b60006040518083038185875af1925050503d8060008114613542576040519150601f19603f3d011682016040523d82523d6000602084013e613547565b606091505b5050809450505050505050505b565b81613568576135636135ac565b613576565b61357385848361362d565b92505b61358185858561375b565b8161358f5761358e6138ef565b5b5050505050565b600081836135a49190614df1565b905092915050565b6000600f541480156135c057506000601154145b80156135ce57506000601354145b80156135dc57506000601554145b156135e65761362b565b600f546010819055506011546012819055506013546014819055506015546016819055506000600f819055506000601181905550600060138190555060006015819055505b565b60008060008043600d54600c546136449190614b9f565b1061366c57613651613915565b925061365b61391f565b9150613665613929565b9050613698565b61367585613933565b9250841561368c5760135491506015549050613697565b600f54915060115490505b5b60008084111561372a576136c96103e86136bb868a612e9190919063ffffffff16565b612ea790919063ffffffff16565b90508383826136d89190614d97565b6136e29190614bf5565b601760008282546136f39190614b9f565b925050819055508382826137079190614d97565b6137119190614bf5565b601860008282546137229190614b9f565b925050819055505b600081111561373f5761373e88308361375b565b5b808761374b9190614df1565b9650869450505050509392505050565b6137ad81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461359690919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384281600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461318190919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138e29190614a52565b60405180910390a3505050565b601054600f81905550601254601181905550601454601381905550601654601581905550565b60006103e6905090565b60006101f3905090565b60006101f3905090565b600081156139595761395260155460135461318190919063ffffffff16565b9050613973565b613970601154600f5461318190919063ffffffff16565b90505b919050565b600061398b61398684614b13565b614ae2565b905080838252602082019050828560208602820111156139aa57600080fd5b60005b858110156139da57816139c088826139e4565b8452602084019350602083019250506001810190506139ad565b5050509392505050565b6000813590506139f381614fb3565b92915050565b600081519050613a0881614fb3565b92915050565b600082601f830112613a1f57600080fd5b8135613a2f848260208601613978565b91505092915050565b600081359050613a4781614fca565b92915050565b600081519050613a5c81614fca565b92915050565b600081359050613a7181614fe1565b92915050565b600081519050613a8681614fe1565b92915050565b600060208284031215613a9e57600080fd5b6000613aac848285016139e4565b91505092915050565b600060208284031215613ac757600080fd5b6000613ad5848285016139f9565b91505092915050565b60008060408385031215613af157600080fd5b6000613aff858286016139e4565b9250506020613b10858286016139e4565b9150509250929050565b600080600060608486031215613b2f57600080fd5b6000613b3d868287016139e4565b9350506020613b4e868287016139e4565b9250506040613b5f86828701613a62565b9150509250925092565b60008060408385031215613b7c57600080fd5b6000613b8a858286016139e4565b9250506020613b9b85828601613a62565b9150509250929050565b60008060408385031215613bb857600080fd5b600083013567ffffffffffffffff811115613bd257600080fd5b613bde85828601613a0e565b9250506020613bef85828601613a38565b9150509250929050565b600060208284031215613c0b57600080fd5b6000613c1984828501613a38565b91505092915050565b600060208284031215613c3457600080fd5b6000613c4284828501613a4d565b91505092915050565b600060208284031215613c5d57600080fd5b6000613c6b84828501613a62565b91505092915050565b600060208284031215613c8657600080fd5b6000613c9484828501613a77565b91505092915050565b60008060408385031215613cb057600080fd5b6000613cbe85828601613a62565b9250506020613ccf85828601613a62565b9150509250929050565b6000613ce58383613cf1565b60208301905092915050565b613cfa81614e25565b82525050565b613d0981614e25565b82525050565b6000613d1a82614b4f565b613d248185614b72565b9350613d2f83614b3f565b8060005b83811015613d60578151613d478882613cd9565b9750613d5283614b65565b925050600181019050613d33565b5085935050505092915050565b613d7681614e37565b82525050565b613d8581614e7a565b82525050565b6000613d9682614b5a565b613da08185614b8e565b9350613db0818560208601614e8c565b613db981614f95565b840191505092915050565b6000613dd1600983614b8e565b91507f4e6f20746f6b656e7300000000000000000000000000000000000000000000006000830152602082019050919050565b6000613e11602383614b8e565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e77601e83614b8e565b91507f5f6f707357616c6c657420616464726573732063616e6e6f74206265203000006000830152602082019050919050565b6000613eb7602683614b8e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f1d602283614b8e565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f83603883614b8e565b91507f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060008301527f7468616e20302e30312520746f74616c20737570706c792e00000000000000006020830152604082019050919050565b6000613fe9601783614b8e565b91507f54726164696e6720697320616c7265616479206f70656e0000000000000000006000830152602082019050919050565b6000614029602883614b8e565b91507f5472616e736665722064656c617920656e61626c65642e20547279206167616960008301527f6e206c617465722e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061408f601b83614b8e565b91507f54726164696e67206973206e6f7420616c6c6f776564207965742e00000000006000830152602082019050919050565b60006140cf603983614b8e565b91507f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560008301527f72207468616e20302e312520746f74616c20737570706c792e000000000000006020830152604082019050919050565b6000614135601e83614b8e565b91507f4d757374206b6565702073656c6c2074617865732062656c6f772033302500006000830152602082019050919050565b6000614175603583614b8e565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006141db603483614b8e565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614241602383614b8e565b91507f5f747265617375727957616c6c657420616464726573732063616e6e6f74206260008301527f65203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142a7602483614b8e565b91507f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008301527f756e742e000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061430d602983614b8e565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61784260008301527f7579416d6f756e742e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614373601d83614b8e565b91507f4d757374206b656570206275792074617865732062656c6f77203330250000006000830152602082019050919050565b60006143b3602083614b8e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006143f3601a83614b8e565b91507f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006000830152602082019050919050565b6000614433602983614b8e565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614499602583614b8e565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144ff600083614b83565b9150600082019050919050565b6000614519603783614b8e565b91507f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460008301527f68616e20302e30312520746f74616c20737570706c792e0000000000000000006020830152604082019050919050565b600061457f602483614b8e565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145e5601583614b8e565b91507f496e76616c696420626c6f636b7320636f756e742e00000000000000000000006000830152602082019050919050565b6000614625602a83614b8e565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785360008301527f656c6c416d6f756e742e000000000000000000000000000000000000000000006020830152604082019050919050565b61468781614e63565b82525050565b61469681614e6d565b82525050565b60006146a7826144f2565b9150819050919050565b60006020820190506146c66000830184613d00565b92915050565b60006040820190506146e16000830185613d00565b6146ee602083018461467e565b9392505050565b600060208201905061470a6000830184613d6d565b92915050565b6000602082019050818103600083015261472a8184613d8b565b905092915050565b6000602082019050818103600083015261474b81613dc4565b9050919050565b6000602082019050818103600083015261476b81613e04565b9050919050565b6000602082019050818103600083015261478b81613e6a565b9050919050565b600060208201905081810360008301526147ab81613eaa565b9050919050565b600060208201905081810360008301526147cb81613f10565b9050919050565b600060208201905081810360008301526147eb81613f76565b9050919050565b6000602082019050818103600083015261480b81613fdc565b9050919050565b6000602082019050818103600083015261482b8161401c565b9050919050565b6000602082019050818103600083015261484b81614082565b9050919050565b6000602082019050818103600083015261486b816140c2565b9050919050565b6000602082019050818103600083015261488b81614128565b9050919050565b600060208201905081810360008301526148ab81614168565b9050919050565b600060208201905081810360008301526148cb816141ce565b9050919050565b600060208201905081810360008301526148eb81614234565b9050919050565b6000602082019050818103600083015261490b8161429a565b9050919050565b6000602082019050818103600083015261492b81614300565b9050919050565b6000602082019050818103600083015261494b81614366565b9050919050565b6000602082019050818103600083015261496b816143a6565b9050919050565b6000602082019050818103600083015261498b816143e6565b9050919050565b600060208201905081810360008301526149ab81614426565b9050919050565b600060208201905081810360008301526149cb8161448c565b9050919050565b600060208201905081810360008301526149eb8161450c565b9050919050565b60006020820190508181036000830152614a0b81614572565b9050919050565b60006020820190508181036000830152614a2b816145d8565b9050919050565b60006020820190508181036000830152614a4b81614618565b9050919050565b6000602082019050614a67600083018461467e565b92915050565b600060a082019050614a82600083018861467e565b614a8f6020830187613d7c565b8181036040830152614aa18186613d0f565b9050614ab06060830185613d00565b614abd608083018461467e565b9695505050505050565b6000602082019050614adc600083018461468d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614b0957614b08614f66565b5b8060405250919050565b600067ffffffffffffffff821115614b2e57614b2d614f66565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614baa82614e63565b9150614bb583614e63565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bea57614be9614f08565b5b828201905092915050565b6000614c0082614e63565b9150614c0b83614e63565b925082614c1b57614c1a614f37565b5b828204905092915050565b6000808291508390505b6001851115614c7057808604811115614c4c57614c4b614f08565b5b6001851615614c5b5780820291505b8081029050614c6985614fa6565b9450614c30565b94509492505050565b6000614c8482614e63565b9150614c8f83614e6d565b9250614cbc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614cc4565b905092915050565b600082614cd45760019050614d90565b81614ce25760009050614d90565b8160018114614cf85760028114614d0257614d31565b6001915050614d90565b60ff841115614d1457614d13614f08565b5b8360020a915084821115614d2b57614d2a614f08565b5b50614d90565b5060208310610133831016604e8410600b8410161715614d665782820a905083811115614d6157614d60614f08565b5b614d90565b614d738484846001614c26565b92509050818404811115614d8a57614d89614f08565b5b81810290505b9392505050565b6000614da282614e63565b9150614dad83614e63565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614de657614de5614f08565b5b828202905092915050565b6000614dfc82614e63565b9150614e0783614e63565b925082821015614e1a57614e19614f08565b5b828203905092915050565b6000614e3082614e43565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e8582614e63565b9050919050565b60005b83811015614eaa578082015181840152602081019050614e8f565b83811115614eb9576000848401525b50505050565b6000614eca82614e63565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614efd57614efc614f08565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b614fbc81614e25565b8114614fc757600080fd5b50565b614fd381614e37565b8114614fde57600080fd5b50565b614fea81614e63565b8114614ff557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a11ffc2b06e0e9fe34ea93fec7381e6c356daec0a0d2ca49dea29b91b34a2b2b64736f6c63430008000033

Deployed Bytecode Sourcemap

18934:16859:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22139:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22977:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19993:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30457:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31681:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22416:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23146:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28940:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22325:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23467:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20171:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20471:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19891:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34768:148;;;;;;;;;;;;;:::i;:::-;;31395:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20364:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19504:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22524:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2723:103;;;;;;;;;;;;;:::i;:::-;;35587:201;;;;;;;;;;;;;:::i;:::-;;20275:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19842:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2075:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22230;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19584:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29559:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23673:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22651:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19542:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19941:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29185:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30033:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34928:155;;;;;;;;;;;;;:::i;:::-;;35257:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28050:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22826:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30872:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28702:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2981:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28474:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35091:158;;;;;;;;;;;;;:::i;:::-;;30654:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31119:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27926:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19445:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22139:83;22176:13;22209:5;;;;;;;;;;;;;;;;;22202:12;;22139:83;:::o;22977:161::-;23052:4;23069:39;23078:12;:10;:12::i;:::-;23092:7;23101:6;23069:8;:39::i;:::-;23126:4;23119:11;;22977:161;;;;:::o;19993:35::-;;;;:::o;30457:185::-;1961:13;:11;:13::i;:::-;30557:6:::1;30552:82;30573:8;:15;30569:1;:19;30552:82;;;30630:4;30595:19;:32;30615:8;30624:1;30615:11;;;;;;;;;;;;;;;;;;;;;;30595:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30590:3;;;;;:::i;:::-;;;;30552:82;;;;30457:185:::0;;:::o;31681:175::-;1961:13;:11;:13::i;:::-;31770:1:::1;31760:6;:11;;:27;;;;;31785:2;31775:6;:12;;31760:27;31752:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31842:6;31824:15;:24;;;;31681:175:::0;:::o;22416:100::-;22469:7;19755:2;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;22489:19;;22416:100;:::o;23146:313::-;23244:4;23261:36;23271:6;23279:9;23290:6;23261:9;:36::i;:::-;23308:121;23317:6;23325:12;:10;:12::i;:::-;23339:89;23377:6;23339:89;;;;;;;;;;;;;;;;;:11;:19;23351:6;23339:19;;;;;;;;;;;;;;;:33;23359:12;:10;:12::i;:::-;23339:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23308:8;:121::i;:::-;23447:4;23440:11;;23146:313;;;;;:::o;28940:233::-;1961:13;:11;:13::i;:::-;29035:30:::1;29060:4;29035:20;29053:1;29035:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;29022:8;:44;;29014:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29157:8;29139:15;:26;;;;28940:233:::0;:::o;22325:83::-;22366:5;19755:2;22384:16;;22325:83;:::o;23467:99::-;1961:13;:11;:13::i;:::-;23553:5:::1;23535:15;;:23;;;;;;;;;;;;;;;;;;23467:99:::0;:::o;20171:34::-;;;;:::o;20471:30::-;;;;:::o;19891:43::-;;;;:::o;34768:148::-;1961:13;:11;:13::i;:::-;34814:23:::1;34840:24;34858:4;34840:9;:24::i;:::-;34814:50;;34875:33;34892:15;34875:16;:33::i;:::-;1985:1;34768:148::o:0;31395:278::-;1961:13;:11;:13::i;:::-;31543:3:::1;31502:37;31525:13;31502:18;:22;;:37;;;;:::i;:::-;:44;;31494:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31610:18;31592:15;:36;;;;31652:13;31639:10;:26;;;;31395:278:::0;;:::o;20364:35::-;;;;:::o;19504:31::-;;;;;;;;;;;;;:::o;22524:119::-;22590:7;22617:9;:18;22627:7;22617:18;;;;;;;;;;;;;;;;22610:25;;22524:119;;;:::o;2723:103::-;1961:13;:11;:13::i;:::-;2788:30:::1;2815:1;2788:18;:30::i;:::-;2723:103::o:0;35587:201::-;1961:13;:11;:13::i;:::-;19755:2:::1;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;35639:12;:27;;;;19755:2;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;35677:13;:28;;;;19755:2;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;35716:15;:30;;;;35775:5;35757:15;;:23;;;;;;;;;;;;;;;;;;35587:201::o:0;20275:29::-;;;;:::o;19842:42::-;;;;:::o;2075:87::-;2121:7;2148:6;;;;;;;;;;;2141:13;;2075:87;:::o;22230:::-;22269:13;22302:7;;;;;;;;;;;;;;;;;22295:14;;22230:87;:::o;20122:42::-;20160:4;20122:42;:::o;19584:30::-;;;;;;;;;;;;;:::o;29559:466::-;1961:13;:11;:13::i;:::-;29674:4:::1;;;;;;;;;;;29651:27;;:19;:27;;;;29643:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29768:5;29729:19;:36;29749:15;;;;;;;;;;;29729:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;29835:5;29784:31;:48;29816:15;;;;;;;;;;;29784:48;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;29877:19;29851:15;;:46;;;;;;;;;;;;;;;;;;29947:4;29908:19;:36;29928:15;;;;;;;;;;;29908:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;30013:4;29962:31;:48;29994:15;;;;;;;;;;;29962:48;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;29559:466:::0;:::o;23673:91::-;1961:13;:11;:13::i;:::-;23751:5:::1;23737:11;;:19;;;;;;;;;;;;;;;;;;23673:91:::0;:::o;22651:167::-;22729:4;22746:42;22756:12;:10;:12::i;:::-;22770:9;22781:6;22746:9;:42::i;:::-;22806:4;22799:11;;22651:167;;;;:::o;19542:35::-;;;;;;;;;;;;;:::o;19941:45::-;;;;:::o;29185:366::-;1961:13;:11;:13::i;:::-;29287:32:::1;29312:6;29287:20;29305:1;29287:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:32;;;;:::i;:::-;29272:10;:48;;29264:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;29412:30;29437:4;29412:20;29430:1;29412:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;29397:10;:46;;29389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29533:10;29511:19;:32;;;;29185:366:::0;:::o;30033:416::-;1961:13;:11;:13::i;:::-;30133:4:::1;;;;;;;;;;;30115:22;;:14;:22;;;;30107:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30217:5;30183:19;:31;30203:10;;;;;;;;;;;30183:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30279:5;30233:31;:43;30265:10;;;;;;;;;;;30233:43;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;30316:14;30295:10;;:36;;;;;;;;;;;;;;;;;;30376:4;30342:19;:31;30362:10;;;;;;;;;;;30342:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30437:4;30391:31;:43;30423:10;;;;;;;;;;;30391:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;30033:416:::0;:::o;34928:155::-;1961:13;:11;:13::i;:::-;34982:26:::1;35011:21;34982:50;;35043:32;35056:18;35043:12;:32::i;:::-;1985:1;34928:155::o:0;35257:322::-;1961:13;:11;:13::i;:::-;35350:4:::1;35335:20;;:3;:20;;;;35327:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35444:1;35412:3;35405:21;;;35435:4;35405:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;35397:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35470:11;35491:3;35484:21;;;35514:4;35484:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35470:50;;35538:3;35531:20;;;35552:10;35564:6;35531:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1985:1;35257:322:::0;:::o;28050:416::-;1961:13;:11;:13::i;:::-;28126:11:::1;;;;;;;;;;;28125:12;28117:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;28190:4;28176:11;;:18;;;;;;;;;;;;;;;;;;28223:4;28205:15;;:22;;;;;;;;;;;;;;;;;;28254:31;28279:5;28254:20;28271:2;19755;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;28254:16;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;28238:13;:47;;;;28318:31;28343:5;28318:20;28335:2;19755;19821;:13;;;;:::i;:::-;19806:11;:29;;;;:::i;:::-;28318:16;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;28296:19;:53;;;;28374:4;28360:11;;:18;;;;;;;;;;;;;;;;;;28408:12;28389:16;:31;;;;28452:6;28431:18;:27;;;;28050:416:::0;:::o;22826:143::-;22907:7;22934:11;:18;22946:5;22934:18;;;;;;;;;;;;;;;:27;22953:7;22934:27;;;;;;;;;;;;;;;;22927:34;;22826:143;;;;:::o;23574:91::-;1961:13;:11;:13::i;:::-;23652:5:::1;23638:11;;:19;;;;;;;;;;;;;;;;;;23574:91:::0;:::o;30872:239::-;1961:13;:11;:13::i;:::-;30969:6:::1;30964:140;30985:8;:15;30981:1;:19;30964:140;;;31040:14;;;;;;;;;;;31025:29;;:8;31034:1;31025:11;;;;;;;;;;;;;;;;;;;;;;:29;;;31022:70;;31086:6;31056:14;:27;31071:8;31080:1;31071:11;;;;;;;;;;;;;;;;;;;;;;31056:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31022:70;31002:3;;;;;:::i;:::-;;;;30964:140;;;;30872:239:::0;;:::o;28702:226::-;1961:13;:11;:13::i;:::-;28793:31:::1;28818:5;28793:20;28811:1;28793:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;28781:7;:44;;28773:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;28913:7;28897:13;:23;;;;28702:226:::0;:::o;2981:201::-;1961:13;:11;:13::i;:::-;3090:1:::1;3070:22;;:8;:22;;;;3062:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3146:28;3165:8;3146:18;:28::i;:::-;2981:201:::0;:::o;28474:220::-;1961:13;:11;:13::i;:::-;28562:31:::1;28587:5;28562:20;28580:1;28562:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;28551:6;:43;;28543:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28680:6;28665:12;:21;;;;28474:220:::0;:::o;35091:158::-;1961:13;:11;:13::i;:::-;35147:12:::1;35191:10;35183:24;;35215:21;35183:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35170:71;;;;;1985:1;35091:158::o:0;30654:206::-;1961:13;:11;:13::i;:::-;30763:6:::1;30758:94;30779:8;:15;30775:1;:19;30758:94;;;30848:4;30801:31;:44;30833:8;30842:1;30833:11;;;;;;;;;;;;;;;;;;;;;;30801:44;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;30796:3;;;;;:::i;:::-;;;;30758:94;;;;30654:206:::0;;:::o;31119:268::-;1961:13;:11;:13::i;:::-;31262:3:::1;31223:35;31245:12;31223:17;:21;;:35;;;;:::i;:::-;:42;;31215:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;31327:17;31310:14;:34;;;;31367:12;31355:9;:24;;;;31119:268:::0;;:::o;27926:116::-;27988:4;28012:14;:22;28027:6;28012:22;;;;;;;;;;;;;;;;;;;;;;;;;28005:29;;27926:116;;;:::o;19445:23::-;;;;;;;;;;;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;23772:323::-;23874:4;;;;;;;;;;;23865:13;;:5;:13;;;;23857:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:4;;;;;;;;;;;23938:15;;:7;:15;;;;23930:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24033:6;24003:11;:18;24015:5;24003:18;;;;;;;;;;;;;;;:27;24022:7;24003:27;;;;;;;;;;;;;;;:36;;;;24071:7;24055:32;;24064:5;24055:32;;;24080:6;24055:32;;;;;;:::i;:::-;;;;;;;;23772:323;;;:::o;2240:132::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2240:132::o;24103:2255::-;24199:4;;;;;;;;;;;24191:12;;:4;:12;;;;24183:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24270:4;;;;;;;;;;;24264:10;;:2;:10;;;;24256:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24342:1;24333:6;:10;24325:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24400:12;24415:4;24400:19;;24430:15;24476:7;:5;:7::i;:::-;24468:15;;:4;:15;;;;:32;;;;;24493:7;:5;:7::i;:::-;24487:13;;:2;:13;;;;24468:32;:46;;;;;24510:4;;;;;;;;;;;24504:10;;:2;:10;;;;24468:46;:60;;;;;24524:4;;;;;;;;;;;24518:10;;:2;:10;;;;24468:60;:74;;;;;24533:9;;;;;;;;;;;24532:10;24468:74;24464:1356;;;24568:14;:20;24583:4;24568:20;;;;;;;;;;;;;;;;;;;;;;;;;24567:21;:44;;;;;24593:14;:18;24608:2;24593:18;;;;;;;;;;;;;;;;;;;;;;;;;24592:19;24567:44;24559:53;;;;;;24633:11;;;;;;;;;;;24629:109;;24654:19;:25;24674:4;24654:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24683:19;:23;24703:2;24683:23;;;;;;;;;;;;;;;;;;;;;;;;;24654:52;24646:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;24629:109;24759:15;;;;;;;;;;;24755:433;;;24813:16;;;;;;;;;;;24799:31;;:2;:31;;;;:64;;;;;24848:14;;;;;;;;;;;24834:29;;:2;:29;;;;24799:64;24795:378;;;24934:15;;24919:12;:30;;;;:::i;:::-;24896:9;:20;24906:9;24896:20;;;;;;;;;;;;;;;;:53;:103;;;;;24984:15;;24969:12;:30;;;;:::i;:::-;24953:9;:13;24963:2;24953:13;;;;;;;;;;;;;;;;:46;24896:103;24888:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;25090:12;25067:9;:20;25077:9;25067:20;;;;;;;;;;;;;;;:35;;;;25141:12;25125:9;:13;25135:2;25125:13;;;;;;;;;;;;;;;:28;;;;24795:378;24755:433;25216:14;;;;;;;;;;;25208:22;;:4;:22;;;:57;;;;;25248:16;;;;;;;;;;;25234:31;;:2;:31;;;;25208:57;:97;;;;;25270:31;:35;25302:2;25270:35;;;;;;;;;;;;;;;;;;;;;;;;;25269:36;25208:97;25204:323;;;25344:12;;25334:6;:22;;25326:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25455:15;;25445:6;25429:13;25439:2;25429:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;25421:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25204:323;25565:14;;;;;;;;;;;25559:20;;:2;:20;;;:57;;;;;25599:16;;;;;;;;;;;25583:33;;:4;:33;;;;25559:57;:99;;;;;25621:31;:37;25653:4;25621:37;;;;;;;;;;;;;;;;;;;;;;;;;25620:38;25559:99;25555:254;;;25697:13;;25687:6;:23;;25679:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;25789:4;25776:17;;25555:254;24464:1356;25835:19;:25;25855:4;25835:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25864:19;:23;25884:2;25864:23;;;;;;;;;;;;;;;;;;;;;;;;;25835:52;:68;;;;25892:11;;;;;;;;;;;25891:12;25835:68;25832:88;;;25915:5;25905:15;;25832:88;25933:28;25964:24;25982:4;25964:9;:24::i;:::-;25933:55;;25999:12;26038:19;;26015:20;:42;26014:58;;;;;26062:10;26014:58;25999:73;;26089:7;:22;;;;;26100:11;;;;;;;;;;;26089:22;:36;;;;;26116:9;;;;;;;;;;;26115:10;26089:36;:66;;;;;26130:19;:25;26150:4;26130:25;;;;;;;;;;;;;;;;;;;;;;;;;26129:26;26089:66;:94;;;;;26160:19;:23;26180:2;26160:23;;;;;;;;;;;;;;;;;;;;;;;;;26159:24;26089:94;26085:200;;;26212:4;26200:9;;:16;;;;;;;;;;;;;;;;;;26231:10;:8;:10::i;:::-;26268:5;26256:9;;:17;;;;;;;;;;;;;;;;;;26085:200;26297:53;26312:4;26318:2;26322:6;26330:7;26339:10;26297:14;:53::i;:::-;24103:2255;;;;;;;:::o;11451:240::-;11571:7;11629:1;11624;:6;;11632:12;11616:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11671:1;11667;:5;11660:12;;11451:240;;;;;:::o;9910:98::-;9968:7;9999:1;9995;:5;;;;:::i;:::-;9988:12;;9910:98;;;;:::o;10309:::-;10367:7;10398:1;10394;:5;;;;:::i;:::-;10387:12;;10309:98;;;;:::o;27279:474::-;27345:21;27383:1;27369:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27345:40;;27414:4;27396;27401:1;27396:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27440:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27430:4;27435:1;27430:7;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;27474:63;27491:4;27506:16;;;;;;;;;;;27525:11;27474:8;:63::i;:::-;27548:16;;;;;;;;;;;:67;;;27630:11;27656:1;27672:4;27699;27719:15;27548:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27279:474;;:::o;9172:98::-;9230:7;9261:1;9257;:5;;;;:::i;:::-;9250:12;;9172:98;;;;:::o;3342:191::-;3416:16;3435:6;;;;;;;;;;;3416:25;;3461:8;3452:6;;:17;;;;;;;;;;;;;;;;;;3516:8;3485:40;;3506:8;3485:40;;;;;;;;;;;;3342:191;;:::o;27769:149::-;27826:15;;;;;;;;;;;:24;;:39;27851:13;27862:1;27851:6;:10;;:13;;;;:::i;:::-;27826:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27876:10;;;;;;;;;;;:19;;:34;27896:13;27907:1;27896:6;:10;;:13;;;;:::i;:::-;27876:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27769:149;:::o;26366:905::-;26405:23;26431:24;26449:4;26431:9;:24::i;:::-;26405:50;;26466:25;26495:37;26518:13;;26495:18;;:22;;:37;;;;:::i;:::-;26466:66;;26543:12;26599:1;26580:15;:20;:46;;;;26625:1;26604:17;:22;26580:46;26576:59;;;26628:7;;;;;26576:59;26669:26;26693:1;26669:19;;:23;;:26;;;;:::i;:::-;26651:15;:44;26647:94;;;26715:26;26739:1;26715:19;;:23;;:26;;;;:::i;:::-;26697:44;;26647:94;26754:25;26782:21;26754:49;;26816:33;26833:15;26816:16;:33::i;:::-;26870:18;26891:44;26917:17;26891:21;:25;;:44;;;;:::i;:::-;26870:65;;26946:22;26971:57;27010:17;26971:34;26986:18;;26971:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;26946:82;;27070:1;27049:18;:22;;;;27098:1;27082:13;:17;;;;27133:15;;;;;;;;;;;27125:29;;27162:14;27125:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27112:69;;;;;27213:10;;;;;;;;;;;27205:24;;27237:21;27205:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27192:71;;;;;26366:905;;;;;;;:::o;32572:322::-;32698:7;32693:86;;32707:14;:12;:14::i;:::-;32693:86;;;32746:33;32756:6;32764;32772;32746:9;:33::i;:::-;32737:42;;32693:86;32792:44;32810:6;32818:9;32829:6;32792:17;:44::i;:::-;32862:7;32857:29;;32871:15;:13;:15::i;:::-;32857:29;32572:322;;;;;:::o;9553:98::-;9611:7;9642:1;9638;:5;;;;:::i;:::-;9631:12;;9553:98;;;;:::o;31864:451::-;31929:1;31911:14;;:19;:37;;;;;31947:1;31934:9;;:14;31911:37;:61;;;;;31971:1;31952:15;;:20;31911:61;:80;;;;;31990:1;31976:10;;:15;31911:80;31907:93;;;31993:7;;31907:93;32038:14;;32012:23;:40;;;;32084:9;;32063:18;:30;;;;32131:15;;32104:24;:42;;;;32179:10;;32157:19;:32;;;;32227:1;32210:14;:18;;;;32251:1;32239:9;:13;;;;32281:1;32263:15;:19;;;;32306:1;32293:10;:14;;;;31864:451;:::o;33185:1027::-;33266:7;33286:18;33315:13;33339:8;33402:12;33380:18;;33361:16;;:37;;;;:::i;:::-;:53;33358:484;;33444:13;:11;:13::i;:::-;33431:26;;33483:21;:19;:21::i;:::-;33472:32;;33525:16;:14;:16::i;:::-;33519:22;;33358:484;;;33587:21;33601:6;33587:13;:21::i;:::-;33574:34;;33627:6;33623:208;;;33665:15;;33654:26;;33705:10;;33699:16;;33623:208;;;33767:14;;33756:25;;33806:9;;33800:15;;33623:208;33358:484;33862:12;33902:1;33889:10;:14;33885:213;;;33927:39;20160:4;33927:22;33938:10;33927:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;33920:46;;34021:10;34010:8;34003:4;:15;;;;:::i;:::-;:28;;;;:::i;:::-;33981:18;;:50;;;;;;;:::i;:::-;;;;;;;;34076:10;34070:3;34063:4;:10;;;;:::i;:::-;:23;;;;:::i;:::-;34046:13;;:40;;;;;;;:::i;:::-;;;;;;;;33885:213;34121:1;34114:4;:8;34110:60;;;34124:46;34142:6;34158:4;34165;34124:17;:46::i;:::-;34110:60;34200:4;34190:14;;;;;:::i;:::-;;;;34183:21;;;;;;33185:1027;;;;;:::o;32902:275::-;33020:30;33042:7;33020:9;:17;33030:6;33020:17;;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;33000:9;:17;33010:6;33000:17;;;;;;;;;;;;;;;:50;;;;33084:33;33109:7;33084:9;:20;33094:9;33084:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;33061:9;:20;33071:9;33061:20;;;;;;;;;;;;;;;:56;;;;33150:9;33133:36;;33142:6;33133:36;;;33161:7;33133:36;;;;;;:::i;:::-;;;;;;;;32902:275;;;:::o;32327:229::-;32388:23;;32371:14;:40;;;;32434:18;;32422:9;:30;;;;32481:24;;32463:15;:42;;;;32529:19;;32516:10;:32;;;;32327:229::o;34410:82::-;34454:7;34481:3;34474:10;;34410:82;:::o;34500:90::-;34552:7;34579:3;34572:10;;34500:90;:::o;34598:85::-;34645:7;34672:3;34665:10;;34598:85;:::o;34220:182::-;34277:7;34301:6;34297:50;;;34316:31;34336:10;;34316:15;;:19;;:31;;;;:::i;:::-;34309:38;;;;34297:50;34365:29;34384:9;;34365:14;;:18;;:29;;;;:::i;:::-;34358:36;;34220:182;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:303::-;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1141:6;1128:20;1166:94;1256:3;1248:6;1241:4;1233:6;1229:17;1166:94;:::i;:::-;1157:103;;1040:226;;;;;:::o;1272:133::-;;1353:6;1340:20;1331:29;;1369:30;1393:5;1369:30;:::i;:::-;1321:84;;;;:::o;1411:137::-;;1496:6;1490:13;1481:22;;1512:30;1536:5;1512:30;:::i;:::-;1471:77;;;;:::o;1554:139::-;;1638:6;1625:20;1616:29;;1654:33;1681:5;1654:33;:::i;:::-;1606:87;;;;:::o;1699:143::-;;1787:6;1781:13;1772:22;;1803:33;1830:5;1803:33;:::i;:::-;1762:80;;;;:::o;1848:262::-;;1956:2;1944:9;1935:7;1931:23;1927:32;1924:2;;;1972:1;1969;1962:12;1924:2;2015:1;2040:53;2085:7;2076:6;2065:9;2061:22;2040:53;:::i;:::-;2030:63;;1986:117;1914:196;;;;:::o;2116:284::-;;2235:2;2223:9;2214:7;2210:23;2206:32;2203:2;;;2251:1;2248;2241:12;2203:2;2294:1;2319:64;2375:7;2366:6;2355:9;2351:22;2319:64;:::i;:::-;2309:74;;2265:128;2193:207;;;;:::o;2406:407::-;;;2531:2;2519:9;2510:7;2506:23;2502:32;2499:2;;;2547:1;2544;2537:12;2499:2;2590:1;2615:53;2660:7;2651:6;2640:9;2636:22;2615:53;:::i;:::-;2605:63;;2561:117;2717:2;2743:53;2788:7;2779:6;2768:9;2764:22;2743:53;:::i;:::-;2733:63;;2688:118;2489:324;;;;;:::o;2819:552::-;;;;2961:2;2949:9;2940:7;2936:23;2932:32;2929:2;;;2977:1;2974;2967:12;2929:2;3020:1;3045:53;3090:7;3081:6;3070:9;3066:22;3045:53;:::i;:::-;3035:63;;2991:117;3147:2;3173:53;3218:7;3209:6;3198:9;3194:22;3173:53;:::i;:::-;3163:63;;3118:118;3275:2;3301:53;3346:7;3337:6;3326:9;3322:22;3301:53;:::i;:::-;3291:63;;3246:118;2919:452;;;;;:::o;3377:407::-;;;3502:2;3490:9;3481:7;3477:23;3473:32;3470:2;;;3518:1;3515;3508:12;3470:2;3561:1;3586:53;3631:7;3622:6;3611:9;3607:22;3586:53;:::i;:::-;3576:63;;3532:117;3688:2;3714:53;3759:7;3750:6;3739:9;3735:22;3714:53;:::i;:::-;3704:63;;3659:118;3460:324;;;;;:::o;3790:544::-;;;3937:2;3925:9;3916:7;3912:23;3908:32;3905:2;;;3953:1;3950;3943:12;3905:2;4024:1;4013:9;4009:17;3996:31;4054:18;4046:6;4043:30;4040:2;;;4086:1;4083;4076:12;4040:2;4114:78;4184:7;4175:6;4164:9;4160:22;4114:78;:::i;:::-;4104:88;;3967:235;4241:2;4267:50;4309:7;4300:6;4289:9;4285:22;4267:50;:::i;:::-;4257:60;;4212:115;3895:439;;;;;:::o;4340:256::-;;4445:2;4433:9;4424:7;4420:23;4416:32;4413:2;;;4461:1;4458;4451:12;4413:2;4504:1;4529:50;4571:7;4562:6;4551:9;4547:22;4529:50;:::i;:::-;4519:60;;4475:114;4403:193;;;;:::o;4602:278::-;;4718:2;4706:9;4697:7;4693:23;4689:32;4686:2;;;4734:1;4731;4724:12;4686:2;4777:1;4802:61;4855:7;4846:6;4835:9;4831:22;4802:61;:::i;:::-;4792:71;;4748:125;4676:204;;;;:::o;4886:262::-;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;5010:1;5007;5000:12;4962:2;5053:1;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5024:117;4952:196;;;;:::o;5154:284::-;;5273:2;5261:9;5252:7;5248:23;5244:32;5241:2;;;5289:1;5286;5279:12;5241:2;5332:1;5357:64;5413:7;5404:6;5393:9;5389:22;5357:64;:::i;:::-;5347:74;;5303:128;5231:207;;;;:::o;5444:407::-;;;5569:2;5557:9;5548:7;5544:23;5540:32;5537:2;;;5585:1;5582;5575:12;5537:2;5628:1;5653:53;5698:7;5689:6;5678:9;5674:22;5653:53;:::i;:::-;5643:63;;5599:117;5755:2;5781:53;5826:7;5817:6;5806:9;5802:22;5781:53;:::i;:::-;5771:63;;5726:118;5527:324;;;;;:::o;5857:179::-;;5947:46;5989:3;5981:6;5947:46;:::i;:::-;6025:4;6020:3;6016:14;6002:28;;5937:99;;;;:::o;6042:108::-;6119:24;6137:5;6119:24;:::i;:::-;6114:3;6107:37;6097:53;;:::o;6156:118::-;6243:24;6261:5;6243:24;:::i;:::-;6238:3;6231:37;6221:53;;:::o;6310:732::-;;6458:54;6506:5;6458:54;:::i;:::-;6528:86;6607:6;6602:3;6528:86;:::i;:::-;6521:93;;6638:56;6688:5;6638:56;:::i;:::-;6717:7;6748:1;6733:284;6758:6;6755:1;6752:13;6733:284;;;6834:6;6828:13;6861:63;6920:3;6905:13;6861:63;:::i;:::-;6854:70;;6947:60;7000:6;6947:60;:::i;:::-;6937:70;;6793:224;6780:1;6777;6773:9;6768:14;;6733:284;;;6737:14;7033:3;7026:10;;6434:608;;;;;;;:::o;7048:109::-;7129:21;7144:5;7129:21;:::i;:::-;7124:3;7117:34;7107:50;;:::o;7163:147::-;7258:45;7297:5;7258:45;:::i;:::-;7253:3;7246:58;7236:74;;:::o;7316:364::-;;7432:39;7465:5;7432:39;:::i;:::-;7487:71;7551:6;7546:3;7487:71;:::i;:::-;7480:78;;7567:52;7612:6;7607:3;7600:4;7593:5;7589:16;7567:52;:::i;:::-;7644:29;7666:6;7644:29;:::i;:::-;7639:3;7635:39;7628:46;;7408:272;;;;;:::o;7686:306::-;;7849:66;7913:1;7908:3;7849:66;:::i;:::-;7842:73;;7945:11;7941:1;7936:3;7932:11;7925:32;7983:2;7978:3;7974:12;7967:19;;7832:160;;;:::o;7998:367::-;;8161:67;8225:2;8220:3;8161:67;:::i;:::-;8154:74;;8258:34;8254:1;8249:3;8245:11;8238:55;8324:5;8319:2;8314:3;8310:12;8303:27;8356:2;8351:3;8347:12;8340:19;;8144:221;;;:::o;8371:328::-;;8534:67;8598:2;8593:3;8534:67;:::i;:::-;8527:74;;8631:32;8627:1;8622:3;8618:11;8611:53;8690:2;8685:3;8681:12;8674:19;;8517:182;;;:::o;8705:370::-;;8868:67;8932:2;8927:3;8868:67;:::i;:::-;8861:74;;8965:34;8961:1;8956:3;8952:11;8945:55;9031:8;9026:2;9021:3;9017:12;9010:30;9066:2;9061:3;9057:12;9050:19;;8851:224;;;:::o;9081:366::-;;9244:67;9308:2;9303:3;9244:67;:::i;:::-;9237:74;;9341:34;9337:1;9332:3;9328:11;9321:55;9407:4;9402:2;9397:3;9393:12;9386:26;9438:2;9433:3;9429:12;9422:19;;9227:220;;;:::o;9453:388::-;;9616:67;9680:2;9675:3;9616:67;:::i;:::-;9609:74;;9713:34;9709:1;9704:3;9700:11;9693:55;9779:26;9774:2;9769:3;9765:12;9758:48;9832:2;9827:3;9823:12;9816:19;;9599:242;;;:::o;9847:321::-;;10010:67;10074:2;10069:3;10010:67;:::i;:::-;10003:74;;10107:25;10103:1;10098:3;10094:11;10087:46;10159:2;10154:3;10150:12;10143:19;;9993:175;;;:::o;10174:372::-;;10337:67;10401:2;10396:3;10337:67;:::i;:::-;10330:74;;10434:34;10430:1;10425:3;10421:11;10414:55;10500:10;10495:2;10490:3;10486:12;10479:32;10537:2;10532:3;10528:12;10521:19;;10320:226;;;:::o;10552:325::-;;10715:67;10779:2;10774:3;10715:67;:::i;:::-;10708:74;;10812:29;10808:1;10803:3;10799:11;10792:50;10868:2;10863:3;10859:12;10852:19;;10698:179;;;:::o;10883:389::-;;11046:67;11110:2;11105:3;11046:67;:::i;:::-;11039:74;;11143:34;11139:1;11134:3;11130:11;11123:55;11209:27;11204:2;11199:3;11195:12;11188:49;11263:2;11258:3;11254:12;11247:19;;11029:243;;;:::o;11278:328::-;;11441:67;11505:2;11500:3;11441:67;:::i;:::-;11434:74;;11538:32;11534:1;11529:3;11525:11;11518:53;11597:2;11592:3;11588:12;11581:19;;11424:182;;;:::o;11612:385::-;;11775:67;11839:2;11834:3;11775:67;:::i;:::-;11768:74;;11872:34;11868:1;11863:3;11859:11;11852:55;11938:23;11933:2;11928:3;11924:12;11917:45;11988:2;11983:3;11979:12;11972:19;;11758:239;;;:::o;12003:384::-;;12166:67;12230:2;12225:3;12166:67;:::i;:::-;12159:74;;12263:34;12259:1;12254:3;12250:11;12243:55;12329:22;12324:2;12319:3;12315:12;12308:44;12378:2;12373:3;12369:12;12362:19;;12149:238;;;:::o;12393:367::-;;12556:67;12620:2;12615:3;12556:67;:::i;:::-;12549:74;;12653:34;12649:1;12644:3;12640:11;12633:55;12719:5;12714:2;12709:3;12705:12;12698:27;12751:2;12746:3;12742:12;12735:19;;12539:221;;;:::o;12766:368::-;;12929:67;12993:2;12988:3;12929:67;:::i;:::-;12922:74;;13026:34;13022:1;13017:3;13013:11;13006:55;13092:6;13087:2;13082:3;13078:12;13071:28;13125:2;13120:3;13116:12;13109:19;;12912:222;;;:::o;13140:373::-;;13303:67;13367:2;13362:3;13303:67;:::i;:::-;13296:74;;13400:34;13396:1;13391:3;13387:11;13380:55;13466:11;13461:2;13456:3;13452:12;13445:33;13504:2;13499:3;13495:12;13488:19;;13286:227;;;:::o;13519:327::-;;13682:67;13746:2;13741:3;13682:67;:::i;:::-;13675:74;;13779:31;13775:1;13770:3;13766:11;13759:52;13837:2;13832:3;13828:12;13821:19;;13665:181;;;:::o;13852:330::-;;14015:67;14079:2;14074:3;14015:67;:::i;:::-;14008:74;;14112:34;14108:1;14103:3;14099:11;14092:55;14173:2;14168:3;14164:12;14157:19;;13998:184;;;:::o;14188:324::-;;14351:67;14415:2;14410:3;14351:67;:::i;:::-;14344:74;;14448:28;14444:1;14439:3;14435:11;14428:49;14503:2;14498:3;14494:12;14487:19;;14334:178;;;:::o;14518:373::-;;14681:67;14745:2;14740:3;14681:67;:::i;:::-;14674:74;;14778:34;14774:1;14769:3;14765:11;14758:55;14844:11;14839:2;14834:3;14830:12;14823:33;14882:2;14877:3;14873:12;14866:19;;14664:227;;;:::o;14897:369::-;;15060:67;15124:2;15119:3;15060:67;:::i;:::-;15053:74;;15157:34;15153:1;15148:3;15144:11;15137:55;15223:7;15218:2;15213:3;15209:12;15202:29;15257:2;15252:3;15248:12;15241:19;;15043:223;;;:::o;15272:297::-;;15452:83;15533:1;15528:3;15452:83;:::i;:::-;15445:90;;15561:1;15556:3;15552:11;15545:18;;15435:134;;;:::o;15575:387::-;;15738:67;15802:2;15797:3;15738:67;:::i;:::-;15731:74;;15835:34;15831:1;15826:3;15822:11;15815:55;15901:25;15896:2;15891:3;15887:12;15880:47;15953:2;15948:3;15944:12;15937:19;;15721:241;;;:::o;15968:368::-;;16131:67;16195:2;16190:3;16131:67;:::i;:::-;16124:74;;16228:34;16224:1;16219:3;16215:11;16208:55;16294:6;16289:2;16284:3;16280:12;16273:28;16327:2;16322:3;16318:12;16311:19;;16114:222;;;:::o;16342:319::-;;16505:67;16569:2;16564:3;16505:67;:::i;:::-;16498:74;;16602:23;16598:1;16593:3;16589:11;16582:44;16652:2;16647:3;16643:12;16636:19;;16488:173;;;:::o;16667:374::-;;16830:67;16894:2;16889:3;16830:67;:::i;:::-;16823:74;;16927:34;16923:1;16918:3;16914:11;16907:55;16993:12;16988:2;16983:3;16979:12;16972:34;17032:2;17027:3;17023:12;17016:19;;16813:228;;;:::o;17047:118::-;17134:24;17152:5;17134:24;:::i;:::-;17129:3;17122:37;17112:53;;:::o;17171:112::-;17254:22;17270:5;17254:22;:::i;:::-;17249:3;17242:35;17232:51;;:::o;17289:379::-;;17495:147;17638:3;17495:147;:::i;:::-;17488:154;;17659:3;17652:10;;17477:191;;;:::o;17674:222::-;;17805:2;17794:9;17790:18;17782:26;;17818:71;17886:1;17875:9;17871:17;17862:6;17818:71;:::i;:::-;17772:124;;;;:::o;17902:332::-;;18061:2;18050:9;18046:18;18038:26;;18074:71;18142:1;18131:9;18127:17;18118:6;18074:71;:::i;:::-;18155:72;18223:2;18212:9;18208:18;18199:6;18155:72;:::i;:::-;18028:206;;;;;:::o;18240:210::-;;18365:2;18354:9;18350:18;18342:26;;18378:65;18440:1;18429:9;18425:17;18416:6;18378:65;:::i;:::-;18332:118;;;;:::o;18456:313::-;;18607:2;18596:9;18592:18;18584:26;;18656:9;18650:4;18646:20;18642:1;18631:9;18627:17;18620:47;18684:78;18757:4;18748:6;18684:78;:::i;:::-;18676:86;;18574:195;;;;:::o;18775:419::-;;18979:2;18968:9;18964:18;18956:26;;19028:9;19022:4;19018:20;19014:1;19003:9;18999:17;18992:47;19056:131;19182:4;19056:131;:::i;:::-;19048:139;;18946:248;;;:::o;19200:419::-;;19404:2;19393:9;19389:18;19381:26;;19453:9;19447:4;19443:20;19439:1;19428:9;19424:17;19417:47;19481:131;19607:4;19481:131;:::i;:::-;19473:139;;19371:248;;;:::o;19625:419::-;;19829:2;19818:9;19814:18;19806:26;;19878:9;19872:4;19868:20;19864:1;19853:9;19849:17;19842:47;19906:131;20032:4;19906:131;:::i;:::-;19898:139;;19796:248;;;:::o;20050:419::-;;20254:2;20243:9;20239:18;20231:26;;20303:9;20297:4;20293:20;20289:1;20278:9;20274:17;20267:47;20331:131;20457:4;20331:131;:::i;:::-;20323:139;;20221:248;;;:::o;20475:419::-;;20679:2;20668:9;20664:18;20656:26;;20728:9;20722:4;20718:20;20714:1;20703:9;20699:17;20692:47;20756:131;20882:4;20756:131;:::i;:::-;20748:139;;20646:248;;;:::o;20900:419::-;;21104:2;21093:9;21089:18;21081:26;;21153:9;21147:4;21143:20;21139:1;21128:9;21124:17;21117:47;21181:131;21307:4;21181:131;:::i;:::-;21173:139;;21071:248;;;:::o;21325:419::-;;21529:2;21518:9;21514:18;21506:26;;21578:9;21572:4;21568:20;21564:1;21553:9;21549:17;21542:47;21606:131;21732:4;21606:131;:::i;:::-;21598:139;;21496:248;;;:::o;21750:419::-;;21954:2;21943:9;21939:18;21931:26;;22003:9;21997:4;21993:20;21989:1;21978:9;21974:17;21967:47;22031:131;22157:4;22031:131;:::i;:::-;22023:139;;21921:248;;;:::o;22175:419::-;;22379:2;22368:9;22364:18;22356:26;;22428:9;22422:4;22418:20;22414:1;22403:9;22399:17;22392:47;22456:131;22582:4;22456:131;:::i;:::-;22448:139;;22346:248;;;:::o;22600:419::-;;22804:2;22793:9;22789:18;22781:26;;22853:9;22847:4;22843:20;22839:1;22828:9;22824:17;22817:47;22881:131;23007:4;22881:131;:::i;:::-;22873:139;;22771:248;;;:::o;23025:419::-;;23229:2;23218:9;23214:18;23206:26;;23278:9;23272:4;23268:20;23264:1;23253:9;23249:17;23242:47;23306:131;23432:4;23306:131;:::i;:::-;23298:139;;23196:248;;;:::o;23450:419::-;;23654:2;23643:9;23639:18;23631:26;;23703:9;23697:4;23693:20;23689:1;23678:9;23674:17;23667:47;23731:131;23857:4;23731:131;:::i;:::-;23723:139;;23621:248;;;:::o;23875:419::-;;24079:2;24068:9;24064:18;24056:26;;24128:9;24122:4;24118:20;24114:1;24103:9;24099:17;24092:47;24156:131;24282:4;24156:131;:::i;:::-;24148:139;;24046:248;;;:::o;24300:419::-;;24504:2;24493:9;24489:18;24481:26;;24553:9;24547:4;24543:20;24539:1;24528:9;24524:17;24517:47;24581:131;24707:4;24581:131;:::i;:::-;24573:139;;24471:248;;;:::o;24725:419::-;;24929:2;24918:9;24914:18;24906:26;;24978:9;24972:4;24968:20;24964:1;24953:9;24949:17;24942:47;25006:131;25132:4;25006:131;:::i;:::-;24998:139;;24896:248;;;:::o;25150:419::-;;25354:2;25343:9;25339:18;25331:26;;25403:9;25397:4;25393:20;25389:1;25378:9;25374:17;25367:47;25431:131;25557:4;25431:131;:::i;:::-;25423:139;;25321:248;;;:::o;25575:419::-;;25779:2;25768:9;25764:18;25756:26;;25828:9;25822:4;25818:20;25814:1;25803:9;25799:17;25792:47;25856:131;25982:4;25856:131;:::i;:::-;25848:139;;25746:248;;;:::o;26000:419::-;;26204:2;26193:9;26189:18;26181:26;;26253:9;26247:4;26243:20;26239:1;26228:9;26224:17;26217:47;26281:131;26407:4;26281:131;:::i;:::-;26273:139;;26171:248;;;:::o;26425:419::-;;26629:2;26618:9;26614:18;26606:26;;26678:9;26672:4;26668:20;26664:1;26653:9;26649:17;26642:47;26706:131;26832:4;26706:131;:::i;:::-;26698:139;;26596:248;;;:::o;26850:419::-;;27054:2;27043:9;27039:18;27031:26;;27103:9;27097:4;27093:20;27089:1;27078:9;27074:17;27067:47;27131:131;27257:4;27131:131;:::i;:::-;27123:139;;27021:248;;;:::o;27275:419::-;;27479:2;27468:9;27464:18;27456:26;;27528:9;27522:4;27518:20;27514:1;27503:9;27499:17;27492:47;27556:131;27682:4;27556:131;:::i;:::-;27548:139;;27446:248;;;:::o;27700:419::-;;27904:2;27893:9;27889:18;27881:26;;27953:9;27947:4;27943:20;27939:1;27928:9;27924:17;27917:47;27981:131;28107:4;27981:131;:::i;:::-;27973:139;;27871:248;;;:::o;28125:419::-;;28329:2;28318:9;28314:18;28306:26;;28378:9;28372:4;28368:20;28364:1;28353:9;28349:17;28342:47;28406:131;28532:4;28406:131;:::i;:::-;28398:139;;28296:248;;;:::o;28550:419::-;;28754:2;28743:9;28739:18;28731:26;;28803:9;28797:4;28793:20;28789:1;28778:9;28774:17;28767:47;28831:131;28957:4;28831:131;:::i;:::-;28823:139;;28721:248;;;:::o;28975:419::-;;29179:2;29168:9;29164:18;29156:26;;29228:9;29222:4;29218:20;29214:1;29203:9;29199:17;29192:47;29256:131;29382:4;29256:131;:::i;:::-;29248:139;;29146:248;;;:::o;29400:222::-;;29531:2;29520:9;29516:18;29508:26;;29544:71;29612:1;29601:9;29597:17;29588:6;29544:71;:::i;:::-;29498:124;;;;:::o;29628:831::-;;29929:3;29918:9;29914:19;29906:27;;29943:71;30011:1;30000:9;29996:17;29987:6;29943:71;:::i;:::-;30024:80;30100:2;30089:9;30085:18;30076:6;30024:80;:::i;:::-;30151:9;30145:4;30141:20;30136:2;30125:9;30121:18;30114:48;30179:108;30282:4;30273:6;30179:108;:::i;:::-;30171:116;;30297:72;30365:2;30354:9;30350:18;30341:6;30297:72;:::i;:::-;30379:73;30447:3;30436:9;30432:19;30423:6;30379:73;:::i;:::-;29896:563;;;;;;;;:::o;30465:214::-;;30592:2;30581:9;30577:18;30569:26;;30605:67;30669:1;30658:9;30654:17;30645:6;30605:67;:::i;:::-;30559:120;;;;:::o;30685:283::-;;30751:2;30745:9;30735:19;;30793:4;30785:6;30781:17;30900:6;30888:10;30885:22;30864:18;30852:10;30849:34;30846:62;30843:2;;;30911:18;;:::i;:::-;30843:2;30951:10;30947:2;30940:22;30725:243;;;;:::o;30974:311::-;;31141:18;31133:6;31130:30;31127:2;;;31163:18;;:::i;:::-;31127:2;31213:4;31205:6;31201:17;31193:25;;31273:4;31267;31263:15;31255:23;;31056:229;;;:::o;31291:132::-;;31381:3;31373:11;;31411:4;31406:3;31402:14;31394:22;;31363:60;;;:::o;31429:114::-;;31530:5;31524:12;31514:22;;31503:40;;;:::o;31549:99::-;;31635:5;31629:12;31619:22;;31608:40;;;:::o;31654:113::-;;31756:4;31751:3;31747:14;31739:22;;31729:38;;;:::o;31773:184::-;;31906:6;31901:3;31894:19;31946:4;31941:3;31937:14;31922:29;;31884:73;;;;:::o;31963:147::-;;32101:3;32086:18;;32076:34;;;;:::o;32116:169::-;;32234:6;32229:3;32222:19;32274:4;32269:3;32265:14;32250:29;;32212:73;;;;:::o;32291:305::-;;32350:20;32368:1;32350:20;:::i;:::-;32345:25;;32384:20;32402:1;32384:20;:::i;:::-;32379:25;;32538:1;32470:66;32466:74;32463:1;32460:81;32457:2;;;32544:18;;:::i;:::-;32457:2;32588:1;32585;32581:9;32574:16;;32335:261;;;;:::o;32602:185::-;;32659:20;32677:1;32659:20;:::i;:::-;32654:25;;32693:20;32711:1;32693:20;:::i;:::-;32688:25;;32732:1;32722:2;;32737:18;;:::i;:::-;32722:2;32779:1;32776;32772:9;32767:14;;32644:143;;;;:::o;32793:848::-;;;32885:6;32876:15;;32909:5;32900:14;;32923:712;32944:1;32934:8;32931:15;32923:712;;;33039:4;33034:3;33030:14;33024:4;33021:24;33018:2;;;33048:18;;:::i;:::-;33018:2;33098:1;33088:8;33084:16;33081:2;;;33513:4;33506:5;33502:16;33493:25;;33081:2;33563:4;33557;33553:15;33545:23;;33593:32;33616:8;33593:32;:::i;:::-;33581:44;;32923:712;;;32866:775;;;;;;;:::o;33647:281::-;;33729:23;33747:4;33729:23;:::i;:::-;33721:31;;33773:25;33789:8;33773:25;:::i;:::-;33761:37;;33817:104;33854:66;33844:8;33838:4;33817:104;:::i;:::-;33808:113;;33711:217;;;;:::o;33934:1073::-;;34179:8;34169:2;;34200:1;34191:10;;34202:5;;34169:2;34228:4;34218:2;;34245:1;34236:10;;34247:5;;34218:2;34314:4;34362:1;34357:27;;;;34398:1;34393:191;;;;34307:277;;34357:27;34375:1;34366:10;;34377:5;;;34393:191;34438:3;34428:8;34425:17;34422:2;;;34445:18;;:::i;:::-;34422:2;34494:8;34491:1;34487:16;34478:25;;34529:3;34522:5;34519:14;34516:2;;;34536:18;;:::i;:::-;34516:2;34569:5;;;34307:277;;34693:2;34683:8;34680:16;34674:3;34668:4;34665:13;34661:36;34643:2;34633:8;34630:16;34625:2;34619:4;34616:12;34612:35;34596:111;34593:2;;;34749:8;34743:4;34739:19;34730:28;;34784:3;34777:5;34774:14;34771:2;;;34791:18;;:::i;:::-;34771:2;34824:5;;34593:2;34864:42;34902:3;34892:8;34886:4;34883:1;34864:42;:::i;:::-;34849:57;;;;34938:4;34933:3;34929:14;34922:5;34919:25;34916:2;;;34947:18;;:::i;:::-;34916:2;34996:4;34989:5;34985:16;34976:25;;33994:1013;;;;;;:::o;35013:348::-;;35076:20;35094:1;35076:20;:::i;:::-;35071:25;;35110:20;35128:1;35110:20;:::i;:::-;35105:25;;35298:1;35230:66;35226:74;35223:1;35220:81;35215:1;35208:9;35201:17;35197:105;35194:2;;;35305:18;;:::i;:::-;35194:2;35353:1;35350;35346:9;35335:20;;35061:300;;;;:::o;35367:191::-;;35427:20;35445:1;35427:20;:::i;:::-;35422:25;;35461:20;35479:1;35461:20;:::i;:::-;35456:25;;35500:1;35497;35494:8;35491:2;;;35505:18;;:::i;:::-;35491:2;35550:1;35547;35543:9;35535:17;;35412:146;;;;:::o;35564:96::-;;35630:24;35648:5;35630:24;:::i;:::-;35619:35;;35609:51;;;:::o;35666:90::-;;35743:5;35736:13;35729:21;35718:32;;35708:48;;;:::o;35762:126::-;;35839:42;35832:5;35828:54;35817:65;;35807:81;;;:::o;35894:77::-;;35960:5;35949:16;;35939:32;;;:::o;35977:86::-;;36052:4;36045:5;36041:16;36030:27;;36020:43;;;:::o;36069:121::-;;36160:24;36178:5;36160:24;:::i;:::-;36147:37;;36137:53;;;:::o;36196:307::-;36264:1;36274:113;36288:6;36285:1;36282:13;36274:113;;;36373:1;36368:3;36364:11;36358:18;36354:1;36349:3;36345:11;36338:39;36310:2;36307:1;36303:10;36298:15;;36274:113;;;36405:6;36402:1;36399:13;36396:2;;;36485:1;36476:6;36471:3;36467:16;36460:27;36396:2;36245:258;;;;:::o;36509:233::-;;36571:24;36589:5;36571:24;:::i;:::-;36562:33;;36617:66;36610:5;36607:77;36604:2;;;36687:18;;:::i;:::-;36604:2;36734:1;36727:5;36723:13;36716:20;;36552:190;;;:::o;36748:180::-;36796:77;36793:1;36786:88;36893:4;36890:1;36883:15;36917:4;36914:1;36907:15;36934:180;36982:77;36979:1;36972:88;37079:4;37076:1;37069:15;37103:4;37100:1;37093:15;37120:180;37168:77;37165:1;37158:88;37265:4;37262:1;37255:15;37289:4;37286:1;37279:15;37306:102;;37398:2;37394:7;37389:2;37382:5;37378:14;37374:28;37364:38;;37354:54;;;:::o;37414:102::-;;37503:5;37500:1;37496:13;37475:34;;37465:51;;;:::o;37522:122::-;37595:24;37613:5;37595:24;:::i;:::-;37588:5;37585:35;37575:2;;37634:1;37631;37624:12;37575:2;37565:79;:::o;37650:116::-;37720:21;37735:5;37720:21;:::i;:::-;37713:5;37710:32;37700:2;;37756:1;37753;37746:12;37700:2;37690:76;:::o;37772:122::-;37845:24;37863:5;37845:24;:::i;:::-;37838:5;37835:35;37825:2;;37884:1;37881;37874:12;37825:2;37815:79;:::o

Swarm Source

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