ETH Price: $3,429.18 (-1.52%)
Gas: 5 Gwei

Token

Ouroboros (ORBS)
 

Overview

Max Total Supply

1,000,000 ORBS

Holders

164

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6.150368969 ORBS

Value
$0.00
0x92048db9d572f3d153d415a41502ad20e9756904
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:
OUROBOROS

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-05
*/

// SPDX-License-Identifier: MIT

//          000000      00000000      00000000        0000000
//         00    00     00     00     00     00      00     00
//        00      00    00      00    00      00    00
//        00      00    00      00    00      00     00
//        00      00    00     00     00     00       000
//        00      00    00000000      00000000          0000
//        00      00    00 00         00     00            000 
//        00      00    00  00        00      00            00
//        00      00    00   00       00      00            00
//         00    00     00    00      00     00     00     00
//          000000      00     000    00000000       000000


pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

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



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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @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 Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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


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

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}

pragma solidity ^0.6.12;

contract RewardWallet {
    constructor() public {
    }
}

contract Balancer {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable _uniswapV2Router;
    OUROBOROS private _tokenContract;
    
    constructor(OUROBOROS tokenContract, IUniswapV2Router02 uniswapV2Router) public {
        _tokenContract =tokenContract;
        _uniswapV2Router = uniswapV2Router;
    }
    
    receive() external payable {}
    
    function rebalance() external returns (uint256) { 
        swapEthForTokens(address(this).balance);
    }

    function swapEthForTokens(uint256 EthAmount) private {
        address[] memory uniswapPairPath = new address[](2);
        uniswapPairPath[0] = _uniswapV2Router.WETH();
        uniswapPairPath[1] = address(_tokenContract);

        _uniswapV2Router
            .swapExactETHForTokensSupportingFeeOnTransferTokens{value: EthAmount}(
                0,
                uniswapPairPath,
                address(this),
                block.timestamp
            );
    }
}

contract Swaper {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable _uniswapV2Router;
    OUROBOROS private _tokenContract;
    
    constructor(OUROBOROS tokenContract, IUniswapV2Router02 uniswapV2Router) public {
        _tokenContract = tokenContract;
        _uniswapV2Router = uniswapV2Router;
    }
    
    function swapTokens(address pairTokenAddress, uint256 tokenAmount) external {
        uint256 initialPairTokenBalance = IERC20(pairTokenAddress).balanceOf(address(this));
        swapTokensForTokens(pairTokenAddress, tokenAmount);
        uint256 newPairTokenBalance = IERC20(pairTokenAddress).balanceOf(address(this)).sub(initialPairTokenBalance);
        IERC20(pairTokenAddress).transfer(address(_tokenContract), newPairTokenBalance);
    }
    
    function swapTokensForTokens(address pairTokenAddress, uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(_tokenContract);
        path[1] = pairTokenAddress;

        _tokenContract.approve(address(_uniswapV2Router), tokenAmount);

        // make the swap
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of pair token
            path,
            address(this),
            block.timestamp
        );
    }
}

