ETH Price: $3,500.96 (-0.07%)
Gas: 2 Gwei

Token

Rezerve (RZRV)
 

Overview

Max Total Supply

21,000,000 RZRV

Holders

479 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Rezerve: Old RZRV Token
Balance
10,897.192679915 RZRV

Value
$0.00
0x23b8b512175590a76fff32c6f06a7ef1ce4724c7
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:
Rezerve

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-07
*/

pragma solidity ^0.8.6;
// SPDX-License-Identifier: Unlicensed


interface IERC20 {

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



abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable( 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 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;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require( block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
        _previousOwner = address(0);
    }
}

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

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

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


interface RezerveExchange {
     function exchangeReserve ( uint256 _amount ) external;
     function flush() external;
    
}


contract Rezerve is Context, IERC20, Ownable {
    
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;

    
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 21000000  * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Rezerve";
    string private constant _symbol = "RZRV";
    uint8 private constant _decimals = 9;
    
    uint256 public _taxFeeonSale = 0;
    uint256 private _previousTaxFee = _taxFeeonSale;
    
    uint256 public _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _liquidityFeeOnBuy = 0;
    
    bool public saleTax = true;

    mapping (address => uint256) public lastTrade;
    mapping (address => uint256) public lastBlock;
    mapping (address => bool)    public blacklist;
    mapping (address => bool)    public whitelist;
    mapping (address => bool)    public rezerveEcosystem;
    address public reserveStaking;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2RouterAddress;
    address public immutable uniswapV2Pair;
    address payable public  reserveVault;
    address public reserveExchange;
    address public ReserveStakingReceiver;
    address public DAI;
    uint8 public action;
    bool public daiShield;
    bool public AutoSwap = false;
    
    uint8 public lpPullPercentage = 70;
    
    bool public pauseContract = true;
    
    bool public stakingTax = true;
    
    address public burnAddress = 0x000000000000000000000000000000000000dEaD;  
    

   
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 21000000  * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 21000  * 10**9;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor ()  {
        _rOwned[_msgSender()] = _rTotal;
        //DAI = 0x9A702Da2aCeA529dE15f75b69d69e0E94bEFB73B;
        // DAI = 0x6980FF5a3BF5E429F520746EFA697525e8EaFB5C;
        //uniswapV2RouterAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;

        DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
        uniswapV2RouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddress);
         // Create a uniswap pair for this new token
        address pairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), DAI );
        uniswapV2Pair = pairAddress;
       // UNCOMMENT THESE FOR ETHEREUM MAINNET
        //DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
       
          

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        addRezerveEcosystemAddress(owner());
        addRezerveEcosystemAddress(address(this));

        addToWhitelist(pairAddress);
        
        //exclude owner and this contract from fee
        excludeFromReward( owner() );
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[0x42A1DE863683F3230568900bA23f86991D012f42] = true;
        _isExcludedFromFee[burnAddress] = true;
        daiShield = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    
    function setReserveExchange( address _address ) public onlyOwner {
        require(_address != address(0), "reserveExchange is zero address");
        reserveExchange = _address;
        excludeFromFee( _address );
        addRezerveEcosystemAddress(_address);
    }
    
    
    function thresholdMet () public  view returns ( bool ){
        return  reserveBalance() > numTokensSellToAddToLiquidity ;
    }
    
    function reserveBalance () public view returns(uint256) {
        
        return balanceOf( address(this) );
    }
    
    function contractPauser () public onlyOwner  {
        
       pauseContract = !pauseContract;
       AutoSwap = !AutoSwap;
       _approve(address(this), reserveExchange, ~uint256(0));
       _approve(address(this), uniswapV2Pair ,  ~uint256(0));
       _approve(address(this), uniswapV2RouterAddress, ~uint256(0));
       
       IERC20 _dai = IERC20 ( DAI );
        _dai.approve( uniswapV2Pair, ~uint256(0) );
        _dai.approve( uniswapV2RouterAddress ,  ~uint256(0) );
        _dai.approve( reserveExchange ,  ~uint256(0) );
    }
   

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

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

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

    function totalSupply() public 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) {
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount );
        _transfer(sender, recipient, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue );
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender]- rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public  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, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }
    
    
    

    function setReserveStakingReceiver ( address _address ) public onlyOwner {
        require(_address != address(0), "ReserveStakingReceiver is zero address");
        ReserveStakingReceiver = _address;
        excludeFromFee( _address );
        addRezerveEcosystemAddress(_address);
    }
    
    function setReserveStaking ( address _address ) public onlyOwner {
        require(_address != address(0), "ReserveStaking is zero address");
        reserveStaking = _address;
        excludeFromFee( _address );
        addRezerveEcosystemAddress(_address);
    }
    
    
    function setMinimumNumber ( uint256 _min ) public onlyOwner {
        
        numTokensSellToAddToLiquidity = _min * 10** 9;
        
    }
    

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tLiquiditySale ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;        
        _takeLiquidity(tLiquidity);
        _takeLiquidityOnSale(tLiquiditySale);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function getLPBalance() public view returns(uint256){
        IERC20 _lp = IERC20 ( uniswapV2Pair);
        
        return _lp.balanceOf(address(this));
        
    }
    
    function setSellFeePercent(uint256 taxFee) external onlyOwner() {
        require ( taxFee < 50 , "Tax too high" );
        
        _taxFeeonSale = taxFee;
    }
    
    function setBuyFeePercent(uint256 liquidityFee) external onlyOwner() {
        require ( liquidityFee < 11 , "Tax too high" );
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = ( _tTotal * maxTxPercent)/10**6;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to receive ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal- rFee ;
        _tFeeTotal = _tFeeTotal + tFee ;
    }

    function _getValues(uint256 tAmount) private  returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tLiquiditySale ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tLiquiditySale,  _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tLiquiditySale );
    }

    function _getTValues(uint256 tAmount) private  returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tLiquiditySale = calculateLiquiditySaleFee(tAmount);
        uint256 tTransferAmount = tAmount- tFee - tLiquidity - tLiquiditySale ;
        return (tTransferAmount, tFee, tLiquidity, tLiquiditySale);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tLiquiditySale,  uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate ;
        uint256 rFee = tFee * currentRate ;
        uint256 rLiquidity = tLiquidity * currentRate ;
        uint256 rLiquiditySale = tLiquiditySale * currentRate;
        uint256 rTransferAmount = rAmount- rFee - rLiquidity - rLiquiditySale;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private 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 - _rOwned[_excluded[i]] ;
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal ) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }
    
    function _takeLiquidityOnSale(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }
    
    
    
    function calculateTaxFee(uint256 _amount) private  returns (uint256) {
        if ( !saleTax  ) {saleTax = true; return 0 ;}
        return( _amount * _taxFeeonSale) / 10**2;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
      
        if( action ==  1 )
            return (_amount * _liquidityFee) / 10**2;

        return 0;
    }
    
    function calculateLiquiditySaleFee(uint256 _amount) private view returns (uint256) {
        if( action == 2 )
            return ( _amount * _liquidityFeeOnBuy) / 10**2;
        
        return 0;
    }
    
    function removeAllFee() private {
        if(_taxFeeonSale == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFeeonSale;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFeeonSale = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFeeonSale = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    
    function checkDaiOwnership( address _address ) public view returns(bool){
        IERC20 _dai = IERC20(DAI);
        uint256 _daibalance = _dai.balanceOf(_address );
        return ( _daibalance >0 );
    }

    function daiShieldToggle () public onlyOwner {
        
        daiShield = !daiShield;
    }
    
    function AutoSwapToggle () public onlyOwner {
        
        AutoSwap = !AutoSwap;
    }

    function addToBlacklist(address account) public onlyOwner {
        whitelist[account] = false;
        blacklist[account] = true;
    }

    function removeFromBlacklist(address account) public onlyOwner {
        blacklist[account] = false;
    }
    
    // To be used for contracts that should never be blacklisted, but aren't part of the Rezerve ecosystem, such as the Uniswap pair
    function addToWhitelist(address account) public onlyOwner {
        blacklist[account] = false;
        whitelist[account] = true;
    }

    function removeFromWhitelist(address account) public onlyOwner {
        whitelist[account] = false;
    }

    // To be used if new contracts are added to the Rezerve ecosystem
    function addRezerveEcosystemAddress(address account) public onlyOwner {
        rezerveEcosystem[account] = true;
        addToWhitelist(account);
    }

    function removeRezerveEcosystemAddress(address account) public onlyOwner {
        rezerveEcosystem[account] = false;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require( !blacklist[from]  );
        if (pauseContract) require (from == address(this) || from == owner());

        if (!rezerveEcosystem[from]) {
            if(to == uniswapV2Pair && daiShield) require ( !checkDaiOwnership(from) );
            if(from == uniswapV2Pair) saleTax = false;
            if(to != owner())
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

            if (!whitelist[from]) {
                if (lastBlock[from] == block.number) blacklist[from] = true;
                if (lastTrade[from] + 20 seconds > block.timestamp && !blacklist[from]) revert("Slowdown");
                lastBlock[from] = block.number;
                lastTrade[from] = block.timestamp;
            }
        }
        
        action = 0;

        if(from == uniswapV2Pair) action = 1;
        if(to == uniswapV2Pair) action = 2;
        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        
        if(contractTokenBalance >= numTokensSellToAddToLiquidity)
        {
            contractTokenBalance = numTokensSellToAddToLiquidity;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
           
            if(AutoSwap)swapIt(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        if (!blacklist[from])
            _tokenTransfer(from,to,amount,takeFee);
        else
            _tokenTransfer(from, to, 1, false);
    }

    function toggleStakingTax() public onlyOwner {
        stakingTax = !stakingTax;
    }
    
    function swapIt(uint256 contractTokenBalance) internal lockTheSwap {
        uint256 _exchangeshare = contractTokenBalance;      
        if ( stakingTax ){
            _exchangeshare = ( _exchangeshare * 4 ) / 5;
            uint256 _stakingshare = contractTokenBalance - _exchangeshare;
           _tokenTransfer(address(this), ReserveStakingReceiver , _stakingshare, false);
        }
        swapTokensForDai(_exchangeshare); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
    }

   
    function swapTokensForDai(uint256 tokenAmount) internal   {
        // generate the uniswap pair path of token -> weth
        
        address[] memory path = new address[](2);
       
        path[0] = address(this);
        path[1] = DAI;
       
       uniswapV2Router.swapExactTokensForTokens(
            tokenAmount,
            0, // accept any amount of DAI
            path,
            reserveExchange,
            block.timestamp + 3 minutes
        );
    }
    
    function addToLP(uint256 tokenAmount, uint256 daiAmount) public onlyOwner {
        // approve token transfer to cover all possible scenarios
        
        _transfer ( msg.sender, address(this) , tokenAmount );
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        
        IERC20 _dai = IERC20 ( DAI );
        _dai.approve(  address(uniswapV2Router), daiAmount);
        _dai.transferFrom ( msg.sender, address(this) , daiAmount );
        
        // add the liquidity
        uniswapV2Router.addLiquidity(
            address(this),
            DAI,
            tokenAmount,
            daiAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
        contractPauser();
    }
    
    function withdrawLPTokens () public onlyOwner {
         
         IERC20 _uniswapV2Pair = IERC20 ( uniswapV2Pair );
          uint256 _lpbalance = _uniswapV2Pair.balanceOf(address(this));
         _uniswapV2Pair.transfer( msg.sender, _lpbalance );
        
    }
    
    function setLPPullPercentage ( uint8 _perc ) public onlyOwner {
        require ( _perc >9 && _perc <71);
        lpPullPercentage = _perc;
    }
    
    function removeLP () public onlyOwner {
        saleTax = false;  
        IERC20 _uniswapV2Pair = IERC20 ( uniswapV2Pair );
         uint256 _lpbalance = _uniswapV2Pair.balanceOf(address(this));
         uint256 _perc = (_lpbalance * lpPullPercentage ) / 100;
        
          _uniswapV2Pair.approve( address(uniswapV2Router), _perc );
         uniswapV2Router.removeLiquidity(
            address(this),
            DAI,
            _perc,
            0,
            0,
            reserveExchange,
            block.timestamp + 3 minutes
        ); 
         RezerveExchange _reserveexchange = RezerveExchange ( reserveExchange );
         _reserveexchange.flush();
        
    }
    
    

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        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);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tLiquiditySale ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount ;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount ;
        _takeLiquidity(tLiquidity);
        _takeLiquidityOnSale(tLiquiditySale);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity , uint256 tLiquiditySale) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;           
        _takeLiquidity(tLiquidity);
         _takeLiquidityOnSale(tLiquiditySale);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity , uint256 tLiquiditySale ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;   
        _takeLiquidity(tLiquidity);
         _takeLiquidityOnSale(tLiquiditySale);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    modifier onlyReserveStaking() {
        require( reserveStaking == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AutoSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AutoSwapToggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ReserveStakingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_tOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeonSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"action","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addRezerveEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"daiAmount","type":"uint256"}],"name":"addToLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkDaiOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daiShield","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiShieldToggle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPullPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeRezerveEcosystemAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveExchange","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveVault","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rezerveEcosystem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_perc","type":"uint8"}],"name":"setLPPullPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinimumNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setReserveStakingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thresholdMet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052664a9b638448800060098190556200001f9060001962000911565b6200002d90600019620008d9565b600a9081556000600c819055600d819055600e829055600f9190915560105560118054600160ff19909116179055601c805463ffffffff60b01b19166180a360b91b179055601d8054600161ff0160a01b031916750100000000000000000000000000000000000000dead179055664a9b6384488000601e55651319718a5000601f55348015620000bd57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5433600090815260036020908152604080832093909355601c8054736b175474e89094c44da98b954eedeac495271d0f6001600160a01b03199182161790915560188054737a250d5630b4cf539739df2c5dacb4c659f2488d921682179055835163c45a015560e01b815293519093849263c45a015592600483810193829003018186803b1580156200019357600080fd5b505afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce919062000897565b601c546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b1580156200021b57600080fd5b505af115801562000230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000256919062000897565b6001600160601b0319606082811b821660a05284901b1660805290506200028f620002896000546001600160a01b031690565b620003ce565b6200029a30620003ce565b620002a5816200044e565b620002c2620002bc6000546001600160a01b031690565b620004d2565b600160066000620002db6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260069093528183208054851660019081179091557f516b29f8422142a0080e4e416a3461c7a29204fc3e010f108838ec4d94163e928054861682179055601d54909116835291208054909216179055601c805460ff60a81b1916600160a81b179055620003763390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620003be91815260200190565b60405180910390a350506200096a565b6000546001600160a01b031633146200041d5760405162461bcd60e51b8152602060048201819052602482015260008051602062004b0f83398151915260448201526064015b60405180910390fd5b6001600160a01b0381166000908152601660205260409020805460ff191660011790556200044b816200044e565b50565b6000546001600160a01b03163314620004995760405162461bcd60e51b8152602060048201819052602482015260008051602062004b0f833981519152604482015260640162000414565b6001600160a01b03166000908152601460209081526040808320805460ff19908116909155601590925290912080549091166001179055565b6000546001600160a01b031633146200051d5760405162461bcd60e51b8152602060048201819052602482015260008051602062004b0f833981519152604482015260640162000414565b6001600160a01b03811660009081526007602052604090205460ff1615620005885760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000414565b6001600160a01b03811660009081526003602052604090205415620005e5576001600160a01b038116600090815260036020526040902054620005cb906200064b565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000600a54821115620006b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000414565b6000620006c0620006d5565b9050620006ce8184620008c2565b9392505050565b60008080620006e3620006fb565b9092509050620006f48183620008c2565b9250505090565b600a546009546000918291825b60085481101562000863578260036000600884815481106200072e576200072e62000954565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200079d575081600460006008848154811062000776576200077662000954565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15620007b457600a54600954945094505050509091565b6003600060088381548110620007ce57620007ce62000954565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007ff9084620008d9565b925060046000600883815481106200081b576200081b62000954565b60009182526020808320909101546001600160a01b031683528201929092526040019020546200084c9083620008d9565b9150806200085a81620008f3565b91505062000708565b50600954600a54620008769190620008c2565b8210156200088e57600a546009549350935050509091565b90939092509050565b600060208284031215620008aa57600080fd5b81516001600160a01b0381168114620006ce57600080fd5b600082620008d457620008d46200093e565b500490565b600082821015620008ee57620008ee62000928565b500390565b60006000198214156200090a576200090a62000928565b5060010190565b6000826200092357620009236200093e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60805160601c60a05160601c61410962000a06600039600081816108a801528181610ff10152818161104c0152818161182101528181611def0152818161286601528181612da701528181612e0901528181612fe40152818161302d01526130bb0152600081816105fe015281816118e901528181611989015281816124c0015281816124ff01528181612665015261370c01526141096000f3fe60806040526004361061048c5760003560e01c806370a0823111610255578063a9d68b8611610144578063dd467064116100c1578063ea2f0b3711610085578063ea2f0b3714610e93578063edf8bc1314610eb3578063ef0645ac14610ec8578063f2fde38b14610ee8578063f9f92be414610f08578063fb64339214610f3857600080fd5b8063dd46706414610dcd578063dd62ed3e14610ded578063e0bab4c414610e33578063e43252d714610e53578063e6a97ac614610e7357600080fd5b8063cef062fc11610108578063cef062fc14610d37578063d12a768814610d57578063d543dbeb14610d6d578063d58e460514610d8d578063d5cf7a9214610dad57600080fd5b8063a9d68b8614610c94578063b46ae5c614610cb4578063b6c5232414610cd5578063c26d7be014610cea578063c49b9a8014610d1757600080fd5b806395d89b41116101d2578063a457c2d711610196578063a457c2d714610bff578063a69df4b514610c1f578063a6c6e5f014610c34578063a8ec4ffc14610c54578063a9059cbb14610c7457600080fd5b806395d89b4114610b58578063961522ed14610b855780639b19251a14610b9a578063a10954fe14610bca578063a2b8a94714610bdf57600080fd5b806388f820201161021957806388f8202014610a945780638ab1d68114610acd5780638da5cb5b14610aed578063950eb5d514610b0b578063952ca92c14610b2b57600080fd5b806370a0823114610a0957806370d5ae0514610a29578063715018a614610a495780637d1db4a514610a5e57806385bec3d714610a7457600080fd5b80633bd5d1731161037c57806349bd5a5e116102f95780635342acb4116102bd5780635342acb41461094b578063537df3b6146109845780635d9728c8146109a457806362f837ef146109c45780636bc87c3a146109de5780636f43f17b146109f457600080fd5b806349bd5a5e146108965780634a377e1d146108ca5780634a74bb02146108ea5780634d431e5e1461090b57806352390c021461092b57600080fd5b8063437823ec11610340578063437823ec14610800578063439766ce1461082057806344337ea1146108415780634549b03914610861578063491e91ee1461088157600080fd5b80633bd5d173146107805780633c0a73ae146107a05780633ec20ab0146107b6578063407893f1146107d657806342c5ddc4146107eb57600080fd5b806318160ddd1161040a578063313ce567116103ce578063313ce567146106de57806331ce11ec146106f25780633685d4191461071357806339509351146107335780633b7e6d4a1461075357600080fd5b806318160ddd146106385780632103b6ad1461064d5780632130e3481461067d57806323b872dd1461069e5780632d838119146106be57600080fd5b80630cfc15f9116104515780630cfc15f9146105715780630d88331a146105ac57806312aa4adf146105c157806313114a9d146105d75780631694505e146105ec57600080fd5b80627635b61461049857806301a754a3146104af57806306fdde03146104e5578063095ea7b31461051e5780630a7a1c4d1461053e57600080fd5b3661049357005b600080fd5b3480156104a457600080fd5b506104ad610f58565b005b3480156104bb57600080fd5b50601c546104d090600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156104f157600080fd5b5060408051808201909152600781526652657a6572766560c81b60208201525b6040516104dc9190613ec7565b34801561052a57600080fd5b506104d0610539366004613ca5565b6111ef565b34801561054a57600080fd5b50601c5461055f90600160a01b900460ff1681565b60405160ff90911681526020016104dc565b34801561057d57600080fd5b5061059e61058c366004613c1b565b60036020526000908152604090205481565b6040519081526020016104dc565b3480156105b857600080fd5b506104ad611206565b3480156105cd57600080fd5b5061059e600c5481565b3480156105e357600080fd5b50600b5461059e565b3480156105f857600080fd5b506106207f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016104dc565b34801561064457600080fd5b5060095461059e565b34801561065957600080fd5b506104d0610668366004613c1b565b60166020526000908152604090205460ff1681565b34801561068957600080fd5b50601c546104d090600160a81b900460ff1681565b3480156106aa57600080fd5b506104d06106b9366004613c69565b611251565b3480156106ca57600080fd5b5061059e6106d9366004613dce565b6112a0565b3480156106ea57600080fd5b50600961055f565b3480156106fe57600080fd5b50601c546104d090600160c81b900460ff1681565b34801561071f57600080fd5b506104ad61072e366004613c1b565b611324565b34801561073f57600080fd5b506104d061074e366004613ca5565b6114d7565b34801561075f57600080fd5b5061059e61076e366004613c1b565b60046020526000908152604090205481565b34801561078c57600080fd5b506104ad61079b366004613dce565b61150e565b3480156107ac57600080fd5b5061059e60105481565b3480156107c257600080fd5b506104ad6107d1366004613dce565b6115fc565b3480156107e257600080fd5b506104ad61163a565b3480156107f757600080fd5b506104d0611685565b34801561080c57600080fd5b506104ad61081b366004613c1b565b611698565b34801561082c57600080fd5b50601c546104d090600160c01b900460ff1681565b34801561084d57600080fd5b506104ad61085c366004613c1b565b6116e6565b34801561086d57600080fd5b5061059e61087c366004613e00565b611749565b34801561088d57600080fd5b506104ad6117d8565b3480156108a257600080fd5b506106207f000000000000000000000000000000000000000000000000000000000000000081565b3480156108d657600080fd5b50601854610620906001600160a01b031681565b3480156108f657600080fd5b50601d546104d090600160a81b900460ff1681565b34801561091757600080fd5b506104ad610926366004613c1b565b611ad6565b34801561093757600080fd5b506104ad610946366004613c1b565b611b95565b34801561095757600080fd5b506104d0610966366004613c1b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561099057600080fd5b506104ad61099f366004613c1b565b611ce8565b3480156109b057600080fd5b506104ad6109bf366004613c1b565b611d33565b3480156109d057600080fd5b506011546104d09060ff1681565b3480156109ea57600080fd5b5061059e600e5481565b348015610a0057600080fd5b5061059e611dd7565b348015610a1557600080fd5b5061059e610a24366004613c1b565b611e79565b348015610a3557600080fd5b50601d54610620906001600160a01b031681565b348015610a5557600080fd5b506104ad611ed8565b348015610a6a57600080fd5b5061059e601e5481565b348015610a8057600080fd5b506104ad610a8f366004613ea4565b611f3a565b348015610aa057600080fd5b506104d0610aaf366004613c1b565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610ad957600080fd5b506104ad610ae8366004613c1b565b611fa3565b348015610af957600080fd5b506000546001600160a01b0316610620565b348015610b1757600080fd5b506104ad610b26366004613dce565b611fee565b348015610b3757600080fd5b5061059e610b46366004613c1b565b60136020526000908152604090205481565b348015610b6457600080fd5b50604080518082019091526004815263292d292b60e11b6020820152610511565b348015610b9157600080fd5b506104ad61205c565b348015610ba657600080fd5b506104d0610bb5366004613c1b565b60156020526000908152604090205460ff1681565b348015610bd657600080fd5b5061059e6120a7565b348015610beb57600080fd5b506104ad610bfa366004613dce565b6120b7565b348015610c0b57600080fd5b506104d0610c1a366004613ca5565b612125565b348015610c2b57600080fd5b506104ad61215c565b348015610c4057600080fd5b50601754610620906001600160a01b031681565b348015610c6057600080fd5b506104ad610c6f366004613c1b565b612265565b348015610c8057600080fd5b506104d0610c8f366004613ca5565b6122b0565b348015610ca057600080fd5b506104ad610caf366004613c1b565b6122bd565b348015610cc057600080fd5b50601c5461055f90600160b81b900460ff1681565b348015610ce157600080fd5b5060025461059e565b348015610cf657600080fd5b5061059e610d05366004613c1b565b60126020526000908152604090205481565b348015610d2357600080fd5b506104ad610d32366004613d94565b612313565b348015610d4357600080fd5b50601954610620906001600160a01b031681565b348015610d6357600080fd5b5061059e601f5481565b348015610d7957600080fd5b506104ad610d88366004613dce565b612395565b348015610d9957600080fd5b506104ad610da8366004613c1b565b6123e1565b348015610db957600080fd5b506104ad610dc8366004613e30565b612485565b348015610dd957600080fd5b506104ad610de8366004613dce565b6126f4565b348015610df957600080fd5b5061059e610e08366004613c36565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e3f57600080fd5b50601c54610620906001600160a01b031681565b348015610e5f57600080fd5b506104ad610e6e366004613c1b565b612779565b348015610e7f57600080fd5b50601a54610620906001600160a01b031681565b348015610e9f57600080fd5b506104ad610eae366004613c1b565b6127dc565b348015610ebf57600080fd5b506104ad612827565b348015610ed457600080fd5b50601b54610620906001600160a01b031681565b348015610ef457600080fd5b506104ad610f03366004613c1b565b612970565b348015610f1457600080fd5b506104d0610f23366004613c1b565b60146020526000908152604090205460ff1681565b348015610f4457600080fd5b506104d0610f53366004613c1b565b612a48565b6000546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610f8290613f1c565b60405180910390fd5b601c8054600160b01b60ff600160c01b8084048216150260ff60c01b19841681178390049091161590910260ff60b01b1990911662ff00ff60b01b1990921691909117179055601a54610feb9030906001600160a01b0316600019612ad4565b611018307f0000000000000000000000000000000000000000000000000000000000000000600019612ad4565b6018546110329030906001600160a01b0316600019612ad4565b601c5460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600019602483015290911690819063095ea7b390604401602060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db9190613db1565b5060185460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b15801561112b57600080fd5b505af115801561113f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111639190613db1565b50601a5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b1580156111b357600080fd5b505af11580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190613db1565b5050565b60006111fc338484612ad4565b5060015b92915050565b6000546001600160a01b031633146112305760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60c81b198116600160c81b9182900460ff1615909102179055565b6001600160a01b038316600090815260056020908152604080832033808552925282205461128b91869161128690869061401b565b612ad4565b611296848484612bf8565b5060019392505050565b6000600a548211156113075760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f82565b60006113116131b7565b905061131d8184613fda565b9392505050565b6000546001600160a01b0316331461134e5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03811660009081526007602052604090205460ff166113b65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f82565b60005b6008548110156111eb57816001600160a01b0316600882815481106113e0576113e0614079565b6000918252602090912001546001600160a01b031614156114c5576008805461140b9060019061401b565b8154811061141b5761141b614079565b600091825260209091200154600880546001600160a01b03909216918390811061144757611447614079565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061149f5761149f614063565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806114cf81614032565b9150506113b9565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916111fc918590611286908690613fc2565b3360008181526007602052604090205460ff16156115835760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f82565b600061158e836131da565b505050506001600160a01b0385166000908152600360205260409020549293506115bc92849250905061401b565b6001600160a01b038316600090815260036020526040902055600a546115e390829061401b565b600a55600b546115f4908490613fc2565b600b55505050565b6000546001600160a01b031633146116265760405162461bcd60e51b8152600401610f8290613f1c565b61163481633b9aca00613ffc565b601f5550565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000601f546116926120a7565b11905090565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146117105760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601560209081526040808320805460ff19908116909155601490925290912080549091166001179055565b600060095483111561179d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f82565b816117bd5760006117ad846131da565b5094965061120095505050505050565b60006117c8846131da565b5093965061120095505050505050565b6000546001600160a01b031633146118025760405162461bcd60e51b8152600401610f8290613f1c565b6011805460ff191690556040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190613de7565b601c549091506000906064906118c890600160b81b900460ff1684613ffc565b6118d29190613fda565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390529192509084169063095ea7b390604401602060405180830381600087803b15801561194057600080fd5b505af1158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613db1565b50601c54601a546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263baa2abde9230929182169186916000918291166119ca4260b4613fc2565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015290921660a482015260c481019190915260e4016040805180830381600087803b158015611a3757600080fd5b505af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613e52565b5050601a54604080516335cfcb7560e11b815290516001600160a01b03909216918291636b9f96ea91600480830192600092919082900301818387803b158015611ab857600080fd5b505af1158015611acc573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b038116611b655760405162461bcd60e51b815260206004820152602660248201527f526573657276655374616b696e675265636569766572206973207a65726f206160448201526564647265737360d01b6064820152608401610f82565b601b80546001600160a01b0319166001600160a01b038316179055611b8981611698565b611b92816122bd565b50565b6000546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03811660009081526007602052604090205460ff1615611c285760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f82565b6001600160a01b03811660009081526003602052604090205415611c82576001600160a01b038116600090815260036020526040902054611c68906112a0565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b03163314611d125760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6000546001600160a01b03163314611d5d5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b038116611db35760405162461bcd60e51b815260206004820152601f60248201527f7265736572766545786368616e6765206973207a65726f2061646472657373006044820152606401610f82565b601a80546001600160a01b0319166001600160a01b038316179055611b8981611698565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b038216906370a082319060240160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613de7565b91505090565b6001600160a01b03811660009081526007602052604081205460ff1615611eb657506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054611200906112a0565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610f8290613f1c565b600080546040516001600160a01b03909116906000805160206140b4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f645760405162461bcd60e51b8152600401610f8290613f1c565b60098160ff16118015611f7a575060478160ff16105b611f8357600080fd5b601c805460ff909216600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314611fcd5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b031633146120185760405162461bcd60e51b8152600401610f8290613f1c565b600b81106120575760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610f82565b600e55565b6000546001600160a01b031633146120865760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60a81b198116600160a81b9182900460ff1615909102179055565b60006120b230611e79565b905090565b6000546001600160a01b031633146120e15760405162461bcd60e51b8152600401610f8290613f1c565b603281106121205760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610f82565b600c55565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916111fc91859061128690869061401b565b6001546001600160a01b031633146121c25760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610f82565b60025442116122135760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610f82565b600154600080546040516001600160a01b0393841693909116916000805160206140b483398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461228f5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601660205260409020805460ff19169055565b60006111fc338484612bf8565b6000546001600160a01b031633146122e75760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166000908152601660205260409020805460ff19166001179055611b9281612779565b6000546001600160a01b0316331461233d5760405162461bcd60e51b8152600401610f8290613f1c565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061238a90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123bf5760405162461bcd60e51b8152600401610f8290613f1c565b620f4240816009546123d19190613ffc565b6123db9190613fda565b601e5550565b6000546001600160a01b0316331461240b5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166124615760405162461bcd60e51b815260206004820152601e60248201527f526573657276655374616b696e67206973207a65726f206164647265737300006044820152606401610f82565b601780546001600160a01b0319166001600160a01b038316179055611b8981611698565b6000546001600160a01b031633146124af5760405162461bcd60e51b8152600401610f8290613f1c565b6124ba333084612bf8565b6124e5307f000000000000000000000000000000000000000000000000000000000000000084612ad4565b601c5460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905290911690819063095ea7b390604401602060405180830381600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258d9190613db1565b506040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038216906323b872dd90606401602060405180830381600087803b1580156125dc57600080fd5b505af11580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613db1565b50601c5460405162e8e33760e81b815230600482018190526001600160a01b039283166024830152604482018690526064820185905260006084830181905260a483015260c48201524260e48201527f00000000000000000000000000000000000000000000000000000000000000009091169063e8e337009061010401606060405180830381600087803b1580156126ac57600080fd5b505af11580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190613e76565b5050506126ef610f58565b505050565b6000546001600160a01b0316331461271e5760405162461bcd60e51b8152600401610f8290613f1c565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561274d8142613fc2565b600255600080546040516001600160a01b03909116906000805160206140b4833981519152908390a350565b6000546001600160a01b031633146127a35760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601460209081526040808320805460ff19908116909155601590925290912080549091166001179055565b6000546001600160a01b031633146128065760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146128515760405162461bcd60e51b8152600401610f8290613f1c565b6040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156128b557600080fd5b505afa1580156128c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ed9190613de7565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561293857600080fd5b505af115801561294c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190613db1565b6000546001600160a01b0316331461299a5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166129ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f82565b600080546040516001600160a01b03808516939216916000805160206140b483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601c546040516370a0823160e01b81526001600160a01b0383811660048301526000921690829082906370a082319060240160206040518083038186803b158015612a9257600080fd5b505afa158015612aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aca9190613de7565b1515949350505050565b6001600160a01b038316612b365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f82565b6001600160a01b038216612b975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f82565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612c5c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f82565b6001600160a01b038216612cbe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f82565b60008111612d205760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f82565b6001600160a01b03831660009081526014602052604090205460ff1615612d4657600080fd5b601c54600160c01b900460ff1615612d85576001600160a01b038316301480612d7c57506000546001600160a01b038481169116145b612d8557600080fd5b6001600160a01b03831660009081526016602052604090205460ff16612fd5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148015612def5750601c54600160a81b900460ff165b15612e0757612dfd83612a48565b15612e0757600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415612e4c576011805460ff191690555b6000546001600160a01b03838116911614612ec457601e54811115612ec45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f82565b6001600160a01b03831660009081526015602052604090205460ff16612fd5576001600160a01b038316600090815260136020526040902054431415612f28576001600160a01b0383166000908152601460205260409020805460ff191660011790555b6001600160a01b0383166000908152601260205260409020544290612f4e906014613fc2565b118015612f7457506001600160a01b03831660009081526014602052604090205460ff16155b15612fac5760405162461bcd60e51b815260206004820152600860248201526729b637bbb237bbb760c11b6044820152606401610f82565b6001600160a01b0383166000908152601360209081526040808320439055601290915290204290555b601c805460ff60a01b191690557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416141561302b57601c805460ff60a01b1916600160a01b1790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561307957601c805460ff60a01b1916600160a11b1790555b600061308430611e79565b9050601f5481106130945750601f545b601f54811080159081906130b25750601d54600160a01b900460ff16155b80156130f057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156131055750601d54600160a81b900460ff165b1561312557601c54600160b01b900460ff16156131255761312582613235565b6001600160a01b03851660009081526006602052604090205460019060ff168061316757506001600160a01b03851660009081526006602052604090205460ff165b15613170575060005b6001600160a01b03861660009081526014602052604090205460ff166131a15761319c868686846132ba565b6131af565b6131af8686600160006132ba565b505050505050565b60008060006131c4613437565b90925090506131d38183613fda565b9250505090565b60008060008060008060008060008060006131f48c6135ba565b935093509350935060008060006132158f8787876132106131b7565b613619565b919f509d509b509599509397509195509350505050919395979092949650565b601d805460ff60a01b1916600160a01b179055601c548190600160c81b900460ff16156132a0576005613269826004613ffc565b6132739190613fda565b90506000613281828461401b565b601b5490915061329e9030906001600160a01b03168360006132ba565b505b6132a98161368b565b5050601d805460ff60a01b19169055565b806132c7576132c76137bd565b6001600160a01b03841660009081526007602052604090205460ff16801561330857506001600160a01b03831660009081526007602052604090205460ff16155b1561331d576133188484846137eb565b61341b565b6001600160a01b03841660009081526007602052604090205460ff1615801561335e57506001600160a01b03831660009081526007602052604090205460ff165b1561336e5761331884848461392c565b6001600160a01b03841660009081526007602052604090205460ff161580156133b057506001600160a01b03831660009081526007602052604090205460ff16155b156133c0576133188484846139e6565b6001600160a01b03841660009081526007602052604090205460ff16801561340057506001600160a01b03831660009081526007602052604090205460ff165b1561341057613318848484613a39565b61341b8484846139e6565b8061343157613431600d54600c55600f54600e55565b50505050565b600a546009546000918291825b6008548110156135895782600360006008848154811061346657613466614079565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134d157508160046000600884815481106134aa576134aa614079565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134e757600a54600954945094505050509091565b60036000600883815481106134fe576134fe614079565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461352d908461401b565b9250600460006008838154811061354657613546614079565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613575908361401b565b91508061358181614032565b915050613444565b50600954600a5461359a9190613fda565b8210156135b157600a546009549350935050509091565b90939092509050565b60008060008060006135cb86613abc565b905060006135d887613af7565b905060006135e588613b27565b9050600081836135f5868c61401b565b6135ff919061401b565b613609919061401b565b9993985091965094509092505050565b6000808080613628858a613ffc565b90506000613636868a613ffc565b90506000613644878a613ffc565b90506000613652888a613ffc565b905060008183613662868861401b565b61366c919061401b565b613676919061401b565b949d949c50929a509298505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136c0576136c0614079565b6001600160a01b039283166020918202929092010152601c548251911690829060019081106136f1576136f1614079565b6001600160a01b039283166020918202929092010152601a547f00000000000000000000000000000000000000000000000000000000000000008216916338ed17399185916000918691166137474260b4613fc2565b6040518663ffffffff1660e01b8152600401613767959493929190613f51565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126ef9190810190613ccf565b600c541580156137cd5750600e54155b156137d457565b600c8054600d55600e8054600f5560009182905555565b60008060008060008060006137ff886131da565b965096509650965096509650965087600460008c6001600160a01b03166001600160a01b031681526020019081526020016000205461383e919061401b565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461386e90889061401b565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461389e908790613fc2565b6001600160a01b038a166000908152600360205260409020556138c082613b4f565b6138c981613b4f565b6138d38584613bd9565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161391891815260200190565b60405180910390a350505050505050505050565b6000806000806000806000613940886131da565b965096509650965096509650965086600360008c6001600160a01b03166001600160a01b031681526020019081526020016000205461397f919061401b565b6001600160a01b03808c16600090815260036020908152604080832094909455918c168152600490915220546139b6908590613fc2565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461389e908790613fc2565b60008060008060008060006139fa886131da565b965096509650965096509650965086600360008c6001600160a01b03166001600160a01b031681526020019081526020016000205461386e919061401b565b6000806000806000806000613a4d886131da565b965096509650965096509650965087600460008c6001600160a01b03166001600160a01b0316815260200190815260200160002054613a8c919061401b565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461397f90889061401b565b60115460009060ff16613add5750506011805460ff19166001179055600090565b6064600c5483613aed9190613ffc565b6112009190613fda565b601c54600090600160a01b900460ff1660011415613b1f576064600e5483613aed9190613ffc565b506000919050565b601c54600090600160a01b900460ff1660021415613b1f57606460105483613aed9190613ffc565b6000613b596131b7565b90506000613b678284613ffc565b30600090815260036020526040902054909150613b85908290613fc2565b3060009081526003602090815260408083209390935560079052205460ff16156126ef5730600090815260046020526040902054613bc4908490613fc2565b30600090815260046020526040902055505050565b81600a54613be7919061401b565b600a55600b54613bf8908290613fc2565b600b555050565b80356001600160a01b0381168114613c1657600080fd5b919050565b600060208284031215613c2d57600080fd5b61131d82613bff565b60008060408385031215613c4957600080fd5b613c5283613bff565b9150613c6060208401613bff565b90509250929050565b600080600060608486031215613c7e57600080fd5b613c8784613bff565b9250613c9560208501613bff565b9150604084013590509250925092565b60008060408385031215613cb857600080fd5b613cc183613bff565b946020939093013593505050565b60006020808385031215613ce257600080fd5b825167ffffffffffffffff80821115613cfa57600080fd5b818501915085601f830112613d0e57600080fd5b815181811115613d2057613d2061408f565b8060051b604051601f19603f83011681018181108582111715613d4557613d4561408f565b604052828152858101935084860182860187018a1015613d6457600080fd5b600095505b83861015613d87578051855260019590950194938601938601613d69565b5098975050505050505050565b600060208284031215613da657600080fd5b813561131d816140a5565b600060208284031215613dc357600080fd5b815161131d816140a5565b600060208284031215613de057600080fd5b5035919050565b600060208284031215613df957600080fd5b5051919050565b60008060408385031215613e1357600080fd5b823591506020830135613e25816140a5565b809150509250929050565b60008060408385031215613e4357600080fd5b50508035926020909101359150565b60008060408385031215613e6557600080fd5b505080516020909101519092909150565b600080600060608486031215613e8b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215613eb657600080fd5b813560ff8116811461131d57600080fd5b600060208083528351808285015260005b81811015613ef457858101830151858201604001528201613ed8565b81811115613f06576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613fa15784516001600160a01b031683529383019391830191600101613f7c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613fd557613fd561404d565b500190565b600082613ff757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156140165761401661404d565b500290565b60008282101561402d5761402d61404d565b500390565b60006000198214156140465761404661404d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114611b9257600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212207cfae5ad49b8c4850910e5a0e70482c88cbda97c0d12e90f73227b876ba5251564736f6c634300080600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061048c5760003560e01c806370a0823111610255578063a9d68b8611610144578063dd467064116100c1578063ea2f0b3711610085578063ea2f0b3714610e93578063edf8bc1314610eb3578063ef0645ac14610ec8578063f2fde38b14610ee8578063f9f92be414610f08578063fb64339214610f3857600080fd5b8063dd46706414610dcd578063dd62ed3e14610ded578063e0bab4c414610e33578063e43252d714610e53578063e6a97ac614610e7357600080fd5b8063cef062fc11610108578063cef062fc14610d37578063d12a768814610d57578063d543dbeb14610d6d578063d58e460514610d8d578063d5cf7a9214610dad57600080fd5b8063a9d68b8614610c94578063b46ae5c614610cb4578063b6c5232414610cd5578063c26d7be014610cea578063c49b9a8014610d1757600080fd5b806395d89b41116101d2578063a457c2d711610196578063a457c2d714610bff578063a69df4b514610c1f578063a6c6e5f014610c34578063a8ec4ffc14610c54578063a9059cbb14610c7457600080fd5b806395d89b4114610b58578063961522ed14610b855780639b19251a14610b9a578063a10954fe14610bca578063a2b8a94714610bdf57600080fd5b806388f820201161021957806388f8202014610a945780638ab1d68114610acd5780638da5cb5b14610aed578063950eb5d514610b0b578063952ca92c14610b2b57600080fd5b806370a0823114610a0957806370d5ae0514610a29578063715018a614610a495780637d1db4a514610a5e57806385bec3d714610a7457600080fd5b80633bd5d1731161037c57806349bd5a5e116102f95780635342acb4116102bd5780635342acb41461094b578063537df3b6146109845780635d9728c8146109a457806362f837ef146109c45780636bc87c3a146109de5780636f43f17b146109f457600080fd5b806349bd5a5e146108965780634a377e1d146108ca5780634a74bb02146108ea5780634d431e5e1461090b57806352390c021461092b57600080fd5b8063437823ec11610340578063437823ec14610800578063439766ce1461082057806344337ea1146108415780634549b03914610861578063491e91ee1461088157600080fd5b80633bd5d173146107805780633c0a73ae146107a05780633ec20ab0146107b6578063407893f1146107d657806342c5ddc4146107eb57600080fd5b806318160ddd1161040a578063313ce567116103ce578063313ce567146106de57806331ce11ec146106f25780633685d4191461071357806339509351146107335780633b7e6d4a1461075357600080fd5b806318160ddd146106385780632103b6ad1461064d5780632130e3481461067d57806323b872dd1461069e5780632d838119146106be57600080fd5b80630cfc15f9116104515780630cfc15f9146105715780630d88331a146105ac57806312aa4adf146105c157806313114a9d146105d75780631694505e146105ec57600080fd5b80627635b61461049857806301a754a3146104af57806306fdde03146104e5578063095ea7b31461051e5780630a7a1c4d1461053e57600080fd5b3661049357005b600080fd5b3480156104a457600080fd5b506104ad610f58565b005b3480156104bb57600080fd5b50601c546104d090600160b01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156104f157600080fd5b5060408051808201909152600781526652657a6572766560c81b60208201525b6040516104dc9190613ec7565b34801561052a57600080fd5b506104d0610539366004613ca5565b6111ef565b34801561054a57600080fd5b50601c5461055f90600160a01b900460ff1681565b60405160ff90911681526020016104dc565b34801561057d57600080fd5b5061059e61058c366004613c1b565b60036020526000908152604090205481565b6040519081526020016104dc565b3480156105b857600080fd5b506104ad611206565b3480156105cd57600080fd5b5061059e600c5481565b3480156105e357600080fd5b50600b5461059e565b3480156105f857600080fd5b506106207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016104dc565b34801561064457600080fd5b5060095461059e565b34801561065957600080fd5b506104d0610668366004613c1b565b60166020526000908152604090205460ff1681565b34801561068957600080fd5b50601c546104d090600160a81b900460ff1681565b3480156106aa57600080fd5b506104d06106b9366004613c69565b611251565b3480156106ca57600080fd5b5061059e6106d9366004613dce565b6112a0565b3480156106ea57600080fd5b50600961055f565b3480156106fe57600080fd5b50601c546104d090600160c81b900460ff1681565b34801561071f57600080fd5b506104ad61072e366004613c1b565b611324565b34801561073f57600080fd5b506104d061074e366004613ca5565b6114d7565b34801561075f57600080fd5b5061059e61076e366004613c1b565b60046020526000908152604090205481565b34801561078c57600080fd5b506104ad61079b366004613dce565b61150e565b3480156107ac57600080fd5b5061059e60105481565b3480156107c257600080fd5b506104ad6107d1366004613dce565b6115fc565b3480156107e257600080fd5b506104ad61163a565b3480156107f757600080fd5b506104d0611685565b34801561080c57600080fd5b506104ad61081b366004613c1b565b611698565b34801561082c57600080fd5b50601c546104d090600160c01b900460ff1681565b34801561084d57600080fd5b506104ad61085c366004613c1b565b6116e6565b34801561086d57600080fd5b5061059e61087c366004613e00565b611749565b34801561088d57600080fd5b506104ad6117d8565b3480156108a257600080fd5b506106207f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f881565b3480156108d657600080fd5b50601854610620906001600160a01b031681565b3480156108f657600080fd5b50601d546104d090600160a81b900460ff1681565b34801561091757600080fd5b506104ad610926366004613c1b565b611ad6565b34801561093757600080fd5b506104ad610946366004613c1b565b611b95565b34801561095757600080fd5b506104d0610966366004613c1b565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561099057600080fd5b506104ad61099f366004613c1b565b611ce8565b3480156109b057600080fd5b506104ad6109bf366004613c1b565b611d33565b3480156109d057600080fd5b506011546104d09060ff1681565b3480156109ea57600080fd5b5061059e600e5481565b348015610a0057600080fd5b5061059e611dd7565b348015610a1557600080fd5b5061059e610a24366004613c1b565b611e79565b348015610a3557600080fd5b50601d54610620906001600160a01b031681565b348015610a5557600080fd5b506104ad611ed8565b348015610a6a57600080fd5b5061059e601e5481565b348015610a8057600080fd5b506104ad610a8f366004613ea4565b611f3a565b348015610aa057600080fd5b506104d0610aaf366004613c1b565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610ad957600080fd5b506104ad610ae8366004613c1b565b611fa3565b348015610af957600080fd5b506000546001600160a01b0316610620565b348015610b1757600080fd5b506104ad610b26366004613dce565b611fee565b348015610b3757600080fd5b5061059e610b46366004613c1b565b60136020526000908152604090205481565b348015610b6457600080fd5b50604080518082019091526004815263292d292b60e11b6020820152610511565b348015610b9157600080fd5b506104ad61205c565b348015610ba657600080fd5b506104d0610bb5366004613c1b565b60156020526000908152604090205460ff1681565b348015610bd657600080fd5b5061059e6120a7565b348015610beb57600080fd5b506104ad610bfa366004613dce565b6120b7565b348015610c0b57600080fd5b506104d0610c1a366004613ca5565b612125565b348015610c2b57600080fd5b506104ad61215c565b348015610c4057600080fd5b50601754610620906001600160a01b031681565b348015610c6057600080fd5b506104ad610c6f366004613c1b565b612265565b348015610c8057600080fd5b506104d0610c8f366004613ca5565b6122b0565b348015610ca057600080fd5b506104ad610caf366004613c1b565b6122bd565b348015610cc057600080fd5b50601c5461055f90600160b81b900460ff1681565b348015610ce157600080fd5b5060025461059e565b348015610cf657600080fd5b5061059e610d05366004613c1b565b60126020526000908152604090205481565b348015610d2357600080fd5b506104ad610d32366004613d94565b612313565b348015610d4357600080fd5b50601954610620906001600160a01b031681565b348015610d6357600080fd5b5061059e601f5481565b348015610d7957600080fd5b506104ad610d88366004613dce565b612395565b348015610d9957600080fd5b506104ad610da8366004613c1b565b6123e1565b348015610db957600080fd5b506104ad610dc8366004613e30565b612485565b348015610dd957600080fd5b506104ad610de8366004613dce565b6126f4565b348015610df957600080fd5b5061059e610e08366004613c36565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610e3f57600080fd5b50601c54610620906001600160a01b031681565b348015610e5f57600080fd5b506104ad610e6e366004613c1b565b612779565b348015610e7f57600080fd5b50601a54610620906001600160a01b031681565b348015610e9f57600080fd5b506104ad610eae366004613c1b565b6127dc565b348015610ebf57600080fd5b506104ad612827565b348015610ed457600080fd5b50601b54610620906001600160a01b031681565b348015610ef457600080fd5b506104ad610f03366004613c1b565b612970565b348015610f1457600080fd5b506104d0610f23366004613c1b565b60146020526000908152604090205460ff1681565b348015610f4457600080fd5b506104d0610f53366004613c1b565b612a48565b6000546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610f8290613f1c565b60405180910390fd5b601c8054600160b01b60ff600160c01b8084048216150260ff60c01b19841681178390049091161590910260ff60b01b1990911662ff00ff60b01b1990921691909117179055601a54610feb9030906001600160a01b0316600019612ad4565b611018307f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f8600019612ad4565b6018546110329030906001600160a01b0316600019612ad4565b601c5460405163095ea7b360e01b81526001600160a01b037f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f881166004830152600019602483015290911690819063095ea7b390604401602060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db9190613db1565b5060185460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b15801561112b57600080fd5b505af115801561113f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111639190613db1565b50601a5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b390604401602060405180830381600087803b1580156111b357600080fd5b505af11580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190613db1565b5050565b60006111fc338484612ad4565b5060015b92915050565b6000546001600160a01b031633146112305760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60c81b198116600160c81b9182900460ff1615909102179055565b6001600160a01b038316600090815260056020908152604080832033808552925282205461128b91869161128690869061401b565b612ad4565b611296848484612bf8565b5060019392505050565b6000600a548211156113075760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610f82565b60006113116131b7565b905061131d8184613fda565b9392505050565b6000546001600160a01b0316331461134e5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03811660009081526007602052604090205460ff166113b65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f82565b60005b6008548110156111eb57816001600160a01b0316600882815481106113e0576113e0614079565b6000918252602090912001546001600160a01b031614156114c5576008805461140b9060019061401b565b8154811061141b5761141b614079565b600091825260209091200154600880546001600160a01b03909216918390811061144757611447614079565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600880548061149f5761149f614063565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806114cf81614032565b9150506113b9565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916111fc918590611286908690613fc2565b3360008181526007602052604090205460ff16156115835760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610f82565b600061158e836131da565b505050506001600160a01b0385166000908152600360205260409020549293506115bc92849250905061401b565b6001600160a01b038316600090815260036020526040902055600a546115e390829061401b565b600a55600b546115f4908490613fc2565b600b55505050565b6000546001600160a01b031633146116265760405162461bcd60e51b8152600401610f8290613f1c565b61163481633b9aca00613ffc565b601f5550565b6000546001600160a01b031633146116645760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6000601f546116926120a7565b11905090565b6000546001600160a01b031633146116c25760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146117105760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601560209081526040808320805460ff19908116909155601490925290912080549091166001179055565b600060095483111561179d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610f82565b816117bd5760006117ad846131da565b5094965061120095505050505050565b60006117c8846131da565b5093965061120095505050505050565b6000546001600160a01b031633146118025760405162461bcd60e51b8152600401610f8290613f1c565b6011805460ff191690556040516370a0823160e01b81523060048201527f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f8906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190613de7565b601c549091506000906064906118c890600160b81b900460ff1684613ffc565b6118d29190613fda565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81166004830152602482018390529192509084169063095ea7b390604401602060405180830381600087803b15801561194057600080fd5b505af1158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613db1565b50601c54601a546001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81169263baa2abde9230929182169186916000918291166119ca4260b4613fc2565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015290921660a482015260c481019190915260e4016040805180830381600087803b158015611a3757600080fd5b505af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190613e52565b5050601a54604080516335cfcb7560e11b815290516001600160a01b03909216918291636b9f96ea91600480830192600092919082900301818387803b158015611ab857600080fd5b505af1158015611acc573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b038116611b655760405162461bcd60e51b815260206004820152602660248201527f526573657276655374616b696e675265636569766572206973207a65726f206160448201526564647265737360d01b6064820152608401610f82565b601b80546001600160a01b0319166001600160a01b038316179055611b8981611698565b611b92816122bd565b50565b6000546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03811660009081526007602052604090205460ff1615611c285760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610f82565b6001600160a01b03811660009081526003602052604090205415611c82576001600160a01b038116600090815260036020526040902054611c68906112a0565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b03163314611d125760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601460205260409020805460ff19169055565b6000546001600160a01b03163314611d5d5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b038116611db35760405162461bcd60e51b815260206004820152601f60248201527f7265736572766545786368616e6765206973207a65726f2061646472657373006044820152606401610f82565b601a80546001600160a01b0319166001600160a01b038316179055611b8981611698565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f8906001600160a01b038216906370a082319060240160206040518083038186803b158015611e3b57600080fd5b505afa158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e739190613de7565b91505090565b6001600160a01b03811660009081526007602052604081205460ff1615611eb657506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054611200906112a0565b6000546001600160a01b03163314611f025760405162461bcd60e51b8152600401610f8290613f1c565b600080546040516001600160a01b03909116906000805160206140b4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611f645760405162461bcd60e51b8152600401610f8290613f1c565b60098160ff16118015611f7a575060478160ff16105b611f8357600080fd5b601c805460ff909216600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314611fcd5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6000546001600160a01b031633146120185760405162461bcd60e51b8152600401610f8290613f1c565b600b81106120575760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610f82565b600e55565b6000546001600160a01b031633146120865760405162461bcd60e51b8152600401610f8290613f1c565b601c805460ff60a81b198116600160a81b9182900460ff1615909102179055565b60006120b230611e79565b905090565b6000546001600160a01b031633146120e15760405162461bcd60e51b8152600401610f8290613f1c565b603281106121205760405162461bcd60e51b815260206004820152600c60248201526b0a8c2f040e8dede40d0d2ced60a31b6044820152606401610f82565b600c55565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916111fc91859061128690869061401b565b6001546001600160a01b031633146121c25760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610f82565b60025442116122135760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610f82565b600154600080546040516001600160a01b0393841693909116916000805160206140b483398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b0316331461228f5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601660205260409020805460ff19169055565b60006111fc338484612bf8565b6000546001600160a01b031633146122e75760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166000908152601660205260409020805460ff19166001179055611b9281612779565b6000546001600160a01b0316331461233d5760405162461bcd60e51b8152600401610f8290613f1c565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061238a90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146123bf5760405162461bcd60e51b8152600401610f8290613f1c565b620f4240816009546123d19190613ffc565b6123db9190613fda565b601e5550565b6000546001600160a01b0316331461240b5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166124615760405162461bcd60e51b815260206004820152601e60248201527f526573657276655374616b696e67206973207a65726f206164647265737300006044820152606401610f82565b601780546001600160a01b0319166001600160a01b038316179055611b8981611698565b6000546001600160a01b031633146124af5760405162461bcd60e51b8152600401610f8290613f1c565b6124ba333084612bf8565b6124e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ad4565b601c5460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d811660048301526024820184905290911690819063095ea7b390604401602060405180830381600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258d9190613db1565b506040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038216906323b872dd90606401602060405180830381600087803b1580156125dc57600080fd5b505af11580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613db1565b50601c5460405162e8e33760e81b815230600482018190526001600160a01b039283166024830152604482018690526064820185905260006084830181905260a483015260c48201524260e48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063e8e337009061010401606060405180830381600087803b1580156126ac57600080fd5b505af11580156126c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e49190613e76565b5050506126ef610f58565b505050565b6000546001600160a01b0316331461271e5760405162461bcd60e51b8152600401610f8290613f1c565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561274d8142613fc2565b600255600080546040516001600160a01b03909116906000805160206140b4833981519152908390a350565b6000546001600160a01b031633146127a35760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152601460209081526040808320805460ff19908116909155601590925290912080549091166001179055565b6000546001600160a01b031633146128065760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146128515760405162461bcd60e51b8152600401610f8290613f1c565b6040516370a0823160e01b81523060048201527f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f8906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156128b557600080fd5b505afa1580156128c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ed9190613de7565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561293857600080fd5b505af115801561294c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ef9190613db1565b6000546001600160a01b0316331461299a5760405162461bcd60e51b8152600401610f8290613f1c565b6001600160a01b0381166129ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f82565b600080546040516001600160a01b03808516939216916000805160206140b483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b601c546040516370a0823160e01b81526001600160a01b0383811660048301526000921690829082906370a082319060240160206040518083038186803b158015612a9257600080fd5b505afa158015612aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aca9190613de7565b1515949350505050565b6001600160a01b038316612b365760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f82565b6001600160a01b038216612b975760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f82565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612c5c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f82565b6001600160a01b038216612cbe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f82565b60008111612d205760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610f82565b6001600160a01b03831660009081526014602052604090205460ff1615612d4657600080fd5b601c54600160c01b900460ff1615612d85576001600160a01b038316301480612d7c57506000546001600160a01b038481169116145b612d8557600080fd5b6001600160a01b03831660009081526016602052604090205460ff16612fd5577f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f86001600160a01b0316826001600160a01b0316148015612def5750601c54600160a81b900460ff165b15612e0757612dfd83612a48565b15612e0757600080fd5b7f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f86001600160a01b0316836001600160a01b03161415612e4c576011805460ff191690555b6000546001600160a01b03838116911614612ec457601e54811115612ec45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610f82565b6001600160a01b03831660009081526015602052604090205460ff16612fd5576001600160a01b038316600090815260136020526040902054431415612f28576001600160a01b0383166000908152601460205260409020805460ff191660011790555b6001600160a01b0383166000908152601260205260409020544290612f4e906014613fc2565b118015612f7457506001600160a01b03831660009081526014602052604090205460ff16155b15612fac5760405162461bcd60e51b815260206004820152600860248201526729b637bbb237bbb760c11b6044820152606401610f82565b6001600160a01b0383166000908152601360209081526040808320439055601290915290204290555b601c805460ff60a01b191690557f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f86001600160a01b03908116908416141561302b57601c805460ff60a01b1916600160a01b1790555b7f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f86001600160a01b0316826001600160a01b0316141561307957601c805460ff60a01b1916600160a11b1790555b600061308430611e79565b9050601f5481106130945750601f545b601f54811080159081906130b25750601d54600160a01b900460ff16155b80156130f057507f00000000000000000000000093ffcff38010295166b4f3aa975d2c931acbd9f86001600160a01b0316856001600160a01b031614155b80156131055750601d54600160a81b900460ff165b1561312557601c54600160b01b900460ff16156131255761312582613235565b6001600160a01b03851660009081526006602052604090205460019060ff168061316757506001600160a01b03851660009081526006602052604090205460ff165b15613170575060005b6001600160a01b03861660009081526014602052604090205460ff166131a15761319c868686846132ba565b6131af565b6131af8686600160006132ba565b505050505050565b60008060006131c4613437565b90925090506131d38183613fda565b9250505090565b60008060008060008060008060008060006131f48c6135ba565b935093509350935060008060006132158f8787876132106131b7565b613619565b919f509d509b509599509397509195509350505050919395979092949650565b601d805460ff60a01b1916600160a01b179055601c548190600160c81b900460ff16156132a0576005613269826004613ffc565b6132739190613fda565b90506000613281828461401b565b601b5490915061329e9030906001600160a01b03168360006132ba565b505b6132a98161368b565b5050601d805460ff60a01b19169055565b806132c7576132c76137bd565b6001600160a01b03841660009081526007602052604090205460ff16801561330857506001600160a01b03831660009081526007602052604090205460ff16155b1561331d576133188484846137eb565b61341b565b6001600160a01b03841660009081526007602052604090205460ff1615801561335e57506001600160a01b03831660009081526007602052604090205460ff165b1561336e5761331884848461392c565b6001600160a01b03841660009081526007602052604090205460ff161580156133b057506001600160a01b03831660009081526007602052604090205460ff16155b156133c0576133188484846139e6565b6001600160a01b03841660009081526007602052604090205460ff16801561340057506001600160a01b03831660009081526007602052604090205460ff165b1561341057613318848484613a39565b61341b8484846139e6565b8061343157613431600d54600c55600f54600e55565b50505050565b600a546009546000918291825b6008548110156135895782600360006008848154811061346657613466614079565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806134d157508160046000600884815481106134aa576134aa614079565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156134e757600a54600954945094505050509091565b60036000600883815481106134fe576134fe614079565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461352d908461401b565b9250600460006008838154811061354657613546614079565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613575908361401b565b91508061358181614032565b915050613444565b50600954600a5461359a9190613fda565b8210156135b157600a546009549350935050509091565b90939092509050565b60008060008060006135cb86613abc565b905060006135d887613af7565b905060006135e588613b27565b9050600081836135f5868c61401b565b6135ff919061401b565b613609919061401b565b9993985091965094509092505050565b6000808080613628858a613ffc565b90506000613636868a613ffc565b90506000613644878a613ffc565b90506000613652888a613ffc565b905060008183613662868861401b565b61366c919061401b565b613676919061401b565b949d949c50929a509298505050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136c0576136c0614079565b6001600160a01b039283166020918202929092010152601c548251911690829060019081106136f1576136f1614079565b6001600160a01b039283166020918202929092010152601a547f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8216916338ed17399185916000918691166137474260b4613fc2565b6040518663ffffffff1660e01b8152600401613767959493929190613f51565b600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126ef9190810190613ccf565b600c541580156137cd5750600e54155b156137d457565b600c8054600d55600e8054600f5560009182905555565b60008060008060008060006137ff886131da565b965096509650965096509650965087600460008c6001600160a01b03166001600160a01b031681526020019081526020016000205461383e919061401b565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461386e90889061401b565b6001600160a01b03808c1660009081526003602052604080822093909355908b168152205461389e908790613fc2565b6001600160a01b038a166000908152600360205260409020556138c082613b4f565b6138c981613b4f565b6138d38584613bd9565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161391891815260200190565b60405180910390a350505050505050505050565b6000806000806000806000613940886131da565b965096509650965096509650965086600360008c6001600160a01b03166001600160a01b031681526020019081526020016000205461397f919061401b565b6001600160a01b03808c16600090815260036020908152604080832094909455918c168152600490915220546139b6908590613fc2565b6001600160a01b038a1660009081526004602090815260408083209390935560039052205461389e908790613fc2565b60008060008060008060006139fa886131da565b965096509650965096509650965086600360008c6001600160a01b03166001600160a01b031681526020019081526020016000205461386e919061401b565b6000806000806000806000613a4d886131da565b965096509650965096509650965087600460008c6001600160a01b03166001600160a01b0316815260200190815260200160002054613a8c919061401b565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461397f90889061401b565b60115460009060ff16613add5750506011805460ff19166001179055600090565b6064600c5483613aed9190613ffc565b6112009190613fda565b601c54600090600160a01b900460ff1660011415613b1f576064600e5483613aed9190613ffc565b506000919050565b601c54600090600160a01b900460ff1660021415613b1f57606460105483613aed9190613ffc565b6000613b596131b7565b90506000613b678284613ffc565b30600090815260036020526040902054909150613b85908290613fc2565b3060009081526003602090815260408083209390935560079052205460ff16156126ef5730600090815260046020526040902054613bc4908490613fc2565b30600090815260046020526040902055505050565b81600a54613be7919061401b565b600a55600b54613bf8908290613fc2565b600b555050565b80356001600160a01b0381168114613c1657600080fd5b919050565b600060208284031215613c2d57600080fd5b61131d82613bff565b60008060408385031215613c4957600080fd5b613c5283613bff565b9150613c6060208401613bff565b90509250929050565b600080600060608486031215613c7e57600080fd5b613c8784613bff565b9250613c9560208501613bff565b9150604084013590509250925092565b60008060408385031215613cb857600080fd5b613cc183613bff565b946020939093013593505050565b60006020808385031215613ce257600080fd5b825167ffffffffffffffff80821115613cfa57600080fd5b818501915085601f830112613d0e57600080fd5b815181811115613d2057613d2061408f565b8060051b604051601f19603f83011681018181108582111715613d4557613d4561408f565b604052828152858101935084860182860187018a1015613d6457600080fd5b600095505b83861015613d87578051855260019590950194938601938601613d69565b5098975050505050505050565b600060208284031215613da657600080fd5b813561131d816140a5565b600060208284031215613dc357600080fd5b815161131d816140a5565b600060208284031215613de057600080fd5b5035919050565b600060208284031215613df957600080fd5b5051919050565b60008060408385031215613e1357600080fd5b823591506020830135613e25816140a5565b809150509250929050565b60008060408385031215613e4357600080fd5b50508035926020909101359150565b60008060408385031215613e6557600080fd5b505080516020909101519092909150565b600080600060608486031215613e8b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215613eb657600080fd5b813560ff8116811461131d57600080fd5b600060208083528351808285015260005b81811015613ef457858101830151858201604001528201613ed8565b81811115613f06576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613fa15784516001600160a01b031683529383019391830191600101613f7c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613fd557613fd561404d565b500190565b600082613ff757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156140165761401661404d565b500290565b60008282101561402d5761402d61404d565b500390565b60006000198214156140465761404661404d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b8015158114611b9257600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212207cfae5ad49b8c4850910e5a0e70482c88cbda97c0d12e90f73227b876ba5251564736f6c63430008060033

Deployed Bytecode Sourcemap

20515:26778:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25161:550;;;;;;;;;;;;;:::i;:::-;;22224:28;;;;;;;;;;-1:-1:-1;22224:28:0;;;;-1:-1:-1;;;22224:28:0;;;;;;;;;7347:14:1;;7340:22;7322:41;;7310:2;7295:18;22224:28:0;;;;;;;;25724:83;;;;;;;;;;-1:-1:-1;25794:5:0;;;;;;;;;;;;-1:-1:-1;;;25794:5:0;;;;25724:83;;;;;;;:::i;26636:161::-;;;;;;;;;;-1:-1:-1;26636:161:0;;;;;:::i;:::-;;:::i;22170:19::-;;;;;;;;;;-1:-1:-1;22170:19:0;;;;-1:-1:-1;;;22170:19:0;;;;;;;;;16862:4:1;16850:17;;;16832:36;;16820:2;16805:18;22170:19:0;16787:87:1;20607:43:0;;;;;;;;;;-1:-1:-1;20607:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15669:25:1;;;15657:2;15642:18;20607:43:0;15624:76:1;41225:88:0;;;;;;;;;;;;;:::i;21279:32::-;;;;;;;;;;;;;;;;27683:87;;;;;;;;;;-1:-1:-1;27752:10:0;;27683:87;;21874:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4797:32:1;;;4779:51;;4767:2;4752:18;21874:51:0;4734:102:1;26001:95:0;;;;;;;;;;-1:-1:-1;26081:7:0;;26001:95;;21777:52;;;;;;;;;;-1:-1:-1;21777:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22196:21;;;;;;;;;;-1:-1:-1;22196:21:0;;;;-1:-1:-1;;;22196:21:0;;;;;;26805:267;;;;;;;;;;-1:-1:-1;26805:267:0;;;;;:::i;:::-;;:::i;28596:248::-;;;;;;;;;;-1:-1:-1;28596:248:0;;;;;:::i;:::-;;:::i;25910:83::-;;;;;;;;;;-1:-1:-1;21265:1:0;25910:83;;22357:29;;;;;;;;;;-1:-1:-1;22357:29:0;;;;-1:-1:-1;;;22357:29:0;;;;;;30075:480;;;;;;;;;;-1:-1:-1;30075:480:0;;;;;:::i;:::-;;:::i;27080:216::-;;;;;;;;;;-1:-1:-1;27080:216:0;;;;;:::i;:::-;;:::i;20657:43::-;;;;;;;;;;-1:-1:-1;20657:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;27778:368;;;;;;;;;;-1:-1:-1;27778:368:0;;;;;:::i;:::-;;:::i;21484:37::-;;;;;;;;;;;;;;;;29462:144;;;;;;;;;;-1:-1:-1;29462:144:0;;;;;:::i;:::-;;:::i;37425:93::-;;;;;;;;;;;;;:::i;24889:130::-;;;;;;;;;;;;;:::i;31281:111::-;;;;;;;;;;-1:-1:-1;31281:111:0;;;;;:::i;:::-;;:::i;22312:32::-;;;;;;;;;;-1:-1:-1;22312:32:0;;;;-1:-1:-1;;;22312:32:0;;;;;;37526:139;;;;;;;;;;-1:-1:-1;37526:139:0;;;;;:::i;:::-;;:::i;28154:434::-;;;;;;;;;;-1:-1:-1;28154:434:0;;;;;:::i;:::-;;:::i;43635:704::-;;;;;;;;;;;;;:::i;21976:38::-;;;;;;;;;;;;;;;21932:37;;;;;;;;;;-1:-1:-1;21932:37:0;;;;-1:-1:-1;;;;;21932:37:0;;;22526:40;;;;;;;;;;-1:-1:-1;22526:40:0;;;;-1:-1:-1;;;22526:40:0;;;;;;28870:293;;;;;;;;;;-1:-1:-1;28870:293:0;;;;;:::i;:::-;;:::i;29620:447::-;;;;;;;;;;-1:-1:-1;29620:447:0;;;;;:::i;:::-;;:::i;36613:123::-;;;;;;;;;;-1:-1:-1;36613:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;36701:27:0;36677:4;36701:27;;;:18;:27;;;;;;;;;36613:123;37673:108;;;;;;;;;;-1:-1:-1;37673:108:0;;;;;:::i;:::-;;:::i;24600:271::-;;;;;;;;;;-1:-1:-1;24600:271:0;;;;;:::i;:::-;;:::i;21534:26::-;;;;;;;;;;-1:-1:-1;21534:26:0;;;;;;;;21378:33;;;;;;;;;;;;;;;;31526:173;;;;;;;;;;;;;:::i;26104:198::-;;;;;;;;;;-1:-1:-1;26104:198:0;;;;;:::i;:::-;;:::i;22399:71::-;;;;;;;;;;-1:-1:-1;22399:71:0;;;;-1:-1:-1;;;;;22399:71:0;;;10911:148;;;;;;;;;;;;;:::i;22579:47::-;;;;;;;;;;;;;;;;43475:148;;;;;;;;;;-1:-1:-1;43475:148:0;;;;;:::i;:::-;;:::i;27538:120::-;;;;;;;;;;-1:-1:-1;27538:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27630:20:0;27606:4;27630:20;;;:11;:20;;;;;;;;;27538:120;38074:108;;;;;;;;;;-1:-1:-1;38074:108:0;;;;;:::i;:::-;;:::i;10268:79::-;;;;;;;;;;-1:-1:-1;10306:7:0;10333:6;-1:-1:-1;;;;;10333:6:0;10268:79;;31889:173;;;;;;;;;;-1:-1:-1;31889:173:0;;;;;:::i;:::-;;:::i;21621:45::-;;;;;;;;;;-1:-1:-1;21621:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;25815:87;;;;;;;;;;-1:-1:-1;25887:7:0;;;;;;;;;;;;-1:-1:-1;;;25887:7:0;;;;25815:87;;37317:96;;;;;;;;;;;;;:::i;21725:45::-;;;;;;;;;;-1:-1:-1;21725:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25031:118;;;;;;;;;;;;;:::i;31711:166::-;;;;;;;;;;-1:-1:-1;31711:166:0;;;;;:::i;:::-;;:::i;27304:226::-;;;;;;;;;;-1:-1:-1;27304:226:0;;;;;:::i;:::-;;:::i;11933:344::-;;;;;;;;;;;;;:::i;21836:29::-;;;;;;;;;;-1:-1:-1;21836:29:0;;;;-1:-1:-1;;;;;21836:29:0;;;38424:125;;;;;;;;;;-1:-1:-1;38424:125:0;;;;;:::i;:::-;;:::i;26310:167::-;;;;;;;;;;-1:-1:-1;26310:167:0;;;;;:::i;:::-;;:::i;38261:155::-;;;;;;;;;;-1:-1:-1;38261:155:0;;;;;:::i;:::-;;:::i;22265:34::-;;;;;;;;;;-1:-1:-1;22265:34:0;;;;-1:-1:-1;;;22265:34:0;;;;;;11466:89;;;;;;;;;;-1:-1:-1;11538:9:0;;11466:89;;21569:45;;;;;;;;;;-1:-1:-1;21569:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32214:171;;;;;;;;;;-1:-1:-1;32214:171:0;;;;;:::i;:::-;;:::i;22021:36::-;;;;;;;;;;-1:-1:-1;22021:36:0;;;;-1:-1:-1;;;;;22021:36:0;;;22633:61;;;;;;;;;;;;;;;;32073:133;;;;;;;;;;-1:-1:-1;32073:133:0;;;;;:::i;:::-;;:::i;29175:269::-;;;;;;;;;;-1:-1:-1;29175:269:0;;;;;:::i;:::-;;:::i;42348:834::-;;;;;;;;;;-1:-1:-1;42348:834:0;;;;;:::i;:::-;;:::i;11631:226::-;;;;;;;;;;-1:-1:-1;11631:226:0;;;;;:::i;:::-;;:::i;26485:143::-;;;;;;;;;;-1:-1:-1;26485:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;26593:18:0;;;26566:7;26593:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26485:143;22145:18;;;;;;;;;;-1:-1:-1;22145:18:0;;;;-1:-1:-1;;;;;22145:18:0;;;37927:139;;;;;;;;;;-1:-1:-1;37927:139:0;;;;;:::i;:::-;;:::i;22064:30::-;;;;;;;;;;-1:-1:-1;22064:30:0;;;;-1:-1:-1;;;;;22064:30:0;;;31404:110;;;;;;;;;;-1:-1:-1;31404:110:0;;;;;:::i;:::-;;:::i;43194:269::-;;;;;;;;;;;;;:::i;22101:37::-;;;;;;;;;;-1:-1:-1;22101:37:0;;;;-1:-1:-1;;;;;22101:37:0;;;11214:244;;;;;;;;;;-1:-1:-1;11214:244:0;;;;;:::i;:::-;;:::i;21673:45::-;;;;;;;;;;-1:-1:-1;21673:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37099:210;;;;;;;;;;-1:-1:-1;37099:210:0;;;;;:::i;:::-;;:::i;25161:550::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;;;;;;;;;25243:13:::1;::::0;;-1:-1:-1;;;25243:13:0::1;-1:-1:-1::0;;;25243:13:0;;::::1;::::0;::::1;25242:14;25226:30;-1:-1:-1::0;;;;25226:30:0;::::1;::::0;::::1;25278:8:::0;;::::1;::::0;;::::1;25277:9;25266:20:::0;;::::1;-1:-1:-1::0;;;;25266:20:0;;;-1:-1:-1;;;;25266:20:0;;;;;;;::::1;::::0;;25320:15:::1;::::0;25296:53:::1;::::0;25313:4:::1;::::0;-1:-1:-1;;;;;25320:15:0::1;-1:-1:-1::0;;25296:8:0::1;:53::i;:::-;25359;25376:4;25383:13;-1:-1:-1::0;;25359:8:0::1;:53::i;:::-;25446:22;::::0;25422:60:::1;::::0;25439:4:::1;::::0;-1:-1:-1;;;;;25446:22:0::1;-1:-1:-1::0;;25422:8:0::1;:60::i;:::-;25524:3;::::0;25540:42:::1;::::0;-1:-1:-1;;;25540:42:0;;-1:-1:-1;;;;;25554:13:0::1;7095:32:1::0;;25540:42:0::1;::::0;::::1;7077:51:1::0;-1:-1:-1;;7144:18:1;;;7137:34;25524:3:0;;::::1;::::0;;;25540:12:::1;::::0;7050:18:1;;25540:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25607:22:0::1;::::0;25593:53:::1;::::0;-1:-1:-1;;;25593:53:0;;-1:-1:-1;;;;;25607:22:0;;::::1;25593:53;::::0;::::1;7077:51:1::0;-1:-1:-1;;7144:18:1;;;7137:34;25593:12:0;;::::1;::::0;::::1;::::0;7050:18:1;;25593:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25671:15:0::1;::::0;25657:46:::1;::::0;-1:-1:-1;;;25657:46:0;;-1:-1:-1;;;;;25671:15:0;;::::1;25657:46;::::0;::::1;7077:51:1::0;-1:-1:-1;;7144:18:1;;;7137:34;25657:12:0;;::::1;::::0;::::1;::::0;7050:18:1;;25657:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25206:505;25161:550::o:0;26636:161::-;26711:4;26728:39;2770:10;26751:7;26760:6;26728:8;:39::i;:::-;-1:-1:-1;26785:4:0;26636:161;;;;;:::o;41225:88::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;41295:10:::1;::::0;;-1:-1:-1;;;;41281:24:0;::::1;-1:-1:-1::0;;;41295:10:0;;;::::1;;;41294:11;41281:24:::0;;::::1;;::::0;;41225:88::o;26805:267::-;-1:-1:-1;;;;;26951:19:0;;26903:4;26951:19;;;:11;:19;;;;;;;;2770:10;26951:33;;;;;;;;26920:75;;26929:6;;26951:42;;26987:6;;26951:42;:::i;:::-;26920:8;:75::i;:::-;27006:36;27016:6;27024:9;27035:6;27006:9;:36::i;:::-;-1:-1:-1;27060:4:0;26805:267;;;;;:::o;28596:248::-;28662:7;28701;;28690;:18;;28682:73;;;;-1:-1:-1;;;28682:73:0;;9224:2:1;28682:73:0;;;9206:21:1;9263:2;9243:18;;;9236:30;9302:34;9282:18;;;9275:62;-1:-1:-1;;;9353:18:1;;;9346:40;9403:19;;28682:73:0;9196:232:1;28682:73:0;28766:19;28789:10;:8;:10::i;:::-;28766:33;-1:-1:-1;28817:19:0;28766:33;28817:7;:19;:::i;:::-;28810:26;28596:248;-1:-1:-1;;;28596:248:0:o;30075:480::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30157:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30149:60;;;::::0;-1:-1:-1;;;30149:60:0;;10445:2:1;30149:60:0::1;::::0;::::1;10427:21:1::0;10484:2;10464:18;;;10457:30;10523:29;10503:18;;;10496:57;10570:18;;30149:60:0::1;10417:177:1::0;30149:60:0::1;30225:9;30220:328;30244:9;:16:::0;30240:20;::::1;30220:328;;;30302:7;-1:-1:-1::0;;;;;30286:23:0::1;:9;30296:1;30286:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30286:12:0::1;:23;30282:255;;;30346:9;30356:16:::0;;:20:::1;::::0;30375:1:::1;::::0;30356:20:::1;:::i;:::-;30346:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30331:9:::1;:12:::0;;-1:-1:-1;;;;;30346:31:0;;::::1;::::0;30341:1;;30331:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30331:46:0::1;-1:-1:-1::0;;;;;30331:46:0;;::::1;;::::0;;30396:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30435:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30435:28:0::1;::::0;;30482:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30482:15:0;;;;;-1:-1:-1;;;;;;30482:15:0::1;::::0;;;;;25657:46:::1;25206:505;25161:550::o:0;30282:255::-:1;30262:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30220:328;;27080:216:::0;2770:10;27168:4;27217:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27217:34:0;;;;;;;;;;27168:4;;27185:81;;27208:7;;27217:47;;27254:10;;27217:47;:::i;27778:368::-;2770:10;27830:14;27879:19;;;:11;:19;;;;;;;;27878:20;27870:77;;;;-1:-1:-1;;;27870:77:0;;14908:2:1;27870:77:0;;;14890:21:1;14947:2;14927:18;;;14920:30;14986:34;14966:18;;;14959:62;-1:-1:-1;;;15037:18:1;;;15030:42;15089:19;;27870:77:0;14880:234:1;27870:77:0;27959:15;27984:19;27995:7;27984:10;:19::i;:::-;-1:-1:-1;;;;;;;;;28032:15:0;;;;;;:7;:15;;;;;;27958:45;;-1:-1:-1;28032:24:0;;27958:45;;-1:-1:-1;28032:15:0;-1:-1:-1;28032:24:0;:::i;:::-;-1:-1:-1;;;;;28014:15:0;;;;;;:7;:15;;;;;:42;28077:7;;:17;;28087:7;;28077:17;:::i;:::-;28067:7;:27;28118:10;;:20;;28131:7;;28118:20;:::i;:::-;28105:10;:33;-1:-1:-1;;;27778:368:0:o;29462:144::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;29575:13:::1;:4:::0;29582:6:::1;29575:13;:::i;:::-;29543:29;:45:::0;-1:-1:-1;29462:144:0:o;37425:93::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;37502:8:::1;::::0;;-1:-1:-1;;;;37490:20:0;::::1;-1:-1:-1::0;;;37502:8:0;;;::::1;;;37501:9;37490:20:::0;;::::1;;::::0;;37425:93::o;24889:130::-;24937:4;24981:29;;24962:16;:14;:16::i;:::-;:48;24954:56;;24889:130;:::o;31281:111::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31350:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;31350:34:0::1;31380:4;31350:34;::::0;;31281:111::o;37526:139::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37595:18:0::1;37616:5;37595:18:::0;;;:9:::1;:18;::::0;;;;;;;:26;;-1:-1:-1;;37595:26:0;;::::1;::::0;;;37632:9:::1;:18:::0;;;;;;:25;;;;::::1;37595:26:::0;37632:25:::1;::::0;;37526:139::o;28154:434::-;28240:7;28279;;28268;:18;;28260:62;;;;-1:-1:-1;;;28260:62:0;;10801:2:1;28260:62:0;;;10783:21:1;10840:2;10820:18;;;10813:30;10879:33;10859:18;;;10852:61;10930:18;;28260:62:0;10773:181:1;28260:62:0;28338:17;28333:248;;28373:15;28398:19;28409:7;28398:10;:19::i;:::-;-1:-1:-1;28372:45:0;;-1:-1:-1;28432:14:0;;-1:-1:-1;;;;;;28432:14:0;28333:248;28481:23;28513:19;28524:7;28513:10;:19::i;:::-;-1:-1:-1;28479:53:0;;-1:-1:-1;28547:22:0;;-1:-1:-1;;;;;;28547:22:0;43635:704;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;43684:7:::1;:15:::0;;-1:-1:-1;;43684:15:0::1;::::0;;43793:39:::1;::::0;-1:-1:-1;;;43793:39:0;;43826:4:::1;43793:39;::::0;::::1;4779:51:1::0;43745:13:0::1;::::0;-1:-1:-1;;;;;;;43793:24:0;::::1;::::0;::::1;::::0;4752:18:1;;43793:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43874:16;::::0;43772:60;;-1:-1:-1;43844:13:0::1;::::0;43895:3:::1;::::0;43861:29:::1;::::0;-1:-1:-1;;;43874:16:0;::::1;;;43772:60:::0;43861:29:::1;:::i;:::-;43860:38;;;;:::i;:::-;43921:57;::::0;-1:-1:-1;;;43921:57:0;;-1:-1:-1;;;;;43953:15:0::1;7095:32:1::0;;43921:57:0::1;::::0;::::1;7077:51:1::0;7144:18;;;7137:34;;;;;-1:-1:-1;43921:22:0;;::::1;::::0;::::1;::::0;7050:18:1;;43921:57:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;44064:3:0::1;::::0;44134:15:::1;::::0;-1:-1:-1;;;;;43990:15:0::1;:31:::0;::::1;::::0;::::1;::::0;44044:4:::1;::::0;44064:3;;::::1;::::0;44082:5;;44064:3:::1;::::0;;;44134:15:::1;44164:27;:15;44182:9;44164:27;:::i;:::-;43990:212;::::0;::::1;::::0;;;-1:-1:-1;;;;;;43990:212:0;;;-1:-1:-1;;;;;5832:15:1;;;43990:212:0::1;::::0;::::1;5814:34:1::0;5884:15;;;5864:18;;;5857:43;5916:18;;;5909:34;;;;5959:18;;;5952:34;;;;6002:19;;;5995:35;6067:15;;;6046:19;;;6039:44;6099:19;;;6092:35;;;;5748:19;;43990:212:0::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;44268:15:0::1;::::0;44297:24:::1;::::0;;-1:-1:-1;;;44297:24:0;;;;-1:-1:-1;;;;;44268:15:0;;::::1;::::0;;;44297:22:::1;::::0;:24:::1;::::0;;::::1;::::0;44215:32:::1;::::0;44297:24;;;;;;;44215:32;44268:15;44297:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43673:666;;;;43635:704::o:0;28870:293::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28962:22:0;::::1;28954:73;;;::::0;-1:-1:-1;;;28954:73:0;;8817:2:1;28954:73:0::1;::::0;::::1;8799:21:1::0;8856:2;8836:18;;;8829:30;8895:34;8875:18;;;8868:62;-1:-1:-1;;;8946:18:1;;;8939:36;8992:19;;28954:73:0::1;8789:228:1::0;28954:73:0::1;29038:22;:33:::0;;-1:-1:-1;;;;;;29038:33:0::1;-1:-1:-1::0;;;;;29038:33:0;::::1;;::::0;;29082:26:::1;29038:33:::0;29082:14:::1;:26::i;:::-;29119:36;29146:8;29119:26;:36::i;:::-;28870:293:::0;:::o;29620:447::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29817:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29816:21;29808:61;;;::::0;-1:-1:-1;;;29808:61:0;;10445:2:1;29808:61:0::1;::::0;::::1;10427:21:1::0;10484:2;10464:18;;;10457:30;10523:29;10503:18;;;10496:57;10570:18;;29808:61:0::1;10417:177:1::0;29808:61:0::1;-1:-1:-1::0;;;;;29883:16:0;::::1;29902:1;29883:16:::0;;;:7:::1;:16;::::0;;;;;:20;29880:108:::1;;-1:-1:-1::0;;;;;29959:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29939:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29920:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29880:108:::1;-1:-1:-1::0;;;;;29998:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29998:27:0::1;30021:4;29998:27:::0;;::::1;::::0;;;30036:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30036:23:0::1;::::0;;::::1;::::0;;29620:447::o;37673:108::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37747:18:0::1;37768:5;37747:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;37747:26:0::1;::::0;;37673:108::o;24600:271::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24684:22:0;::::1;24676:66;;;::::0;-1:-1:-1;;;24676:66:0;;12700:2:1;24676:66:0::1;::::0;::::1;12682:21:1::0;12739:2;12719:18;;;12712:30;12778:33;12758:18;;;12751:61;12829:18;;24676:66:0::1;12672:181:1::0;24676:66:0::1;24753:15;:26:::0;;-1:-1:-1;;;;;;24753:26:0::1;-1:-1:-1::0;;;;;24753:26:0;::::1;;::::0;;24790::::1;24753::::0;24790:14:::1;:26::i;31526:173::-:0;31653:28;;-1:-1:-1;;;31653:28:0;;31675:4;31653:28;;;4779:51:1;31570:7:0;;31611:13;;-1:-1:-1;;;;;31653:13:0;;;;;4752:18:1;;31653:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31646:35;;;31526:173;:::o;26104:198::-;-1:-1:-1;;;;;26194:20:0;;26170:7;26194:20;;;:11;:20;;;;;;;;26190:49;;;-1:-1:-1;;;;;;26223:16:0;;;;;:7;:16;;;;;;;26104:198::o;26190:49::-;-1:-1:-1;;;;;26277:16:0;;;;;;:7;:16;;;;;;26257:37;;:19;:37::i;10911:148::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;11018:1:::1;11002:6:::0;;10981:40:::1;::::0;-1:-1:-1;;;;;11002:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;10981:40:0;11018:1;;10981:40:::1;11049:1;11032:19:::0;;-1:-1:-1;;;;;;11032:19:0::1;::::0;;10911:148::o;43475:::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;43565:1:::1;43558:5;:8;;;:21;;;;;43577:2;43570:5;:9;;;43558:21;43548:32;;;::::0;::::1;;43591:16;:24:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;43591:24:0::1;-1:-1:-1::0;;;;43591:24:0;;::::1;::::0;;;::::1;::::0;;43475:148::o;38074:108::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38148:18:0::1;38169:5;38148:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;38148:26:0::1;::::0;;38074:108::o;31889:173::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;31994:2:::1;31979:12;:17;31969:46;;;::::0;-1:-1:-1;;;31969:46:0;;13871:2:1;31969:46:0::1;::::0;::::1;13853:21:1::0;13910:2;13890:18;;;13883:30;-1:-1:-1;;;13929:18:1;;;13922:42;13981:18;;31969:46:0::1;13843:162:1::0;31969:46:0::1;32026:13;:28:::0;31889:173::o;37317:96::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;37396:9:::1;::::0;;-1:-1:-1;;;;37383:22:0;::::1;-1:-1:-1::0;;;37396:9:0;;;::::1;;;37395:10;37383:22:::0;;::::1;;::::0;;37317:96::o;25031:118::-;25078:7;25115:26;25134:4;25115:9;:26::i;:::-;25108:33;;25031:118;:::o;31711:166::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;31805:2:::1;31796:6;:11;31786:40;;;::::0;-1:-1:-1;;;31786:40:0;;13871:2:1;31786:40:0::1;::::0;::::1;13853:21:1::0;13910:2;13890:18;;;13883:30;-1:-1:-1;;;13929:18:1;;;13922:42;13981:18;;31786:40:0::1;13843:162:1::0;31786:40:0::1;31847:13;:22:::0;31711:166::o;27304:226::-;2770:10;27397:4;27446:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27446:34:0;;;;;;;;;;27397:4;;27414:86;;27437:7;;27446:52;;27483:15;;27446:52;:::i;11933:344::-;11985:14;;-1:-1:-1;;;;;11985:14:0;12003:10;11985:28;11977:76;;;;-1:-1:-1;;;11977:76:0;;15321:2:1;11977:76:0;;;15303:21:1;15360:2;15340:18;;;15333:30;15399:34;15379:18;;;15372:62;-1:-1:-1;;;15450:18:1;;;15443:33;15493:19;;11977:76:0;15293:225:1;11977:76:0;12091:9;;12073:15;:27;12064:73;;;;-1:-1:-1;;;12064:73:0;;14212:2:1;12064:73:0;;;14194:21:1;14251:2;14231:18;;;14224:30;14290:33;14270:18;;;14263:61;14341:18;;12064:73:0;14184:181:1;12064:73:0;12182:14;;;12174:6;;12153:44;;-1:-1:-1;;;;;12182:14:0;;;;12174:6;;;;-1:-1:-1;;;;;;;;;;;12153:44:0;;12217:14;;;;12208:23;;-1:-1:-1;;;;;;12208:23:0;;;-1:-1:-1;;;;;12217:14:0;;12208:23;;;;12242:27;;;11933:344::o;38424:125::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38508:25:0::1;38536:5;38508:25:::0;;;:16:::1;:25;::::0;;;;:33;;-1:-1:-1;;38508:33:0::1;::::0;;38424:125::o;26310:167::-;26388:4;26405:42;2770:10;26429:9;26440:6;26405:9;:42::i;38261:155::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38342:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;:32;;-1:-1:-1;;38342:32:0::1;38370:4;38342:32;::::0;;38385:23:::1;38359:7:::0;38385:14:::1;:23::i;32214:171::-:0;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;32291:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32291:32:0::1;-1:-1:-1::0;;;;32291:32:0;;::::1;;::::0;;32339:38:::1;::::0;::::1;::::0;::::1;::::0;32315:8;7347:14:1;7340:22;7322:41;;7310:2;7295:18;;7277:92;32339:38:0::1;;;;;;;;32214:171:::0;:::o;32073:133::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;32193:5:::1;32179:12;32169:7;;:22;;;;:::i;:::-;32167:31;;;;:::i;:::-;32152:12;:46:::0;-1:-1:-1;32073:133:0:o;29175:269::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29259:22:0;::::1;29251:65;;;::::0;-1:-1:-1;;;29251:65:0;;11570:2:1;29251:65:0::1;::::0;::::1;11552:21:1::0;11609:2;11589:18;;;11582:30;11648:32;11628:18;;;11621:60;11698:18;;29251:65:0::1;11542:180:1::0;29251:65:0::1;29327:14;:25:::0;;-1:-1:-1;;;;;;29327:25:0::1;-1:-1:-1::0;;;;;29327:25:0;::::1;;::::0;;29363:26:::1;29327:25:::0;29363:14:::1;:26::i;42348:834::-:0;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;42510:53:::1;42522:10;42542:4;42550:11;42510:9;:53::i;:::-;42574:62;42591:4;42606:15;42624:11;42574:8;:62::i;:::-;42680:3;::::0;42696:51:::1;::::0;-1:-1:-1;;;42696:51:0;;-1:-1:-1;;;;;42719:15:0::1;7095:32:1::0;;42696:51:0::1;::::0;::::1;7077::1::0;7144:18;;;7137:34;;;42680:3:0;;::::1;::::0;;;42696:12:::1;::::0;7050:18:1;;42696:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;42758:59:0::1;::::0;-1:-1:-1;;;42758:59:0;;42778:10:::1;42758:59;::::0;::::1;5305:34:1::0;42798:4:0::1;5355:18:1::0;;;5348:43;5407:18;;;5400:34;;;-1:-1:-1;;;;;42758:17:0;::::1;::::0;::::1;::::0;5240:18:1;;42758:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;42939:3:0::1;::::0;42868:279:::1;::::0;-1:-1:-1;;;42868:279:0;;42919:4:::1;42868:279;::::0;::::1;6535:34:1::0;;;-1:-1:-1;;;;;42939:3:0;;::::1;6585:18:1::0;;;6578:43;6637:18;;;6630:34;;;6680:18;;;6673:34;;;42939:3:0::1;6723:19:1::0;;;6716:35;;;6767:19;;;6760:35;6811:19;;;6804:44;43121:15:0::1;6864:19:1::0;;;6857:35;42868:15:0::1;:28:::0;;::::1;::::0;::::1;::::0;6469:19:1;;42868:279:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43158:16;:14;:16::i;:::-;42422:760;42348:834:::0;;:::o;11631:226::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;11712:6:::1;::::0;;;11695:23;;-1:-1:-1;;;;;;11695:23:0;;::::1;-1:-1:-1::0;;;;;11712:6:0;::::1;11695:23;::::0;;;11729:19:::1;::::0;;11771:22:::1;11789:4:::0;11771:15:::1;:22;:::i;:::-;11759:9;:34:::0;11846:1:::1;11830:6:::0;;11809:40:::1;::::0;-1:-1:-1;;;;;11830:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;11809:40:0;11846:1;;11809:40:::1;11631:226:::0;:::o;37927:139::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37996:18:0::1;38017:5;37996:18:::0;;;:9:::1;:18;::::0;;;;;;;:26;;-1:-1:-1;;37996:26:0;;::::1;::::0;;;38033:9:::1;:18:::0;;;;;;:25;;;;::::1;37996:26:::0;38033:25:::1;::::0;;37927:139::o;31404:110::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31471:27:0::1;31501:5;31471:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;31471:35:0::1;::::0;;31404:110::o;43194:269::-;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;43345:39:::1;::::0;-1:-1:-1;;;43345:39:0;;43378:4:::1;43345:39;::::0;::::1;4779:51:1::0;43296:13:0::1;::::0;43263:21:::1;::::0;-1:-1:-1;;;;;43345:24:0;::::1;::::0;::::1;::::0;4752:18:1;;43345:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43396:49;::::0;-1:-1:-1;;;43396:49:0;;43421:10:::1;43396:49;::::0;::::1;7077:51:1::0;7144:18;;;7137:34;;;43324:60:0;;-1:-1:-1;;;;;;43396:23:0;::::1;::::0;::::1;::::0;7050:18:1;;43396:49:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11214:244::-:0;10480:6;;-1:-1:-1;;;;;10480:6:0;2770:10;10480:22;10472:67;;;;-1:-1:-1;;;10472:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11303:22:0;::::1;11295:73;;;::::0;-1:-1:-1;;;11295:73:0;;9635:2:1;11295:73:0::1;::::0;::::1;9617:21:1::0;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:36;9810:19;;11295:73:0::1;9607:228:1::0;11295:73:0::1;11405:6;::::0;;11384:38:::1;::::0;-1:-1:-1;;;;;11384:38:0;;::::1;::::0;11405:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;11384:38:0;::::1;11433:6;:17:::0;;-1:-1:-1;;;;;;11433:17:0::1;-1:-1:-1::0;;;;;11433:17:0;;;::::1;::::0;;;::::1;::::0;;11214:244::o;37099:210::-;37203:3;;37240:25;;-1:-1:-1;;;37240:25:0;;-1:-1:-1;;;;;4797:32:1;;;37240:25:0;;;4779:51:1;37166:4:0;;37203:3;;37166:4;;37203:3;;37240:14;;4752:18:1;;37240:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37285:14;;;37099:210;-1:-1:-1;;;;37099:210:0:o;36744:337::-;-1:-1:-1;;;;;36837:19:0;;36829:68;;;;-1:-1:-1;;;36829:68:0;;13466:2:1;36829:68:0;;;13448:21:1;13505:2;13485:18;;;13478:30;13544:34;13524:18;;;13517:62;-1:-1:-1;;;13595:18:1;;;13588:34;13639:19;;36829:68:0;13438:226:1;36829:68:0;-1:-1:-1;;;;;36916:21:0;;36908:68;;;;-1:-1:-1;;;36908:68:0;;10042:2:1;36908:68:0;;;10024:21:1;10081:2;10061:18;;;10054:30;10120:34;10100:18;;;10093:62;-1:-1:-1;;;10171:18:1;;;10164:32;10213:19;;36908:68:0;10014:224:1;36908:68:0;-1:-1:-1;;;;;36989:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37041:32;;15669:25:1;;;37041:32:0;;15642:18:1;37041:32:0;;;;;;;36744:337;;;:::o;38561:2656::-;-1:-1:-1;;;;;38683:18:0;;38675:68;;;;-1:-1:-1;;;38675:68:0;;13060:2:1;38675:68:0;;;13042:21:1;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:1;;;13182:35;13234:19;;38675:68:0;13032:227:1;38675:68:0;-1:-1:-1;;;;;38762:16:0;;38754:64;;;;-1:-1:-1;;;38754:64:0;;8413:2:1;38754:64:0;;;8395:21:1;8452:2;8432:18;;;8425:30;8491:34;8471:18;;;8464:62;-1:-1:-1;;;8542:18:1;;;8535:33;8585:19;;38754:64:0;8385:225:1;38754:64:0;38846:1;38837:6;:10;38829:64;;;;-1:-1:-1;;;38829:64:0;;12290:2:1;38829:64:0;;;12272:21:1;12329:2;12309:18;;;12302:30;12368:34;12348:18;;;12341:62;-1:-1:-1;;;12419:18:1;;;12412:39;12468:19;;38829:64:0;12262:231:1;38829:64:0;-1:-1:-1;;;;;38914:15:0;;;;;;:9;:15;;;;;;;;38913:16;38904:28;;;;;;38947:13;;-1:-1:-1;;;38947:13:0;;;;38943:69;;;-1:-1:-1;;;;;38971:21:0;;38987:4;38971:21;;:40;;-1:-1:-1;10306:7:0;10333:6;-1:-1:-1;;;;;38996:15:0;;;10333:6;;38996:15;38971:40;38962:50;;;;;;-1:-1:-1;;;;;39030:22:0;;;;;;:16;:22;;;;;;;;39025:652;;39078:13;-1:-1:-1;;;;;39072:19:0;:2;-1:-1:-1;;;;;39072:19:0;;:32;;;;-1:-1:-1;39095:9:0;;-1:-1:-1;;;39095:9:0;;;;39072:32;39069:73;;;39117:23;39135:4;39117:17;:23::i;:::-;39116:24;39106:36;;;;;;39168:13;-1:-1:-1;;;;;39160:21:0;:4;-1:-1:-1;;;;;39160:21:0;;39157:41;;;39183:7;:15;;-1:-1:-1;;39183:15:0;;;39157:41;10306:7;10333:6;-1:-1:-1;;;;;39216:13:0;;;10333:6;;39216:13;39213:110;;39266:12;;39256:6;:22;;39248:75;;;;-1:-1:-1;;;39248:75:0;;11161:2:1;39248:75:0;;;11143:21:1;11200:2;11180:18;;;11173:30;11239:34;11219:18;;;11212:62;-1:-1:-1;;;11290:18:1;;;11283:38;11338:19;;39248:75:0;11133:230:1;39248:75:0;-1:-1:-1;;;;;39345:15:0;;;;;;:9;:15;;;;;;;;39340:326;;-1:-1:-1;;;;;39385:15:0;;;;;;:9;:15;;;;;;39404:12;39385:31;39381:59;;;-1:-1:-1;;;;;39418:15:0;;;;;;:9;:15;;;;;:22;;-1:-1:-1;;39418:22:0;39436:4;39418:22;;;39381:59;-1:-1:-1;;;;;39463:15:0;;;;;;:9;:15;;;;;;39494;;39463:28;;39481:10;39463:28;:::i;:::-;:46;:66;;;;-1:-1:-1;;;;;;39514:15:0;;;;;;:9;:15;;;;;;;;39513:16;39463:66;39459:90;;;39531:18;;-1:-1:-1;;;39531:18:0;;14572:2:1;39531:18:0;;;14554:21:1;14611:1;14591:18;;;14584:29;-1:-1:-1;;;14629:18:1;;;14622:38;14677:18;;39531::0;14544:157:1;39459:90:0;-1:-1:-1;;;;;39568:15:0;;;;;;:9;:15;;;;;;;;39586:12;39568:30;;39617:9;:15;;;;;39635;39617:33;;39340:326;39697:6;:10;;-1:-1:-1;;;;39697:10:0;;;39731:13;-1:-1:-1;;;;;39723:21:0;;;;;;;39720:36;;;39746:6;:10;;-1:-1:-1;;;;39746:10:0;-1:-1:-1;;;39746:10:0;;;39720:36;39776:13;-1:-1:-1;;;;;39770:19:0;:2;-1:-1:-1;;;;;39770:19:0;;39767:34;;;39791:6;:10;;-1:-1:-1;;;;39791:10:0;-1:-1:-1;;;39791:10:0;;;39767:34;40104:28;40135:24;40153:4;40135:9;:24::i;:::-;40104:55;;40217:29;;40193:20;:53;40190:146;;-1:-1:-1;40295:29:0;;40190:146;40407:29;;40383:53;;;;;;;40465;;-1:-1:-1;40502:16:0;;-1:-1:-1;;;40502:16:0;;;;40501:17;40465:53;:91;;;;;40543:13;-1:-1:-1;;;;;40535:21:0;:4;-1:-1:-1;;;;;40535:21:0;;;40465:91;:129;;;;-1:-1:-1;40573:21:0;;-1:-1:-1;;;40573:21:0;;;;40465:129;40447:239;;;40637:8;;-1:-1:-1;;;40637:8:0;;;;40634:40;;;40646:28;40653:20;40646:6;:28::i;:::-;-1:-1:-1;;;;;40894:24:0;;40767:12;40894:24;;;:18;:24;;;;;;40782:4;;40894:24;;;:50;;-1:-1:-1;;;;;;40922:22:0;;;;;;:18;:22;;;;;;;;40894:50;40891:96;;;-1:-1:-1;40970:5:0;40891:96;-1:-1:-1;;;;;41078:15:0;;;;;;:9;:15;;;;;;;;41073:136;;41108:38;41123:4;41128:2;41131:6;41138:7;41108:14;:38::i;:::-;41073:136;;;41175:34;41190:4;41196:2;41200:1;41203:5;41175:14;:34::i;:::-;38664:2553;;;38561:2656;;;:::o;34102:158::-;34143:7;34164:15;34181;34200:19;:17;:19::i;:::-;34163:56;;-1:-1:-1;34163:56:0;-1:-1:-1;34237:15:0;34163:56;;34237:15;:::i;:::-;34230:22;;;;34102:158;:::o;32641:483::-;32696:7;32705;32714;32723;32732;32741;32750;32771:23;32796:12;32810:18;32830:22;32857:20;32869:7;32857:11;:20::i;:::-;32770:107;;;;;;;;32889:15;32906:23;32931:12;32947:67;32959:7;32968:4;32974:10;32986:14;33003:10;:8;:10::i;:::-;32947:11;:67::i;:::-;32888:126;;-1:-1:-1;32888:126:0;-1:-1:-1;32888:126:0;-1:-1:-1;33065:15:0;;-1:-1:-1;33082:4:0;;-1:-1:-1;33088:10:0;;-1:-1:-1;33100:14:0;-1:-1:-1;;;;32641:483:0;;;;;;;;;:::o;41325:513::-;23001:16;:23;;-1:-1:-1;;;;23001:23:0;-1:-1:-1;;;23001:23:0;;;41470:10:::1;::::0;41428:20;;-1:-1:-1;;;41470:10:0;::::1;23001:23:::0;41470:10:::1;41465:253;;;41539:1;41516:18;:14:::0;41533:1:::1;41516:18;:::i;:::-;41514:26;;;;:::i;:::-;41497:43:::0;-1:-1:-1;41555:21:0::1;41579:37;41497:43:::0;41579:20;:37:::1;:::i;:::-;41660:22;::::0;41555:61;;-1:-1:-1;41630:76:0::1;::::0;41653:4:::1;::::0;-1:-1:-1;;;;;41660:22:0::1;41555:61:::0;41660:22:::1;41630:14;:76::i;:::-;41482:236;41465:253;41728:32;41745:14;41728:16;:32::i;:::-;-1:-1:-1::0;;23047:16:0;:24;;-1:-1:-1;;;;23047:24:0;;;41325:513::o;44432:834::-;44543:7;44539:40;;44565:14;:12;:14::i;:::-;-1:-1:-1;;;;;44604:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;44628:22:0;;;;;;:11;:22;;;;;;;;44627:23;44604:46;44600:597;;;44667:48;44689:6;44697:9;44708:6;44667:21;:48::i;:::-;44600:597;;;-1:-1:-1;;;;;44738:19:0;;;;;;:11;:19;;;;;;;;44737:20;:46;;;;-1:-1:-1;;;;;;44761:22:0;;;;;;:11;:22;;;;;;;;44737:46;44733:464;;;44800:46;44820:6;44828:9;44839:6;44800:19;:46::i;44733:464::-;-1:-1:-1;;;;;44869:19:0;;;;;;:11;:19;;;;;;;;44868:20;:47;;;;-1:-1:-1;;;;;;44893:22:0;;;;;;:11;:22;;;;;;;;44892:23;44868:47;44864:333;;;44932:44;44950:6;44958:9;44969:6;44932:17;:44::i;44864:333::-;-1:-1:-1;;;;;44998:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;45021:22:0;;;;;;:11;:22;;;;;;;;44998:45;44994:203;;;45060:48;45082:6;45090:9;45101:6;45060:21;:48::i;44994:203::-;45141:44;45159:6;45167:9;45178:6;45141:17;:44::i;:::-;45221:7;45217:41;;45243:15;36530;;36514:13;:31;36572:21;;36556:13;:37;36470:131;45243:15;44432:834;;;;:::o;34268:554::-;34365:7;;34401;;34318;;;;;34425:284;34449:9;:16;34445:20;;34425:284;;;34515:7;34491;:21;34499:9;34509:1;34499:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34499:12:0;34491:21;;;;;;;;;;;;;:31;;:66;;;34550:7;34526;:21;34534:9;34544:1;34534:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34534:12:0;34526:21;;;;;;;;;;;;;:31;34491:66;34487:97;;;34567:7;;34576;;34559:25;;;;;;;34268:554;;:::o;34487:97::-;34619:7;:21;34627:9;34637:1;34627:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34627:12:0;34619:21;;;;;;;;;;;;;34609:31;;:7;:31;:::i;:::-;34599:41;;34676:7;:21;34684:9;34694:1;34684:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34684:12:0;34676:21;;;;;;;;;;;;;34666:31;;:7;:31;:::i;:::-;34656:41;-1:-1:-1;34467:3:0;;;;:::i;:::-;;;;34425:284;;;;34743:7;;34733;;:17;;;;:::i;:::-;34723:7;:27;34719:59;;;34761:7;;34770;;34753:25;;;;;;34268:554;;:::o;34719:59::-;34797:7;;34806;;-1:-1:-1;34268:554:0;-1:-1:-1;34268:554:0:o;33132:432::-;33188:7;33197;33206;33215;33235:12;33250:24;33266:7;33250:15;:24::i;:::-;33235:39;;33285:18;33306:30;33328:7;33306:21;:30::i;:::-;33285:51;;33347:22;33372:34;33398:7;33372:25;:34::i;:::-;33347:59;-1:-1:-1;33417:23:0;33347:59;33459:10;33443:13;33452:4;33443:7;:13;:::i;:::-;:26;;;;:::i;:::-;:43;;;;:::i;:::-;33417:69;33523:4;;-1:-1:-1;33529:10:0;;-1:-1:-1;33529:10:0;-1:-1:-1;33132:432:0;;-1:-1:-1;;;33132:432:0:o;33572:522::-;33712:7;;;;33768:21;33778:11;33768:7;:21;:::i;:::-;33750:39;-1:-1:-1;33801:12:0;33816:18;33823:11;33816:4;:18;:::i;:::-;33801:33;-1:-1:-1;33846:18:0;33867:24;33880:11;33867:10;:24;:::i;:::-;33846:45;-1:-1:-1;33903:22:0;33928:28;33945:11;33928:14;:28;:::i;:::-;33903:53;-1:-1:-1;33967:23:0;33903:53;34009:10;33993:13;34002:4;33993:7;:13;:::i;:::-;:26;;;;:::i;:::-;:43;;;;:::i;:::-;34055:7;;;;-1:-1:-1;34081:4:0;;-1:-1:-1;33572:522:0;;-1:-1:-1;;;;;;;;;33572:522:0:o;41851:485::-;42014:16;;;42028:1;42014:16;;;;;;;;41990:21;;42014:16;;;;;;;;;;-1:-1:-1;42014:16:0;41990:40;;42068:4;42050;42055:1;42050:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42050:23:0;;;:7;;;;;;;;;:23;42094:3;;42084:7;;42094:3;;;42084:4;;42094:3;;42084:7;;;;;;:::i;:::-;-1:-1:-1;;;;;42084:13:0;;;:7;;;;;;;;;:13;42260:15;;42116;:40;;;;;42171:11;;42197:1;;42241:4;;42260:15;42290:27;:15;42308:9;42290:27;:::i;:::-;42116:212;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42116:212:0;;;;;;;;;;;;:::i;36190:268::-;36236:13;;:18;:40;;;;-1:-1:-1;36258:13:0;;:18;36236:40;36233:52;;;36190:268::o;36233:52::-;36323:13;;;36305:15;:31;36371:13;;;36347:21;:37;-1:-1:-1;36405:17:0;;;;36433;36190:268::o;46510:631::-;46613:15;46630:23;46655:12;46669:23;46694:12;46708:18;46729:22;46756:19;46767:7;46756:10;:19::i;:::-;46612:163;;;;;;;;;;;;;;46822:7;46804;:15;46812:6;-1:-1:-1;;;;;46804:15:0;-1:-1:-1;;;;;46804:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;46786:15:0;;;;;;:7;:15;;;;;;;;:43;;;;46858:7;:15;;;;:25;;46876:7;;46858:25;:::i;:::-;-1:-1:-1;;;;;46840:15:0;;;;;;;:7;:15;;;;;;:43;;;;46915:18;;;;;;;:36;;46936:15;;46915:36;:::i;:::-;-1:-1:-1;;;;;46894:18:0;;;;;;:7;:18;;;;;:57;46965:26;46980:10;46965:14;:26::i;:::-;47003:36;47024:14;47003:20;:36::i;:::-;47050:23;47062:4;47068;47050:11;:23::i;:::-;47106:9;-1:-1:-1;;;;;47089:44:0;47098:6;-1:-1:-1;;;;;47089:44:0;;47117:15;47089:44;;;;15669:25:1;;15657:2;15642:18;;15624:76;47089:44:0;;;;;;;;46601:540;;;;;;;46510:631;;;:::o;45852:650::-;45953:15;45970:23;45995:12;46009:23;46034:12;46048:18;46069:22;46095:19;46106:7;46095:10;:19::i;:::-;45952:162;;;;;;;;;;;;;;46161:7;46143;:15;46151:6;-1:-1:-1;;;;;46143:15:0;-1:-1:-1;;;;;46143:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;46125:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;46200:18;;;;;:7;:18;;;;;:36;;46221:15;;46200:36;:::i;:::-;-1:-1:-1;;;;;46179:18:0;;;;;;:7;:18;;;;;;;;:57;;;;46268:7;:18;;;;:36;;46289:15;;46268:36;:::i;45274:570::-;45373:15;45390:23;45415:12;45429:23;45454:12;45468:18;45488:22;45515:19;45526:7;45515:10;:19::i;:::-;45372:162;;;;;;;;;;;;;;45581:7;45563;:15;45571:6;-1:-1:-1;;;;;45563:15:0;-1:-1:-1;;;;;45563:15:0;;;;;;;;;;;;;:25;;;;:::i;30567:702::-;30670:15;30687:23;30712:12;30726:23;30751:12;30765:18;30785:22;30812:19;30823:7;30812:10;:19::i;:::-;30669:162;;;;;;;;;;;;;;30878:7;30860;:15;30868:6;-1:-1:-1;;;;;30860:15:0;-1:-1:-1;;;;;30860:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;30842:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30914:7;:15;;;;:25;;30932:7;;30914:25;:::i;35568:183::-;35654:7;;35628;;35654;;35648:45;;-1:-1:-1;;35666:7:0;:14;;-1:-1:-1;;35666:14:0;35676:4;35666:14;;;:7;;35568:183::o;35648:45::-;35738:5;35721:13;;35711:7;:23;;;;:::i;:::-;35709:34;;;;:::i;35759:199::-;35861:6;;35829:7;;-1:-1:-1;;;35861:6:0;;;;35872:1;35861:12;35857:72;;;35924:5;35907:13;;35897:7;:23;;;;:::i;35857:72::-;-1:-1:-1;35949:1:0;;35759:199;-1:-1:-1;35759:199:0:o;35970:208::-;36068:6;;36044:7;;-1:-1:-1;;;36068:6:0;;;;36078:1;36068:11;36064:77;;;36136:5;36114:18;;36104:7;:28;;;;:::i;34834:346::-;34897:19;34920:10;:8;:10::i;:::-;34897:33;-1:-1:-1;34941:18:0;34962:24;34897:33;34962:10;:24;:::i;:::-;35038:4;35022:22;;;;:7;:22;;;;;;34941:45;;-1:-1:-1;35022:35:0;;34941:45;;35022:35;:::i;:::-;35013:4;34997:22;;;;:7;:22;;;;;;;;:60;;;;35071:11;:26;;;;;;35068:104;;;35153:4;35137:22;;;;:7;:22;;;;;;:35;;35162:10;;35137:35;:::i;:::-;35128:4;35112:22;;;;:7;:22;;;;;:60;34886:294;;34834:346;:::o;32491:142::-;32578:4;32569:7;;:13;;;;:::i;:::-;32559:7;:23;32607:10;;:17;;32620:4;;32607:17;:::i;:::-;32594:10;:30;-1:-1:-1;;32491:142:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:1:o;1240:1116::-;1335:6;1366:2;1409;1397:9;1388:7;1384:23;1380:32;1377:2;;;1425:1;1422;1415:12;1377:2;1458:9;1452:16;1487:18;1528:2;1520:6;1517:14;1514:2;;;1544:1;1541;1534:12;1514:2;1582:6;1571:9;1567:22;1557:32;;1627:7;1620:4;1616:2;1612:13;1608:27;1598:2;;1649:1;1646;1639:12;1598:2;1678;1672:9;1700:2;1696;1693:10;1690:2;;;1706:18;;:::i;:::-;1752:2;1749:1;1745:10;1784:2;1778:9;1847:2;1843:7;1838:2;1834;1830:11;1826:25;1818:6;1814:38;1902:6;1890:10;1887:22;1882:2;1870:10;1867:18;1864:46;1861:2;;;1913:18;;:::i;:::-;1949:2;1942:22;1999:18;;;2033:15;;;;-1:-1:-1;2068:11:1;;;2098;;;2094:20;;2091:33;-1:-1:-1;2088:2:1;;;2137:1;2134;2127:12;2088:2;2159:1;2150:10;;2169:156;2183:2;2180:1;2177:9;2169:156;;;2240:10;;2228:23;;2201:1;2194:9;;;;;2271:12;;;;2303;;2169:156;;;-1:-1:-1;2344:6:1;1346:1010;-1:-1:-1;;;;;;;;1346:1010:1:o;2361:241::-;2417:6;2470:2;2458:9;2449:7;2445:23;2441:32;2438:2;;;2486:1;2483;2476:12;2438:2;2525:9;2512:23;2544:28;2566:5;2544:28;:::i;2607:245::-;2674:6;2727:2;2715:9;2706:7;2702:23;2698:32;2695:2;;;2743:1;2740;2733:12;2695:2;2775:9;2769:16;2794:28;2816:5;2794:28;:::i;2857:180::-;2916:6;2969:2;2957:9;2948:7;2944:23;2940:32;2937:2;;;2985:1;2982;2975:12;2937:2;-1:-1:-1;3008:23:1;;2927:110;-1:-1:-1;2927:110:1:o;3042:184::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:2;;;3181:1;3178;3171:12;3133:2;-1:-1:-1;3204:16:1;;3123:103;-1:-1:-1;3123:103:1:o;3231:309::-;3296:6;3304;3357:2;3345:9;3336:7;3332:23;3328:32;3325:2;;;3373:1;3370;3363:12;3325:2;3409:9;3396:23;3386:33;;3469:2;3458:9;3454:18;3441:32;3482:28;3504:5;3482:28;:::i;:::-;3529:5;3519:15;;;3315:225;;;;;:::o;3545:248::-;3613:6;3621;3674:2;3662:9;3653:7;3649:23;3645:32;3642:2;;;3690:1;3687;3680:12;3642:2;-1:-1:-1;;3713:23:1;;;3783:2;3768:18;;;3755:32;;-1:-1:-1;3632:161:1:o;3798:245::-;3877:6;3885;3938:2;3926:9;3917:7;3913:23;3909:32;3906:2;;;3954:1;3951;3944:12;3906:2;-1:-1:-1;;3977:16:1;;4033:2;4018:18;;;4012:25;3977:16;;4012:25;;-1:-1:-1;3896:147:1:o;4048:306::-;4136:6;4144;4152;4205:2;4193:9;4184:7;4180:23;4176:32;4173:2;;;4221:1;4218;4211:12;4173:2;4250:9;4244:16;4234:26;;4300:2;4289:9;4285:18;4279:25;4269:35;;4344:2;4333:9;4329:18;4323:25;4313:35;;4163:191;;;;;:::o;4359:269::-;4416:6;4469:2;4457:9;4448:7;4444:23;4440:32;4437:2;;;4485:1;4482;4475:12;4437:2;4524:9;4511:23;4574:4;4567:5;4563:16;4556:5;4553:27;4543:2;;4594:1;4591;4584:12;7609:597;7721:4;7750:2;7779;7768:9;7761:21;7811:6;7805:13;7854:6;7849:2;7838:9;7834:18;7827:34;7879:1;7889:140;7903:6;7900:1;7897:13;7889:140;;;7998:14;;;7994:23;;7988:30;7964:17;;;7983:2;7960:26;7953:66;7918:10;;7889:140;;;8047:6;8044:1;8041:13;8038:2;;;8117:1;8112:2;8103:6;8092:9;8088:22;8084:31;8077:42;8038:2;-1:-1:-1;8190:2:1;8169:15;-1:-1:-1;;8165:29:1;8150:45;;;;8197:2;8146:54;;7730:476;-1:-1:-1;;;7730:476:1:o;11727:356::-;11929:2;11911:21;;;11948:18;;;11941:30;12007:34;12002:2;11987:18;;11980:62;12074:2;12059:18;;11901:182::o;15705:980::-;15967:4;16015:3;16004:9;16000:19;16046:6;16035:9;16028:25;16072:2;16110:6;16105:2;16094:9;16090:18;16083:34;16153:3;16148:2;16137:9;16133:18;16126:31;16177:6;16212;16206:13;16243:6;16235;16228:22;16281:3;16270:9;16266:19;16259:26;;16320:2;16312:6;16308:15;16294:29;;16341:1;16351:195;16365:6;16362:1;16359:13;16351:195;;;16430:13;;-1:-1:-1;;;;;16426:39:1;16414:52;;16521:15;;;;16486:12;;;;16462:1;16380:9;16351:195;;;-1:-1:-1;;;;;;;16602:32:1;;;;16597:2;16582:18;;16575:60;-1:-1:-1;;;16666:3:1;16651:19;16644:35;16563:3;15976:709;-1:-1:-1;;;15976:709:1:o;16879:128::-;16919:3;16950:1;16946:6;16943:1;16940:13;16937:2;;;16956:18;;:::i;:::-;-1:-1:-1;16992:9:1;;16927:80::o;17012:217::-;17052:1;17078;17068:2;;17122:10;17117:3;17113:20;17110:1;17103:31;17157:4;17154:1;17147:15;17185:4;17182:1;17175:15;17068:2;-1:-1:-1;17214:9:1;;17058:171::o;17234:168::-;17274:7;17340:1;17336;17332:6;17328:14;17325:1;17322:21;17317:1;17310:9;17303:17;17299:45;17296:2;;;17347:18;;:::i;:::-;-1:-1:-1;17387:9:1;;17286:116::o;17407:125::-;17447:4;17475:1;17472;17469:8;17466:2;;;17480:18;;:::i;:::-;-1:-1:-1;17517:9:1;;17456:76::o;17537:135::-;17576:3;-1:-1:-1;;17597:17:1;;17594:2;;;17617:18;;:::i;:::-;-1:-1:-1;17664:1:1;17653:13;;17584:88::o;17677:127::-;17738:10;17733:3;17729:20;17726:1;17719:31;17769:4;17766:1;17759:15;17793:4;17790:1;17783:15;17809:127;17870:10;17865:3;17861:20;17858:1;17851:31;17901:4;17898:1;17891:15;17925:4;17922:1;17915:15;17941:127;18002:10;17997:3;17993:20;17990:1;17983:31;18033:4;18030:1;18023:15;18057:4;18054:1;18047:15;18073:127;18134:10;18129:3;18125:20;18122:1;18115:31;18165:4;18162:1;18155:15;18189:4;18186:1;18179:15;18205:118;18291:5;18284:13;18277:21;18270:5;18267:32;18257:2;;18313:1;18310;18303:12

Swarm Source

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