contract OUROBOROS is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    IUniswapV2Router02 public immutable _uniswapV2Router;

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    address public _rewardWallet;
    address public _uniswapETHPool;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _tFeeTotal;
    uint256 public _tBurnTotal;

    string private _name = 'Ouroboros';
    string private _symbol = 'ORBS';
    uint8 private _decimals = 9;
    
    uint256 public _feeDecimals = 1;
    uint256 public _taxFee = 0;
    uint256 public _lockFee = 0;
    uint256 public _maxTxAmount = 200000e9;
    uint256 public _minTokensBeforeSwap = 1000e9;
    uint256 private _autoSwapCallerFee = 20e9;
    
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public tradingEnabled;
    
    address private currentPairTokenAddress;
    address private currentPoolAddress;
    
    uint256 private _liquidityRemoveFee = 50;
    uint256 private _alchemyCallerFee = 20;
    uint256 private _lastAlchemy;
    uint256 private _alchemyInterval = 12 hours;
    

    event FeeDecimalsUpdated(uint256 taxFeeDecimals);
    event TaxFeeUpdated(uint256 taxFee);
    event LockFeeUpdated(uint256 lockFee);
    event MaxTxAmountUpdated(uint256 maxTxAmount);
    event WhitelistUpdated(address indexed pairTokenAddress);
    event TradingEnabled();
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        address indexed pairTokenAddress,
        uint256 tokensSwapped,
        uint256 pairTokenReceived,
        uint256 tokensIntoLiqudity
    );
    event Rebalance(uint256 tokenBurnt);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event AutoSwapCallerFeeUpdated(uint256 autoSwapCallerFee);
   
    event LiquidityRemoveFeeUpdated(uint256 liquidityRemoveFee);
    event AlchemyCallerFeeUpdated(uint256 rebalnaceCallerFee);
    event MinTokenForAlchemyUpdated(uint256 minRebalanceAmount);
    event AlchemyIntervalUpdated(uint256 rebalanceInterval);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    Balancer public balancer;
    Swaper public swaper;

    constructor (IUniswapV2Router02 uniswapV2Router) public {
        _lastAlchemy = now;
        
        _uniswapV2Router = uniswapV2Router;
        _rewardWallet = address(new RewardWallet());
       
        balancer = new Balancer(this, uniswapV2Router);
        swaper = new Swaper(this, uniswapV2Router);
        
        currentPoolAddress = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        currentPairTokenAddress = uniswapV2Router.WETH();
        _uniswapETHPool = currentPoolAddress;
        
        updateSwapAndLiquifyEnabled(false);
        
        _rOwned[_msgSender()] = reflectionFromToken(_tTotal, false);
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    
    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Ouroboros: Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Ouroboros: Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'Ouroboros: We can not exclude Uniswap router.');
        require(account != address(this), 'Ouroboros: We can not exclude contract self.');
        require(account != _rewardWallet, 'Ouroboros: We can not exclude reweard wallet.');
        require(!_isExcluded[account], "Ouroboros: Account is already excluded");
        
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Ouroboros: Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "Ouroboros: transfer from the zero address");
        require(recipient != address(0), "Ouroboros: transfer to the zero address");
        require(amount > 0, "Ouroboros: Transfer amount must be greater than zero");
        
        if(sender != owner() && recipient != owner() && !inSwapAndLiquify) {
            require(amount <= _maxTxAmount, "Ouroboros: Transfer amount exceeds the maxTxAmount.");
            if((_msgSender() == currentPoolAddress || _msgSender() == address(_uniswapV2Router)) && !tradingEnabled)
                require(false, "Ouroboros: trading is disabled.");
        }
        
        if(!inSwapAndLiquify) {
            uint256 lockedBalanceForPool = balanceOf(address(this));
            bool overMinTokenBalance = lockedBalanceForPool >= _minTokensBeforeSwap;
            if (
                overMinTokenBalance &&
                msg.sender != currentPoolAddress &&
                swapAndLiquifyEnabled
            ) {
                if(currentPairTokenAddress == _uniswapV2Router.WETH())
                    swapAndLiquifyForEth(lockedBalanceForPool);
                else
                    swapAndLiquifyForTokens(currentPairTokenAddress, lockedBalanceForPool);
            }
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }
    
    receive() external payable {}
    
    function swapAndLiquifyForEth(uint256 lockedBalanceForPool) private lockTheSwap {
        // split the contract balance except swapCallerFee into halves
        uint256 lockedForSwap = lockedBalanceForPool.sub(_autoSwapCallerFee);
        uint256 half = lockedForSwap.div(2);
        uint256 otherHalf = lockedForSwap.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half);
        
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidityForEth(otherHalf, newBalance);
        
        emit SwapAndLiquify(_uniswapV2Router.WETH(), half, newBalance, otherHalf);
        
        _transfer(address(this), tx.origin, _autoSwapCallerFee);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        // make the swap
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidityForEth(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        // add the liquidity
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
    
    function swapAndLiquifyForTokens(address pairTokenAddress, uint256 lockedBalanceForPool) private lockTheSwap {
        // split the contract balance except swapCallerFee into halves
        uint256 lockedForSwap = lockedBalanceForPool.sub(_autoSwapCallerFee);
        uint256 half = lockedForSwap.div(2);
        uint256 otherHalf = lockedForSwap.sub(half);
        
        _transfer(address(this), address(swaper), half);
        
        uint256 initialPairTokenBalance = IERC20(pairTokenAddress).balanceOf(address(this));
        
        // swap tokens for pairToken
        swaper.swapTokens(pairTokenAddress, half);
        
        uint256 newPairTokenBalance = IERC20(pairTokenAddress).balanceOf(address(this)).sub(initialPairTokenBalance);

        // add liquidity to uniswap
        addLiquidityForTokens(pairTokenAddress, otherHalf, newPairTokenBalance);
        
        emit SwapAndLiquify(pairTokenAddress, half, newPairTokenBalance, otherHalf);
        
        _transfer(address(this), tx.origin, _autoSwapCallerFee);
        
        
    }

    function addLiquidityForTokens(address pairTokenAddress, uint256 tokenAmount, uint256 pairTokenAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        IERC20(pairTokenAddress).approve(address(_uniswapV2Router), pairTokenAmount);

        // add the liquidity
        _uniswapV2Router.addLiquidity(
            address(this),
            pairTokenAddress,
            tokenAmount,
            pairTokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function alchemy() public lockTheSwap {
        require(_msgSender() == owner());
        require(now > _lastAlchemy + _alchemyInterval, 'Ouroboros: Too Soon.');
        
        _lastAlchemy = now;

        uint256 amountToRemove = IERC20(_uniswapETHPool).balanceOf(address(this)).mul(_liquidityRemoveFee).div(100);

        removeLiquidityETH(amountToRemove);
        balancer.rebalance();

        uint256 tNewTokenBalance = balanceOf(address(balancer));
        uint256 tRewardForCaller = tNewTokenBalance.mul(_alchemyCallerFee).div(100);
        uint256 tBurn = tNewTokenBalance.sub(tRewardForCaller);
        
        uint256 currentRate =  _getRate();
        uint256 rBurn =  tBurn.mul(currentRate);
        
        _rOwned[_msgSender()] = _rOwned[_msgSender()].add(tRewardForCaller.mul(currentRate));
        _rOwned[address(balancer)] = 0;
        
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
        _rTotal = _rTotal.sub(rBurn);

        emit Transfer(address(balancer), _msgSender(), tRewardForCaller);
        emit Transfer(address(balancer), address(0), tBurn);
        emit Rebalance(tBurn);
    }
    
    function removeLiquidityETH(uint256 lpAmount) private returns(uint ETHAmount) {
        IERC20(_uniswapETHPool).approve(address(_uniswapV2Router), lpAmount);
        (ETHAmount) = _uniswapV2Router
            .removeLiquidityETHSupportingFeeOnTransferTokens(
                address(this),
                lpAmount,
                0,
                0,
                address(balancer),
                block.timestamp
            );
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLock) = _getValues(tAmount);
        uint256 rLock =  tLock.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLock) = _getValues(tAmount);
        uint256 rLock =  tLock.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if(inSwapAndLiquify) {
            _tOwned[recipient] = _tOwned[recipient].add(tAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLock) = _getValues(tAmount);
        uint256 rLock =  tLock.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if(inSwapAndLiquify) {
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        } else {
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLock) = _getValues(tAmount);
        uint256 rLock =  tLock.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        if(inSwapAndLiquify) {
            _tOwned[recipient] = _tOwned[recipient].add(tAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rAmount);
            emit Transfer(sender, recipient, tAmount);
        }
        else {
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
            _rOwned[address(this)] = _rOwned[address(this)].add(rLock);
            _reflectFee(rFee, tFee);
            emit Transfer(sender, address(this), tLock);
            emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLock) = _getTValues(tAmount, _taxFee, _lockFee, _feeDecimals);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLock, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLock);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 lockFee, uint256 feeDecimals) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(10**(feeDecimals + 2));
        uint256 tLockFee = tAmount.mul(lockFee).div(10**(feeDecimals + 2));
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLockFee);
        return (tTransferAmount, tFee, tLockFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLock, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLock = tLock.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLock);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() public view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() public view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function getCurrentPoolAddress() public view returns(address) {
        return currentPoolAddress;
    }
    
    function getCurrentPairTokenAddress() public view returns(address) {
        return currentPairTokenAddress;
    }

    function getLiquidityRemoveFee() public view returns(uint256) {
        return _liquidityRemoveFee;
    }
    
    function getAlchemyCallerFee() public view returns(uint256) {
        return _alchemyCallerFee;
    }
    
    function getLastAlchemy() public view returns(uint256) {
        return _lastAlchemy;
    }
    
    function getAlchemyInterval() public view returns(uint256) {
        return _alchemyInterval;
    }
    
    function _setFeeDecimals(uint256 feeDecimals) external onlyOwner() {
        require(feeDecimals >= 0 && feeDecimals <= 2, 'Ouroboros: fee decimals should be in 0 - 2');
        _feeDecimals = feeDecimals;
        emit FeeDecimalsUpdated(feeDecimals);
    }
    
    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0  && taxFee <= 5 * 10 ** _feeDecimals, 'Ouroboros: taxFee should be in 0 - 5');
        _taxFee = taxFee;
        emit TaxFeeUpdated(taxFee);
    }
    
    function _setLockFee(uint256 lockFee) external onlyOwner() {
        require(lockFee >= 0 && lockFee <= 5 * 10 ** _feeDecimals, 'Ouroboros: lockFee should be in 0 - 5');
        _lockFee = lockFee;
        emit LockFeeUpdated(lockFee);
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 500000e9 , 'Ouroboros: maxTxAmount should be greater than 500000e9');
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(maxTxAmount);
    }
    
    function _setMinTokensBeforeSwap(uint256 minTokensBeforeSwap) external onlyOwner() {
        require(minTokensBeforeSwap >= 50e9 && minTokensBeforeSwap <= 25000e9 , 'Ouroboros: minTokenBeforeSwap should be in 50e9 - 25000e9');
        require(minTokensBeforeSwap > _autoSwapCallerFee , 'Ouroboros: minTokenBeforeSwap should be greater than autoSwapCallerFee');
        _minTokensBeforeSwap = minTokensBeforeSwap;
        emit MinTokensBeforeSwapUpdated(minTokensBeforeSwap);
    }
    
    function _setAutoSwapCallerFee(uint256 autoSwapCallerFee) external onlyOwner() {
        require(autoSwapCallerFee >= 1e9, 'Ouroboros: autoSwapCallerFee should be greater than 1e9');
        _autoSwapCallerFee = autoSwapCallerFee;
        emit AutoSwapCallerFeeUpdated(autoSwapCallerFee);
    }
    
    function _setLiquidityRemoveFee(uint256 liquidityRemoveFee) external onlyOwner() {
        require(liquidityRemoveFee >= 1 && liquidityRemoveFee <= 10 , 'Ouroboros: liquidityRemoveFee should be in 1 - 10');
        _liquidityRemoveFee = liquidityRemoveFee;
        emit LiquidityRemoveFeeUpdated(liquidityRemoveFee);
    }
    
    function _setAlchemyCallerFee(uint256 alchemyCallerFee) external onlyOwner() {
        require(alchemyCallerFee >= 1 && alchemyCallerFee <= 15 , 'Ouroboros: alchemyCallerFee should be in 1 - 15');
        _alchemyCallerFee = alchemyCallerFee;
        emit AlchemyCallerFeeUpdated(alchemyCallerFee);
    }
    
    function _setAlchemyInterval(uint256 alchemyInterval) external onlyOwner() {
        _alchemyInterval = alchemyInterval;
        emit AlchemyIntervalUpdated(alchemyInterval);
    }
    
    function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function _updateWhitelist(address poolAddress, address pairTokenAddress) public onlyOwner() {
        require(poolAddress != address(0), "Ouroboros: Pool address is zero.");
        require(pairTokenAddress != address(0), "Ouroboros: Pair token address is zero.");
        require(pairTokenAddress != address(this), "Ouroboros: Pair token address self address.");
        require(pairTokenAddress != currentPairTokenAddress, "Ouroboros: Pair token address is same as current one.");
        
        currentPoolAddress = poolAddress;
        currentPairTokenAddress = pairTokenAddress;
        
        emit WhitelistUpdated(pairTokenAddress);
    }

    function _enableTrading() external onlyOwner() {
        tradingEnabled = true;
        TradingEnabled();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"uniswapV2Router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rebalnaceCallerFee","type":"uint256"}],"name":"AlchemyCallerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rebalanceInterval","type":"uint256"}],"name":"AlchemyIntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"autoSwapCallerFee","type":"uint256"}],"name":"AutoSwapCallerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFeeDecimals","type":"uint256"}],"name":"FeeDecimalsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityRemoveFee","type":"uint256"}],"name":"LiquidityRemoveFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"lockFee","type":"uint256"}],"name":"LockFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minRebalanceAmount","type":"uint256"}],"name":"MinTokenForAlchemyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokenBurnt","type":"uint256"}],"name":"Rebalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pairTokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pairTokenReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"TaxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pairTokenAddress","type":"address"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"_enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_feeDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"alchemyCallerFee","type":"uint256"}],"name":"_setAlchemyCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"alchemyInterval","type":"uint256"}],"name":"_setAlchemyInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"autoSwapCallerFee","type":"uint256"}],"name":"_setAutoSwapCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeDecimals","type":"uint256"}],"name":"_setFeeDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityRemoveFee","type":"uint256"}],"name":"_setLiquidityRemoveFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockFee","type":"uint256"}],"name":"_setLockFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"_setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tBurnTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapETHPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"address","name":"pairTokenAddress","type":"address"}],"name":"_updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alchemy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balancer","outputs":[{"internalType":"contract Balancer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAlchemyCallerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAlchemyInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPairTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastAlchemy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityRemoveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swaper","outputs":[{"internalType":"contract Swaper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

66038d7ea4c680006008556507326b47ffff19600990815560e060405260a0819052684f75726f626f726f7360b81b60c09081526200004291600c919062000c23565b50604080518082019091526004808252634f52425360e01b60209092019182526200007091600d9162000c23565b50600e805460ff191660091790556001600f556000601081905560115565b5e620f4800060125564e8d4a510006013556404a817c8006014908155603260175560185561a8c0601a55348015620000c657600080fd5b5060405162005a4b38038062005a4b83398181016040526020811015620000ec57600080fd5b50516000620000fa6200054c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350426019556001600160601b0319606082901b16608052604051620001689062000ca8565b604051809103906000f08015801562000185573d6000803e3d6000fd5b50600660006101000a8154816001600160a01b0302191690836001600160a01b031602179055503081604051620001bc9062000cb5565b6001600160a01b03928316815291166020820152604080519182900301906000f080158015620001f0573d6000803e3d6000fd5b50601b60006101000a8154816001600160a01b0302191690836001600160a01b031602179055503081604051620002279062000cc3565b6001600160a01b03928316815291166020820152604080519182900301906000f0801580156200025b573d6000803e3d6000fd5b50601c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bc57600080fd5b505afa158015620002d1573d6000803e3d6000fd5b505050506040513d6020811015620002e857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200033957600080fd5b505afa1580156200034e573d6000803e3d6000fd5b505050506040513d60208110156200036557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003b857600080fd5b505af1158015620003cd573d6000803e3d6000fd5b505050506040513d6020811015620003e457600080fd5b5051601680546001600160a01b0319166001600160a01b03928316179055604080516315ab88c960e31b815290519183169163ad5c464891600480820192602092909190829003018186803b1580156200043d57600080fd5b505afa15801562000452573d6000803e3d6000fd5b505050506040513d60208110156200046957600080fd5b5051601580546001600160a01b039283166301000000026301000000600160b81b0319909116179055601654600780546001600160a01b03191691909216179055620004b6600062000550565b600854620004c69060006200060c565b60016000620004d46200054c565b6001600160a01b03168152602081019190915260400160002055620004f86200054c565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a35062000ce8565b3390565b6200055a6200054c565b6000546001600160a01b03908116911614620005bd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60158054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600060085483111562000666576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81620006895760006200067984620006ac565b50939550620006a6945050505050565b60006200069684620006ac565b50929550620006a6945050505050565b92915050565b6000806000806000806000806000620006d48a601054601154600f546200071860201b60201c565b919450925090506000620006e7620007c8565b905060008080620006fb8e878787620007fb565b919e509c509a509598509396509194505050505091939550919395565b6000806000806200075785600201600a0a62000743898b6200088d60201b620026e51790919060201c565b620008f260201b620027451790919060201c565b905060006200078086600201600a0a62000743898c6200088d60201b620026e51790919060201c565b90506000620007b782620007a3858d6200093c60201b620027871790919060201c565b6200093c60201b620027871790919060201c565b9a9299509097509095505050505050565b60008080620007d662000986565b91509150620007f48183620008f260201b620027451790919060201c565b9250505090565b6000806000806200081b85896200088d60201b620026e51790919060201c565b905060006200083986896200088d60201b620026e51790919060201c565b905060006200085787896200088d60201b620026e51790919060201c565b905060006200087a82620007a385876200093c60201b620027871790919060201c565b939b939a50919850919650505050505050565b6000826200089e57506000620006a6565b82820282848281620008ac57fe5b0414620008eb5760405162461bcd60e51b815260040180806020018281038252602181526020018062005a2a6021913960400191505060405180910390fd5b9392505050565b6000620008eb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b1f60201b60201c565b6000620008eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000bc660201b60201c565b6009546008546000918291825b60055481101562000adc57826001600060058481548110620009b157fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a185750816002600060058481548110620009f157fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a31576009546008549450945050505062000b1b565b62000a80600160006005848154811062000a4757fe5b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548591620027876200093c821b17901c565b925062000ad1600260006005848154811062000a9857fe5b60009182526020808320909101546001600160a01b031683528281019390935260409091019020548491620027876200093c821b17901c565b915060010162000993565b5062000afb600854600954620008f260201b620027451790919060201c565b82101562000b155760095460085493509350505062000b1b565b90925090505b9091565b6000818362000baf5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b7357818101518382015260200162000b59565b50505050905090810190601f16801562000ba15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000bbc57fe5b0495945050505050565b6000818484111562000c1b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831562000b7357818101518382015260200162000b59565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c6657805160ff191683800117855562000c96565b8280016001018555821562000c96579182015b8281111562000c9657825182559160200191906001019062000c79565b5062000ca492915062000cd1565b5090565b605c806200507683390190565b61036580620050d283390190565b6105f3806200543783390190565b5b8082111562000ca4576000815560010162000cd2565b60805160601c61432f62000d47600039806112925280612af95280612bec5280612ec55280612f975280613185528061392a52806139e25280613a095280613af75280613b5e5280613bdf5280613c155280613cfc525061432f6000f3fe6080604052600436106103545760003560e01c80638b1bdcb2116101c6578063d51486df116100f7578063eed83f1111610095578063f2fde38b1161006f578063f2fde38b14610ae1578063f7505bc014610b14578063f84354f114610b3e578063fb1eb14b14610b715761035b565b8063eed83f1114610a6f578063efeb97e114610a84578063f2cc0c1814610aae5761035b565b8063e4451f66116100d1578063e4451f6614610a06578063e563037e14610a1b578063e8598c8714610a30578063e98d2c4b14610a455761035b565b8063d51486df14610966578063d73cf08014610990578063dd62ed3e146109cb5761035b565b80639f9a4e7f11610164578063a4f4a7651161013e578063a4f4a765146108d0578063a9059cbb146108e5578063c9e6da191461091e578063cba0e996146109335761035b565b80639f9a4e7f14610856578063a0ac5e1914610882578063a457c2d7146108975761035b565b806395d89b41116101a057806395d89b41146107e957806396354704146107fe57806397a9d560146108135780639d6f83e4146108415761035b565b80638b1bdcb2146107aa5780638da5cb5b146107bf57806394e10784146107d45761035b565b80633b124fe7116102a05780635afbfd381161023e578063715018a611610218578063715018a6146107565780637d1db4a51461076b57806385d1e038146107805780638aadb809146107955761035b565b80635afbfd38146106f9578063674b80ee1461070e57806370a08231146107235761035b565b80634a74bb021161027a5780634a74bb02146106745780634ada218b14610689578063583e05681461069e5780635880b873146106cf5761035b565b80633b124fe7146106035780634549b039146106185780634a1e77261461064a5761035b565b80631bbae6e01161030d5780632d838119116102e75780632d8381191461054b5780632ec8e52314610575578063313ce5671461059f57806339509351146105ca5761035b565b80631bbae6e0146104b457806323b872dd146104de57806326f5ccaa146105215761035b565b8063053ab1821461036057806306fdde031461038c578063095ea7b314610416578063171778081461046357806318160ddd1461048a578063185d374c1461049f5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038a6004803603602081101561038357600080fd5b5035610b86565b005b34801561039857600080fd5b506103a1610c60565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103db5781810151838201526020016103c3565b50505050905090810190601f1680156104085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042257600080fd5b5061044f6004803603604081101561043957600080fd5b506001600160a01b038135169060200135610cf6565b604080519115158252519081900360200190f35b34801561046f57600080fd5b50610478610d14565b60408051918252519081900360200190f35b34801561049657600080fd5b50610478610d1a565b3480156104ab57600080fd5b50610478610d20565b3480156104c057600080fd5b5061038a600480360360208110156104d757600080fd5b5035610d26565b3480156104ea57600080fd5b5061044f6004803603606081101561050157600080fd5b506001600160a01b03813581169160208101359091169060400135610dff565b34801561052d57600080fd5b5061038a6004803603602081101561054457600080fd5b5035610e86565b34801561055757600080fd5b506104786004803603602081101561056e57600080fd5b5035610f66565b34801561058157600080fd5b5061038a6004803603602081101561059857600080fd5b5035610fc8565b3480156105ab57600080fd5b506105b461105b565b6040805160ff9092168252519081900360200190f35b3480156105d657600080fd5b5061044f600480360360408110156105ed57600080fd5b506001600160a01b038135169060200135611064565b34801561060f57600080fd5b506104786110b2565b34801561062457600080fd5b506104786004803603604081101561063b57600080fd5b508035906020013515156110b8565b34801561065657600080fd5b5061038a6004803603602081101561066d57600080fd5b503561114a565b34801561068057600080fd5b5061044f611273565b34801561069557600080fd5b5061044f611281565b3480156106aa57600080fd5b506106b3611290565b604080516001600160a01b039092168252519081900360200190f35b3480156106db57600080fd5b5061038a600480360360208110156106f257600080fd5b50356112b4565b34801561070557600080fd5b506106b361138e565b34801561071a57600080fd5b5061038a6113a4565b34801561072f57600080fd5b506104786004803603602081101561074657600080fd5b50356001600160a01b0316611709565b34801561076257600080fd5b5061038a61176b565b34801561077757600080fd5b5061047861180d565b34801561078c57600080fd5b50610478611813565b3480156107a157600080fd5b50610478611819565b3480156107b657600080fd5b506106b361181f565b3480156107cb57600080fd5b506106b361182e565b3480156107e057600080fd5b5061047861183d565b3480156107f557600080fd5b506103a1611860565b34801561080a57600080fd5b506104786118c1565b34801561081f57600080fd5b506108286118c7565b6040805192835260208301919091528051918290030190f35b34801561084d57600080fd5b50610478611a2a565b34801561086257600080fd5b5061038a6004803603602081101561087957600080fd5b50351515611a30565b34801561088e57600080fd5b5061038a611ad7565b3480156108a357600080fd5b5061044f600480360360408110156108ba57600080fd5b506001600160a01b038135169060200135611b6b565b3480156108dc57600080fd5b506106b3611bd3565b3480156108f157600080fd5b5061044f6004803603604081101561090857600080fd5b506001600160a01b038135169060200135611be2565b34801561092a57600080fd5b506106b3611bf6565b34801561093f57600080fd5b5061044f6004803603602081101561095657600080fd5b50356001600160a01b0316611c05565b34801561097257600080fd5b5061038a6004803603602081101561098957600080fd5b5035611c23565b34801561099c57600080fd5b5061038a600480360360408110156109b357600080fd5b506001600160a01b0381358116916020013516611cfd565b3480156109d757600080fd5b50610478600480360360408110156109ee57600080fd5b506001600160a01b0381358116916020013516611efd565b348015610a1257600080fd5b50610478611f28565b348015610a2757600080fd5b506106b3611f2e565b348015610a3c57600080fd5b50610478611f3d565b348015610a5157600080fd5b5061038a60048036036020811015610a6857600080fd5b5035611f43565b348015610a7b57600080fd5b506106b3612023565b348015610a9057600080fd5b5061038a60048036036020811015610aa757600080fd5b5035612032565b348015610aba57600080fd5b5061038a60048036036020811015610ad157600080fd5b50356001600160a01b0316612108565b348015610aed57600080fd5b5061038a60048036036020811015610b0457600080fd5b50356001600160a01b0316612369565b348015610b2057600080fd5b5061038a60048036036020811015610b3757600080fd5b5035612461565b348015610b4a57600080fd5b5061038a60048036036020811015610b6157600080fd5b50356001600160a01b0316612534565b348015610b7d57600080fd5b506104786126df565b6000610b906127c9565b6001600160a01b03811660009081526004602052604090205490915060ff1615610beb5760405162461bcd60e51b8152600401808060200182810382526037815260200180613f8c6037913960400191505060405180910390fd5b6000610bf6836127cd565b505050506001600160a01b038416600090815260016020526040902054919250610c2291905082612787565b6001600160a01b038316600090815260016020526040902055600954610c489082612787565b600955600a54610c58908461282d565b600a55505050565b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cec5780601f10610cc157610100808354040283529160200191610cec565b820191906000526020600020905b815481529060010190602001808311610ccf57829003601f168201915b5050505050905090565b6000610d0a610d036127c9565b8484612887565b5060015b92915050565b60185490565b60085490565b600b5481565b610d2e6127c9565b6000546001600160a01b03908116911614610d7e576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6601c6bf52634000811015610dc45760405162461bcd60e51b81526004018080602001828103825260368152602001806141bf6036913960400191505060405180910390fd5b60128190556040805182815290517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9181900360200190a150565b6000610e0c848484612973565b610e7c84610e186127c9565b610e77856040518060600160405280602881526020016140de602891396001600160a01b038a16600090815260036020526040812090610e566127c9565b6001600160a01b031681526020810191909152604001600020549190612e13565b612887565b5060019392505050565b610e8e6127c9565b6000546001600160a01b03908116911614610ede576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60018110158015610ef05750600a8111155b610f2b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613fe76031913960400191505060405180910390fd5b60178190556040805182815290517f5be5e13332f5fe25d72958c9d03ce5cdb01b189670222a86673715d56e43ce2a9181900360200190a150565b6000600954821115610fa95760405162461bcd60e51b81526004018080602001828103825260358152602001806142426035913960400191505060405180910390fd5b6000610fb361183d565b9050610fbf8382612745565b9150505b919050565b610fd06127c9565b6000546001600160a01b03908116911614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b601a8190556040805182815290517feaed440fcec6c61f9f769421c03cc43636a7ae7ec94dab35cf5b906d2c67b5b89181900360200190a150565b600e5460ff1690565b6000610d0a6110716127c9565b84610e7785600360006110826127c9565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061282d565b60105481565b6000600854831115611111576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611130576000611121846127cd565b50939550610d0e945050505050565b600061113b846127cd565b50929550610d0e945050505050565b6111526127c9565b6000546001600160a01b039081169116146111a2576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b640ba43b740081101580156111bd57506516bcc41e90008111155b6111f85760405162461bcd60e51b8152600401808060200182810382526039815260200180613d9e6039913960400191505060405180910390fd5b60145481116112385760405162461bcd60e51b8152600401808060200182810382526046815260200180613e336046913960600191505060405180910390fd5b60138190556040805182815290517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c009181900360200190a150565b601554610100900460ff1681565b60155462010000900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112bc6127c9565b6000546001600160a01b0390811691161461130c576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600f54600a0a6005028111156113535760405162461bcd60e51b8152600401808060200182810382526024815260200180613fc36024913960400191505060405180910390fd5b60108190556040805182815290517faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de29181900360200190a150565b601554630100000090046001600160a01b031690565b6015805460ff191660011790556113b961182e565b6001600160a01b03166113ca6127c9565b6001600160a01b0316146113dd57600080fd5b601a5460195401421161142e576040805162461bcd60e51b815260206004820152601460248201527327bab937b137b937b99d102a37b79029b7b7b71760611b604482015290519081900360640190fd5b42601955601754600754604080516370a0823160e01b815230600482015290516000936114c6936064936114c0936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d60208110156114b857600080fd5b5051906126e5565b90612745565b90506114d181612eaa565b50601b60009054906101000a90046001600160a01b03166001600160a01b0316637d7c2a1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561152257600080fd5b505af1158015611536573d6000803e3d6000fd5b505050506040513d602081101561154c57600080fd5b5050601b54600090611566906001600160a01b0316611709565b9050600061158460646114c0601854856126e590919063ffffffff16565b905060006115928383612787565b9050600061159e61183d565b905060006115ac83836126e5565b90506115e76115bb85846126e5565b600160006115c76127c9565b6001600160a01b031681526020810191909152604001600020549061282d565b600160006115f36127c9565b6001600160a01b0390811682526020808301939093526040918201600090812094909455601b541683526001909152812055600b54611632908461282d565b600b556008546116429084612787565b6008556009546116529082612787565b60095561165d6127c9565b601b546040805187815290516001600160a01b039384169392909216916000805160206141538339815191529181900360200190a3601b546040805185815290516000926001600160a01b031691600080516020614153833981519152919081900360200190a36040805184815290517f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd09181900360200190a150506015805460ff1916905550505050565b6001600160a01b03811660009081526004602052604081205460ff161561174957506001600160a01b038116600090815260026020526040902054610fc3565b6001600160a01b038216600090815260016020526040902054610d0e90610f66565b6117736127c9565b6000546001600160a01b039081169116146117c3576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60125481565b60195490565b60135481565b6007546001600160a01b031681565b6000546001600160a01b031690565b600080600061184a6118c7565b90925090506118598282612745565b9250505090565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cec5780601f10610cc157610100808354040283529160200191610cec565b600f5481565b6009546008546000918291825b6005548110156119f8578260016000600584815481106118f057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611955575081600260006005848154811061192e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561196c5760095460085494509450505050611a26565b6119ac600160006005848154811061198057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612787565b92506119ee60026000600584815481106119c257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612787565b91506001016118d4565b50600854600954611a0891612745565b821015611a2057600954600854935093505050611a26565b90925090505b9091565b60115481565b611a386127c9565b6000546001600160a01b03908116911614611a88576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60158054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611adf6127c9565b6000546001600160a01b03908116911614611b2f576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6015805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6000610d0a611b786127c9565b84610e77856040518060600160405280602581526020016142d56025913960036000611ba26127c9565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612e13565b6006546001600160a01b031681565b6000610d0a611bef6127c9565b8484612973565b6016546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b611c2b6127c9565b6000546001600160a01b03908116911614611c7b576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600f54600a0a600502811115611cc25760405162461bcd60e51b81526004018080602001828103825260258152602001806140986025913960400191505060405180910390fd5b60118190556040805182815290517fc9c3eda55e0c1d7fbf155eefd9be0dcbb00e86498e4a8c8efb530e71d390b9ad9181900360200190a150565b611d056127c9565b6000546001600160a01b03908116911614611d55576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b038216611db0576040805162461bcd60e51b815260206004820181905260248201527f4f75726f626f726f733a20506f6f6c2061646472657373206973207a65726f2e604482015290519081900360640190fd5b6001600160a01b038116611df55760405162461bcd60e51b81526004018080602001828103825260268152602001806141996026913960400191505060405180910390fd5b6001600160a01b038116301415611e3d5760405162461bcd60e51b815260040180806020018281038252602b815260200180614277602b913960400191505060405180910390fd5b6015546001600160a01b038281166301000000909204161415611e915760405162461bcd60e51b8152600401808060200182810382526035815260200180613f576035913960400191505060405180910390fd5b601680546001600160a01b0319166001600160a01b0384811691909117909155601580546301000000600160b81b03191663010000009284169283021790556040517f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad90600090a25050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60175490565b601b546001600160a01b031681565b601a5490565b611f4b6127c9565b6000546001600160a01b03908116911614611f9b576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60018110158015611fad5750600f8111155b611fe85760405162461bcd60e51b815260040180806020018281038252602f815260200180613f28602f913960400191505060405180910390fd5b60188190556040805182815290517fe3069d1b5c6a34789416db1d3d27b4da922676a150402a5bd9c5d12cdd9a3ea19181900360200190a150565b601c546001600160a01b031681565b61203a6127c9565b6000546001600160a01b0390811691161461208a576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b633b9aca008110156120cd5760405162461bcd60e51b8152600401808060200182810382526037815260200180613ef16037913960400191505060405180910390fd5b60148190556040805182815290517f74272e6f6c75e19c6f48bb75e2724eb55e3e1726f8b81d97f1db21d22ead93dc9181900360200190a150565b6121106127c9565b6000546001600160a01b03908116911614612160576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156121bc5760405162461bcd60e51b815260040180806020018281038252602d815260200180614018602d913960400191505060405180910390fd5b6001600160a01b0381163014156122045760405162461bcd60e51b815260040180806020018281038252602c815260200180613ec5602c913960400191505060405180910390fd5b6006546001600160a01b03828116911614156122515760405162461bcd60e51b815260040180806020018281038252602d815260200180614126602d913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16156122a95760405162461bcd60e51b8152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6001600160a01b03811660009081526001602052604090205415612303576001600160a01b0381166000908152600160205260409020546122e990610f66565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6123716127c9565b6000546001600160a01b039081169116146123c1576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b0381166124065760405162461bcd60e51b8152600401808060200182810382526026815260200180613e796026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6124696127c9565b6000546001600160a01b039081169116146124b9576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60028111156124f95760405162461bcd60e51b815260040180806020018281038252602a81526020018061406e602a913960400191505060405180910390fd5b600f8190556040805182815290517f1a7d0c0e85c956e4756c1a912c675c28814c419a7e8fc66c1f0512ea332fc1909181900360200190a150565b61253c6127c9565b6000546001600160a01b0390811691161461258c576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166125e35760405162461bcd60e51b815260040180806020018281038252602681526020018061421c6026913960400191505060405180910390fd5b60005b6005548110156126db57816001600160a01b03166005828154811061260757fe5b6000918252602090912001546001600160a01b031614156126d35760058054600019810190811061263457fe5b600091825260209091200154600580546001600160a01b03909216918390811061265a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff1916905560058054806126ac57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556126db565b6001016125e6565b5050565b600a5481565b6000826126f457506000610d0e565b8282028284828161270157fe5b041461273e5760405162461bcd60e51b81526004018080602001828103825260218152602001806140bd6021913960400191505060405180910390fd5b9392505050565b600061273e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613015565b600061273e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e13565b3390565b60008060008060008060008060006127ed8a601054601154600f5461307a565b92509250925060006127fd61183d565b905060008060006128108e8787876130d4565b919e509c509a509598509396509194505050505091939550919395565b60008282018381101561273e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166128cc5760405162461bcd60e51b8152600401808060200182810382526028815260200180613dd76028913960400191505060405180910390fd5b6001600160a01b0382166129115760405162461bcd60e51b81526004018080602001828103825260268152602001806141736026913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166129b85760405162461bcd60e51b81526004018080602001828103825260298152602001806140456029913960400191505060405180910390fd5b6001600160a01b0382166129fd5760405162461bcd60e51b81526004018080602001828103825260278152602001806141f56027913960400191505060405180910390fd5b60008111612a3c5760405162461bcd60e51b8152600401808060200182810382526034815260200180613dff6034913960400191505060405180910390fd5b612a4461182e565b6001600160a01b0316836001600160a01b031614158015612a7e5750612a6861182e565b6001600160a01b0316826001600160a01b031614155b8015612a8d575060155460ff16155b15612b9b57601254811115612ad35760405162461bcd60e51b81526004018080602001828103825260338152602001806142a26033913960400191505060405180910390fd5b6016546001600160a01b0316612ae76127c9565b6001600160a01b03161480612b3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612b296127c9565b6001600160a01b0316145b8015612b49575060155462010000900460ff16155b15612b9b576040805162461bcd60e51b815260206004820152601f60248201527f4f75726f626f726f733a2074726164696e672069732064697361626c65642e00604482015290519081900360640190fd5b60155460ff16612cba576000612bb030611709565b60135490915081108015908190612bd257506016546001600160a01b03163314155b8015612be55750601554610100900460ff165b15612cb7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612c4357600080fd5b505afa158015612c57573d6000803e3d6000fd5b505050506040513d6020811015612c6d57600080fd5b5051601554630100000090046001600160a01b0390811691161415612c9a57612c9582613124565b612cb7565b601554612cb790630100000090046001600160a01b031683613273565b50505b6001600160a01b03831660009081526004602052604090205460ff168015612cfb57506001600160a01b03821660009081526004602052604090205460ff16155b15612d1057612d0b8383836134b1565b612e0e565b6001600160a01b03831660009081526004602052604090205460ff16158015612d5157506001600160a01b03821660009081526004602052604090205460ff165b15612d6157612d0b8383836136b4565b6001600160a01b03831660009081526004602052604090205460ff16158015612da357506001600160a01b03821660009081526004602052604090205460ff16155b15612db357612d0b8383836137e1565b6001600160a01b03831660009081526004602052604090205460ff168015612df357506001600160a01b03821660009081526004602052604090205460ff165b15612e0357612d0b838383613846565b612e0e8383836137e1565b505050565b60008184841115612ea25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e67578181015183820152602001612e4f565b50505050905090810190601f168015612e945780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6007546040805163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590529151600093929092169163095ea7b39160448082019260209290919082900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6020811015612f4d57600080fd5b5050601b546040805163af2979eb60e01b815230600482015260248101859052600060448201819052606482018190526001600160a01b0393841660848301524260a483015291517f00000000000000000000000000000000000000000000000000000000000000009093169263af2979eb9260c480840193602093929083900390910190829087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b505050506040513d602081101561300d57600080fd5b505192915050565b600081836130645760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612e67578181015183820152602001612e4f565b50600083858161307057fe5b0495945050505050565b600080808061309360028601600a0a6114c08a8a6126e5565b905060006130ab60028701600a0a6114c08b8a6126e5565b905060006130c3826130bd8c86612787565b90612787565b9a9299509097509095505050505050565b60008080806130e388866126e5565b905060006130f188876126e5565b905060006130ff88886126e5565b90506000613111826130bd8686612787565b939b939a50919850919650505050505050565b6015805460ff19166001179055601454600090613142908390612787565b90506000613151826002612745565b9050600061315f8383612787565b90504761316b836138da565b60006131774783612787565b90506131838382613af1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131dc57600080fd5b505afa1580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b5051604080518681526020810184905280820186905290516001600160a01b03909216917fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f69181900360600190a26132613032601454612973565b50506015805460ff1916905550505050565b6015805460ff19166001179055601454600090613291908390612787565b905060006132a0826002612745565b905060006132ae8383612787565b601c549091506132c99030906001600160a01b031684612973565b6000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561331857600080fd5b505afa15801561332c573d6000803e3d6000fd5b505050506040513d602081101561334257600080fd5b5051601c546040805163a114398d60e01b81526001600160a01b038a8116600483015260248201889052915193945091169163a114398d9160448082019260009290919082900301818387803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b50505050600061343882886001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561340657600080fd5b505afa15801561341a573d6000803e3d6000fd5b505050506040513d602081101561343057600080fd5b505190612787565b9050613445878483613bd9565b604080518581526020810183905280820185905290516001600160a01b038916917fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f6919081900360600190a261349e3032601454612973565b50506015805460ff191690555050505050565b60006134bb61183d565b90506000806000806000806134cf886127cd565b95509550955095509550955060006134f088836126e590919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150613516908a612787565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546135459088612787565b6001600160a01b038c1660009081526001602052604090205560155460ff16156135d6576001600160a01b038a1660009081526001602052604090205461358c908861282d565b6001600160a01b03808c166000818152600160209081526040918290209490945580518d815290519193928f169260008051602061415383398151915292918290030190a36136a7565b6001600160a01b038a166000908152600160205260409020546135f9908761282d565b6001600160a01b038b16600090815260016020526040808220929092553081522054613625908261282d565b3060009081526001602052604090205561363f8584613d79565b60408051838152905130916001600160a01b038e16916000805160206141538339815191529181900360200190a3896001600160a01b03168b6001600160a01b0316600080516020614153833981519152866040518082815260200191505060405180910390a35b5050505050505050505050565b60006136be61183d565b90506000806000806000806136d2886127cd565b95509550955095509550955060006136f388836126e590919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506137199088612787565b6001600160a01b038c1660009081526001602052604090205560155460ff161561378f576001600160a01b038a16600090815260026020526040902054613760908a61282d565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461358c908861282d565b6001600160a01b038a166000908152600260205260409020546137b2908561282d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546135f9908761282d565b60006137eb61183d565b90506000806000806000806137ff886127cd565b955095509550955095509550600061382088836126e590919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506135459088612787565b600061385061183d565b9050600080600080600080613864886127cd565b955095509550955095509550600061388588836126e590919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506138ab908a612787565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546137199088612787565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061390857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561398157600080fd5b505afa158015613995573d6000803e3d6000fd5b505050506040513d60208110156139ab57600080fd5b50518151829060019081106139bc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050613a07307f000000000000000000000000000000000000000000000000000000000000000084612887565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613aac578181015183820152602001613a94565b505050509050019650505050505050600060405180830381600087803b158015613ad557600080fd5b505af1158015613ae9573d6000803e3d6000fd5b505050505050565b613b1c307f000000000000000000000000000000000000000000000000000000000000000084612887565b6040805163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163f305d71991849160c48082019260609290919082900301818588803b158015613ba857600080fd5b505af1158015613bbc573d6000803e3d6000fd5b50505050506040513d6060811015613bd357600080fd5b50505050565b613c04307f000000000000000000000000000000000000000000000000000000000000000084612887565b826001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c7b57600080fd5b505af1158015613c8f573d6000803e3d6000fd5b505050506040513d6020811015613ca557600080fd5b50506040805162e8e33760e81b815230600482018190526001600160a01b038681166024840152604483018690526064830185905260006084840181905260a4840181905260c48401929092524260e484015292517f00000000000000000000000000000000000000000000000000000000000000009093169263e8e3370092610104808201936060939283900390910190829087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b505050506040513d6060811015613d7257600080fd5b5050505050565b600954613d869083612787565b600955600a54613d96908261282d565b600a55505056fe4f75726f626f726f733a206d696e546f6b656e4265666f7265537761702073686f756c6420626520696e2035306539202d20323530303065394f75726f626f726f733a20617070726f76652066726f6d20746865207a65726f20616464726573734f75726f626f726f733a205472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4f75726f626f726f733a206d696e546f6b656e4265666f7265537761702073686f756c642062652067726561746572207468616e206175746f5377617043616c6c65724665654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f75726f626f726f733a204163636f756e7420697320616c7265616479206578636c756465644f75726f626f726f733a2057652063616e206e6f74206578636c75646520636f6e74726163742073656c662e4f75726f626f726f733a206175746f5377617043616c6c65724665652073686f756c642062652067726561746572207468616e203165394f75726f626f726f733a20616c6368656d7943616c6c65724665652073686f756c6420626520696e2031202d2031354f75726f626f726f733a205061697220746f6b656e20616464726573732069732073616d652061732063757272656e74206f6e652e4f75726f626f726f733a204578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e4f75726f626f726f733a207461784665652073686f756c6420626520696e2030202d20354f75726f626f726f733a206c697175696469747952656d6f76654665652073686f756c6420626520696e2031202d2031304f75726f626f726f733a2057652063616e206e6f74206578636c75646520556e697377617020726f757465722e4f75726f626f726f733a207472616e736665722066726f6d20746865207a65726f20616464726573734f75726f626f726f733a2066656520646563696d616c732073686f756c6420626520696e2030202d20324f75726f626f726f733a206c6f636b4665652073686f756c6420626520696e2030202d2035536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f75726f626f726f733a2057652063616e206e6f74206578636c75646520726577656172642077616c6c65742eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4f75726f626f726f733a20617070726f766520746f20746865207a65726f20616464726573734f75726f626f726f733a205061697220746f6b656e2061646472657373206973207a65726f2e4f75726f626f726f733a206d61785478416d6f756e742073686f756c642062652067726561746572207468616e2035303030303065394f75726f626f726f733a207472616e7366657220746f20746865207a65726f20616464726573734f75726f626f726f733a204163636f756e7420697320616c726561647920696e636c756465644f75726f626f726f733a20416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f75726f626f726f733a205061697220746f6b656e20616464726573732073656c6620616464726573732e4f75726f626f726f733a205472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c644b7a4e0897ad23660e362fbb3802f3f3203c2039b9920c9f519d03f49c9ad64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220a19ec114cb5a40b2f7095aa1812094f0687686b20b04191a3718fcca9c3225c664736f6c634300060c003360a060405234801561001057600080fd5b506040516103653803806103658339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b0319166001600160a01b03938416178155606082901b6001600160601b0319166080529116906102d99061008c9039806093528060e552806101c252506102d96000f3fe60806040526004361061002d5760003560e01c8063583e0568146100395780637d7c2a1c1461006a57610034565b3661003457005b600080fd5b34801561004557600080fd5b5061004e610091565b604080516001600160a01b039092168252519081900360200190f35b34801561007657600080fd5b5061007f6100b5565b60408051918252519081900360200190f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60006100c0476100c3565b90565b60408051600280825260608083018452926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561013c57600080fd5b505afa158015610150573d6000803e3d6000fd5b505050506040513d602081101561016657600080fd5b50518151829060009061017557fe5b6001600160a01b0392831660209182029290920101526000548251911690829060019081106101a057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6f9de958360008430426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561025f578181015183820152602001610247565b50505050905001955050505050506000604051808303818588803b15801561028657600080fd5b505af115801561029a573d6000803e3d6000fd5b5050505050505056fea264697066735822122051e9afd19890569d590bb9f6f296372ed2d6a70d2ff50b60c9461a7523747e1e64736f6c634300060c003360a060405234801561001057600080fd5b506040516105f33803806105f38339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b0319166001600160a01b03938416178155606082901b6001600160601b0319166080529116906105669061008d903980608f52806102de52806103ac52506105666000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063583e05681461003b578063a114398d1461005f575b600080fd5b61004361008d565b604080516001600160a01b039092168252519081900360200190f35b61008b6004803603604081101561007557600080fd5b506001600160a01b0381351690602001356100b1565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561010057600080fd5b505afa158015610114573d6000803e3d6000fd5b505050506040513d602081101561012a57600080fd5b50519050610138838361024a565b60006101bd82856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561018b57600080fd5b505afa15801561019f573d6000803e3d6000fd5b505050506040513d60208110156101b557600080fd5b505190610450565b600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509087169263a9059cbb92604480840193602093929083900390910190829087803b15801561021857600080fd5b505af115801561022c573d6000803e3d6000fd5b505050506040513d602081101561024257600080fd5b505050505050565b604080516002808252606080830184529260208301908036833750506000805483519394506001600160a01b03169284925061028257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106102b057fe5b6001600160a01b03928316602091820292909201810191909152600080546040805163095ea7b360e01b81527f000000000000000000000000000000000000000000000000000000000000000086166004820152602481018890529051919094169363095ea7b3936044808301949193928390030190829087803b15801561033757600080fd5b505af115801561034b573d6000803e3d6000fd5b505050506040513d602081101561036157600080fd5b5050604051635c11d79560e01b8152600481018381526000602483018190523060648401819052426084850181905260a060448601908152865160a487015286516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001696635c11d795968a96958a95909490939192909160c490910190602087810191028083838b5b8381101561040a5781810151838201526020016103f2565b505050509050019650505050505050600060405180830381600087803b15801561043357600080fd5b505af1158015610447573d6000803e3d6000fd5b50505050505050565b600061049283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610499565b9392505050565b600081848411156105285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104ed5781810151838201526020016104d5565b50505050905090810190601f16801561051a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fea264697066735822122034751dee7ed22540463d7de482b56c6d5aa4df9689bcd96a0eb334e1c5c0c39564736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638b1bdcb2116101c6578063d51486df116100f7578063eed83f1111610095578063f2fde38b1161006f578063f2fde38b14610ae1578063f7505bc014610b14578063f84354f114610b3e578063fb1eb14b14610b715761035b565b8063eed83f1114610a6f578063efeb97e114610a84578063f2cc0c1814610aae5761035b565b8063e4451f66116100d1578063e4451f6614610a06578063e563037e14610a1b578063e8598c8714610a30578063e98d2c4b14610a455761035b565b8063d51486df14610966578063d73cf08014610990578063dd62ed3e146109cb5761035b565b80639f9a4e7f11610164578063a4f4a7651161013e578063a4f4a765146108d0578063a9059cbb146108e5578063c9e6da191461091e578063cba0e996146109335761035b565b80639f9a4e7f14610856578063a0ac5e1914610882578063a457c2d7146108975761035b565b806395d89b41116101a057806395d89b41146107e957806396354704146107fe57806397a9d560146108135780639d6f83e4146108415761035b565b80638b1bdcb2146107aa5780638da5cb5b146107bf57806394e10784146107d45761035b565b80633b124fe7116102a05780635afbfd381161023e578063715018a611610218578063715018a6146107565780637d1db4a51461076b57806385d1e038146107805780638aadb809146107955761035b565b80635afbfd38146106f9578063674b80ee1461070e57806370a08231146107235761035b565b80634a74bb021161027a5780634a74bb02146106745780634ada218b14610689578063583e05681461069e5780635880b873146106cf5761035b565b80633b124fe7146106035780634549b039146106185780634a1e77261461064a5761035b565b80631bbae6e01161030d5780632d838119116102e75780632d8381191461054b5780632ec8e52314610575578063313ce5671461059f57806339509351146105ca5761035b565b80631bbae6e0146104b457806323b872dd146104de57806326f5ccaa146105215761035b565b8063053ab1821461036057806306fdde031461038c578063095ea7b314610416578063171778081461046357806318160ddd1461048a578063185d374c1461049f5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038a6004803603602081101561038357600080fd5b5035610b86565b005b34801561039857600080fd5b506103a1610c60565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103db5781810151838201526020016103c3565b50505050905090810190601f1680156104085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042257600080fd5b5061044f6004803603604081101561043957600080fd5b506001600160a01b038135169060200135610cf6565b604080519115158252519081900360200190f35b34801561046f57600080fd5b50610478610d14565b60408051918252519081900360200190f35b34801561049657600080fd5b50610478610d1a565b3480156104ab57600080fd5b50610478610d20565b3480156104c057600080fd5b5061038a600480360360208110156104d757600080fd5b5035610d26565b3480156104ea57600080fd5b5061044f6004803603606081101561050157600080fd5b506001600160a01b03813581169160208101359091169060400135610dff565b34801561052d57600080fd5b5061038a6004803603602081101561054457600080fd5b5035610e86565b34801561055757600080fd5b506104786004803603602081101561056e57600080fd5b5035610f66565b34801561058157600080fd5b5061038a6004803603602081101561059857600080fd5b5035610fc8565b3480156105ab57600080fd5b506105b461105b565b6040805160ff9092168252519081900360200190f35b3480156105d657600080fd5b5061044f600480360360408110156105ed57600080fd5b506001600160a01b038135169060200135611064565b34801561060f57600080fd5b506104786110b2565b34801561062457600080fd5b506104786004803603604081101561063b57600080fd5b508035906020013515156110b8565b34801561065657600080fd5b5061038a6004803603602081101561066d57600080fd5b503561114a565b34801561068057600080fd5b5061044f611273565b34801561069557600080fd5b5061044f611281565b3480156106aa57600080fd5b506106b3611290565b604080516001600160a01b039092168252519081900360200190f35b3480156106db57600080fd5b5061038a600480360360208110156106f257600080fd5b50356112b4565b34801561070557600080fd5b506106b361138e565b34801561071a57600080fd5b5061038a6113a4565b34801561072f57600080fd5b506104786004803603602081101561074657600080fd5b50356001600160a01b0316611709565b34801561076257600080fd5b5061038a61176b565b34801561077757600080fd5b5061047861180d565b34801561078c57600080fd5b50610478611813565b3480156107a157600080fd5b50610478611819565b3480156107b657600080fd5b506106b361181f565b3480156107cb57600080fd5b506106b361182e565b3480156107e057600080fd5b5061047861183d565b3480156107f557600080fd5b506103a1611860565b34801561080a57600080fd5b506104786118c1565b34801561081f57600080fd5b506108286118c7565b6040805192835260208301919091528051918290030190f35b34801561084d57600080fd5b50610478611a2a565b34801561086257600080fd5b5061038a6004803603602081101561087957600080fd5b50351515611a30565b34801561088e57600080fd5b5061038a611ad7565b3480156108a357600080fd5b5061044f600480360360408110156108ba57600080fd5b506001600160a01b038135169060200135611b6b565b3480156108dc57600080fd5b506106b3611bd3565b3480156108f157600080fd5b5061044f6004803603604081101561090857600080fd5b506001600160a01b038135169060200135611be2565b34801561092a57600080fd5b506106b3611bf6565b34801561093f57600080fd5b5061044f6004803603602081101561095657600080fd5b50356001600160a01b0316611c05565b34801561097257600080fd5b5061038a6004803603602081101561098957600080fd5b5035611c23565b34801561099c57600080fd5b5061038a600480360360408110156109b357600080fd5b506001600160a01b0381358116916020013516611cfd565b3480156109d757600080fd5b50610478600480360360408110156109ee57600080fd5b506001600160a01b0381358116916020013516611efd565b348015610a1257600080fd5b50610478611f28565b348015610a2757600080fd5b506106b3611f2e565b348015610a3c57600080fd5b50610478611f3d565b348015610a5157600080fd5b5061038a60048036036020811015610a6857600080fd5b5035611f43565b348015610a7b57600080fd5b506106b3612023565b348015610a9057600080fd5b5061038a60048036036020811015610aa757600080fd5b5035612032565b348015610aba57600080fd5b5061038a60048036036020811015610ad157600080fd5b50356001600160a01b0316612108565b348015610aed57600080fd5b5061038a60048036036020811015610b0457600080fd5b50356001600160a01b0316612369565b348015610b2057600080fd5b5061038a60048036036020811015610b3757600080fd5b5035612461565b348015610b4a57600080fd5b5061038a60048036036020811015610b6157600080fd5b50356001600160a01b0316612534565b348015610b7d57600080fd5b506104786126df565b6000610b906127c9565b6001600160a01b03811660009081526004602052604090205490915060ff1615610beb5760405162461bcd60e51b8152600401808060200182810382526037815260200180613f8c6037913960400191505060405180910390fd5b6000610bf6836127cd565b505050506001600160a01b038416600090815260016020526040902054919250610c2291905082612787565b6001600160a01b038316600090815260016020526040902055600954610c489082612787565b600955600a54610c58908461282d565b600a55505050565b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cec5780601f10610cc157610100808354040283529160200191610cec565b820191906000526020600020905b815481529060010190602001808311610ccf57829003601f168201915b5050505050905090565b6000610d0a610d036127c9565b8484612887565b5060015b92915050565b60185490565b60085490565b600b5481565b610d2e6127c9565b6000546001600160a01b03908116911614610d7e576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6601c6bf52634000811015610dc45760405162461bcd60e51b81526004018080602001828103825260368152602001806141bf6036913960400191505060405180910390fd5b60128190556040805182815290517f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9181900360200190a150565b6000610e0c848484612973565b610e7c84610e186127c9565b610e77856040518060600160405280602881526020016140de602891396001600160a01b038a16600090815260036020526040812090610e566127c9565b6001600160a01b031681526020810191909152604001600020549190612e13565b612887565b5060019392505050565b610e8e6127c9565b6000546001600160a01b03908116911614610ede576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60018110158015610ef05750600a8111155b610f2b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613fe76031913960400191505060405180910390fd5b60178190556040805182815290517f5be5e13332f5fe25d72958c9d03ce5cdb01b189670222a86673715d56e43ce2a9181900360200190a150565b6000600954821115610fa95760405162461bcd60e51b81526004018080602001828103825260358152602001806142426035913960400191505060405180910390fd5b6000610fb361183d565b9050610fbf8382612745565b9150505b919050565b610fd06127c9565b6000546001600160a01b03908116911614611020576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b601a8190556040805182815290517feaed440fcec6c61f9f769421c03cc43636a7ae7ec94dab35cf5b906d2c67b5b89181900360200190a150565b600e5460ff1690565b6000610d0a6110716127c9565b84610e7785600360006110826127c9565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061282d565b60105481565b6000600854831115611111576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611130576000611121846127cd565b50939550610d0e945050505050565b600061113b846127cd565b50929550610d0e945050505050565b6111526127c9565b6000546001600160a01b039081169116146111a2576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b640ba43b740081101580156111bd57506516bcc41e90008111155b6111f85760405162461bcd60e51b8152600401808060200182810382526039815260200180613d9e6039913960400191505060405180910390fd5b60145481116112385760405162461bcd60e51b8152600401808060200182810382526046815260200180613e336046913960600191505060405180910390fd5b60138190556040805182815290517f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c009181900360200190a150565b601554610100900460ff1681565b60155462010000900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6112bc6127c9565b6000546001600160a01b0390811691161461130c576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600f54600a0a6005028111156113535760405162461bcd60e51b8152600401808060200182810382526024815260200180613fc36024913960400191505060405180910390fd5b60108190556040805182815290517faa4b71ac29531fdea0ef1650c76ef91e3771dac25f4a4dd2a561ff3e0b9a5de29181900360200190a150565b601554630100000090046001600160a01b031690565b6015805460ff191660011790556113b961182e565b6001600160a01b03166113ca6127c9565b6001600160a01b0316146113dd57600080fd5b601a5460195401421161142e576040805162461bcd60e51b815260206004820152601460248201527327bab937b137b937b99d102a37b79029b7b7b71760611b604482015290519081900360640190fd5b42601955601754600754604080516370a0823160e01b815230600482015290516000936114c6936064936114c0936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d60208110156114b857600080fd5b5051906126e5565b90612745565b90506114d181612eaa565b50601b60009054906101000a90046001600160a01b03166001600160a01b0316637d7c2a1c6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561152257600080fd5b505af1158015611536573d6000803e3d6000fd5b505050506040513d602081101561154c57600080fd5b5050601b54600090611566906001600160a01b0316611709565b9050600061158460646114c0601854856126e590919063ffffffff16565b905060006115928383612787565b9050600061159e61183d565b905060006115ac83836126e5565b90506115e76115bb85846126e5565b600160006115c76127c9565b6001600160a01b031681526020810191909152604001600020549061282d565b600160006115f36127c9565b6001600160a01b0390811682526020808301939093526040918201600090812094909455601b541683526001909152812055600b54611632908461282d565b600b556008546116429084612787565b6008556009546116529082612787565b60095561165d6127c9565b601b546040805187815290516001600160a01b039384169392909216916000805160206141538339815191529181900360200190a3601b546040805185815290516000926001600160a01b031691600080516020614153833981519152919081900360200190a36040805184815290517f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd09181900360200190a150506015805460ff1916905550505050565b6001600160a01b03811660009081526004602052604081205460ff161561174957506001600160a01b038116600090815260026020526040902054610fc3565b6001600160a01b038216600090815260016020526040902054610d0e90610f66565b6117736127c9565b6000546001600160a01b039081169116146117c3576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60125481565b60195490565b60135481565b6007546001600160a01b031681565b6000546001600160a01b031690565b600080600061184a6118c7565b90925090506118598282612745565b9250505090565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610cec5780601f10610cc157610100808354040283529160200191610cec565b600f5481565b6009546008546000918291825b6005548110156119f8578260016000600584815481106118f057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611955575081600260006005848154811061192e57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561196c5760095460085494509450505050611a26565b6119ac600160006005848154811061198057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612787565b92506119ee60026000600584815481106119c257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612787565b91506001016118d4565b50600854600954611a0891612745565b821015611a2057600954600854935093505050611a26565b90925090505b9091565b60115481565b611a386127c9565b6000546001600160a01b03908116911614611a88576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60158054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611adf6127c9565b6000546001600160a01b03908116911614611b2f576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6015805462ff00001916620100001790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b6000610d0a611b786127c9565b84610e77856040518060600160405280602581526020016142d56025913960036000611ba26127c9565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612e13565b6006546001600160a01b031681565b6000610d0a611bef6127c9565b8484612973565b6016546001600160a01b031690565b6001600160a01b031660009081526004602052604090205460ff1690565b611c2b6127c9565b6000546001600160a01b03908116911614611c7b576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b600f54600a0a600502811115611cc25760405162461bcd60e51b81526004018080602001828103825260258152602001806140986025913960400191505060405180910390fd5b60118190556040805182815290517fc9c3eda55e0c1d7fbf155eefd9be0dcbb00e86498e4a8c8efb530e71d390b9ad9181900360200190a150565b611d056127c9565b6000546001600160a01b03908116911614611d55576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b038216611db0576040805162461bcd60e51b815260206004820181905260248201527f4f75726f626f726f733a20506f6f6c2061646472657373206973207a65726f2e604482015290519081900360640190fd5b6001600160a01b038116611df55760405162461bcd60e51b81526004018080602001828103825260268152602001806141996026913960400191505060405180910390fd5b6001600160a01b038116301415611e3d5760405162461bcd60e51b815260040180806020018281038252602b815260200180614277602b913960400191505060405180910390fd5b6015546001600160a01b038281166301000000909204161415611e915760405162461bcd60e51b8152600401808060200182810382526035815260200180613f576035913960400191505060405180910390fd5b601680546001600160a01b0319166001600160a01b0384811691909117909155601580546301000000600160b81b03191663010000009284169283021790556040517f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad90600090a25050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60175490565b601b546001600160a01b031681565b601a5490565b611f4b6127c9565b6000546001600160a01b03908116911614611f9b576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60018110158015611fad5750600f8111155b611fe85760405162461bcd60e51b815260040180806020018281038252602f815260200180613f28602f913960400191505060405180910390fd5b60188190556040805182815290517fe3069d1b5c6a34789416db1d3d27b4da922676a150402a5bd9c5d12cdd9a3ea19181900360200190a150565b601c546001600160a01b031681565b61203a6127c9565b6000546001600160a01b0390811691161461208a576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b633b9aca008110156120cd5760405162461bcd60e51b8152600401808060200182810382526037815260200180613ef16037913960400191505060405180910390fd5b60148190556040805182815290517f74272e6f6c75e19c6f48bb75e2724eb55e3e1726f8b81d97f1db21d22ead93dc9181900360200190a150565b6121106127c9565b6000546001600160a01b03908116911614612160576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156121bc5760405162461bcd60e51b815260040180806020018281038252602d815260200180614018602d913960400191505060405180910390fd5b6001600160a01b0381163014156122045760405162461bcd60e51b815260040180806020018281038252602c815260200180613ec5602c913960400191505060405180910390fd5b6006546001600160a01b03828116911614156122515760405162461bcd60e51b815260040180806020018281038252602d815260200180614126602d913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16156122a95760405162461bcd60e51b8152600401808060200182810382526026815260200180613e9f6026913960400191505060405180910390fd5b6001600160a01b03811660009081526001602052604090205415612303576001600160a01b0381166000908152600160205260409020546122e990610f66565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6123716127c9565b6000546001600160a01b039081169116146123c1576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b0381166124065760405162461bcd60e51b8152600401808060200182810382526026815260200180613e796026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6124696127c9565b6000546001600160a01b039081169116146124b9576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b60028111156124f95760405162461bcd60e51b815260040180806020018281038252602a81526020018061406e602a913960400191505060405180910390fd5b600f8190556040805182815290517f1a7d0c0e85c956e4756c1a912c675c28814c419a7e8fc66c1f0512ea332fc1909181900360200190a150565b61253c6127c9565b6000546001600160a01b0390811691161461258c576040805162461bcd60e51b81526020600482018190526024820152600080516020614106833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526004602052604090205460ff166125e35760405162461bcd60e51b815260040180806020018281038252602681526020018061421c6026913960400191505060405180910390fd5b60005b6005548110156126db57816001600160a01b03166005828154811061260757fe5b6000918252602090912001546001600160a01b031614156126d35760058054600019810190811061263457fe5b600091825260209091200154600580546001600160a01b03909216918390811061265a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff1916905560058054806126ac57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556126db565b6001016125e6565b5050565b600a5481565b6000826126f457506000610d0e565b8282028284828161270157fe5b041461273e5760405162461bcd60e51b81526004018080602001828103825260218152602001806140bd6021913960400191505060405180910390fd5b9392505050565b600061273e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613015565b600061273e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e13565b3390565b60008060008060008060008060006127ed8a601054601154600f5461307a565b92509250925060006127fd61183d565b905060008060006128108e8787876130d4565b919e509c509a509598509396509194505050505091939550919395565b60008282018381101561273e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166128cc5760405162461bcd60e51b8152600401808060200182810382526028815260200180613dd76028913960400191505060405180910390fd5b6001600160a01b0382166129115760405162461bcd60e51b81526004018080602001828103825260268152602001806141736026913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166129b85760405162461bcd60e51b81526004018080602001828103825260298152602001806140456029913960400191505060405180910390fd5b6001600160a01b0382166129fd5760405162461bcd60e51b81526004018080602001828103825260278152602001806141f56027913960400191505060405180910390fd5b60008111612a3c5760405162461bcd60e51b8152600401808060200182810382526034815260200180613dff6034913960400191505060405180910390fd5b612a4461182e565b6001600160a01b0316836001600160a01b031614158015612a7e5750612a6861182e565b6001600160a01b0316826001600160a01b031614155b8015612a8d575060155460ff16155b15612b9b57601254811115612ad35760405162461bcd60e51b81526004018080602001828103825260338152602001806142a26033913960400191505060405180910390fd5b6016546001600160a01b0316612ae76127c9565b6001600160a01b03161480612b3457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316612b296127c9565b6001600160a01b0316145b8015612b49575060155462010000900460ff16155b15612b9b576040805162461bcd60e51b815260206004820152601f60248201527f4f75726f626f726f733a2074726164696e672069732064697361626c65642e00604482015290519081900360640190fd5b60155460ff16612cba576000612bb030611709565b60135490915081108015908190612bd257506016546001600160a01b03163314155b8015612be55750601554610100900460ff165b15612cb7577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612c4357600080fd5b505afa158015612c57573d6000803e3d6000fd5b505050506040513d6020811015612c6d57600080fd5b5051601554630100000090046001600160a01b0390811691161415612c9a57612c9582613124565b612cb7565b601554612cb790630100000090046001600160a01b031683613273565b50505b6001600160a01b03831660009081526004602052604090205460ff168015612cfb57506001600160a01b03821660009081526004602052604090205460ff16155b15612d1057612d0b8383836134b1565b612e0e565b6001600160a01b03831660009081526004602052604090205460ff16158015612d5157506001600160a01b03821660009081526004602052604090205460ff165b15612d6157612d0b8383836136b4565b6001600160a01b03831660009081526004602052604090205460ff16158015612da357506001600160a01b03821660009081526004602052604090205460ff16155b15612db357612d0b8383836137e1565b6001600160a01b03831660009081526004602052604090205460ff168015612df357506001600160a01b03821660009081526004602052604090205460ff165b15612e0357612d0b838383613846565b612e0e8383836137e1565b505050565b60008184841115612ea25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e67578181015183820152602001612e4f565b50505050905090810190601f168015612e945780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6007546040805163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81166004830152602482018590529151600093929092169163095ea7b39160448082019260209290919082900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6020811015612f4d57600080fd5b5050601b546040805163af2979eb60e01b815230600482015260248101859052600060448201819052606482018190526001600160a01b0393841660848301524260a483015291517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9093169263af2979eb9260c480840193602093929083900390910190829087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b505050506040513d602081101561300d57600080fd5b505192915050565b600081836130645760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612e67578181015183820152602001612e4f565b50600083858161307057fe5b0495945050505050565b600080808061309360028601600a0a6114c08a8a6126e5565b905060006130ab60028701600a0a6114c08b8a6126e5565b905060006130c3826130bd8c86612787565b90612787565b9a9299509097509095505050505050565b60008080806130e388866126e5565b905060006130f188876126e5565b905060006130ff88886126e5565b90506000613111826130bd8686612787565b939b939a50919850919650505050505050565b6015805460ff19166001179055601454600090613142908390612787565b90506000613151826002612745565b9050600061315f8383612787565b90504761316b836138da565b60006131774783612787565b90506131838382613af1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131dc57600080fd5b505afa1580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b5051604080518681526020810184905280820186905290516001600160a01b03909216917fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f69181900360600190a26132613032601454612973565b50506015805460ff1916905550505050565b6015805460ff19166001179055601454600090613291908390612787565b905060006132a0826002612745565b905060006132ae8383612787565b601c549091506132c99030906001600160a01b031684612973565b6000856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561331857600080fd5b505afa15801561332c573d6000803e3d6000fd5b505050506040513d602081101561334257600080fd5b5051601c546040805163a114398d60e01b81526001600160a01b038a8116600483015260248201889052915193945091169163a114398d9160448082019260009290919082900301818387803b15801561339b57600080fd5b505af11580156133af573d6000803e3d6000fd5b50505050600061343882886001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561340657600080fd5b505afa15801561341a573d6000803e3d6000fd5b505050506040513d602081101561343057600080fd5b505190612787565b9050613445878483613bd9565b604080518581526020810183905280820185905290516001600160a01b038916917fa5edfeb09a3d7a0edab24279a4ca1c35b82bb038f8a7eb53339c904a217fe1f6919081900360600190a261349e3032601454612973565b50506015805460ff191690555050505050565b60006134bb61183d565b90506000806000806000806134cf886127cd565b95509550955095509550955060006134f088836126e590919063ffffffff16565b6001600160a01b038c16600090815260026020526040902054909150613516908a612787565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546135459088612787565b6001600160a01b038c1660009081526001602052604090205560155460ff16156135d6576001600160a01b038a1660009081526001602052604090205461358c908861282d565b6001600160a01b03808c166000818152600160209081526040918290209490945580518d815290519193928f169260008051602061415383398151915292918290030190a36136a7565b6001600160a01b038a166000908152600160205260409020546135f9908761282d565b6001600160a01b038b16600090815260016020526040808220929092553081522054613625908261282d565b3060009081526001602052604090205561363f8584613d79565b60408051838152905130916001600160a01b038e16916000805160206141538339815191529181900360200190a3896001600160a01b03168b6001600160a01b0316600080516020614153833981519152866040518082815260200191505060405180910390a35b5050505050505050505050565b60006136be61183d565b90506000806000806000806136d2886127cd565b95509550955095509550955060006136f388836126e590919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506137199088612787565b6001600160a01b038c1660009081526001602052604090205560155460ff161561378f576001600160a01b038a16600090815260026020526040902054613760908a61282d565b6001600160a01b038b1660009081526002602090815260408083209390935560019052205461358c908861282d565b6001600160a01b038a166000908152600260205260409020546137b2908561282d565b6001600160a01b038b166000908152600260209081526040808320939093556001905220546135f9908761282d565b60006137eb61183d565b90506000806000806000806137ff886127cd565b955095509550955095509550600061382088836126e590919063ffffffff16565b6001600160a01b038c166000908152600160205260409020549091506135459088612787565b600061385061183d565b9050600080600080600080613864886127cd565b955095509550955095509550600061388588836126e590919063ffffffff16565b6001600160a01b038c166000908152600260205260409020549091506138ab908a612787565b6001600160a01b038c166000908152600260209081526040808320939093556001905220546137199088612787565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061390857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561398157600080fd5b505afa158015613995573d6000803e3d6000fd5b505050506040513d60208110156139ab57600080fd5b50518151829060019081106139bc57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050613a07307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612887565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613aac578181015183820152602001613a94565b505050509050019650505050505050600060405180830381600087803b158015613ad557600080fd5b505af1158015613ae9573d6000803e3d6000fd5b505050505050565b613b1c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612887565b6040805163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a482015290516001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163f305d71991849160c48082019260609290919082900301818588803b158015613ba857600080fd5b505af1158015613bbc573d6000803e3d6000fd5b50505050506040513d6060811015613bd357600080fd5b50505050565b613c04307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612887565b826001600160a01b031663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613c7b57600080fd5b505af1158015613c8f573d6000803e3d6000fd5b505050506040513d6020811015613ca557600080fd5b50506040805162e8e33760e81b815230600482018190526001600160a01b038681166024840152604483018690526064830185905260006084840181905260a4840181905260c48401929092524260e484015292517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9093169263e8e3370092610104808201936060939283900390910190829087803b158015613d4857600080fd5b505af1158015613d5c573d6000803e3d6000fd5b505050506040513d6060811015613d7257600080fd5b5050505050565b600954613d869083612787565b600955600a54613d96908261282d565b600a55505056fe4f75726f626f726f733a206d696e546f6b656e4265666f7265537761702073686f756c6420626520696e2035306539202d20323530303065394f75726f626f726f733a20617070726f76652066726f6d20746865207a65726f20616464726573734f75726f626f726f733a205472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f4f75726f626f726f733a206d696e546f6b656e4265666f7265537761702073686f756c642062652067726561746572207468616e206175746f5377617043616c6c65724665654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f75726f626f726f733a204163636f756e7420697320616c7265616479206578636c756465644f75726f626f726f733a2057652063616e206e6f74206578636c75646520636f6e74726163742073656c662e4f75726f626f726f733a206175746f5377617043616c6c65724665652073686f756c642062652067726561746572207468616e203165394f75726f626f726f733a20616c6368656d7943616c6c65724665652073686f756c6420626520696e2031202d2031354f75726f626f726f733a205061697220746f6b656e20616464726573732069732073616d652061732063757272656e74206f6e652e4f75726f626f726f733a204578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e4f75726f626f726f733a207461784665652073686f756c6420626520696e2030202d20354f75726f626f726f733a206c697175696469747952656d6f76654665652073686f756c6420626520696e2031202d2031304f75726f626f726f733a2057652063616e206e6f74206578636c75646520556e697377617020726f757465722e4f75726f626f726f733a207472616e736665722066726f6d20746865207a65726f20616464726573734f75726f626f726f733a2066656520646563696d616c732073686f756c6420626520696e2030202d20324f75726f626f726f733a206c6f636b4665652073686f756c6420626520696e2030202d2035536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f75726f626f726f733a2057652063616e206e6f74206578636c75646520726577656172642077616c6c65742eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4f75726f626f726f733a20617070726f766520746f20746865207a65726f20616464726573734f75726f626f726f733a205061697220746f6b656e2061646472657373206973207a65726f2e4f75726f626f726f733a206d61785478416d6f756e742073686f756c642062652067726561746572207468616e2035303030303065394f75726f626f726f733a207472616e7366657220746f20746865207a65726f20616464726573734f75726f626f726f733a204163636f756e7420697320616c726561647920696e636c756465644f75726f626f726f733a20416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f75726f626f726f733a205061697220746f6b656e20616464726573732073656c6620616464726573732e4f75726f626f726f733a205472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c644b7a4e0897ad23660e362fbb3802f3f3203c2039b9920c9f519d03f49c9ad64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : uniswapV2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

22342:26439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27810:388;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27810:388:0;;:::i;:::-;;25781:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26693:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26693:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44766:103;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26058:95;;;;;;;;;;;;;:::i;23047:26::-;;;;;;;;;;;;;:::i;45878:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45878:261:0;;:::i;26862:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26862:313:0;;;;;;;;;;;;;;;;;:::i;46958:326::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46958:326:0;;:::i;28650:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28650:264:0;;:::i;47616:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47616:183:0;;:::i;25967:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27183:218;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27183:218:0;;;;;;;;:::i;23239:26::-;;;;;;;;;;;;;:::i;28206:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28206:436:0;;;;;;;;;:::i;46151:485::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46151:485:0;;:::i;23492:33::-;;;;;;;;;;;;;:::i;23532:26::-;;;;;;;;;;;;;:::i;22463:52::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;22463:52:0;;;;;;;;;;;;;;45372:237;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45372:237:0;;:::i;44523:116::-;;;;;;;;;;;;;:::i;36543:1182::-;;;;;;;;;;;;;:::i;26161:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26161:198:0;-1:-1:-1;;;;;26161:198:0;;:::i;17471:148::-;;;;;;;;;;;;;:::i;23306:38::-;;;;;;;;;;;;;:::i;44881:93::-;;;;;;;;;;;;;:::i;23351:44::-;;;;;;;;;;;;;:::i;22825:30::-;;;;;;;;;;;;;:::i;16829:79::-;;;;;;;;;;;;;:::i;43663:162::-;;;;;;;;;;;;;:::i;25872:87::-;;;;;;;;;;;;;:::i;23201:31::-;;;;;;;;;;;;;:::i;43833:560::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23272:27;;;;;;;;;;;;;:::i;47811:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47811:174:0;;;;:::i;48664:114::-;;;;;;;;;;;;;:::i;27409:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27409:269:0;;;;;;;;:::i;22790:28::-;;;;;;;;;;;;;:::i;26367:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26367:167:0;;;;;;;;:::i;44405:106::-;;;;;;;;;;;;;:::i;27686:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27686:110:0;-1:-1:-1;;;;;27686:110:0;;:::i;45621:245::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45621:245:0;;:::i;47997:659::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47997:659:0;;;;;;;;;;:::i;26542:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26542:143:0;;;;;;;;;;:::i;44647:107::-;;;;;;;;;;;;;:::i;24932:24::-;;;;;;;;;;;;;:::i;44986:101::-;;;;;;;;;;;;;:::i;47296:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47296:308:0;;:::i;24963:20::-;;;;;;;;;;;;;:::i;46648:298::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46648:298:0;;:::i;28922:660::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28922:660:0;-1:-1:-1;;;;;28922:660:0;;:::i;17774:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17774:244:0;-1:-1:-1;;;;;17774:244:0;;:::i;45099:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45099:261:0;;:::i;29590:489::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29590:489:0;-1:-1:-1;;;;;29590:489:0;;:::i;23015:25::-;;;;;;;;;;;;;:::i;27810:388::-;27862:14;27879:12;:10;:12::i;:::-;-1:-1:-1;;;;;27911:19:0;;;;;;:11;:19;;;;;;27862:29;;-1:-1:-1;27911:19:0;;27910:20;27902:88;;;;-1:-1:-1;;;27902:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28002:15;28026:19;28037:7;28026:10;:19::i;:::-;-1:-1:-1;;;;;;;;;28074:15:0;;;;;;:7;:15;;;;;;28001:44;;-1:-1:-1;28074:28:0;;:15;-1:-1:-1;28001:44:0;28074:19;:28::i;:::-;-1:-1:-1;;;;;28056:15:0;;;;;;:7;:15;;;;;:46;28123:7;;:20;;28135:7;28123:11;:20::i;:::-;28113:7;:30;28167:10;;:23;;28182:7;28167:14;:23::i;:::-;28154:10;:36;-1:-1:-1;;;27810:388:0:o;25781:83::-;25851:5;25844:12;;;;;;;;-1:-1:-1;;25844:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25818:13;;25844:12;;25851:5;;25844:12;;25851:5;25844:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25781:83;:::o;26693:161::-;26768:4;26785:39;26794:12;:10;:12::i;:::-;26808:7;26817:6;26785:8;:39::i;:::-;-1:-1:-1;26842:4:0;26693:161;;;;;:::o;44766:103::-;44844:17;;44766:103;:::o;26058:95::-;26138:7;;26058:95;:::o;23047:26::-;;;;:::o;45878:261::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;45979:8:::1;45964:11;:23;;45956:91;;;;-1:-1:-1::0;;;45956:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46058:12;:26:::0;;;46100:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45878:261:::0;:::o;26862:313::-;26960:4;26977:36;26987:6;26995:9;27006:6;26977:9;:36::i;:::-;27024:121;27033:6;27041:12;:10;:12::i;:::-;27055:89;27093:6;27055:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27055:19:0;;;;;;:11;:19;;;;;;27075:12;:10;:12::i;:::-;-1:-1:-1;;;;;27055:33:0;;;;;;;;;;;;-1:-1:-1;27055:33:0;;;:89;:37;:89::i;:::-;27024:8;:121::i;:::-;-1:-1:-1;27163:4:0;26862:313;;;;;:::o;46958:326::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;47080:1:::1;47058:18;:23;;:51;;;;;47107:2;47085:18;:24;;47058:51;47050:114;;;;-1:-1:-1::0;;;47050:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47175:19;:40:::0;;;47231:45:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46958:326:::0;:::o;28650:264::-;28716:7;28755;;28744;:18;;28736:84;;;;-1:-1:-1;;;28736:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28831:19;28854:10;:8;:10::i;:::-;28831:33;-1:-1:-1;28882:24:0;:7;28831:33;28882:11;:24::i;:::-;28875:31;;;28650:264;;;;:::o;47616:183::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;47702:16:::1;:34:::0;;;47752:39:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;47616:183:::0;:::o;25967:83::-;26033:9;;;;25967:83;:::o;27183:218::-;27271:4;27288:83;27297:12;:10;:12::i;:::-;27311:7;27320:50;27359:10;27320:11;:25;27332:12;:10;:12::i;:::-;-1:-1:-1;;;;;27320:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27320:25:0;;;:34;;;;;;;;;;;:38;:50::i;23239:26::-;;;;:::o;28206:436::-;28296:7;28335;;28324;:18;;28316:62;;;;;-1:-1:-1;;;28316:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28394:17;28389:246;;28429:15;28453:19;28464:7;28453:10;:19::i;:::-;-1:-1:-1;28428:44:0;;-1:-1:-1;28487:14:0;;-1:-1:-1;;;;;28487:14:0;28389:246;28536:23;28567:19;28578:7;28567:10;:19::i;:::-;-1:-1:-1;28534:52:0;;-1:-1:-1;28601:22:0;;-1:-1:-1;;;;;28601:22:0;46151:485;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;46276:4:::1;46253:19;:27;;:61;;;;;46307:7;46284:19;:30;;46253:61;46245:132;;;;-1:-1:-1::0;;;46245:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46418:18;;46396:19;:40;46388:124;;;;-1:-1:-1::0;;;46388:124:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46523:20;:42:::0;;;46581:47:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46151:485:::0;:::o;23492:33::-;;;;;;;;;:::o;23532:26::-;;;;;;;;;:::o;22463:52::-;;;:::o;45372:237::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;45484:12:::1;;45478:2;:18;45474:1;:22;45464:6;:32;;45440:97;;;;-1:-1:-1::0;;;45440:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45548:7;:16:::0;;;45580:21:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45372:237:::0;:::o;44523:116::-;44608:23;;;;;-1:-1:-1;;;;;44608:23:0;;44523:116::o;36543:1182::-;24842:16;:23;;-1:-1:-1;;24842:23:0;24861:4;24842:23;;;36616:7:::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;36600:23:0::1;:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;36600:23:0::1;;36592:32;;;::::0;::::1;;36664:16;;36649:12;;:31;36643:3;:37;36635:70;;;::::0;;-1:-1:-1;;;36635:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36635:70:0;;;;;;;;;;;;;::::1;;36741:3;36726:12;:18:::0;36835:19:::1;::::0;36789:15:::1;::::0;36782:48:::1;::::0;;-1:-1:-1;;;36782:48:0;;36824:4:::1;36782:48;::::0;::::1;::::0;;;36757:22:::1;::::0;36782:82:::1;::::0;36860:3:::1;::::0;36782:73:::1;::::0;-1:-1:-1;;;;;36789:15:0;;::::1;::::0;36782:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;36789:15;36782:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36782:48:0;;:52:::1;:73::i;:::-;:77:::0;::::1;:82::i;:::-;36757:107;;36877:34;36896:14;36877:18;:34::i;:::-;;36922:8;;;;;;;;;-1:-1:-1::0;;;;;36922:8:0::1;-1:-1:-1::0;;;;;36922:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;37000:8:0::1;::::0;36955:24:::1;::::0;36982:28:::1;::::0;-1:-1:-1;;;;;37000:8:0::1;36982:9;:28::i;:::-;36955:55;;37021:24;37048:48;37092:3;37048:39;37069:17;;37048:16;:20;;:39;;;;:::i;:48::-;37021:75:::0;-1:-1:-1;37107:13:0::1;37123:38;:16:::0;37021:75;37123:20:::1;:38::i;:::-;37107:54;;37182:19;37205:10;:8;:10::i;:::-;37182:33:::0;-1:-1:-1;37226:13:0::1;37243:22;:5:::0;37182:33;37243:9:::1;:22::i;:::-;37226:39:::0;-1:-1:-1;37310:60:0::1;37336:33;:16:::0;37357:11;37336:20:::1;:33::i;:::-;37310:7;:21;37318:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;37310:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;37310:21:0;;;:25:::1;:60::i;:::-;37286:7;:21;37294:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;37286:21:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;37286:21:0;;;:84;;;;37397:8:::1;::::0;::::1;37381:26:::0;;:7:::1;:26:::0;;;;;:30;37446:11:::1;::::0;:22:::1;::::0;37462:5;37446:15:::1;:22::i;:::-;37432:11;:36:::0;37489:7:::1;::::0;:18:::1;::::0;37501:5;37489:11:::1;:18::i;:::-;37479:7;:28:::0;37528:7:::1;::::0;:18:::1;::::0;37540:5;37528:11:::1;:18::i;:::-;37518:7;:28:::0;37592:12:::1;:10;:12::i;:::-;37581:8;::::0;37564:59:::1;::::0;;;;;;;-1:-1:-1;;;;;37564:59:0;;::::1;::::0;37581:8;;;::::1;::::0;-1:-1:-1;;;;;;;;;;;37564:59:0;;;;::::1;::::0;;::::1;37656:8;::::0;37639:46:::1;::::0;;;;;;;37675:1:::1;::::0;-1:-1:-1;;;;;37656:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;37639:46:0;;;;;::::1;::::0;;::::1;37701:16;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;24888:16:0;:24;;-1:-1:-1;;24888:24:0;;;-1:-1:-1;;;;36543:1182:0:o;26161:198::-;-1:-1:-1;;;;;26251:20:0;;26227:7;26251:20;;;:11;:20;;;;;;;;26247:49;;;-1:-1:-1;;;;;;26280:16:0;;;;;;:7;:16;;;;;;26273:23;;26247:49;-1:-1:-1;;;;;26334:16:0;;;;;;:7;:16;;;;;;26314:37;;:19;:37::i;17471:148::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;17578:1:::1;17562:6:::0;;17541:40:::1;::::0;-1:-1:-1;;;;;17562:6:0;;::::1;::::0;17541:40:::1;::::0;17578:1;;17541:40:::1;17609:1;17592:19:::0;;-1:-1:-1;;;;;;17592:19:0::1;::::0;;17471:148::o;23306:38::-;;;;:::o;44881:93::-;44954:12;;44881:93;:::o;23351:44::-;;;;:::o;22825:30::-;;;-1:-1:-1;;;;;22825:30:0;;:::o;16829:79::-;16867:7;16894:6;-1:-1:-1;;;;;16894:6:0;16829:79;:::o;43663:162::-;43703:7;43724:15;43741;43760:19;:17;:19::i;:::-;43723:56;;-1:-1:-1;43723:56:0;-1:-1:-1;43797:20:0;43723:56;;43797:11;:20::i;:::-;43790:27;;;;43663:162;:::o;25872:87::-;25944:7;25937:14;;;;;;;;-1:-1:-1;;25937:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25911:13;;25937:14;;25944:7;;25937:14;;25944:7;25937:14;;;;;;;;;;;;;;;;;;;;;;;;23201:31;;;;:::o;43833:560::-;43929:7;;43965;;43882;;;;;43989:289;44013:9;:16;44009:20;;43989:289;;;44079:7;44055;:21;44063:9;44073:1;44063:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44063:12:0;44055:21;;;;;;;;;;;;;:31;;:66;;;44114:7;44090;:21;44098:9;44108:1;44098:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44098:12:0;44090:21;;;;;;;;;;;;;:31;44055:66;44051:97;;;44131:7;;44140;;44123:25;;;;;;;;;44051:97;44173:34;44185:7;:21;44193:9;44203:1;44193:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44193:12:0;44185:21;;;;;;;;;;;;;44173:7;;:11;:34::i;:::-;44163:44;;44232:34;44244:7;:21;44252:9;44262:1;44252:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44252:12:0;44244:21;;;;;;;;;;;;;44232:7;;:11;:34::i;:::-;44222:44;-1:-1:-1;44031:3:0;;43989:289;;;-1:-1:-1;44314:7:0;;44302;;:20;;:11;:20::i;:::-;44292:7;:30;44288:61;;;44332:7;;44341;;44324:25;;;;;;;;44288:61;44368:7;;-1:-1:-1;44377:7:0;-1:-1:-1;43833:560:0;;;:::o;23272:27::-;;;;:::o;47811:174::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;47891:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;47891:32:0;;::::1;::::0;;;::::1;::::0;;;47939:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;47811:174:::0;:::o;48664:114::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;48722:14:::1;:21:::0;;-1:-1:-1;;48722:21:0::1;::::0;::::1;::::0;;48754:16:::1;::::0;::::1;::::0;48722:21;;48754:16:::1;48664:114::o:0;27409:269::-;27502:4;27519:129;27528:12;:10;:12::i;:::-;27542:7;27551:96;27590:15;27551:96;;;;;;;;;;;;;;;;;:11;:25;27563:12;:10;:12::i;:::-;-1:-1:-1;;;;;27551:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27551:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;22790:28::-;;;-1:-1:-1;;;;;22790:28:0;;:::o;26367:167::-;26445:4;26462:42;26472:12;:10;:12::i;:::-;26486:9;26497:6;26462:9;:42::i;44405:106::-;44485:18;;-1:-1:-1;;;;;44485:18:0;44405:106;:::o;27686:110::-;-1:-1:-1;;;;;27768:20:0;27744:4;27768:20;;;:11;:20;;;;;;;;;27686:110::o;45621:245::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;45736:12:::1;;45730:2;:18;45726:1;:22;45715:7;:33;;45691:99;;;;-1:-1:-1::0;;;45691:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45801:8;:18:::0;;;45835:23:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45621:245:::0;:::o;47997:659::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;48108:25:0;::::1;48100:70;;;::::0;;-1:-1:-1;;;48100:70:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;48189:30:0;::::1;48181:81;;;;-1:-1:-1::0;;;48181:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;48281:33:0;::::1;48309:4;48281:33;;48273:89;;;;-1:-1:-1::0;;;48273:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48401:23;::::0;-1:-1:-1;;;;;48381:43:0;;::::1;48401:23:::0;;;::::1;;48381:43;;48373:109;;;;-1:-1:-1::0;;;48373:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48503:18;:32:::0;;-1:-1:-1;;;;;;48503:32:0::1;-1:-1:-1::0;;;;;48503:32:0;;::::1;::::0;;;::::1;::::0;;;48546:23:::1;:42:::0;;-1:-1:-1;;;;;;48546:42:0::1;::::0;;;::::1;::::0;;::::1;;::::0;;48614:34:::1;::::0;::::1;::::0;-1:-1:-1;;48614:34:0::1;47997:659:::0;;:::o;26542:143::-;-1:-1:-1;;;;;26650:18:0;;;26623:7;26650:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26542:143::o;44647:107::-;44727:19;;44647:107;:::o;24932:24::-;;;-1:-1:-1;;;;;24932:24:0;;:::o;44986:101::-;45063:16;;44986:101;:::o;47296:308::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;47412:1:::1;47392:16;:21;;:47;;;;;47437:2;47417:16;:22;;47392:47;47384:108;;;;-1:-1:-1::0;;;47384:108:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47503:17;:36:::0;;;47555:41:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;47296:308:::0;:::o;24963:20::-;;;-1:-1:-1;;;;;24963:20:0;;:::o;46648:298::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;46767:3:::1;46746:17;:24;;46738:92;;;;-1:-1:-1::0;;;46738:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46841:18;:38:::0;;;46895:43:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;46648:298:::0;:::o;28922:660::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;29014:42:::1;-1:-1:-1::0;;;;;29003:53:0;::::1;;;28995:111;;;;-1:-1:-1::0;;;28995:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29125:24:0;::::1;29144:4;29125:24;;29117:81;;;;-1:-1:-1::0;;;29117:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29228:13;::::0;-1:-1:-1;;;;;29217:24:0;;::::1;29228:13:::0;::::1;29217:24;;29209:82;;;;-1:-1:-1::0;;;29209:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29311:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29310:21;29302:72;;;;-1:-1:-1::0;;;29302:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29398:16:0;::::1;29417:1;29398:16:::0;;;:7:::1;:16;::::0;;;;;:20;29395:108:::1;;-1:-1:-1::0;;;;;29474:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29454:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29435:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29395:108:::1;-1:-1:-1::0;;;;;29513:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29513:27:0::1;29536:4;29513:27:::0;;::::1;::::0;;;29551:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29551:23:0::1;::::0;;::::1;::::0;;28922:660::o;17774:244::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17863:22:0;::::1;17855:73;;;;-1:-1:-1::0;;;17855:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17965:6;::::0;;17944:38:::1;::::0;-1:-1:-1;;;;;17944:38:0;;::::1;::::0;17965:6;::::1;::::0;17944:38:::1;::::0;::::1;17993:6;:17:::0;;-1:-1:-1;;;;;;17993:17:0::1;-1:-1:-1::0;;;;;17993:17:0;;;::::1;::::0;;;::::1;::::0;;17774:244::o;45099:261::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;45220:1:::1;45205:11;:16;;45177:91;;;;-1:-1:-1::0;;;45177:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45279:12;:26:::0;;;45321:31:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;45099:261:::0;:::o;29590:489::-;17051:12;:10;:12::i;:::-;17041:6;;-1:-1:-1;;;;;17041:6:0;;;:22;;;17033:67;;;;;-1:-1:-1;;;17033:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17033:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29671:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29663:71;;;;-1:-1:-1::0;;;29663:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29750:9;29745:327;29769:9;:16:::0;29765:20;::::1;29745:327;;;29827:7;-1:-1:-1::0;;;;;29811:23:0::1;:9;29821:1;29811:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29811:12:0::1;:23;29807:254;;;29870:9;29880:16:::0;;-1:-1:-1;;29880:20:0;;;29870:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;29855:9:::1;:12:::0;;-1:-1:-1;;;;;29870:31:0;;::::1;::::0;29865:1;;29855:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29855:46:0::1;-1:-1:-1::0;;;;;29855:46:0;;::::1;;::::0;;29920:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29959:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29959:28:0::1;::::0;;30006:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30006:15:0;;;;;-1:-1:-1;;;;;;30006:15:0::1;::::0;;;;;30040:5:::1;;29807:254;29787:3;;29745:327;;;;29590:489:::0;:::o;23015:25::-;;;;:::o;6556:471::-;6614:7;6859:6;6855:47;;-1:-1:-1;6889:1:0;6882:8;;6855:47;6926:5;;;6930:1;6926;:5;:1;6950:5;;;;;:10;6942:56;;;;-1:-1:-1;;;6942:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7018:1;6556:471;-1:-1:-1;;;6556:471:0:o;7503:132::-;7561:7;7588:39;7592:1;7595;7588:39;;;;;;;;;;;;;;;;;:3;:39::i;5666:136::-;5724:7;5751:43;5755:1;5758;5751:43;;;;;;;;;;;;;;;;;:3;:43::i;1287:106::-;1375:10;1287:106;:::o;42331:482::-;42390:7;42399;42408;42417;42426;42435;42456:23;42481:12;42495:13;42512:53;42524:7;42533;;42542:8;;42552:12;;42512:11;:53::i;:::-;42455:110;;;;;;42576:19;42599:10;:8;:10::i;:::-;42576:33;;42621:15;42638:23;42663:12;42679:46;42691:7;42700:4;42706:5;42713:11;42679;:46::i;:::-;42620:105;;-1:-1:-1;42620:105:0;-1:-1:-1;42620:105:0;-1:-1:-1;42776:15:0;;-1:-1:-1;42793:4:0;;-1:-1:-1;42799:5:0;;-1:-1:-1;;;;;42331:482:0;;;;;;;:::o;5202:181::-;5260:7;5292:5;;;5316:6;;;;5308:46;;;;;-1:-1:-1;;;5308:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30087:345;-1:-1:-1;;;;;30180:19:0;;30172:72;;;;-1:-1:-1;;;30172:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30263:21:0;;30255:72;;;;-1:-1:-1;;;30255:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30340:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30392:32;;;;;;;;;;;;;;;;;30087:345;;;:::o;30440:1990::-;-1:-1:-1;;;;;30537:20:0;;30529:74;;;;-1:-1:-1;;;30529:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30622:23:0;;30614:75;;;;-1:-1:-1;;;30614:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30717:1;30708:6;:10;30700:75;;;;-1:-1:-1;;;30700:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30809:7;:5;:7::i;:::-;-1:-1:-1;;;;;30799:17:0;:6;-1:-1:-1;;;;;30799:17:0;;;:41;;;;;30833:7;:5;:7::i;:::-;-1:-1:-1;;;;;30820:20:0;:9;-1:-1:-1;;;;;30820:20:0;;;30799:41;:62;;;;-1:-1:-1;30845:16:0;;;;30844:17;30799:62;30796:366;;;30896:12;;30886:6;:22;;30878:86;;;;-1:-1:-1;;;30878:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30999:18;;-1:-1:-1;;;;;30999:18:0;30983:12;:10;:12::i;:::-;-1:-1:-1;;;;;30983:34:0;;:79;;;;31045:16;-1:-1:-1;;;;;31021:41:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;31021:41:0;;30983:79;30982:100;;;;-1:-1:-1;31068:14:0;;;;;;;31067:15;30982:100;30979:171;;;31101:49;;;-1:-1:-1;;;31101:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31186:16;;;;31182:624;;31219:28;31250:24;31268:4;31250:9;:24::i;:::-;31340:20;;31219:55;;-1:-1:-1;31316:44:0;;;;;;;31397:72;;-1:-1:-1;31451:18:0;;-1:-1:-1;;;;;31451:18:0;31437:10;:32;;31397:72;:114;;;;-1:-1:-1;31490:21:0;;;;;;;31397:114;31375:420;;;31576:16;-1:-1:-1;;;;;31576:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31576:23:0;31549;;;;;-1:-1:-1;;;;;31549:23:0;;;:50;;;31546:233;;;31622:42;31643:20;31622;:42::i;:::-;31546:233;;;31733:23;;31709:70;;31733:23;;;-1:-1:-1;;;;;31733:23:0;31758:20;31709:23;:70::i;:::-;31182:624;;;-1:-1:-1;;;;;31830:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31854:22:0;;;;;;:11;:22;;;;;;;;31853:23;31830:46;31826:597;;;31893:48;31915:6;31923:9;31934:6;31893:21;:48::i;:::-;31826:597;;;-1:-1:-1;;;;;31964:19:0;;;;;;:11;:19;;;;;;;;31963:20;:46;;;;-1:-1:-1;;;;;;31987:22:0;;;;;;:11;:22;;;;;;;;31963:46;31959:464;;;32026:46;32046:6;32054:9;32065:6;32026:19;:46::i;31959:464::-;-1:-1:-1;;;;;32095:19:0;;;;;;:11;:19;;;;;;;;32094:20;:47;;;;-1:-1:-1;;;;;;32119:22:0;;;;;;:11;:22;;;;;;;;32118:23;32094:47;32090:333;;;32158:44;32176:6;32184:9;32195:6;32158:17;:44::i;32090:333::-;-1:-1:-1;;;;;32224:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;32247:22:0;;;;;;:11;:22;;;;;;;;32224:45;32220:203;;;32286:48;32308:6;32316:9;32327:6;32286:21;:48::i;32220:203::-;32367:44;32385:6;32393:9;32404:6;32367:17;:44::i;:::-;30440:1990;;;:::o;6105:192::-;6191:7;6227:12;6219:6;;;;6211:29;;;;-1:-1:-1;;;6211:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6263:5:0;;;6105:192::o;37737:452::-;37833:15;;37826:68;;;-1:-1:-1;;;37826:68:0;;-1:-1:-1;;;;;37866:16:0;37826:68;;;;;;;;;;;;;;-1:-1:-1;;37833:15:0;;;;;37826:31;;:68;;;;;;;;;;;;;;;-1:-1:-1;37833:15:0;37826:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38123:8:0;;37919:262;;;-1:-1:-1;;;37919:262:0;;38024:4;37919:262;;;;;;;;;;-1:-1:-1;37919:262:0;;;;;;;;;;;;-1:-1:-1;;;;;38123:8:0;;;37919:262;;;;38151:15;37919:262;;;;;;:16;:78;;;;;;:262;;;;;37826:68;;37919:262;;;;;;;;;;;:78;:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37919:262:0;;37737:452;-1:-1:-1;;37737:452:0:o;8131:278::-;8217:7;8252:12;8245:5;8237:28;;;;-1:-1:-1;;;8237:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8276:9;8292:1;8288;:5;;;;;;;8131:278;-1:-1:-1;;;;;8131:278:0:o;42821:417::-;42935:7;;;;42988:46;43031:1;43017:15;;43012:2;:21;42988:19;:7;43000:6;42988:11;:19::i;:46::-;42973:61;-1:-1:-1;43045:16:0;43064:47;43108:1;43094:15;;43089:2;:21;43064:20;:7;43076;43064:11;:20::i;:47::-;43045:66;-1:-1:-1;43122:23:0;43148:31;43045:66;43148:17;:7;43160:4;43148:11;:17::i;:::-;:21;;:31::i;:::-;43122:57;43215:4;;-1:-1:-1;43221:8:0;;-1:-1:-1;42821:417:0;;-1:-1:-1;;;;;;42821:417:0:o;43246:409::-;43356:7;;;;43412:24;:7;43424:11;43412;:24::i;:::-;43394:42;-1:-1:-1;43447:12:0;43462:21;:4;43471:11;43462:8;:21::i;:::-;43447:36;-1:-1:-1;43494:13:0;43510:22;:5;43520:11;43510:9;:22::i;:::-;43494:38;-1:-1:-1;43543:23:0;43569:28;43494:38;43569:17;:7;43581:4;43569:11;:17::i;:28::-;43616:7;;;;-1:-1:-1;43642:4:0;;-1:-1:-1;43246:409:0;;-1:-1:-1;;;;;;;43246:409:0:o;32483:1122::-;24842:16;:23;;-1:-1:-1;;24842:23:0;24861:4;24842:23;;;32695:18:::1;::::0;24842:16;;32670:44:::1;::::0;:20;;:24:::1;:44::i;:::-;32646:68:::0;-1:-1:-1;32725:12:0::1;32740:20;32646:68:::0;32758:1:::1;32740:17;:20::i;:::-;32725:35:::0;-1:-1:-1;32771:17:0::1;32791:23;:13:::0;32725:35;32791:17:::1;:23::i;:::-;32771:43:::0;-1:-1:-1;33117:21:0::1;33183:22;33200:4:::0;33183:16:::1;:22::i;:::-;33274:18;33295:41;:21;33321:14:::0;33295:25:::1;:41::i;:::-;33274:62;;33386:41;33405:9;33416:10;33386:18;:41::i;:::-;33468:16;-1:-1:-1::0;;;;;33468:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33468:23:0;33453:68:::1;::::0;;;;;33468:23:::1;33453:68:::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;33453:68:0;;::::1;::::0;::::1;::::0;;;;;;;::::1;33542:55;33560:4;33567:9;33578:18;;33542:9;:55::i;:::-;-1:-1:-1::0;;24888:16:0;:24;;-1:-1:-1;;24888:24:0;;;-1:-1:-1;;;;32483:1122:0:o;34756:1082::-;24842:16;:23;;-1:-1:-1;;24842:23:0;24861:4;24842:23;;;34997:18:::1;::::0;24842:16;;34972:44:::1;::::0;:20;;:24:::1;:44::i;:::-;34948:68:::0;-1:-1:-1;35027:12:0::1;35042:20;34948:68:::0;35060:1:::1;35042:17;:20::i;:::-;35027:35:::0;-1:-1:-1;35073:17:0::1;35093:23;:13:::0;35027:35;35093:17:::1;:23::i;:::-;35170:6;::::0;35073:43;;-1:-1:-1;35137:47:0::1;::::0;35155:4:::1;::::0;-1:-1:-1;;;;;35170:6:0::1;35179:4:::0;35137:9:::1;:47::i;:::-;35205:31;35246:16;-1:-1:-1::0;;;;;35239:34:0::1;;35282:4;35239:49;;;;;;;;;;;;;-1:-1:-1::0;;;;;35239:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35239:49:0;35347:6:::1;::::0;:41:::1;::::0;;-1:-1:-1;;;35347:41:0;;-1:-1:-1;;;;;35347:41:0;;::::1;;::::0;::::1;::::0;;;;;;;;;35239:49;;-1:-1:-1;35347:6:0;::::1;::::0;:17:::1;::::0;:41;;;;;:6:::1;::::0;:41;;;;;;;;:6;;:41;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35409:27;35439:78;35493:23;35446:16;-1:-1:-1::0;;;;;35439:34:0::1;;35482:4;35439:49;;;;;;;;;;;;;-1:-1:-1::0;;;;;35439:49:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35439:49:0;;:53:::1;:78::i;:::-;35409:108;;35567:71;35589:16;35607:9;35618:19;35567:21;:71::i;:::-;35664:70;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;35664:70:0;::::1;::::0;::::1;::::0;;;;;;;;::::1;35755:55;35773:4;35780:9;35791:18;;35755:9;:55::i;:::-;-1:-1:-1::0;;24888:16:0;:24;;-1:-1:-1;;24888:24:0;;;-1:-1:-1;;;;;34756:1082:0:o;40119:945::-;40221:19;40244:10;:8;:10::i;:::-;40221:33;;40266:15;40283:23;40308:12;40322:23;40347:12;40361:13;40378:19;40389:7;40378:10;:19::i;:::-;40265:132;;;;;;;;;;;;40408:13;40425:22;40435:11;40425:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;40476:15:0;;;;;;:7;:15;;;;;;40408:39;;-1:-1:-1;40476:28:0;;40496:7;40476:19;:28::i;:::-;-1:-1:-1;;;;;40458:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40533:7;:15;;;;:28;;40553:7;40533:19;:28::i;:::-;-1:-1:-1;;;;;40515:15:0;;;;;;:7;:15;;;;;:46;40575:16;;;;40572:485;;;-1:-1:-1;;;;;40629:18:0;;;;;;:7;:18;;;;;;:31;;40652:7;40629:22;:31::i;:::-;-1:-1:-1;;;;;40608:18:0;;;;;;;:7;:18;;;;;;;;;:52;;;;40680:36;;;;;;;40608:18;;40680:36;;;;-1:-1:-1;;;;;;;;;;;40680:36:0;;;;;;;;40572:485;;;-1:-1:-1;;;;;40770:18:0;;;;;;:7;:18;;;;;;:39;;40793:15;40770:22;:39::i;:::-;-1:-1:-1;;;;;40749:18:0;;;;;;:7;:18;;;;;;:60;;;;40868:4;40852:22;;;;:33;;40879:5;40852:26;:33::i;:::-;40843:4;40827:22;;;;:7;:22;;;;;:58;40900:23;40912:4;40918;40900:11;:23::i;:::-;40943:38;;;;;;;;40968:4;;-1:-1:-1;;;;;40943:38:0;;;-1:-1:-1;;;;;;;;;;;40943:38:0;;;;;;;;41018:9;-1:-1:-1;;;;;41001:44:0;41010:6;-1:-1:-1;;;;;41001:44:0;-1:-1:-1;;;;;;;;;;;41029:15:0;41001:44;;;;;;;;;;;;;;;;;;40572:485;40119:945;;;;;;;;;;;:::o;39086:1025::-;39186:19;39209:10;:8;:10::i;:::-;39186:33;;39231:15;39248:23;39273:12;39287:23;39312:12;39326:13;39343:19;39354:7;39343:10;:19::i;:::-;39230:132;;;;;;;;;;;;39373:13;39390:22;39400:11;39390:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;39441:15:0;;;;;;:7;:15;;;;;;39373:39;;-1:-1:-1;39441:28:0;;39461:7;39441:19;:28::i;:::-;-1:-1:-1;;;;;39423:15:0;;;;;;:7;:15;;;;;:46;39483:16;;;;39480:624;;;-1:-1:-1;;;;;39537:18:0;;;;;;:7;:18;;;;;;:31;;39560:7;39537:22;:31::i;:::-;-1:-1:-1;;;;;39516:18:0;;;;;;:7;:18;;;;;;;;:52;;;;39604:7;:18;;;;:31;;39627:7;39604:22;:31::i;39480:624::-;-1:-1:-1;;;;;39745:18:0;;;;;;:7;:18;;;;;;:39;;39768:15;39745:22;:39::i;:::-;-1:-1:-1;;;;;39724:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39820:7;:18;;;;:39;;39843:15;39820:22;:39::i;38197:881::-;38295:19;38318:10;:8;:10::i;:::-;38295:33;;38340:15;38357:23;38382:12;38396:23;38421:12;38435:13;38452:19;38463:7;38452:10;:19::i;:::-;38339:132;;;;;;;;;;;;38482:13;38499:22;38509:11;38499:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;38550:15:0;;;;;;:7;:15;;;;;;38482:39;;-1:-1:-1;38550:28:0;;38570:7;38550:19;:28::i;41072:1096::-;41174:19;41197:10;:8;:10::i;:::-;41174:33;;41219:15;41236:23;41261:12;41275:23;41300:12;41314:13;41331:19;41342:7;41331:10;:19::i;:::-;41218:132;;;;;;;;;;;;41361:13;41378:22;41388:11;41378:5;:9;;:22;;;;:::i;:::-;-1:-1:-1;;;;;41429:15:0;;;;;;:7;:15;;;;;;41361:39;;-1:-1:-1;41429:28:0;;41449:7;41429:19;:28::i;:::-;-1:-1:-1;;;;;41411:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41486:7;:15;;;;:28;;41506:7;41486:19;:28::i;33617:592::-;33767:16;;;33781:1;33767:16;;;33743:21;33767:16;;;;;33743:21;33767:16;;;;;;;;;;-1:-1:-1;33767:16:0;33743:40;;33812:4;33794;33799:1;33794:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;33794:23:0;;;-1:-1:-1;;;;;33794:23:0;;;;;33838:16;-1:-1:-1;;;;;33838:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33838:23:0;33828:7;;:4;;33833:1;;33828:7;;;;;;;;;;;:33;-1:-1:-1;;;;;33828:33:0;;;-1:-1:-1;;;;;33828:33:0;;;;;33874:63;33891:4;33906:16;33925:11;33874:8;:63::i;:::-;33976:16;-1:-1:-1;;;;;33976:67:0;;34058:11;34084:1;34128:4;34155;34175:15;33976:225;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33976:225:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33617:592;;:::o;34217:527::-;34371:63;34388:4;34403:16;34422:11;34371:8;:63::i;:::-;34477:259;;;-1:-1:-1;;;34477:259:0;;34550:4;34477:259;;;;;;;;;;;;34596:1;34477:259;;;;;;;;;;;;;;34710:15;34477:259;;;;;;-1:-1:-1;;;;;34477:16:0;:32;;;;34517:9;;34477:259;;;;;;;;;;;;;;;34517:9;34477:32;:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;34217:527:0:o;35846:689::-;36035:63;36052:4;36067:16;36086:11;36035:8;:63::i;:::-;36116:16;-1:-1:-1;;;;;36109:32:0;;36150:16;36169:15;36109:76;;;;;;;;;;;;;-1:-1:-1;;;;;36109:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36228:299:0;;;-1:-1:-1;;;36228:299:0;;36280:4;36228:299;;;;;;-1:-1:-1;;;;;36228:299:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;36228:299:0;;;;;;;;;;;;;;;;;;;36501:15;36228:299;;;;;;:16;:29;;;;;;:299;;;;;;;;;;;;;;;;;:29;:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35846:689:0:o;42176:147::-;42254:7;;:17;;42266:4;42254:11;:17::i;:::-;42244:7;:27;42295:10;;:20;;42310:4;42295:14;:20::i;:::-;42282:10;:33;-1:-1:-1;;42176:147:0:o

Swarm Source

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